Fırat DEVECİ

Petit Modbus: Küçük ama Dev!

  • 8 yıl önce, Fırat DEVECİ tarafından yazılmıştır.
  • 42 Yorum
  • Genel

petitmodbuslogoDaha ö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.USB2RSx RS232İş 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.
DownloadPetit 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!

  1. RaMu dedi ki:

    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.

  2. Fahrettin dedi ki:

    Merhaba,

    Yazınız için teşekkürler. Arduino için nasıl kullanabiliriz. Bir örnek yapmanız mümkün mü?

  3. Gündüz dedi ki:

    Hocam CCS C DE PIC16F877 kullanarak örnek yapmaya çalıştım yapamadım.
    Küçük örnek yapma şansımız olur mu?

  4. Emrah dedi ki:

    Merhaba modbus konusunda çok iyi bir örnek olmuş vaktiniz olursa ccs c ye çevirme yada örnek paylaşabilir misiniz teşekkürler.

  5. Emrullah dedi ki:

    Merhaba hocam, Petit Modbus kendi kullandığınız kütüphane mi? Modbus masteri destekliyor mu yayınladığınız haliyle?

  6. Engin dedi ki:

    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.

  7. Mehmet Fatih Kılıç dedi ki:

    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ı?

  8. Mehmet Fatih Kılıç dedi ki:

    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.

    • Fırat DEVECİ dedi ki:

      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.

  9. Emre Aktaş dedi ki:

    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.

    • Fırat DEVECİ dedi ki:

      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ış.

  10. Ersin SELÇUK dedi ki:

    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.

  11. Natnael dedi ki:

    Hello there,

    Is it possible to port your library for PIC32MX?
    Thanks in advance.

  12. Onur dedi ki:

    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?

  13. Hakan dedi ki:

    Merhaba

    Kütüphane lisansı ticari kullanıma uygun mudur? Ticari projelerimde kullanabilir miyim?

    Teşekkür ederim.

    • Fırat DEVECİ dedi ki:

      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.

  14. Zafer dedi ki:

    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.

  15. Serhat Kömbe dedi ki:

    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

    • Fırat DEVECİ dedi ki:

      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.

  16. Kadir dedi ki:

    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.

  17. Yılmaz dedi ki:

    Virtual serial port olarak hangisini kullanıyorsunuz acaba ?

  18. Tariq Ryklief dedi ki:

    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.

  19. Serdar YENi dedi ki:

    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.

    • Fırat DEVECİ dedi ki:

      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.

  20. Tariq Ryklief dedi ki:

    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

  21. Emir dedi ki:

    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.

  22. delilcodes dedi ki:

    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.

  23. assyh dedi ki:

    Çalışmış, uğraşmış ve birde bedava veriyor.
    İşlerinde kolaylıklar dilerim, sağ olasın.

Fırat DEVECİ yazısına yorum yazın

error: Kopyalama Yasaktır, Eğer Bilgi İçeriğini Almak İstiyorsanız İletişim Bölümünden Yazara Ulaşın!