RE: Je tu někdo zběhlý v protokolu MODBUS, ochotný poskytnout konzultaci?

Jaroslav Meduna meduna na mikroklima.cz
Pondělí Červenec 10 11:15:23 CEST 2023


DD,

Byva dobrym zvykem na MB (RTU/TCP) rozdelit mapovani na readonly oblast,
ktera se (pravidelne) cte v jednom bloku a pak "write on change" datove body
(coil/reg).
Obecne doporuceni:
- vybrat si podporovane funkce (v zakladu asi funkce 3+16)
- na zacatek mapy umistit systemove informace a konfiguraci ("OTP"), ktere
potom nebude periodicky pouzivat (ale pouze pri zprovozneni/servise)
- konfiguraci je dobre bud HW (DIP) nebo SW mechanismem zamknout pred
nechtenymi zmenami
- nasleduje read only oblast, kterou budete prioritne pouzivat a cist
pravidelne jako jeden blok
- nasleduje write on change oblast, nebojte se dat do registru i jeden
samostatny bit (treba v budoucnu pribudou dalsi 4 nebo 8) - casto to je
efektivnejsi nez coil
- zrcadleni registru na vyssich pozicich je nekdy rozumna vec, kde muzete
doplnit mene casto pouzivane veci pro servis/diagnostiku
Na jednoduchych procesorech (ARM M0/M0+) budete bojovat s nedostatkem RAM,
proto je dobre mapu rovnou mapovat do pameti a promenne si podle toho
nalinkovat. Je treba si dat pozor na zarovnani, ARMy jedou 32 bitove.
Duplicitu registru je treba pohlidat softwarove, resi se to tak, ze pri
write on change udalosti nakopirujete dotcene registry a pro read je to
potreba dat na vhodne misto (napriklad na zacatek obsluhy modbusu). Je dobre
pohlidat si atomicitu oblasti, aby data sedely - predevsim delsi nez jeden
MB registr.

A na zaver nejvetsi bolak vetsiny MB implementaci: zamyslete se nad kvalitou
poskytovanych hodnot, jestli z neceho poznate, ze data/setpoint jsou platna
a jake maji casove razitko. IMHO, poskytnou hodnotu bez indikatoru kvality
je ***.

Pekny den, JM

-----Original Message-----
From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Petr Labaj
Sent: Sunday, July 9, 2023 5:48 PM
To: hw-list na list.hw.cz
Subject: Re: Je tu někdo zběhlý v protokolu MODBUS, ochotný poskytnout
konzultaci?

Kdybych to měl dělat tak bych:

- Rozdělení na R/O a R/W bych udělal jen v případě, že by byl
zaveden nějaký hierarchický systém kompetencí. Tedy nějaký
"user" by měl přístup je R/O, nějaký "admin" pak R/W.
Pokud by kompetence nebyly a nebyly ani uvažovány do budoucna,
tak na R/O bych se vykašlal.

- Bitové přístupy bych zachoval v případě, kdy je vhodný atomický
přístup k nějakým prvkům.

- Všechny parametry "datového" typu bych udělal jako 16-bit.
I když v nich bude hodnota jen 8-bit. Bude-li větší, tak pak ve
formě data_L a data_H.

- Číslování registrů bych udělal po skupinách podobných parametrů,
s mezerami mezi nimi. Aby při pozdějším přidání dalšího příbuzného
parametru tento mohl být zařazen na konec své skupiny a ne někam
nesmyslně na konec celého seznamu.

- Dobře bych zdokumentoval co který parametr znamená.
Dokonce bych začal podrobným popisem ještě předtím, než bych
začal programovat.

- Na nějaké pevné adrese někde hned na začátku by byla verze
a subverze protokolu. Aby při případné pozdější změně (ke které
ale doufejme nedojde) bylo možné měnit chování protistrany.

- Zamyslet se nad principem CANopen. Ten zavedl "slovník", tedy
na pevné adrese dostupný seznam proměnných včetně jejich typů.
Zamyslet se, jestli by něco podobného nemohlo být přínosné
i zde.

- Nedělat si s tím těžkou hlavu. I protokoly renomovaných firem
jsou často doprasené. Nakonec i logika Modbusu vypadá, jako
by to navrhoval někdo pořádně sjetý nebo ožralý.

PL
_______________________________________________
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