1#机器人 希望读写 2#机器人的m变量,达到实现io通讯效果(不需要io接线,基于modbus),
例如本机的m560-m575作为本机的do,控制2#机器人的m560-m575(2#机器人的di)
2#机器人的m576-m591作为2#机器人的do,控制本机的m576-m591(作为本机的di)。
可以使用以下lua代码实现:
sleep(1) ip = "192.168.1.201" -- 对方机器人IP地址 port = 502 startl = 560 -- 本机写入对方机器人的起始M地址 lenl = 16 -- 本机写入对方机器人的M 个数 starts = 576 -- 对方写入本机机器人的起始M地址 lens = 16 -- 对方写入本机机器人的M个数 ctx = modbus_new_tcp(ip,port) repeat ret = modbus_connect(ctx) until(ret ~= -1) t200l = {} t200s = {} while(1) do ret201l = modbus_read_bits(ctx,startl,lenl) ret201s = modbus_read_bits(ctx,starts,lens) for i=1,lenl,1 do t = i+startl-1 name = "M"..tostring(t) t200l[i] = get_robot_io_status(name) end for i=1,lens,1 do t = i+starts-1 name = "M"..tostring(t) t200s[i] = get_robot_io_status(name) end for i=1,lenl,1 do if(t200l[i]~=ret201l[i]) then retl = modbus_write_bit(ctx,i+startl-1,t200l[i]) if(retl == -1) then elite_print("Write1 Wrong") end end end for i=1,lens,1 do if(t200s[i]~=ret201s[i]) then t = 575+i name = "M"..tostring(t) set_robot_io_status(name, ret201s[i]) end end end modbus_close(ctx)