check slave tcp/IP modbus device status - Printable Version +- Logic Machine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: check slave tcp/IP modbus device status (/showthread.php?tid=3003) |
check slave tcp/IP modbus device status - domotiqa - 23.11.2020 Hello, big thank for the script in this thread wich work for rtu and gateway check: https://forum.logicmachine.net/showthread.php?tid=1883&pid=19306#pid19306 I created another one for all of them: Code: function checkAllModbus(resultCheckTemp) In order to see the active status ! It works, but my problem is that with tcp modbus (through a smartlink in tcp/ip modbus). When I setup a powertag for exemple, when the powertag is offline, we have error in modbus error table, but the device don't become inactive, it still active (I think because the smartlink still respond). You can easily test by putting a wrong slave adress ! My device still stay active ! So I can only easily have the smartlink defaut but not the slave device (powertag radio), or I need to put a script to check modbus table error (but my problem is that the customer want only one error (not every time the modbus error table display it). So for 150 device it's a little bit Power consumer... do you have solution ? Here screenshot: Here the result: edit: I don't put the right device on the last screenshot, but it the same for the 24 regards RE: check slave tcp/IP modbus device status - admin - 23.11.2020 This method won't work with TCP-RTU gateway. One solution is to check updatetime value of a linked object periodically and set status if it was not updated for a certain time. RE: check slave tcp/IP modbus device status - domotiqa - 23.11.2020 (23.11.2020, 08:08)admin Wrote: This method won't work with TCP-RTU gateway. One solution is to check updatetime value of a linked object periodically and set status if it was not updated for a certain time. ok, cool it's a way I could do it ! Maybe, put a tag like 'towatch', and check difference betaween date now and uptime Something like this: obj1 = grp.find('x/x/x') objError= grp.find('x/x/x') now = os.time() -- current timestamp in seconds delta1 = now - obj1.updatetime -- last object update relative time if (delta1 > 240) then objError:write(true) end DO you know why it's not implemented ? It works for rtu, and if the gateaway don't respond... Thank you for helping TIPS: https://forum.logicmachine.net/showthread.php?tid=2839&highlight=updatetime RE: check slave tcp/IP modbus device status - admin - 23.11.2020 You should use checkwrite and also send false when there's no error. This will send true when delta is more than 4 minutes, false otherwise: Code: grp.checkwrite('1/1/1', delta1 > 240) Status is not updated because there's a response from the gateway. "Illegal data address" is not a connection error. There's a special error code 11 (Gateway Target Device Failed to Respond) that should have been used for this. RE: check slave tcp/IP modbus device status - domotiqa - 23.11.2020 (23.11.2020, 08:35)admin Wrote: You should use checkwrite and also send false when there's no error. This will send true when delta is more than 4 minutes, false otherwise: ok understood ! Adding a column error in modbus_device or mapping could be a solution... In my case, if I check every adress, it should be too much cpu load no ?? I was thinking to something like this: What's your point ? Code: function checkSlaveTcpModbus(resultCheckTemp) RE: check slave tcp/IP modbus device status - admin - 23.11.2020 Are you sure you need to test a range of 10000 objects? One object per device is sufficient, no need to check all mapped objects for each device. Just make sure that the value is always updated in the specified period, otherwise you might get false error messages. RE: check slave tcp/IP modbus device status - domotiqa - 23.11.2020 Thank you for your help |