EC机器人ModbusTCP通讯
1. 简介
ModBus是一种串行通信协议,一种标准的工业通信协议,同时是目前工业电子设备之间常用的连接方式。
艾利特机器人分别支持ModBus主、从站功能,从通讯的形式上分为MoBus TCP和ModBus RTU,其中ModBus从站功能通过配置即可。
通过ModBus主站功能,机器人可以向外部设备读取写入数据,已达到数据交互和逻辑控制的用途。
艾利特机器人的ModBus主站同时也支持ModBus RTU 和 ModBus TCP,其中ModBus TCP功能需要连接以太网接口,而ModBus RTU的硬件接口形式分为控制器485口,工具末端485口。
ModBus主站功能通过lua脚本实现,可以参考EC-lua手册进行使用。其中MODBUS MASTER为已经封装的接口,用户只需传入相应参数即可;如有其他特殊协议要求,可以使用TCP/UDP通讯、485通讯、TCI通讯(工具末端485)和232通讯等。
2. 操作流程
2-1. 配置机器人MODBUS_TCP
2-1-1. 接入控制柜网口,如下图。
2-1-2. 配置机器人IP地址:
登录管理员模式:密码333333--------点击系统-----系统配置-------网络配置-----设置IP--点设置
2-1-3. 配置电脑IP
2-1-4. 启用示教器中modbusTCP设置
2-2. modbus_TCP从站使用方法
2-2-1. 作为从站并通过以太网连接各种 Modbus TCP 主站设备进行通信,协议的帧
规格如下图所示:
modbus功能码:
2-2-2. 机器人与通讯助手通讯
配置通讯助手
2-2-3. 读写线圈操作:
机器人M400变量的数据
2-2-4. 读写机器人寄存器操作:
1).机器人作为从站可通过脚本直接读取写入寄存器数值,可将数值转化为全局变量,在示教器上进行显示或者调用
2).脚本指令分为两种,第1种是对应获取接口0-191,设置接口66-191,此接口可控制虚拟输入输出M变量,如下图所示
3).第2种读取额外接口192-575,设置接口300-477,具体寄存器地址可参考通讯手册
4).第1种指令和第2种指令,建议用户使用第2种指令更方便快捷,第1种指令可直接控制M变量,艾利特modbus寄存器分为8位和16位,需要在兼容模式下更改,否则容易将机器人寄存器地址和网络助手地址混淆。第2种指令本身设置就是16位寄存器,无需考虑兼容模式下的更改情况
5).下面以第2种寄存器为示例脚本进行数据的读写
机器人读取寄存器300-304寄存器数值同时存入到I0-I4寄存器中,脚本如下
通过助手向寄存器300-304赋值,可通过示教器查看I0-I4数值,确实数值是否正确,如下图所示
6).机器人通过全局变量I10-I14,将数据写入寄存器320-324,脚本如下所示
通过机器人向I10-I14全局变量赋值,可将数值存入到320-324寄存器中,网络助手可直接在此寄存器直接读取,如下图所示
2-3. modbus_TCP主站使用方法
2-3-1.指令介绍
ModBus Master接口常用获取modbus、连接modbus、关闭modbus、设置slave、读取单个线圈、写入单个/多个线圈、读取单个寄存器、写入单个寄存器等指令,本文主要讲解以上指令,具体指令详解如下图所示,其他指令也可参考EC-lua手册ModBus Master章节
以下为读取写入相关指令
modbus_read_bits 读取线圈指令,功能码01
modbus_write_bit 写单个线圈指令,功能码05
modbus_write_bits 写多个线圈指令,功能码15
modbus_read_register 读单个寄存器数值。功能码03
modbus_write_register 写单个寄存区数值,功能码06
2-3-2.操作流程
本文以机器人作为主站与网络助手进行ModBus_TCP通讯为示例,进行详细操作讲解
2-3-2-1.机器人端配置
将机器人脚本配置好,如下图所示
2-3-2-2.助手配置连接
2-3-2-3.连接成功提示
2-3-3-4.读取线圈
读取600开始的5个线圈,分别将线圈数值存入虚拟输入M920-M924中
助手中将线圈600、602、604分别置为1
示教器中查看对应的M920、M922、M924分别状态为1,读取线圈功能及指令正常
2-3-2-5.写入线圈
写入线圈指令及定义如下脚本所示
写入单个和多个线圈指令,定义将M530数值写入到线圈530,M531-M534数值分别写入线圈531-534中
机器人端将虚拟输出M530、M531、M533、M534置为1
助手中可以查看到线圈530、531、533、534状态都为1,写入线圈功能及指令正常
2-3-2-6.读取寄存器
读取寄存器指令及定义如下脚本所示
读取400开始的5个寄存器,分别将寄存器数值存入全局变量I000-I004中
助手端将400寄存器设置为123,401寄存器设置为23,402寄存器设置为-345,403寄存器设置为-876,404寄存器设置为2345
机器人端可在全局变量中查看I000-I004与寄存器400-404数值一致,读取寄存器功能及指令正常
2-3-2-7.写入寄存器
写入寄存器指令及定义如下脚本所示
机器人端I010-I014的5个全局变量,分别将数值写入到寄存器500-504中
机器人端分别将I010-I014全局变量设置为:236,-659,589,489,-3528
助手端可查看500-504的寄存器数值,同时与全局变量I010-I014数值一致,写入寄存器功能及指令正常
3. 常见问题解答
1. M0-M527,M1472-M1535为系统使用,只能读取状态,通过示教器可输入的 M 变量范围为 528-799。
2. M 变量的线圈地址即为变量的序号地址。
3. 兼容模式中勾选ModBus:M 变量的寄存器地址从M0 开始,每连续 的16个 M 变量形成一个寄存器地址,例如M0-M15,寄存器地址为 0x0000;M16-M31,寄存器地址为0x0001,以此类推; 兼容模式中不勾选ModBus:M 变量的寄存器地址从M0 开始,每连 续的 8个 M 变量形成一个寄存器地址,例如M0-M7,寄存器地址为0x0000;M8-M15,寄存器地址为 0x0001,以此类推。
4. ModBus 协议中一个寄存器为 16 位变量,因此对 M 变量的一个寄存器地址进行操作,实际操作的是连续的 16 个 M 变量。
5.在数据多为小数时,为方便数据的处理,可以将数据进行整体扩大一定倍数后进行传输