Modbus RTU, pochopil jsme to?

Sudovec sudovec na seznam.cz
Úterý Prosinec 21 22:54:22 CET 2010


Zkusím jen stručně...

Dne 20.12.2010 22:29, Draček Fráček napsal(a):
>   Pokousim se dat dohromady modbus po RS-485, jelikoz jsem neco
> takoveho nikdy nedelal dovolim si
> nastinit svou predstavu, mozna me opravite nebo nastinite lepsi reseni.
>
> Predpokladejme jednoduche zarizeni, ktere umi zmerit dve teploty,
> adresa zarizeni rekneme 20h, registry 30000 a 30001 pro T1 a T2.
>
> MCU spi a posloucha na RS-485, pokud ne nejaka komunikace prijme prvni
> byte, v preruseni od UART
> pokud je prijaty byte 0 nebo hodnota = adrese jednotky, uloží přijatou
> hodnotu na prvni pozici
> v prijimacim bufferu, pokud je prijata hodnota prvniho byte jina neulozi nic
> odpali se casovac merici cas rovnajici se prijmu 3.5 znaku, tento
> casovac resetuje prijem kazdeho dalsiho znaku,
> znaky se ukladaji do fronty.
> Prijem telegramu konci naplnenim fronty nebo preteceni tohoto
> casovace, tedy mezerou 3.5znaku.

ANO

>
> Nyni mame prijatou celou zpravu , posledni dva znaky jsou CRC,
> provedem overeni autenticity, pokud je OK

ANO
>
> mela by zprava vypadat takto.
> adresa zarizeni 20h, kod funkce 04h (Read Input Registers), adresa
> registu, ktery se ma precist, 7530h,počet registru 0001h, CRC16
> 0x20h,0x4h,0x7530h,0x0001h,CRC16
> CRC-16:s polynomem 0x8005=x16 + x15 + x2 + 1

To už si přesně nevybavuji, je to ve specifikaci...
>
> odpoved bude
> adresa 0x20h,0x04h,0x1234h (hodnota regstu obsahujícího teplotu,CRC16
> nebo   0x20h,0x84h,kod chyby,CRC16

To už si přesně nevybavuji, je to ve specifikaci...

>
>
> Je to hloupost?

Není

> Zcela jsem nepochopil jek je to s adresou (MODICON), pro vstupni
> registry je vyclenen usek adres 30000÷39999,
> Jaku zvolim adresu v tomto rozsahu je ciste na me?

ANO

> Pokud zarizeni umi merit dve teploty, tedy ma dva registry, musi mit
> adresy za sebou , tedy treba 30000 a 30001?

Ne, mohou být kdekoliv.

> Musim implementovat i prikaz 0x04h,0x7530h,0x0002 tedy jednim dotazem
> vratit obe teploty

NE
> nebo vystacim s dvema prikazy,
> kde kazdy bude cist jeden registr 0x04h,0x7530h,0x0001h a 0x04h,0x7531h,0x0001h?

Ano

> K čemu se vyuziva broadcast režim, kdyz na v nem slave neodpovida?
> Jsou nejake funkce, kterou by melo modbus zarizeni podporovat vzdy?
> Je pripustne aby se komunikacni rychlost zarizeni nastavovala pomoci
> 0x06h Write Single Register, obsah registuru je rekneme default 9600,
> ale lze ho prikazem 0x06,0x9c40,19200d prepsat a zarizeni pak prepne
> na komunikacni rychlost 19200, tedy ulozi novou rychlost do EEPROM?
>
>
> Predem dekuji za pomoc
>
> Martin
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list