![]() |
|
MODBUS TCP SLAVE - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Gateway (https://forum.logicmachine.net/forumdisplay.php?fid=10) +--- Thread: MODBUS TCP SLAVE (/showthread.php?tid=4256) |
MODBUS TCP SLAVE - palomino - 22.09.2022 I have this exmple the modbus tcp slave. But when I try to read the log I get an error. why? this is the type error that have * arg: 1 * string: read failed * arg: 2 * string: Bad file descriptor Code: require('luamodbus')
if not mb then
mb = luamodbus.tcp()
end
mb:open('0.0.0.0', 502)
mb:connect()
mb:setslave(2)
mb:setmapping(1, 1, 3300, 1)
function setint64(grpaddr, regaddr)
local value = grp.getvalue(grpaddr) or 0
local raw = knxdatatype.encode(value, dt.int64).dataraw
local r1 = raw:byte(2) * 0x100 + raw:byte(1)
local r2 = raw:byte(4) * 0x100 + raw:byte(3)
local r3 = raw:byte(6) * 0x100 + raw:byte(5)
local r4 = raw:byte(8) * 0x100 + raw:byte(7)
val, err = mb:setregisters(regaddr, r4,r3,r2,r1)
end
function updateregisters()
setint64('32/1/1', 3204)
end
updateregisters()
val, err = mb:readregistervalue(3204, 'int64', 'b')
log (val,err)
if val then
log('read ok', val)
else
log('read failed', err)
endRE: MODBUS TCP SLAVE - admin - 22.09.2022 This is the original example: https://forum.logicmachine.net/showthread.php?tid=4182&pid=27011#pid27011 Yours is modified with master and slave functions mixed together. RE: MODBUS TCP SLAVE AND RECEIVE - palomino - 05.10.2022 Hello. I have a question. I need to send and receive data through the LM in Modbus slave mode. When I write the data to my register, the master can read it, but when the master try to send me a data, doesn't work. I can't read the register. I think that the master can not write me in my register, I always see nill when i try to read. can you help Code: if not mb then
require('luamodbus')
mb = luamodbus.tcp()
res, err = mb:open('0.0.0.0', 502)
res, err = mb:setslave(2)
log("Modbus slave IN : 502/2")
function setintmo(grpaddr, regaddr)
local value = grp.getvalue(grpaddr) or 0
res, err = mb:setregisters(regaddr, value)
end ------- setint(grpaddr, regaddr)
function setintresgis (direc, regist)
local valuer = mb:readregisters(regist)
log (valuer)
if valuer ~= nill then
grp.write(direc, valuer)
end
end --- setintresgis (direc, regist)
function updateregisters()
setintmo('32/1/2', 2)
end --- updateregisters()
function updateinputregisters()
setintresgis('32/1/4',10)
end
mb:setmapping(100, 100, 100, 100)
updateregisters()
updateinputregisters()
end --- mb
mb:handleslave()
curr = os.time()
if curr ~= prev then
updateregisters()
updateinputregisters()
log ('A')
prev = curr
end |