Modbus protokolünün açıklaması. Ayrıntılı açıklama ve örneklerle hemen hemen Modbus RTU hakkında

  • 01.09.2019

Bu makale, Modbus protokolüyle çalışmanın temellerini açıklamaktadır. Makalede şunları bulabilirsiniz:

  • Açıklama Modbus
  • Uygulama örneği
  • Onitex Modbus Terminali açıklaması

Modbus'un temel prensipleri

Modbus, istemci-sunucu mimarisine dayalı bir iletişim protokolüdür. Bu yazıda protokolün temellerine ve temel çalışma prensiplerine bakacağız. Ek olarak, bu protokolü kullanan kontrolörlerin açıklamalarını inceleyerek, örneğin OSM-17RA'yı inceleyerek ve Modbus Terminal programını indirerek Modbus protokolünün çalışmasının belirli örnekleri hakkında bilgi sahibi olabilirsiniz. çeşitli Modbus kayıtları.

Modbus protokolü, motor sürücü kontrolü gibi programlanabilir mantık kontrolörlerinde kullanılmak üzere tasarlanmıştır. Şu anda çeşitli endüstriyel sistemlerde kullanılan çok yaygın bir protokoldür. Örneğin, bu protokol Onitex step motor kontrolörlerinde kullanılır. RS-485, RS-422, RS-232 arayüzlerine dayalı veri iletimi seri iletişim hatları için yaygın olarak kullanılır. Geliştirmenin başlangıcında, RS-232 arayüzü, seri veri iletimi için en basit endüstriyel arayüzlerden biri olarak kullanıldı. Şu anda, protokol genellikle RS-485 arayüzü üzerinden kullanılmaktadır; bu, özellikle Modbus protokolü adreslemeyi desteklediğinden, yüksek iletim hızları, uzun mesafeler ve birkaç cihazın tek bir ağa entegrasyonunu mümkün kılar. Basitliği ve güvenilirliği nedeniyle Modbus protokolünün yaygın kullanımı, Modbus'u destekleyen cihazları tek bir ağa entegre etmeyi kolaylaştırır.

Protokolün ana özelliği, ağda bir ana cihazın bulunmasıdır - ana. Yalnızca ana cihaz, ağda bağımlı olan diğer cihazları sorgulayabilir. Köle cihaz bağımsız olarak veri aktarımını başlatamaz veya diğer cihazlardan herhangi bir veri talep edemez, ağ çalışması sadece "istek-yanıt" ilkesine dayanır. Master ayrıca ağdaki tüm cihazlara yönelik bir yayın talebi gönderebilir, bu durumda yanıt mesajı gönderilmez.

Üç tip Modbus protokolü vardır: Modbus ASCII, Modbus RTU ve Modbus TCP. Onitex cihazları Modbus RTU protokolünü desteklediği için öncelikle bu protokolü aklımızda tutacağız.

Modbus veri paketi şöyle görünür:

Adres | Fonksiyon kodu | Veri | Toplamı kontrol edin.

Adres isteğin yöneltildiği cihazın numarasını içeren bir alandır. Ağdaki her cihazın benzersiz bir adresi olmalıdır. Cihaz, çakışmaları önlemek için yalnızca adresine gelen isteklere yanıt verir. Bu durumda, bağımlı cihaz yanıtında aynı zamanda alana da gönderir. Adres, bir yayın talebi dışında (köleden hiç yanıt gelmemesi gerektiğinde).

Fonksiyon kodu, modbus fonksiyonunun numarasını içerir (fonksiyonlar aşağıda tartışılacaktır). Bir işlev, belirli eylemler için veri isteyebilir veya komut verebilir. Fonksiyon kodları 1 ila 127 aralığındaki sayılardır. 128 ila 128 arasındaki fonksiyonlar, yanıt mesajında ​​hata bilgisi göndermek için ayrılmıştır.

alanında Veri master'ın slave'e gönderdiği veya bir yanıt mesajı durumunda tam tersi bilgileri içerir. Bu alanın uzunluğu, aktarılan verinin türüne bağlıdır.

Alan Toplamı kontrol et protokolün önemli bir unsurudur: mesajın bütünlüğünü ve iletim hatalarının olmadığını kontrol etmek için gerekli bilgileri içerir.

RS232/RS485 ağları için maksimum paket boyutu 256 bayt, TCP ağları için 260 bayttır.

Üç tür işlev vardır:

  1. Standart. Bu işlevlerin açıklaması Modbus-IDA tarafından yayınlanır ve onaylanır. Bu kategori hem yayınlanmış hem de şu anda ücretsiz olan kodları içerir.
  2. Gelenek. Kullanıcının isteğe bağlı bir işlev oluşturabileceği iki kod aralığı (65 ila 72 ve 100 ila 110).
  3. Rezerve. Bu kategori, standart olmayan ancak çeşitli şirketler tarafından üretilen cihazlarda halihazırda kullanılan fonksiyon kodlarını içerir. Bu kodlar 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 ve 127'dir.

Modbus RTU

Modbus RTU modunu kullanırken, mesaj, belirli bir baud hızında 3.5 karakterlik iletim süresine eşit, sözde bir sessizlik aralığı ile başlar. İlk alan cihaz adresidir. Aktarılan son karakteri de en az 3,5 karakterlik bir sessizlik aralığı izler. Bu aradan sonra yeni bir mesaj başlayabilir. Mesaj çerçevesi sürekli olarak iletilir. Bir çerçevenin iletimi sırasında 1,5'lik bir sessizlik aralığı oluşursa, alıcı cihaz çerçeveyi eksik olarak dikkate almamalıdır ZORUNLU. 3.5 karakter aralığından önce yeni bir mesaj başlarsa, alıcı cihaz bunu önceki mesajın devamı olarak yorumlayacaktır. Bu durumda, bir CRC hatası (sağlama toplamı uyuşmazlığı) ayarlanır.

Veri türleri ve standart Modbus işlevleri

Modbus protokolü veri türleri tabloda gösterilmiştir:

Yukarıdaki bu veri tablolarından değerleri okumak için kodlarla fonksiyonları kullanın. 1-4 (0x01-0x04):
1 (0x01)- birkaç bayrak kaydından okuma değerleri (Bobin Durumunu Oku)
2 (0x02)- birkaç ayrık girişten okuma değerleri (Ayrık Girişleri Oku)
3 (0x03)- birkaç tutma kaydından okuma değerleri (Tutma Kayıtlarını Oku)
4 (0x04)- birkaç giriş kaydından okuma değerleri (Giriş Kayıtlarını Oku)

Sorgu, değeri okunacak tablonun ilk elemanının adresi ve okunacak eleman sayısından oluşur. Adres ve veri miktarı 16 bitlik sayılar olarak verilir, her birinin en önemli baytı önce iletilir.
İstenen veriler yanıtta gönderilir. Veri baytlarının sayısı, istenen öğelerin sayısına bağlıdır. Verilerden önce, değeri veri baytlarının sayısına eşit olan bir bayt iletilir.

Aşağıdaki fonksiyonlar kullanılarak tek bir değer yazılır:
5 (0x05)- bir bayrağın değerini kaydetme (Force Single Coil)
6 (0x06)- bir depolama kaydına değer yazma (Ön Ayarlı Tek Kayıt)

Komut, eleman adresinden (2 bayt) ve ayar değerinden (2 bayt) oluşur. Komut başarılı olursa, köle isteğin bir kopyasını döndürür.

Birden fazla değerin kaydedilmesi, işlevler tarafından verilir:
15 (0x0F)- değerlerin birkaç bayrak kaydına yazılması (Çoklu Bobinleri Zorla)
16 (0x10)- birkaç depolama kaydına değer yazma (Ön Ayarlı Çoklu Kayıtlar)

Komut, elemanın adresi, değiştirilecek eleman sayısı, iletilecek set değerlerinin bayt sayısı ve set değerlerinin kendisinden oluşur. Yanıt olarak, köle başlangıç ​​adresini ve değiştirilen eleman sayısını gönderir.

Modbus cihaz örneği

Bir step motor kontrolörü örneğinde protokolün çalışmasını düşünün. Kontrolör belgeleri, içinde kullanılan Modbus kayıtlarının amacını açıklar. Motoru kontrol etmek için kontrolör parametrelerini, dönüş parametrelerini ve komutun kendisini ayarlamak gereklidir. Modbus protokolünü kullanırken kontrolörle yapılan tüm çalışmalar, kayıtlarla çalışmak, yani okuma ve yazma ile ilgilidir. Denetleyicimizde yalnızca bir tür kayıt vardır: Tutma Kayıtları. Bu kayıt tipi, hem parametreleri okumak hem de yazmak için tasarlanmıştır. Kontrolör üç tip kayıt kullanır: 8, 16 ve 32 bit. Bu nedenle, onunla çalışmak için sadece birkaç işlevi kullanmamız gerekir: Okuma için Okuma Tutma Kayıtları, 8 ve 16 bit boyutunda kayıtlar yazmak için Ön Ayarlı Tek Kayıt ve bir ile kayıtlara değer yazmak için Ön Ayarlı Çoklu Kayıtlar. 32 bit uzunluğunda.

Kontrolörle çalışmaya başlamak için kontrolör ve dönüş parametrelerini ayarlamanız gerekir. Bu, gerekli fonksiyonları kullanarak, belgelere göre gerekli parametreleri kayıtlara sırayla yazarak yapılır. Bu durumda, her parametre girişi, gerekirse değer aralıklarını kontrol eden veya diğer gerekli eylemleri gerçekleştiren kontrolördeki ilgili işleyiciyi çağırır. Aslında, denetleyici, kayıttaki değerde bir değişiklik olduğunda bir kesinti üretir. Bu özellik, Modbus protokolünü kullanma olanaklarını önemli ölçüde genişletir.

Tüm parametreleri yazdıktan sonra, komutun kendisi ilgili kayıt defterine yazılır. Modbus protokolü ile yapılan bu çalışma organizasyonu, sadece üç standart fonksiyonla başa çıkmanıza izin verdiği için pratik kullanım için çok uygundur. Komutun yürütülmesi sırasında, tüm kayıtlara erişim korunur, özellikle konum sayacının değerini okuyabilir, gerekirse sıfırlayabilir, hızı değiştirebilir veya eskisinin yürütülmesini beklemeden yeni bir komut ayarlayabiliriz. . Modbus protokolünü kullanmanın bir diğer özelliği de, tüm registerlerin üzerine yazılana kadar değerlerini muhafaza etmesidir, yani hareketi aynı parametrelerle tekrarlamamız gerekirse, sadece hareket komutunu komut registerına yazıyoruz ve motor bir öncekini tekrarlıyor. görev. Bu sadece kontrolü basitleştirmekle kalmaz, aynı zamanda motor kontrolörü ile kontrol ünitesi arasındaki trafiği de azaltır.

Böylece Modbus protokolünün kullanılması step motor kontrolünü çok basit, kaliteli ve güvenilir hale getirmeyi mümkün kılmıştır.

Cihazlarda Modbus protokolü ile hata ayıklamak için OSM Modbus Terminal programını geliştirdik. Bu program, Modbus RTU protokolünü kullanarak OSM MB cihazlarını yönetmenin temel ilkelerine hızlı bir şekilde hakim olmanızı, cihazın doğru çalışıp çalışmadığını kontrol etmenizi ve kendi yazılımınızı hızlı bir şekilde yazmanızı sağlar. Programı web sitemizin Yazılım bölümünden indirebilirsiniz.

Program, her birine bir adres, değer türü ve ad verilebilen bir kayıt haritasıdır. Her kayıt bir değer okuma ve yazma yeteneğine sahiptir. “Oturumu Kapat” penceresinde, meydana gelen hatalar da dahil olmak üzere her bir eylemin sonuçlarına göre günlüğün çıktısını görebilirsiniz.

Programla çalışmaya başlamak için PC bağlantı noktası adresini ve cihaz adresini ayarlamanız ve “Bağlan” düğmesine tıklamanız gerekir. Bundan sonra, gerekli kayıtlara okuyup yazabilirsiniz. Gerekirse "Kaydet" butonu ile kullanılan register'ların isim ve adreslerini kaydedebilirsiniz. Program OsmModbusDriver_SDK kullanılarak yazılmıştır ve SDK kullanımına örnek teşkil edebilir.

Tüm hakları Saklıdır. Siteden materyallerin yeniden basılması yalnızca idarenin izni ile mümkündür.


Modbus mesaj yapısı aşağıdaki gibidir:

  1. bağımlı adres, bu Modbus mesajının adreslendiği cihazın adresidir. Cihazlar yalnızca kendilerine gönderilen mesajlara yanıt verir. Yanıt, bağımlı aygıtın adresiyle başlar. Adres 1…247 içinde değişir. Modbus protokol mesajındaki 0 ​​adresi, yayın mesajları için ayrılmıştır, 248..255 ise ayrılmış adreslerdir.
  2. fonksiyon numarası - 1 bayt veri.
  3. data - bu alan, gerçekleştirilecek fonksiyonla ilgili bilgileri veya bağımlı cihazın Modbus protokol yöneticisine gönderdiği verileri içerir.
  4. Hata Algılama Bloğu (CRC), bir kez deneme ve bit bit eleme algoritması kullanılarak önceki tüm baytlardan hesaplanan bir sağlama toplamıdır.

Modbus protokolü üzerinden tek bir mesajda okurken, bir satırda bulunan ayrık veya analog giriş ve çıkışların değerini okuyabileceğiniz, yani ilk değerin adresini ve numaralarını ayarlayabileceğiniz unutulmamalıdır.

Ana standart işlevleri kodlarına göre düşünün (ondalık ve onaltılık biçimde):
1 (0х01) – birkaç ayrık çıkışın okunması
2 (0x02) - birkaç dijital girişi okuma
3 (0x03) - birkaç ara kayıt veya analog çıkış okuma
4 (0х04) – birkaç analog girişin okunması
Örneğin, istekte oluşturulan ayrık girişlerin sayısı sekizin katı değilse, o zaman bayt değerlerinin sayısı yuvarlanır ve buna göre, örneğin, değerleri elde etmek için 15 ayrık giriş, bu sayı iki bayta eşit olacaktır.
Modbus mesaj verilerinin önünde, değeri verinin bayt sayısı olan bir bayt bulunur.
5 (0x05) - bir ayrık çıktının değerini yazın
6 (0x06) - bir analog çıkışın veya kaydın değerini yazın
Bir Modbus komutu bir adres ve bir değerden (2 bayt) oluşur. Normal yanıt, Modbus protokol talebini tekrarlamaktır.
15 (0x0F) - birkaç dijital çıkışa değer yazın
16 (0x10) - birkaç analog çıkışın veya kaydın değerlerini yazın
Yanıt, kaydın başlangıç ​​adresi ve değiştirilen değer sayısından oluşur.
Modbus istek/yanıt örneği:

İletim hataları 2 türe ayrılır - iletim bozulması ve mantıksal. Bozulma "sessizlik" süresi ile izlenir. Mesajlar arasındaki normal süre, 3,5 karakter iletmek için geçen süredir. Bir Modbus mesajının iletimi sırasında 1,5 karakterden uzun bir duraklama meydana gelirse, paket atılır.

Modbus protokolünün mantıksal hataları, slave mesajı hiç alamazsa veya kabul ederse, ancak bir hata verirse oluşur. Bu durumda, hata zaman aşımı ile teşhis edilir. Köle isteği kabul eder, ancak işleyemez (örneğin, var olmayan bir adrese erişim) - bu durumda bir hata mesajı gönderilir.

İstek başına bir Modbus hata mesajı örneği:

Standart Modbus hata kodları:
01 - İşlev, köle üzerinde işlenemez.
02 - Var olmayan veri adresi.
03 - Talep için veri alanındaki değer salve için geçersiz.
04 - Slave bir eylem gerçekleştirmeye çalışırken kurtarılamaz bir hata oluştu.
05 - Slave isteği kabul etti ve işlemeye başladı, ancak zaman alacak. Bu kod, master'ın bir zaman aşımı hatası vermesini önler.
06 - Slave komutu işlemekle meşgul.Slave boş olduğunda master mesajı daha sonra tekrar göndermelidir.
07 -Slave istekten fonksiyonu çalıştıramıyor. Master, tanı bilgisi için bir istek göndermeli veya slave'den hata bilgisi almalıdır.
08 - Bağımlı bir bellek alanını okumaya çalışıyor ancak bir eşlik hatası algılandı. Kaptan talebi tekrarlayabilir, ancak bu gibi durumlarda genellikle onarım gerekir.

Modbus TCP çerçeve yapısı:

Neresi:
İşlem Kimliği - iki bayt
Protokol Kimliği - iki bayt (dört sıfır)
paket uzunluğu - iki bayt, sonraki mesaj alanlarının boyutu
bağımlı adres - Modbus protokol talebinin adreslendiği bağımlı birimin adresi.
Modbus TCP protokolünün bir özelliği, CRC, TCP protokolünün taşıma seviyesinde kontrol edildiğinden, bir sağlama toplamının olmamasıdır. Bu nedenle, sağlama toplamını RTU formatında kontrol etmek mantıklı değildir.

Bu yazımda protokolün nasıl çalıştığını açıklamaya çalışacağım. Modbus, hangi verileri saklayabilir, hangi biçimde saklanabilir, nasıl okunabilir. Bu makale size ne olduğu hakkında bir fikir verecektir. Modbus protokol ve nasıl uygulanabileceği.

Modbus'ta veri adreslemeprotokol

Köle cihazlarda bilgi depolamak için ( bağımlı cihaz) 4 tablo (veya dizi) kullanılır. Her tablo, benzer değişkenler için bilgileri kayıtlarda saklar. Her kaydın kendi boyutu ve adresi vardır. Kayıtlar ayrıca salt okunur veya okuma-yazma olabilir. Kayıtlarda saklanabilecek bu 4 veri tipine bakalım:

BOBİNLER

Bunlar dijital çıkışlardır ( Dijital Çıkışlar). Her bobin yazılabilir veya okunabilir. Boyutu 1 bittir (yani 0 veya 1). Tarihsel olarak, bu kayıtlar, sensörler veya terminal aygıtlarındaki gerçek dijital çıkışlarla ilişkilendirilir. Dijital çıkışlar, örneğin LED'leri, röleleri veya motorları kontrol etmek için kullanılır. Şunlar. Böyle bir register'a 1 yazarak led'i açabilir ve 0 yazarak kapatabiliriz (bu şartlıdır aslında 0 açabilir ve 1 kapatabiliriz).

Bu kaydı okurken, çıktının durumunu (yani açık mı yoksa kapalı mı olduğunu) öğrenebiliriz. Okumanın sonucu da 1 bit, yani. 1 veya 0.

İLETİŞİM

Bunlar dijital girişlerdir ( Dijital Girişler). Dijital giriş sadece okunabilir, yani bu kaydı okuyarak sensör veya cihazdaki gerçek dijital girişin durumunu öğreniriz. Durumu kontrol etmek için dijital girişler kullanılır - örneğin, ışık açık veya kapalı, sıvı istenen seviyeye ulaştı veya gelmedi, röle açık veya değil, vb.

ANALOG GİRİŞ KAYITLARI

Bu genellikle analog girişleri ifade eder ( analog girişler). Analog girişler sadece okunabilir yani yazılamaz ancak vergi girişinin sadece mevcut durumu okunabilir. Tipik olarak, bir değeri ölçmek için sensörlerde analog girişler kullanılır: giriş akımı veya giriş voltajı. Daha sonra elde edilen değer, örneğin sıcaklık, hava nemi, basınç veya başka bir şey gibi bazı gerçek değerlere dönüştürülebilir. Bunun için sensörle birlikte gelen özel formüller kullanılır. Ancak daha sıklıkla sensör, gerçek değeri hemen döndürür. Örneğin, bir sıcaklık sensörü ölçülen değeri Santigrat derece çarpı 10 olarak döndürebilir. Yani, 253, 25.3°C anlamına gelir. Bu numara genellikle bir tamsayı kaydı aracılığıyla kesirli değerleri döndürmek istediğinizde kullanılır.

ANALOG ÇIKIŞ HOLDİNG KAYITLARI

Bu genellikle analog çıkışları ifade eder ( analog çıkışlar) ancak aynı sıklıkla hem yazılabilen hem de okunabilen bazı değerleri depolayan kayıtlar. Şunlar. bu kayıtlar hem okunabilir hem de yazılabilir. En çok yazı yazmak için kullanılır DAC cihazlar (Dijitalden Analoga Dönüştürücü) veya sadece bazı değerleri saklayan kayıtlar olarak. DAC genellikle bir LED'in parlaklığı veya bir sirenin hacmi veya bir motorun hızı gibi bir şeyi kontrol etmek için kullanılır.

Bu kayıtlar 16 bittir, yani. her kayıt yalnızca 2 bayt depolayabilir.

Bu dört kayıt türü standartta desteklenmektedir. Modbus. Ve sadece onları kullanarak bir sistem kurmanız gerekiyor. Nihai cihaz (bağımlı cihaz) açısından bakarsanız, kayıtlar en mantıklı şekilde aşağıdaki ihtiyaçlar için kullanılır:

bobinler– dijital çıkış portları veya açık/kapalı, açık/kapalı vb. boole bayrakları aracılığıyla cihazları kontrol etmek için.

Kişiler– boole bayraklarının değerlerini saklamak veya dijital girişlerden gelen bilgileri görüntülemek için.

Girişler– Sadece master tarafında okunması gereken ve 16 bit tamsayı olarak gösterilebilen değerler için. Örneğin ADC girişleri veya sistem tarafından üretilen değerlerin hangilerinin okunması gerektiği (örneğin çalışan işlemlerin sayısı veya cihazın iç sıcaklığı bazı Input register üzerinden okunabilir)

Tutma– bu kayıtlar, cihaz konfigürasyonunu depolamak, kontrol etmek için kullanılabilir DAC bazı servis bilgilerini depolamak için cihazlar. Prensip olarak, bu kayıtlar, sistem tasarımcısının yeterli hayal gücüne sahip olduğu herhangi bir şey için kullanılabilir.

Ayrıca devredeki her kayıt Modbus kayıt tipine göre belirlenen benzersiz bir adrese sahip olabilir. Aşağıdaki tabloya bakın:

İsim Erişim türü adresler Mevcut kayıtlar
bobinler Okuma yazma 1 – 9999 9999
Kişiler Okuma 10001 – 19999 9999
Girişler Okuma 30001 – 39999 9999
holdingler Okuma yazma 40001 – 49999 9999

Tablodan da görebileceğiniz gibi, her kayıt tipi maksimum 9999 kayıt tutabilir. Ancak hepsi bir miktar ofset ile başlar: 0, 10000, 30000, 40000.

Aslında, protokol komutlarının içinde Modbus, tam adres değil, yalnızca temel adrese göreli ofseti kullanılır. Şunlar. tüm kayıt türleri için komut içindeki gerçek adres 0-9998 olacaktır. Ve komut, hangi temel adresin kullanılabileceğini belirler.

Cihazın her biri 9999 elemanlı 4 eleman dizisi sakladığını hayal etmek en kolayı. Dizinin içindeki dizin, komutun içinde verilen adrestir. Ve komut hangi dizinin kullanılacağını belirler.

Tabloya yakından bakarsanız, isterseniz daha fazla adres kullanabileceğinizi görebilirsiniz. Tutma kayıtlar: 40001 - 105537, yani toplam 65535 kayıt. Aynısı Kişiler: 10001 - 29999, yani toplam 19999. Bunlar sözde genişletilmiş kayıtlardır. Standart tarafından desteklenmezler Modbus cihazlar. Bu nedenle, cihazınızın standart istemcilerle çalışabilmesini istiyorsanız, genişletilmiş kayıtlar kullanmanıza gerek yoktur.

Ama eğer cihazınızın genişletilmiş registerlar ile nasıl çalışacağını bilen master'ınız ile çalışacağından eminseniz veya ürününüz için kullanılacak master cihazın genişletilmiş registerlar hakkında bilgi sahibi olduğundan eminseniz, o zaman onları kullanın.

Yukarıda, kayıtların cihazın içinde nasıl adreslendiğini anladık. Şimdi cihazların kendilerinin nasıl ele alındığını görelim.

Modbus adreslemecihazlar

Cihazları adreslemek için özel bir tanımlayıcı kullanılır. Köle Kimliği. Bu, tüm ağda benzersiz bir cihaz adresi tanımlayan bir baytlık bir değerdir. Modbus. standarda göre Modbus 1'den 247'ye kadar bir sayı olabilir. toplamda, ağda benzersiz adresleri olan 247 uç cihaz (bağımlı cihaz) olabilir.

Master ağa bir komut gönderdiğinde, ilk bayt Köle Kimliği. Bu, cihazların ilk bayttan sonra komutu işleyip işlemeyeceklerini veya yoksayabileceklerini belirlemelerine olanak tanır. Bu doğru Modbus RTU. İçin Modbus TCP kullanılan protokol Birim Kimliği anlam. Gerçi bakarsanız, bu sadece başka bir isim Köle Kimliği. Birim Kimliği ayrıca 1'den 247'ye kadar tek baytlık bir cihaz adresidir.

Bu, aynı anda çevrimiçi olabilen cihaz sayısını büyük ölçüde sınırlar. Bu nedenle, cihazları adreslemek için 2 bayt kullanıldığında bir seçenek vardır. Bu durumda cihaz sayısı 65535'e çıkıyor. Bu da fazlasıyla yeterli. Ama bir şart var. Ana ve Uç cihaz, adresleme için 2 bayt kullanmalıdır. Şunlar. aynı cihaz adresleme şemasını kullanacak şekilde yapılandırılmalıdırlar: 1 veya 2 bayt. Ayrıca, ağdaki tüm cihazlar aynı adresleme şemasını kullanmalıdır - 1 veya 2 bayt. Ağda farklı adresleme düzenine sahip cihazlar olamaz.

Modbus fonksiyonları

Veri talep etmek veya bunları yazmak için master, uç cihazda yürütmek istediği fonksiyonu belirtmelidir. Standartta mevcut tüm fonksiyonlar Modbus protokol aşağıda verilmiştir:

Fonksiyon Kodu Eylem Türü Tanım
01 (01 altıgen) Okuma Bobin kaydının değerini okur
02 (02 altıgen) Okuma Kişi kaydının değerini okur
03 (03 altıgen) Okuma Holding kaydının değerini okur
04 (04 altıgen) Okuma Bir Giriş kaydının değerini okur
05 (05 altıgen) Tek kayıt girişi Bobin kaydına bir değer yazar
06 (06 altıgen) Tek kayıt girişi Holding kaydına bir değer yazar
15 (0F altıgen) Birden çok kayıt yaz Birden çok Bobin kaydına bir değer yazar
16 (10 altıgen) Birden çok kayıt yaz Birden çok Holding kaydına bir değer yazar

Her fonksiyon daha sonra ayrıntılı ve örneklerle tartışılacaktır.

CRC16 hatalardan kaçınmanın bir yolu olarak

Her takım içinde Modbus RTU Protokol, tüm komut baytlarının CRC16 değerini içeren iki bayt ile sona erer. CRC16 eklemek, bozuk istekleri bulmanızı ve yok saymanızı sağlar. Komuttaki her bayt, sağlama toplamını hesaplamak için kullanıldığından, herhangi bir bayttaki bir bitin değiştirilmesi bile, iletilen sağlama toplamı ile alınan baytlara göre hesaplanan arasında bir tutarsızlığa neden olur. Bu, iletilen verileri hasardan korumanın (yani bozuk verileri bulmanın) oldukça güvenilir bir yoludur. İstemci, master gibi, alınan baytlardan oluşturulan CRC16 ile alınan komuttan CRC16'yı kontrol etmelidir. Sağlama toplamları eşleşmezse, alınan istek, gönderilen komutun anlamını bozan bozuk baytlar içerir. Böyle bir komut göz ardı edilmelidir.

CRC16'nın kullanılmadığına dikkat edilmelidir. Modbus TCP protokol. TCP paketleri zaten yerleşik sağlama toplamına sahip olduğundan ve veri bütünlüğü için kontrol edildiğinden, CRC16'yı hesaplamaya gerek yoktur.

Başka bir çeşit Modbus Protokol Modbus ASC II, Kullanılmış LRC CRC16 yerine (Boyuna Artıklık Kontrolü). LRC, CRC16'dan çok daha basittir ve sonuç 1 bayttır. LRC, veri bozulması hatalarını algılamak için daha az güvenilirdir, ancak tarihsel olarak Modbus ASC II bu yöntemi kullanır.

için CRC16 nasıl hesaplanır Modbus RTU protokol ve LRC için Modbus ASC II protokol, ayrı yazacağım.

Kayıtlarda saklanan veri türleri.

Kayıtlarda hangi verilerin saklanabileceğinden bahsedelim. En basit durum bobin ve İletişim kayıtlar. Bu kayıtlar 1 bit bilgi saklayabilir - 0 veya 1. Master bu kayıtları okuduğunda sonuç olarak 0 veya 1 alır.Kayıtları yazmak için özel sabitler kullanılır:

0xFF00– mantıksal 1 anlamına gelir

0x0000– mantıksal 0 anlamına gelir

Birden fazla kayıt yazmak için bir komut kullanılırsa, her kayıt 1 bit: 0 veya 1 kullanılarak yazılacaktır.

Diğer tüm kayıtlar 16 bit veridir (2 bayt)

Ve işte en ilginç olanı.

Veri yorumu açıklamada belirtilmelidir Modbus kayıtlar (sözde Modbus haritası belge). Bu belgenin, hangi kaydın hangi verileri sakladığını ve bunun için hangi değerlerin kabul edilebilir olduğunu tam olarak belirtmesi gerekir.

Basit vakalarla başlayalım.

1 okursak Giriş veya Tutma kayıt olun, sonra 16 bit veri elde ederiz. Örneğin, bu değer olabilir 0x8D05- iki bayt 0x8D ve 0x05.

En basit durumda, bu işaretsiz bir tamsayı değeri olabilir: 36101

Ancak imzalı bir tamsayı olabilir: -29435

Başka bir örnek. anlamını okuduk 0x4D4F

İşaretsiz bir tamsayı, işaretli bir tamsayı veya 2 ASCII karakteri olabilir:

0x4D = M

0x4F = Ö

Şimdi durum daha ilginç. Birden çok kaydı bir araya getirerek 16 bitten büyük veri türlerini saklayabiliriz.

Örneğin, 2 kayıt okuduk ve aşağıdaki verileri aldık: 0xAE53 0x544D

Olabilir:

32 bit işaretsiz tam sayı

0xAE53 0x544D = 2924696653

32 bit işaretli tam sayı

0xAE53 0x544D = -1370270643

32 bit kayan nokta - kayan noktalı sayı

0xAE53 0x544D = -4.80507e-11

Veya 4 ASCII karakterini saklayın

0xAE53 0x544D = 0xAE 0x53 0x54 0x4D= ®STM

Devam ederseniz, daha fazla kaydı birleştirerek 64 bit değerleri, 128 bit değerleri, dizeleri ve prensip olarak herhangi bir veri türünü saklayabilirsiniz.

Ancak, kayıtları birleştirerek şu sorumuz var:

Bayt ve kelime sırası

maalesef protokol Modbus baytların bir kayıt içinde nasıl saklanacağını belirtmez. Şunlar. farklı üreticilerin farklı cihazları, baytları rastgele sırada depolayabilir.

Örneğin, kaydı okurken 0xA543 değerini aldık.

Baytların orijinal kayıtta depolanma sırasına bağlı olarak, bunlar tamamen farklı iki değer olabilir:

Kullanıldıysa Büyük Endian format (önce yüksek bayt), sonra değere sahip olacağız 42307

Ama kullanılırsa Küçük Endian format (önce düşük bayt), sonra değere sahip olacağız 17317

İki kayıttan 32 bitlik bir değer oluşturduğumuzda daha da ilginç.

Bayt kombinasyonu için 4 seçenek vardır, örneğin 32 bitlik bir sayı 4014323619 (0xEF45B7A3) aşağıdaki 4 baytlık dizilerle aktarılabilir:

0xEF45 0xB7A3

0x45EF 0x A3B7

0xB7A3 0xEF45

0xA3B7 0x45EF

Uç cihazda hangi bayt/kelime sırasının uygulandığı gerçekten önemli değil. Ana şey, ustanın bu sırayı bilmesi ve alınan baytlardan doğru değerleri oluşturabilmesidir. Uç cihazdaki verilerin tam biçimini bilen master, kayıtların değerlerini her zaman doğru bir şekilde oluşturacaktır. Ve konsept bunun için var. Modbus haritası (Modbus kartı).

ModbusHarita

Modbus haritası mümkün olan her şeyi tam olarak açıklayan bir belgedir. Modbus cihazdaki kayıtlar, adresleri, amacı, mevcut değerler, varsayılan değerler, erişim yöntemi.

Bazı cihazlar sabit bir kayıt açıklamasıyla gelir. Şunlar. kayıtların listesi, adresleri, saklanan veriler vb. üretici tarafından katı bir şekilde ayarlanmış ve belgelerde açıklanmıştır.

Ve özel bir yapılandırma var. Şunlar. cihazda kayıtlar için sabit adres yoktur. Kullanıcı yapılandırabilir Modbus haritası(örneğin, bazı kayıtları tek bir komutla okumak için sürekli bir adres dizisine bağlayarak).

sabit örnek Modbus haritası Cihazlarınız için kullanımı mantıklı olan , aşağıdaki tablo gibi görünebilir.

Adres Tanım Erişim Varsayılan değer Mevcut değerler
40001 ürün Kodu Okuma 1 1
40002 Komut kaydı, komut yazmak için Kayıt 0 - cihaz sıfırlama
1 - Kayıt için uSD kartın kilidini açın
2 - uSD kartını kayıt için bloke edin
3 - Yapılandırmayı uSD karta kaydedin
40003 Çalışma süresi, saniye cinsinden
genç kelime
Okuma 0 0..0xFFFF
40004 Çalışma süresi, saniye cinsinden
kıdemli kelime
Okuma 0 0..0xFFFF
40005 Sistem hatası Okuma yazma 0 Hata kodları için eke bakın.
Hatayı silmek için 0 yazın ve HATA LED'ini kapatın

Modbus'un Yapamayacakları

Modbusçok basit bir protokoldür, bu nedenle gerekli olabilecek her şeyi desteklemez.

Modbus mesajları (olayları) desteklemez. Şunlar. uç cihaz master'a mesaj gönderemez. Yalnızca master uç cihazı sorgulayabilir.

Modbus(belirli bir süre boyunca birikmiş) geçmiş verileri okumayı desteklemez. Her ne kadar bu sınırlama komut kayıtları, adres kayıtları ve aşırı yüklenmiş kayıtlar oluşturarak kolayca aşılabilir. Bu, aşağıdaki makalelerden birinde tartışılacaktır.

Standart Modbus karmaşık yapılandırılmış verileri depolayamaz (en azından uygulanması o kadar kolay değildir).

Ayrıca, Modbus kimlik doğrulama ve şifrelemeyi desteklemez. Yani, tüm iletişim korumasız bir modda gider. Her ne kadar, biraz arzu ile, bir miktar özdeşleşme benzerliği uygulayabilirsiniz. Modbus TCPçoğu durumda bu mümkün değildir. Verileri yetkisiz erişim ve değişiklikten nasıl koruyacağınız konusunda bazı seçenekler vardır, ancak bunlar çok güvenilir değildir (uygulanabilmelerine rağmen). Onları sonraki makalelerde anlatacağım.

Ve görünüşe göre bunların hepsi bu protokol için açık dezavantajlar. Aksi takdirde, sistemin bazı göstergelerini izlemesi ve bunlara okuma kayıtları aracılığıyla erişim sağlaması gereken basit izleme sistemleri için çok basittir ve harikadır.

Bir sonraki makalede, protokolün desteklediği tüm ana özelliklere bakacağız. Modbus.

Modbus, açık bir seri iletişim protokolüdür. 1979'da programlanabilir mantık denetleyicisi (PLC) cihazlarıyla kullanılmak üzere tasarlanmış olup, artık çeşitli ağ türlerine bağlı birçok endüstriyel elektronik cihazı bağlamak için yaygın olarak kullanılmaktadır.

Endüstriyel otomasyonda en yaygın kullanılan protokol (yerel işletmeler hariç). Modbus çok popüler. Bu, standart seri iletişim ile oldukça basit ve kullanımı kolay bir cihazdır. Bir Modbus ağında, her cihaz ağa bir dizi bobin (bit) ve kayıt olarak bakar. Master bu bobinleri okur ve yazar ve çok basit ve özlü bir komut seti kullanarak kaydeder. İletişim bir seferde yalnızca bir yönde hareket eder.

Pratikte kurulan Modbus protokolünün uygulanması çok kısadır. Yirmi temel komut olmasına rağmen, bunlardan sadece birkaçı fiilen uygulanmaktadır. En yaygın komutlar bobinleri oku, bobinleri yaz, register oku, registerları ayarla. Küçük komut seti, protokolün popülerliğinin bir başka nedenidir.

Modbus - Genişletilmiş Uygulama Protokolü

Protokol dönüştürücü, çeşitli nedenlerle yaygın olarak kullanılmaktadır:

  • Modbus açık kaynaklı bir protokoldür. Bu, herhangi bir donanım satıcısından çok çeşitli cihaz türlerine dahil edilebileceği anlamına gelir.
  • Dağıtımı daha az zorlaştıran basit bir mesaj yapısı kullanır. Uygulanması sadece birkaç gün sürebilir. Bu, öğrenilmesi ve devreye alınması aylar sürebilen diğer protokollere göre açık bir rekabet avantajıdır.
  • Seri veya Ethernet bağlantılarını destekler.
  • İki tür seri bağlantı ile kullanılır: RS-232 ve RS-485. Modbus tcp protokolünün bazı sürümleri Ethernet veya TCP/IP üzerinden de gönderilebilir. Bu Modbus mesajları 1 bit veya 16 bit kelime paketleri olarak paketlenir.

Modbus, ağdaki fiziksel katmanın bir parçası değildir. İletişim, fiziksel katmanlar üzerinden taşınır ve birçok farklı ağ türünde kullanılmasına izin verir. Fiziksel olmayan katmanın bu özelliği Modbus'u bir uygulama protokolü yapar.

Modbus iletişim protokolü, merkezi bir uzak konumdan işlemleri görüntüleme, arşivleme ve sorun giderme için farklı kaynaklardan veri toplamanın yaygın bir yoludur. Yaygın olarak kullanılır ve oldukça basit bir teknolojidir. Uygulamaya bağlı olarak, daha yeni bir protokolün daha fazla faydası olabilir.

Tipik olarak bir PC, kurum genelindeki çeşitli süreçlerden veri toplamak için Wonderware, Intellution veya LabVIEW gibi programları tek bir yerde çalıştıracak şekilde yapılandırılır. Başka bir uygulama, uzaktan proses kontrolörleri kurmak içindir (PLC, Allen-Bradley, Siemens, PLCDirect ve diğerleri). Cihazdan iletilen farklı seviyelere veya modlara yanıt vermek için.

İki protokol seçeneği

Seri bağlantılardan geçen iki protokol seçeneği vardır. Bunlardan biri Modbus RTU protokolüdür. Bu varyantın açıklaması: Daha kompakttır, ikili bir ilişki kullanır. Bu formatta, veri aktarımına her zaman aktarım sorunlarını tespit etmek için kullanılan bir döngüsel artıklık sağlama toplamı eşlik eder.

İkinci seçenek Modbus ASCII'dir. Bu sürüm, operatörler tarafından okunabilen ASCII onaltılık kodlamayı kullanarak daha ayrıntılıdır. Modbus ASCII daha az güvenli bir protokoldür. Modbus RTU'dan daha az verimli olduğu için operatörler, RTU formatını desteklemeyen cihazlara veri aktarmak için yalnızca ASCII kullanmalıdır. ASCII, RTU mesajının doğru şekilde uygulanamaması durumunda da faydalı olabilir.

Aptallar için Modbus protokolü

Modbus, elektronik cihazlar arasında seri hatlar üzerinden bilgi aktarmak için kullanılan bir seri iletişim protokolüdür. Bilgi talep edene master, cihazların temini ile ilgili bilgilere slave denir. Standart bir Modbus ağında, her biri 1 ila 247 arasında benzersiz bir bağımlı adrese sahip bir Master ve 247'ye kadar Slave vardır. Master ayrıca Slave'lere bilgi yazabilir.

Ne için kullanılır?

Modbus açık bir protokoldür. Bu, üreticilerin bunu ekipmanlarına ücretsiz olarak ekleyebilecekleri anlamına gelir. Endüstri standardı iletişim protokolü haline geldi ve şu anda endüstriyel elektronik cihazları bağlamanın en yaygın yolu. Birçok endüstride birçok üretici tarafından yaygın olarak kullanılmaktadır.

Modbus tipik olarak cihazlardan ve kontrollerden bir ana kontrolöre veya sıcaklık ve nemi ölçen ve sonuçları bir bilgisayara rapor eden bir sistem gibi veri toplama sistemine geri sinyal göndermek için kullanılır. Modbus genellikle denetleyici kontrol ve veri toplama (SCADA) sistemlerinde bir uzak terminal birimi (RTU) kontrol bilgisayarını bağlamak için kullanılır. Seri hatlar (RTU ve ASCII) ve Ethernet (TCP) için Modbus protokolünün sürümleri mevcuttur.

Nasıl çalışır?

Modbus cihazlar arasında seri hatlar üzerinden iletilir. En basit kurulum, iki aygıttaki seri bağlantı noktalarını bağlayan tek bir seri kablo olacaktır: Ana ve Bağımlı.

Veriler bit adı verilen birler ve sıfırlar dizisi olarak gönderilir. Her bit bir voltaj olarak iletilir, sıfırlar pozitif ve birler negatif voltajlardır. Bitler çok hızlı gönderilir. Tipik baud hızı 9600 baud'dur (saniyede bit).

Master/slave protokolü

Modbus RTU protokolünü tanımlarken, iletişim merkezi bir ana ekipman, aynı ağ üzerinde 247 bağlı elektronik cihaz arasındadır. Ana sistem, "bağımlı" olarak adlandırılan bağlı cihazlardan bilgi talep ettiğinden, tasarıma genel olarak bir ana/bağımlı protokol denir. Slave'ler sadece bu isteklere yanıt olarak master'a bilgi gönderir, otonom olarak çalışmazlar. Master ayrıca bağımlı cihazlara bilgi yazabilir, ancak bağımlı cihazlar master'a bilgi yazamaz.

Bir bağımlı cihaz bir Modbus mesajı gönderdiğinde, benzersiz bir adres tanımlayıcı ile bir mesaj oluşturmaya başlar. Bu 1 ile 247 arasında bir sayıdır ve sihirbazın istenen bilgilerle hangi belirli aygıtın eşleştiğini belirlemesine olanak tanır.

İletişim ve cihazlar

Modbus kullanarak iletişim kurması amaçlanan her cihaza benzersiz bir adres atanır. Seri ağlarda, yalnızca ana olarak belirlenen düğüm bir komut başlatabilir. Ethernet üzerinde, genellikle yalnızca bir master gönderse de, herhangi bir cihaz bir Modbus komutu gönderebilir. Komut, amaçlandığı cihazın adresini içerir (1'den 247'ye kadar). Tüm komutlar, alıcının iletim hatalarını algılamasını sağlamak için sağlama toplamı bilgilerini içerir. Temel Modbus komutları, RTU'ya kayıtlarından birindeki değeri değiştirmesini, bir G/Ç portunu kontrol etmesini veya okumasını, cihaza kayıtlarında bulunan bir veya daha fazla değeri geri göndermesini emreder.

Çok basit bir protokol olduğu ve sıklıkla kopyalandığı için Modbus'u destekleyen birçok modem ve ağ geçidi vardır. Bazıları onun için özel olarak tasarlandı. Çeşitli uygulamalar kablolu, kablosuz, örneğin ISM ve hatta kısa mesaj servisi (SMS) ve genel paket radyo servisi (GPRS) kullanır. Tasarımcıların uğraşması gereken tipik sorunlar, yüksek gecikme ve zaman sorunlarını içerir.

Modbus kayıt türlerine genel bakış

Cihazların başvurduğu kayıt türleri şunları içerir:

Bobin (ayrık çıkış); . ayrık giriş; . giriş kaydı; . kayıt tutma.

Fonksiyon Kodları

  • Genel fonksiyon kodları - Modbus topluluğu tarafından doğrulanan özel kodlar hariç, 1 ila 127 arası, herkese açık olarak belgelenir ve benzersiz oldukları garanti edilir.
  • Kullanıcı fonksiyon kodları - 65'ten 72'ye, 100'den 110'a kadar iki aralıktadır.
  • Ayrılmış Özellik Kodları - bazı şirketler tarafından eski ürünler için kullanılır, genel kullanım için mevcut değildir.

Avantajlar

Modbus protokolünü kullanmanın bazı avantajları:

  • Sürücü zaten kuruluysa ve kullanıcı Ethernet ve TCP/IP soketlerine aşinaysa, sürücü birkaç saat içinde çalışabilir ve PC ile iletişim kurabilir. Geliştirme maliyetleri düşük olarak kabul edilir. Minimum sayıda ekipman gerektirir. Sürücü, herhangi bir işletim sistemi ile uyumludur.
  • "Egzotik" yonga setlerine gerek yoktur, bu nedenle sistem yeni uygulanan bir cihazla iletişim kurmak için standart Ethernet PC kartlarını kullanabilir. Ethernet maliyeti düştükçe donanım maliyeti de düşer. Kullanıcılar, destek için tek bir hizmet sağlayıcıya bağlı değildir, ancak güncel gelişmelerden yararlanabilirler.
  • Spesifikasyon ücretsiz olarak indirilebilir, Modbus protokollerini kullanmak için ek lisans ücreti gerekmez.
  • Farklı üreticilerin cihazları arasında birlikte çalışabilirlik ve kurulu uyumlu cihaz tabanıyla uyumluluk.

Modbus protokol dönüştürücüleri pahalıdır. Endüstriyel ağ geçitlerinin fiyatı 1.000 $ 'dır.

Kısıtlamalar

Modbus 1970'lerin sonlarında iletişim için geliştirildiğinden, veri türlerinin sayısı o sırada PLC'ler tarafından anlaşılanlarla sınırlıydı. BLOB'lar desteklenmez.

Bir düğümün, örneğin bir kayıt değerinin 30 ila 175 derece arasında bir sıcaklık değerini temsil edip etmediğini belirlemek için bir veri nesnesinin tanımını bulması için standart bir yol yoktur.

Modbus bir master/slave protokolü olduğundan, bir cihazın "bir istisna bildirmesi" mümkün değildir (open-mbus olarak adlandırılan Ethernet TCP/IP dışında). Ana düğüm, alt cihazlardan düzenli olarak veri almalı ve verilerdeki değişiklikleri aramalıdır. Bu, bant genişliğini zorlar ve düşük veri hızlı bağlantılar gibi bant genişliğinin pahalı olabileceği uygulamalarda ağ bağlantı süresini artırır.

Modbus, bir ana istasyona bağlanabilecek cihaz sayısını sınırlayan tek bir veri bağlantısı üzerinde 254 cihazı adreslemekle sınırlıdır (Ethernet TCP/IP bir istisnadır). Aktarımlar sürekli olmalıdır, bu da aktarımdaki boşlukları önlemek için uzak iletişim cihazlarının türlerini verileri arabelleğe alabilenlerle sınırlar. Modbus protokolünün kendisi yetkisiz komutlara veya veri dinlemelerine karşı koruma sağlamaz. Bilgi iletme sürecinde, değişim sırasında bozulmalarla ilişkili olanların yanı sıra mantıksal hataların meydana geldiğini anlamak önemlidir.

Modbus- master-slave mimarisine dayalı iletişim protokolü. Veri aktarımı için RS-485, RS-422, RS-232 arayüzlerinin yanı sıra Ethernet TCP/IP ağlarını (Modbus TCP protokolü) kullanır.

Modbus RTU mesajı, SlaveID cihaz adresi, fonksiyon kodu, fonksiyon koduna bağlı özel veriler ve bir CRC sağlama toplamından oluşur.

SlaveID adresini ve CRC sağlama toplamını atarsanız, bir PDU, Protokol Veri Birimi alırsınız.

SlaveID cihaz adresidir, 0'dan 247'ye kadar bir değer alabilir, 248'den 255'e kadar olan adresler ayrılmıştır.

Modüldeki veriler 4 tabloda saklanır.

İki tablo salt okunur ve ikisi okuma-yazmadır.

Her tablo 9999 değer tutar.

Kayıt numarasıHEX kayıt adresiBir çeşitİsimBir çeşit
1-9999 0000 - 270EOkuma yazmaAyrık Çıkış BobinleriYAPMAK
10001-19999 0000 - 270EOkumaAyrık Giriş KontaklarıDI
30001-39999 0000 - 270EOkumaAnalog Giriş Kayıtlarıyapay zeka
40001-49999 0000 - 270EOkuma yazmaAnalog Çıkış Tutma KayıtlarıAO

Modbus mesajı bir kayıt adresi kullanır.

Örneğin, ilk AO Holding Sicili, oda 40001 ama onun adres 0000'a eşittir.

Bu iki değer arasındaki fark ofset ofsettir.

Her tablonun sırasıyla kendi ofseti vardır: 1, 10001, 30001 ve 40001.

Aşağıda, cihaz adresi 17 olan #40108 ila 40110 kayıtlarından analog çıkış AO'nun (tutma kayıtları) değerini almak için bir Modbus RTU talebi örneği verilmiştir.

11 03 006B 0003 7687

Modbus RTU Slave cihazından yanıt olarak şunları alacağız:

11 03 06 AE41 5652 4340 49AD

11 Cihaz adresi(17 = 11 altıgen)Köle Kimliği
03 fonksiyon kodu fonksiyon kodu
06 Sonraki bayt sayısı(6 bayt takip eder)Bayt Sayısı
AE (AE altıgen)Kayıt değeri Merhaba (AO0)
41 (41 altıgen)Kayıt değeri Lo (AO0)
56 Kayıt defterinin en önemli bitinin değeri(56 altıgen)Kayıt değeri Merhaba (AO1)
52 Kayıt defterinin en az anlamlı basamağının değeri(52 altıgen)Kayıt değeri Lo (AO1)
43 Kayıt defterinin en önemli bitinin değeri(43 altıgen)Kayıt değeri Merhaba (AO2)
40 Kayıt defterinin en az anlamlı basamağının değeri(40 altıgen)Kayıt değeri Lo (AO2)
49 Toplamı kontrol et CRC değeri Lo
AD Toplamı kontrol et CRC değeri Merhaba

Analog çıkış kaydı AO0, AE 41 HEX veya 44609 ondalık olarak ayarlanır.

Analog çıkış kaydı AO1, 56 52 HEX veya 22098 ondalıktır.

Analog çıkış kaydı AO2, 43 40 HEX veya 17216 ondalıktır.

AE 41 HEX'in değeri 16 bittir 1010 1110 0100 0001, gösterim tipine bağlı olarak farklı bir değer alabilir.

40108 kaydının değeri, 40109 kaydı ile birleştirildiğinde 32 bitlik bir değer verir.

Sunum örneği.

Görünüm TürüDeğer aralığıHEX'te örnekOndalık biçimde olacak
16 bit işaretsiz tam sayı0 ila 65535AE4144,609
16 bit işaretli tam sayı-32768 - 32767AE41-20,927
iki karakterli ASCII dizesi2 karakterAE41® A
ayrık açma/kapama değeri0 ve 10001 0001
32 bit işaretsiz tam sayı0 - 4,294,967,295AE41 56522,923,517,522
32 bit işaretli tam sayı-2.147.483.648 ila 2.147.483.647AE41 5652-1,371,449,774
32 bitlik tek duyarlıklı IEEE kayan noktalı sayı1,2×10−38 ila 3,4×10+38AE41 5652-4.395978 E-11
dört karakterli ASCII dizisi4 karakterAE41 5652® AVR

Modbus RTU komutları nelerdir?

İşte Modbus RTU kayıtlarını okumak ve yazmak için kodları içeren bir tablo.

Fonksiyon Kodufonksiyon ne işe yararDeğer türüErişim türü
01 (0x01)DO okumaBobin Durumunu OkuayrıkOkuma
02 (0x02)DI okumaGiriş Durumunu OkuayrıkOkuma
03 (0x03)AO okumaHolding Kayıtlarını Oku16 bitOkuma
04 (0x04)AI okumaGiriş Kayıtlarını Oku16 bitOkuma
05 (0x05)Bir DO kaydetmeTek Bobini ZorlaayrıkKayıt
06 (0x06)Tek AO kaydıÖn Ayarlı Tek Kayıt16 bitKayıt
15 (0x0F)Birden fazla DO'yu kaydetmeÇoklu Bobinleri ZorlaayrıkKayıt
16 (0x10)Birden fazla AO kaydetmeÖnceden Ayarlanmış Çoklu Kayıtlar16 bitKayıt

Dijital çıkışı okumak için Modbus RTU komutu nasıl gönderilir? Komut 0x01

Bu komut, DO dijital çıkışlarının değerlerini okumak için kullanılır.

PDU talebi, ilk DO kaydının başlangıç ​​adresini ve müteakip gerekli DO değerlerinin sayısını belirtir. PDU'larda DO değerleri sıfırdan başlayarak adreslenir.

Yanıttaki DO değerleri bir bayttır ve bitlerin değerine karşılık gelir.

Bit değerleri 1 = AÇIK ve 0 = KAPALI olarak tanımlanır.

İlk veri baytının en az anlamlı biti, adresi istekte belirtilen DO değerini içerir. DO değerlerinin geri kalanı, en yüksek bayt değerine artan sırayla gelir. Şunlar. sağdan sola doğru.

Sekizden az DO değeri istendiyse, yanıtta kalan bitler sıfırlarla doldurulacaktır (en az anlamlı bayttan en önemli bayta kadar). Bayt Sayısı alanı Sonraki bayt sayısı yanıttaki tam veri baytlarının sayısını gösterir.

SlaveID cihaz adresi 17 için 20'den 56'ya bir DO isteği örneği. İlk kaydın adresi 0013 hex = 19 olacaktır, çünkü hesap 0 adresinden tutulur (0014 hex = 20, -1 sıfır ofseti = 0013 hex = 19 elde ederiz).

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
01 fonksiyon kodu01 fonksiyon kodu
00 05 Sonraki bayt sayısı
13 CDKayıt değeri DO 27-20 (1100 1101)
00 Kayıt sayısı Merhaba bayt6BKayıt değeri DO 35-28 (0110 1011)
25 Kayıt sayısı Lo baytB2Kayıt değeri DO 43-36 (1011 0010)
0ECRC sağlama toplamı0EKayıt değeri DO 51-44 (0000 1110)
84 CRC sağlama toplamı1BKayıt değeri DO 56-52 (0001 1011)
45 CRC sağlama toplamı
E6CRC sağlama toplamı

DO 27-20 çıkışlarının durumları, CD hex bayt değerleri olarak veya ikili 1100 1101 olarak gösterilir.

DO kaydı 56-52'de, sağdaki 5 bit talep edilmiştir ve bitlerin geri kalanı sıfırlarla tam bir bayta doldurulur ( 000 1 1011).

Ayrık çıkış modülleri: M-7065 , ioLogik R1214 , ADAM-4056S

Dijital girişi okumak için Modbus RTU komutu nasıl gönderilir? Komut 0x02

Bu komut, DI dijital girişlerinin değerlerini okumak için kullanılır.

SlaveID cihaz adresi 17 için #10197 ila 10218 kayıtlarından bir DI talebi örneği. İlk kaydın adresi 00C4 hex = 196 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
02 fonksiyon kodu02 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt03 Sonraki bayt sayısı
C4İlk kayıt adresi Lo baytACDI kayıt değeri 10204-10197 (1010 1100)
00 Kayıt sayısı Merhaba baytD.B.DI kayıt değeri 10212-10205 (1101 1011)
16 Kayıt sayısı Lo bayt35 DI kayıt değeri 10218-10213 (0011 0101)
BACRC sağlama toplamı20 CRC sağlama toplamı
A9CRC sağlama toplamı18 CRC sağlama toplamı

Ayrık giriş modülleri: M-7053 , ioLogik R1210 , ADAM-4051

Analog çıkışı okumak için Modbus RTU komutu nasıl gönderilir? Komut 0x03

Bu komut, AO analog çıkışlarının değerlerini okumak için kullanılır.

SlaveID cihaz adresi 17 için #40108 ila 40110 kayıtlarından bir AO talebi örneği. İlk kaydın adresi 006B hex = 107 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
03 fonksiyon kodu03 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt06 Sonraki bayt sayısı
6Bİlk kayıt adresi Lo baytAEMerhaba kayıt değeri #40108
00 Kayıt sayısı Merhaba bayt41 Kayıt değeri Lo #40108
03 Kayıt sayısı Lo bayt56 Merhaba kayıt değeri #40109
76 CRC sağlama toplamı52 Kayıt değeri Lo #40109
87 CRC sağlama toplamı43 Merhaba kayıt değeri #40110
40 Kayıt değeri Lo #40110
49 CRC sağlama toplamı
ADCRC sağlama toplamı

Analog çıkış modülleri: M-7024 , ioLogik R1241 , ADAM-4024

Analog girişi okumak için Modbus RTU komutu nasıl gönderilir? Komut 0x04

Bu komut, AI analog girişlerinin değerlerini okumak için kullanılır.

SlaveID cihaz adresi 17 için #30009 kaydından bir AI talebi örneği. İlk kaydın adresi 0008 hex = 8 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
04 fonksiyon kodu04 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt02 Sonraki bayt sayısı
08 İlk kayıt adresi Lo bayt00 Merhaba kayıt değeri #30009
00 Kayıt sayısı Merhaba bayt0AKayıt değeri Lo #30009
01 Kayıt sayısı Lo baytF8CRC sağlama toplamı
B2CRC sağlama toplamıF4CRC sağlama toplamı
98 CRC sağlama toplamı

Analog girişli modüller: M-7017 , ioLogik R1240 , ADAM-4017+

Dijital çıkış yazmak için Modbus RTU komutu nasıl gönderilir? Komut 0x05

Bu komut, DO dijital çıkışının bir değerini yazmak için kullanılır.

FF 00 hex değeri, çıkışı AÇIK olarak ayarlar.

00 00 hex değeri, çıkışı KAPALI olarak ayarlar.

Diğer tüm değerler geçersizdir ve çıkış değerini etkilemez.

Böyle bir isteğe verilen normal yanıt, DO durumu değiştirildikten sonra döndürülen bir yankıdır (cevapta isteğin tekrarlanması).

SlaveID cihaz adresi 17 için kayıt #173 ile DO'ya yazma örneği. Kayıt adresi 00AC hex = 172 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
05 fonksiyon kodu05 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt00 İlk kayıt adresi Merhaba bayt
ACİlk kayıt adresi Lo baytACİlk kayıt adresi Lo bayt
FFMerhaba bayt değeriFFMerhaba bayt değeri
00 Lo bayt değeri00 Lo bayt değeri
4ECRC sağlama toplamı4ECRC sağlama toplamı
8BCRC sağlama toplamı8BCRC sağlama toplamı

DO173 çıkışının durumu devre dışı KAPALI'dan etkin AÇIK'a değişti.

Ayrık çıkış modülleri: M-7053 , ioLogik R1210 , ADAM-4051

Analog çıkış yazmak için Modbus RTU komutu nasıl gönderilir? Komut 0x06

Bu komut, analog çıkış AO'nun bir değerini yazmak için kullanılır.

SlaveID cihaz adresi 17 için #40002 kaydı ile AO'ya yazma örneği. İlk kaydın adresi 0001 hex = 1 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
06 fonksiyon kodu06 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt00 İlk kayıt adresi Merhaba bayt
01 İlk kayıt adresi Lo bayt01 İlk kayıt adresi Lo bayt
00 Merhaba bayt değeri00 Merhaba bayt değeri
03 Lo bayt değeri03 Lo bayt değeri
9ACRC sağlama toplamı9ACRC sağlama toplamı
9BCRC sağlama toplamı9BCRC sağlama toplamı

Analog çıkış modülleri: M-7024 , ioLogik R1241 , ADAM-4024

Birden çok dijital çıkış yazmak için Modbus RTU komutu nasıl gönderilir? Komut 0x0F

Bu komut, birden çok DO değeri yazmak için kullanılır.

SlaveID cihaz adresi 17 için #20 ila #29 kayıtları ile birkaç DO'ya yazma örneği. Kayıt adresi 0013 hex = 19 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
0Ffonksiyon kodu0Ffonksiyon kodu
00 İlk kayıt adresi Merhaba bayt00 İlk kayıt adresi Merhaba bayt
13 İlk kayıt adresi Lo bayt13 İlk kayıt adresi Lo bayt
00 Kayıt sayısı Merhaba bayt00
0AKayıt sayısı Lo bayt0A
02 Sonraki bayt sayısı26 CRC sağlama toplamı
CDBayt değeri DO 27-20 (1100 1101)99 CRC sağlama toplamı
01 Bayt değeri DO 29-28 (0000 0001)
sevgiliCRC sağlama toplamı
0BCRC sağlama toplamı

Yanıt, yazılan kayıtların sayısını döndürür.

Ayrık çıkış modülleri: M-7053 , ioLogik R1210 , ADAM-4051

Birden çok analog çıkış yazmak için Modbus RTU komutu nasıl gönderilir? Komut 0x10

Bu komut, çoklu AO analog çıkış değerleri yazmak için kullanılır.

SlaveID cihaz adresi 17 için #40002 ve #40003 kayıtları ile birkaç AO'ya yazma örneği. İlk kaydın adresi 0001 hex = 1 olacaktır, çünkü hesap 0 adresinden tutulur.

BaytRica etmekBaytCevap
(Onaltılık)Alan adı(Onaltılık)Alan adı
11 Cihaz adresi11 Cihaz adresi
10 fonksiyon kodu10 fonksiyon kodu
00 İlk kayıt adresi Merhaba bayt00 İlk kayıt adresi Merhaba bayt
01 İlk kayıt adresi Lo bayt01 İlk kayıt adresi Lo bayt
00 Kayıt sayısı Merhaba bayt00 Kaydedilen kayıt sayısı Merhaba bayt
02 Kayıt sayısı Lo bayt02 Kaydedilen kayıt sayısı lo bayt
04 Sonraki bayt sayısı12 CRC sağlama toplamı
00 Merhaba değer 4000298 CRC sağlama toplamı
0ALo değeri 40002
01 Merhaba değer 40003
02 Lo değeri 40003
C6CRC sağlama toplamı
F0CRC sağlama toplamı