Logic Machine Forum
is modbus device online - 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: 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!