Modbus veri tipleri hakkında soru ?

Başlatan camby, 04 Şubat 2012, 19:30:09

camby

Cihazın içinde tanımlı olan parametrelerimin her biri 1 byte , bunların hepsini "Holding Register" adı altında bir alanda tutuyorum , istek geldikçe modbus üzerinden master'a gönderecek.

Şimdi sormak istediğim , master "Şu adresten itibaren 1 adet holding register'ı gönder " diye istek gönderdiğinde bu 1 byte'lık parametreyi , sadece 1 byte olarak gönderebilir miyim yoksa word(2byte) olarak mı yollamalıyım. word olarak yollarsam tabi yüksek değerlikli byte 0h değerinde olacak.

Bu konuda registerlara ait veri paketleri bir standart olarak 1 word mu ? Dediğim gibi 1 byte olarak cevap gönderirsem standartı bozmuş olur muyum ?


Örnek olarak Enda'nın modbus'lı cihazlarını inceliyorum , aynı alanda bazı registerlarını byte bazılarını word olarak tanımlamışlar. Byte word karışık olarak hepsinin adresi ardışıl olarak adreslenmiş. Şimdi bu adamlar slave'den bu 1 bytelık verileri nasıl alıyorlar master'a ?

Adres şu şekilde gitse kesin olarak 2 byte olarak gönderildiğinden emin olacam.

REG  Adres   tip
1       0          byte
2       2          byte
3       3          word
4       4          word


Ancak şu şekilde

REG  Adres   tip
1       0          byte
2       1          byte
3       2          word
4       3          word



byte verisini gönderirken 0 olan üst baytı gereksiz yere blokta tutmuyorda , data bloğu dışından harici olarak "00h" mı ekleniyor gönderim sırasında acaba ?

SpeedyX

Custom cihaz yapıyorsan sorun olmaz, illa herşeyi 16 bit yollamak zorunda değilsin ama standartta registerlar 16 bitlik olarak tanımlı. Mesela float bir değeri 2 tane 16 bit olarak yolluyorum ben de bir uygulamamda.

camby

#2
Standart bir cihaz olması lazım. Daha doğrusu elalemin modbus masteri gelecek benim cihazın 1 bytelık parametresini okuyacak yada değiştirecek. Bu durumda 1 byte'lık verinin paketi nasıl olmalı?


Başka şekilde :
1 byte'lık ve 2 byte'lık parametreler bir arada aynı alanda durduğunda ( Endadaki gibi ) ve master bunların hepsini birden okumak istediğinde veriler nasıl gönderilmeli ?

Klein

#3
Eğer modbus desteği olan her cihazla haberleşmek istiyorsan, 2 byte olarak göndermelisin.  Bu tür uluslararası protokoller ile çalışırken pek standartların dışına çıkmamak gerek.
Ama illa 1 byte olarak da haberleşmek isterim dersen;
standart modbus'ta olmayan bir fonksiyon numarası ile yap sorgunu. örn f:44 cihazın 44 numaralı fonksiyon sorgusunu aldığında isteğin byte olduğunu anlasın. Hem standartların dışına çıkmazsın hem de kendine özel fonksiyonları çalıştırabilirsin.

Endanın'da veriyi byte olarak tuttuğunu sanmam.  Yine word olarak tutuyor ve word olarak gönderiyordur.  Parametre tipi byte olabilir ama tutulduğu alan worddür bence.