Petit Modbus: Küçük ama Dev!
Daha önceki yazılarımızda Modbus’ın tarihçesinden günümüze uzanan yapısını ele almış ve protokolün RTU altındaki detaylarına girmiştik. Endüstriyel standart haline gelmiş Modbus, özellikle seri asenkron iletişim ile birlikte kullanılagelen en yaygın haberleşme altyapılarından biri haline gelmiştir. Modbus’ı ele aldığımız yazıda belirttiğim üzere internette Modbus RTU üzerine çok fazla kaynak/proje olmasına karşın bunların hepsi kullanımı karmaşık ve oldukça fazla detaya sahiptir.
Bu yazıda bu tür zorluklardan arındırılmış, oldukça sade ve anlaşılır, tamamen ANSI C standartlarında oluşturulmuş Petit Modbus adlı Modbus RTU kütüphanesine değineceğiz.
Petit Modbus Nedir?
Elektronik tasarım ile uğraşan arkadaşlar, gerek bilgilerin izlenebilmesi gerekse debug için seri iletişim metodu ile bir kez uğraşmak durumunda kalmışlardır. Biraz daha profesyonel iş yapmaya başladıklarında ise bu haberleşme metodunun fiziksel yapısı ve teorisinden dolayı yanlış data almaya açık olduğunu görmüş, en son aşamada ise öyle ya da böyle Modbus ile tanışmış (tanışılmasa da benzer bir X protokolü kurmuş) olacaklardır.İş hayatı içerisinde “Modbus RTU İletişim” ihtiyacının doğmasından sonra “Amerika’yı tekrar keşfetmeden” modbus kütüphanesi arayışına girip, bir çok örnek içerisinde işe yarayacak, sade ve anlaşılır bir kütüphane bulamadım. İstediğim şey Modbus protokolü içerisinde master birimin sorduğu “1-2-3-4-5-6-15-16.” fonksiyonlarına cevap verecek, taşınması ve port edilmesi kolay bir kütüphane idi. Arayışların sonuçsuz kalmasından sonra ise kütüphaneyi oturup yazarak V1.0 (2011) ile tamamlamış oldum. (Merak edenler için şu an V1.4 (2016) ile Modbus Master dahil edilmiş hali ile kütüphane kendi tarafımda yıllar içerisinde geliştirilmeye devam ediyor.)
Modbus kullanan arkadaşlar en çok kullanılan fonksiyonların;
0x03 (03) – Holding Register Değerlerini Oku
0x06 (06) – Tek Holding Register Değeri Yaz
0x10 (16) – Çoklu Holding Register Değeri Yaz
olduklarını bilir.
Bir proje içerisinde, aynı işlemci ile iki ayrı Modbus Slave kullanmam gerektiğinde ise yukarıdaki bilgi ışığında Petit Modbus fikri ortaya çıktı. Fazlalıklarından arındırılmış, hap şeklinde bir modbus! Ve bu şekilde Petit Modbus ortaya çıktı!
Petit Modbus Dosyaları ve Kullanımı
Petit Modbus; kullanımı basit, işlemciler üzerinde taşınması kolay olması amaçlanan bir kütühanedir. Kütüphane dosyalarının hepsine ve örneklere github üzerinden aşağıdaki linkten ulaşabilirsiniz.
Petit Modbus V1.1 Library Download
Kullanımı ile ilgili videoyu ise aşağıda izleyebilirsiniz. Videoyu tam ekran ve yüksek çözünürlükte izlemenizi öneririm.
Lisans Hakkında
PetitModbus açık kaynak kodlu olmakla beraber kişisel kullanım için kullanılabilir yapıdadır. Yalnız kütüphaneyi ticari bir projenizde kullanmak isterseniz bir lisans ödemesi yapmanız gerekmektedir. Aksi halde yasal problemler yaşayabileceğinizi belirtmek isterim.
Soru ve Öneriler
Kütüphane ile ilgili tüm soru ve önerilerinizi iletişim ya da aşağıda bulunan yorum bölümünden bana ulaştırabilirsiniz.
Herkese çalışmalarında başarılar dilerim!
Her zamanki gibi birçok açıdan faydalı bir çalışma ve
cömert bir paylaşım olmuş, devamı dileğiyle, teşekkür ederim.
Fırsatım olursa deneyip geri bildirimde bulunmaya çalışacağım.
Merhaba,
Yazınız için teşekkürler. Arduino için nasıl kullanabiliriz. Bir örnek yapmanız mümkün mü?
Fahrettin merhaba, Arduino’yu kişisel olarak destekleyip, insanlara önermediğim için bu konuda örnek yapmıyorum.
Hocam CCS C DE PIC16F877 kullanarak örnek yapmaya çalıştım yapamadım.
Küçük örnek yapma şansımız olur mu?
Kodlar C şeklinde dolayısı ile CCS C’ye çevirmeyi kolaylıkla yapabilirsiniz. Zamanım olursa kod öbeğine örnek olarak ekleyebilirim.
Merhaba modbus konusunda çok iyi bir örnek olmuş vaktiniz olursa ccs c ye çevirme yada örnek paylaşabilir misiniz teşekkürler.
CCS C’ye kod yazmıyor ve ilgilenmiyorum.
İyi günler dilerim.
Merhaba hocam, Petit Modbus kendi kullandığınız kütüphane mi? Modbus masteri destekliyor mu yayınladığınız haliyle?
Merhabalar,
Petit Modbus kullandığım projelerim mevcut, yalnız Master’ı desteklemiyor. Petit sadece 3-6-16. fonksiyonları desteklemektedir.
Selamlar
Kütüphaneyi incedim ve hatta STM32F0 serisi bir işlemci üzerine port edip çalıştırdım. Gayet güzel ve hızlı port edildi gerçekten. Elinize sağlık.
Geri bildiriminiz için teşekkürler!
Selamlar
Modbus kütüphanenizi indirdim.Simülasyonu çalıştırdığımda sürekli time out error veriyor.Herhangi bir değişiklikte yapmadım.Dikkat etmem gereken bir husus var mı?
Problem yaşamamanız gerekiyor, tekrar bakmanızda fayda var. İyi günler dilerim.
Modbuspoll uygulamasında sadece TX sinyalini gönderiyor. ISIS’ten sinyali alamıyor.Haberleşme ayarlarımda doğru ancak timeout errora düşüyor direkt.
Mehmet Bey, gerekli her şey videoda var bir çok kişi var kütüphaneyi kullanan bir şeyleri yanlış yapıyorsunuzdur. Buradan bu şekilde yardım etmem mümkün değil maalesef.
Merhabalar, kütüphanenizi kullanarak devre kurmak istiyorum. MAX485 ile kullanacağım. Enable bitini nasıl ayarlamam gerektiği konusunda sıkıntı yaşıyorum. Yardımcı olur sanız sevinirim.
DE ve RE uçlarını birleştirip, iletim yaparken aynı anda 1’e, okuma yaparken de 0’a çekmeniz gerekmektedir. Gerisi kullanacağınız işlemciye kalmış.
Fırat hocam merhabalar. Sitenizi ilgiyle takip ediyorum. Mehmet Fatih Kılıç arkadaşın yaşadığı sorunun aynısını ilk başta bende yaşadım. Ancak kodlara baktığımda “slave” adresinin “2” ve “register” sayısının da “11” olduğunu gördüm. Ayrıca Modbus poll programında “Parity” ayarının “Even” olduğunu farkettim. Parity ayarının None seçilip, bahsettiğim Slave ve register sayısı düzeltirse simülasyon çalışacaktır. Bu işlemin ya kasıtlı (Bizim her bilgiye hazır konmamamız için 🙂 Bence en faydalı olanı bu) ya da kasıtsız yapıldığını düşünüyorum. İyi çalışmalar. Teşekkürler. Çalışmalarınızda başarılar diliyorum.
Hello there,
Is it possible to port your library for PIC32MX?
Thanks in advance.
Hello,
It’s not possible for now, maybe in future.
Thanks.
Hocam iletişimde arada MAX485 gibi transceiver kullandığımızda RE ve DE pinini “gönderim bitişi kesmesi” ile kullanabileceğimizi söylemişsiniz. Bu bahsettiğiniz usart gönderim kesmesi mi?
Evet kastettiğim tam da budur.
Merhaba
Kütüphane lisansı ticari kullanıma uygun mudur? Ticari projelerimde kullanabilir miyim?
Teşekkür ederim.
Merhabalar,
Projeyi maalesef ticari projelerinizde kullanamazsınız. Bunun için lisans ücreti vermeniz gerekiyor aksi halde hak ihlalinde bulunmuş olursunuz.
İyi günler dilerim.
Merhaba hocam;
Öncelikle yazmış ve paylaşmış olduğunuz tüm çalışmalarınız için teşekkürler.
Hocam ben Modbus’ı RS485 transciever ile kullanmaya çalışıyorum ve bu entegrenin DE pinini PetitModbus_UART_String fonksiyonun girişinde Set, çıkışında Reset ediyorum fakat iletişim sağlanamıyor. Bu konuda yardımcı olabilirmisiniz.
Tekrar teşekkürler.
Merhabalar,
Bu konuda yalnızca ücretli destek verebiliyorum.
İyi günler dilerim.
Merhaba öncelikle teşekkürler.
Baudrate hızını ilk uygulamada 57600 kullanıyorsunuz. İkinci uygulamada 115200 olarak kullanıyorsunuz. Bunu neye göre belirliyorsunuz. Ben farklı baudrate hızlarında çalışabilir yapmak istiyorum onun için soruyorum.
Teşekkürler
Merhabalar, ben ürünlerimde 300 baudtan 1MBaud hızı aralığında istediğim gibi anlattığım protokolü kullanıyorum. Bunu siz de rahatlıkla istediğiniz baud hızında kullanabilirsiniz.
Fırat hocam merhaba,
2 adet STM32 geliştirme kartını PetitModbus kütüphanesi ile haberleştirmek niyetindeyim.
Aklıma takılan bazı şeyler var cevap verebilirseniz sevinirim;
Öncelikle düşündüğüm sistem
1. STM Kart
ADC bilgi okuyup(sensör) 2. STM32 kartı değerleri talep ettiğinde gönderecek.
2. STM Kart
Bu kartta ekran ve butonlar bulunmakta 1.STM Kart’ın MB Slave adresini bu kart üzerinden belirleyip onayladığımızda 1.Kart’a bu bilgiyi gönderecek. (1.Kart kendi içinde ROM belleğe bu değeri kaydedecek, bu kısmın MB ile ilgilisi yok sadece bilgilendirmek için yazdım)
Kafamın karıştığı nokta şurası, şu an anlattığım MB sistemi sanki 2.Kart Master 1.Kart Slave durumunda gibi. Paylaştığınız kütüphane buna uygun mudur ?
Teşekkürler.
PetitModbus sadece Slave özelliğe sahiptir, master özellik için ayrı bir kütüphane satışı yapıyorum.
İyi günler dilerim.
Virtual serial port olarak hangisini kullanıyorsunuz acaba ?
Eltima.
Hi Firat,
awesome modbus. i am trying to watch the video on how to implement the driver but unfortunately dont speak turkish. used google translate on your site. can you please assist with explanation on using the library please in english? either in the video or text please.
Sorry Tariq,
I can’t to do this because it takes too long time for me.
Merhaba;
Bu önemli katkınızdan dolayı size teşekkür ederim. Kütüphanenizi STM32f103c8t6 (piyasada blue pill olarak anılan) minimum sistem kartında denedim ,sorunsuz bir şekilde çalıştı. Yukarıdaki sorulardan anlaşıldığı üzere RS485 şeklinde kullanırken herkes benim gibi sorun yaşamış. Amacım emek vermeden kolayca bilgiyi almak kullanmak değil. Vakit olursa bu konuyla ilgili bilgilendirme yaparmısınız. Tabiki vakit para demek.Fakat bu kadar yararlı bir içeriği ticari uygulamalarımızda kullanabilirmiyiz sorusuna alçak gönüllülükle sitenin ayakta kalması için bağış yaparsanız yeterli diyebilen bir mühendis bence bu konuyuda aydınltır.Saygılarımla.
Serdar Bey merhabalar,
Kütüphane oldukça açık aslında. Bu tarz isteklere dediğiniz gibi sitenin gelişimi, devamı için ücretli destek veriyorum.
İyi günler dilerim.
hi Firat – i got petit modbus to work on my project, what i would like to know is if i want to sell my project as product how would the license work?
what do i need to pay you for use of the library on my product?
please let me know soon, thank you
I sent an e-mail about licence.
Thanks!
Blue Pill için port ettim. Biraz uğraştırdı ama gayet hızlı ve stabil çalıştı. Teşekkür ederim.
Bu arada #define PETITMODBUS_RECEIVE_BUFFER_SIZE (NUMBER_OF_OUTPUT_PETITREGISTERS*2 + 5) olarak gözüküyor fakat 8N1 de yazmak istediğimde register sayısı yetersiz geldi. + 9 olarak yapınca sorun düzelti. Tekrar teşekkür ederim.
Merhabalar. Modbus konusunda yeniyim ve pic mikroişlemcisi üzerinde modbus seri haberleşmesini uygulayacağım. Aklıma bir soru takıldı? Coil ve registerlar için neden bu kadar adres var ? seri haberleşme esnasında bu kadar adreslemeye gerçekten ihtiyaç duyuluyor mu? Özellikle bu sorunun cevabını aradım fakat internette yabancı kaynaklarda da bunun cevabını bulamadım.
Evet çağırmak istediğiniz dataya bağlı olarak bu sayı yüzlerce olabilir.
Çalışmış, uğraşmış ve birde bedava veriyor.
İşlerinde kolaylıklar dilerim, sağ olasın.