EC机器人系列2台机器人基于modbustcp交互

晓艾 5 2025-06-25 10:11:13 编辑

1.  简介

两台EC机器人通过MODBUSTCP通讯进行交互,可以通过1#机器人读写2#机器人的M变量

实现类似IO通讯的效果。

例如1#机器人的M560-M575作为本机的输出,写入2#机器人的M560-M575的值。

1#机器人的M576-M591做为本机的输入,读取2#机器人中的M576-M591的数值。

EC机器人脚本手册:下载中心_机器人技术-艾利特机器人

EC程序备份与恢复:EC机器人数据备份与恢复-技术文档-艾利特机器人

2.  操作流程

两台机器人IP设置为同一网段:

1#机器人192.168.1.200 2#机器人192.168.1.201

两台机器人之间通过网线相互连接。

lua脚本案例:下方脚本导入到1号机器人中,连接成功后,就可实现两台机器人通过ModbusTCP相互控制M线圈。

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)

   elite_print("连接失败")

until(ret ~= -1)

   elite_print("连接成功")

 

t200l = {}

t200s = {}

while(1) do

   --读取另外一台机器人的线圈地址

   ret201l = modbus_read_bits(ctx,startl,lenl)

   ret201s = modbus_read_bits(ctx,starts,lens)

   --for循环获得当前机器人的M线圈

   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循环判断两台机器人对应线圈数值是否相同,不相同则把1#机器人的值写入2#机器人中

   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循环判断两台机器人对应线圈数值是否相同,不相同则把2#机器人的值写入1#机器人中

   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)

上一篇: CS机器人急停无法消除问题快速排查方案
相关文章