2台机器人基于modbus的M变量交互通讯


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)
点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
471
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
举报
请选择举报理由
举报
举报说明