Pavka Různé 3. 7. 2025 11:06 3. 7. 2025 11:38

Dobrý den, 

Používám knihovnu modbus.

Po modbus RTU vyčítám slave zařízení a jeho data používám a zároveň posílám dalšímu zařízení. 

Potřeboval bych detekovat chybnou komunikaci (nechodí odpovědi od slave, fyzicky poškozené vedení linky, chybná data, ... ) je toto dosupné na nějakém bitu? 

Děkuji

Pavel Richter

 

 

Odpovědi 1

Luboš Urban 3. 7. 2025 11:38

Dobrý den,

funkční bloky pro komunikace protokolem Modbus (a je jedno, jestli jde o ModbusRTU nebo Modbus TCP vrací na výstupu ErrCode chybový kód, který je nastaven vždy po dokončení příkazu (tedy v okamžiku, kdy je nastaven výstup Done). Pak se začíná zpracovávat další příkaz a výstupy se zase shodí. Chybové kódy jsou popsané v nápovědě ke knihovně a je také možné zavolat funkci GetModbusErtTxt, která vrací popis chyby jako textový řetězec. Např.:

    IF MdbMas.Done and MdbMas.ErrCode <> 0 THEN
       GetModbusErrTxt(ErrorCode := MdbMas.ErrCode, ErrTxt := ErrorDesc );
    END_IF;

V proměnné ErrorDesc pak zůstane uchován popis poslední chyby. Jestli odpovědi od podřízené stanice nechodí kvůli tomu, že je poškozená linka nebo má problém samo zařízení, to nezjistíte, obojí skončí chybou timeout, ale chybu parity, dotaz na špatnou adresu apod. z toho zjistíte. 

Vaše odpověď

Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.