LogicMachine Forum
is modbus device online - Printable Version

+- LogicMachine 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: is modbus device online (/showthread.php?tid=2828)



is modbus device online - benanderson_475 - 04.09.2020

Is there a way in lua to return true or false if a specific modbus device is online? say modbus device at address 3?

Many thanks


RE: is modbus device online - Daniel - 04.09.2020

You can check it like this
Code:
-- First parameter is slave ID, second is optional RTU port number (1, 2 or 3; default is 1) function checkrtu(slave, portnr)   local query = 'SELECT active FROM modbus_devices WHERE proto="rtu" AND slave=? AND portnr=?'   if type(portnr) == 'number' and portnr == 2 or portnr == 3 then     portnr = portnr - 1   else     portnr = 0   end   local res = db:getone(query, slave, portnr)   return toboolean(res) end function checktcp(ip, port)   local settings, res   settings = tostring(ip) .. ':' .. tostring(port)   res = db:getone('SELECT active FROM modbus_devices WHERE proto="tcp" AND settings=?', settings)   return toboolean(res) end



RE: is modbus device online - benanderson_475 - 08.09.2020

(04.09.2020, 07:29)Daniel. Wrote: You can check it like this
Code:
-- First parameter is slave ID, second is optional RTU port number (1, 2 or 3; default is 1) function checkrtu(slave, portnr)   local query = 'SELECT active FROM modbus_devices WHERE proto="rtu" AND slave=? AND portnr=?'   if type(portnr) == 'number' and portnr == 2 or portnr == 3 then     portnr = portnr - 1   else     portnr = 0   end   local res = db:getone(query, slave, portnr)   return toboolean(res) end function checktcp(ip, port)   local settings, res   settings = tostring(ip) .. ':' .. tostring(port)   res = db:getone('SELECT active FROM modbus_devices WHERE proto="tcp" AND settings=?', settings)   return toboolean(res) end

Many Thanks, it works perfectly  Smile


RE: is modbus device online - balatis - 13.09.2020

(04.09.2020, 07:29)Daniel. Wrote: You can check it like this
Code:
-- First parameter is slave ID, second is optional RTU port number (1, 2 or 3; default is 1) function checkrtu(slave, portnr)   local query = 'SELECT active FROM modbus_devices WHERE proto="rtu" AND slave=? AND portnr=?'   if type(portnr) == 'number' and portnr == 2 or portnr == 3 then     portnr = portnr - 1   else     portnr = 0   end   local res = db:getone(query, slave, portnr)   return toboolean(res) end function checktcp(ip, port)   local settings, res   settings = tostring(ip) .. ':' .. tostring(port)   res = db:getone('SELECT active FROM modbus_devices WHERE proto="tcp" AND settings=?', settings)   return toboolean(res) end
Hi
As i can get the result in a group address??
Thanks in advance


RE: is modbus device online - Erwin van der Zwart - 13.09.2020

grp.checkwrite('1/1/1', checkrtu(1, 1))

or

grp.checkwrite('1/1/1', checktcp('192.168.0.11', 502))


RE: is modbus device online - balatis - 13.09.2020

(13.09.2020, 17:57)Erwin van der Zwart Wrote: grp.checkwrite('1/1/1', checkrtu(1, 1))

or

grp.checkwrite('1/1/1', checktcp('192.168.0.11', 502))
thanks Erwin!