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