MH0101 SW Mosaic 8. 9. 2023 13:24 30. 8. 2023 16:43

Dobrý den,

po aktualizaci knihovny ModBus na verzi 4.4 přestane fungovat komunikace s PLC Foxtrot, který pravděpodobně používá starší verzi této knihovny (program od PZP Heating) a komunikace konči na chybě "'Checksum error in reception             '". 

Při použití knihovny verze 4.2 tento problém nenastává. Verzi knihovny 4.3 pro ověření nemám k dispozici.

Je možné toto nějak vyřešit, aby bylo možné i vůči starším programům komunikovat s novější knihovnou ?

Děkuji

 

Odpovědi 6

M.B. 2. 8. 2023 12:52

Dobrý den,

mezi verzí 4.2 a 4.4 neproběhly úpravy, které by měly jakýmkoli způsobem ovlivnit kompatibilitu. Jaký z funkčních bloků pro komunikaci používáte? Používáte funkční blok přímo v programu nebo jej používáte skrze jiný funkční blok nějaké uživatelské knihovny?

MH0101 2. 8. 2023 14:18

Dobrý den,

používám funkční blok ModbusTCPmas a to přímo v programu, bez další uživatelské knihovny.

Co a jak je v druhém PLC nevím a nejsem schopen to ani nijak ovlivnit, musel bych vznést dotaz na výrobce.

Pokud ve svém programu použiji knihovnu ve verzi 4.2, tak komunikace funguje, když ten stejný program přeložím s knihovnou 4.4, vrací uvedený funkční blok zmíněnou chybu.

M.B. 3. 8. 2023 16:47

Dobrý den,

chybu kterou popisujete by blok ModbusTCPmas neměl nikdy vracet neměl. Crc se vysílá a kontroluje pouze při komunikaci Modbus RTU po seriové lince.

Pokud si dáte instanci funkčního bloku do okna Data, můžete zkontrolovat zda v proměnné <Jméno instance>.modbusRTU.isTcp je hodnota 1.

MH0101 3. 8. 2023 17:13

Výpis modbusRTU:

proměnná isTcp zde vůbec není, jediná zmínka v parametrech o TCP je v RecvFrom, kde je standardně 1 při použití s knihovnou 4.2 a 0 s knihovnou 4.4 

Pouze provádím překlad nezměněného programu, jednou s verzí 4.2 a pak s 4.4, po teplém restartu se při použití verze 4.4 objeví uvedená chyba, u verze 4.2 pak komunikace normálně funguje. S knihovnou 4.4 funguje i proti jinému ModBus ( Victron Cerbo GX), nefunguje pouze proti jinému foxtrot.

M.B. 7. 8. 2023 17:21

Proměnná isTcp je ještě o něco hlouběji, až za bloky SendTo a RecvFrom a její hodnota se přepisuje do proměnné tcp v bloku RecvFrom. Pokud je v bloku RecvFrom.tcp rovno 0 pak musí být i isTcp nulové.

Otázka je proč došlo k nastavení hodnoty 0, protože hodnota 1 se v bloku při změně programu "natvrdo" zapisuje jednička.

M.B. 30. 8. 2023 16:43

Nalezl jsem hazard v inicializaci příznaku isTcp. Ta neproběhne v případě, že se blok během restartu nevolá. Myslím, že tento hazard souvisí s problémem, který jsme spolu řešili.

Verze 4.5 knihovny ModbusRTU, která problém řeší, je dostupná přes Nástroje > Mosaic Updater.

Tento dotaz je vyřešený.