EC机器人MODBUS_RTU
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.接线方法
在控制柜接口处我们可以看到RS485接口,该接口就是我们的485接口,modbus_rtu时用到该接口,其中针脚3对应485-,针脚4对应485+,如下图。


详细接线方法参考以下流程:
1、焊接对应针脚

2、将针脚之间用绝缘胶带或者热缩管进行隔离开,防止粘连。

3、 插回控制柜。

3.modbus_rtu主站使用方法
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
3-2.操作流程
本文以机器人作为主站与网络助手进行ModBus_RTU通讯为示例,进行详细操作讲解
3-2-1.机器人端配置
将机器人端485线接好,目前设置波特率为115200,将机器人脚本配置好,如下图所示

3-2-2.助手配置连接

3-2-3.连接成功提示

3-2-4.读取线圈

读取600开始的5个线圈,分别将线圈数值存入虚拟输入M920-M924中

助手中将线圈600、602、604分别置为1

示教器中查看对应的M920、M922、M924分别状态为1
读取线圈功能及指令正常
3-2-5.写入线圈
写入线圈指令及定义如下脚本所示

写入单个和多个线圈指令,定义将M530数值写入到线圈530,M531-M534数值分别写入线圈531-534中

机器人端将虚拟输出M530、M531、M533、M534置为1

助手中可以查看到线圈530、531、533、534状态都为1
写入线圈功能及指令正常
3-2-6.读取寄存器
读取寄存器指令及定义如下脚本所示

读取400开始的5个寄存器,分别将寄存器数值存入全局变量I000-I004中

助手端将400寄存器设置为123,401寄存器设置为23,402寄存器设置为-345,403寄存器设置为-876,404寄存器设置为2345

机器人端可在全局变量中查看I000-I004与寄存器400-404数值一致
读取寄存器功能及指令正常
3-2-7.写入寄存器
写入寄存器指令及定义如下脚本所示

机器人端I010-I014的5个全局变量,分别将数值写入到寄存器500-504中

机器人端分别将I010-I014全局变量设置为:236,-659,589,489,-3528

助手端可查看500-504的寄存器数值,同时与全局变量I010-I014数值一致
写入寄存器功能及指令正常
4. modbus_rtu从站使用方法
4-1.modbus_rtu从站介绍
艾利特机器人支持ModBus TCP从站以及ModBus RTU从站,均可通过示教器界面直接进行配置。
目前Elite机器人支持对虚拟变量M的操作,M为BIT型变量。单个M变量为线圈,多个连续的M变量可为寄存器 。
其中M变量支持的功能码如下图:

ModBus RTU物理层接口为串口形式。
艾利特控制器 485 端口为特殊的接插件,针脚定义为:2 为 GND,4 为 485+,3 为 485-,连接参数上需要设置从站号、波特率、数据位长度、校验方式和停止位长度,以上参数可通过示教器界面进行配置。可通过示教器扩展-Modbus从站中进行配置选择,如下图所示

4-2.使用技巧
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.在数据多为小数时,为方便数据的处理,可以将数据进行整体扩大一定倍数后进行传输
4-3.操作流程
本文以机器人作为从站与网络助手进行ModBus RTU通讯为示例,进行详细操作讲解
4-3-1.助手配置、通讯
将机器人端485线接好,目前波特率为115200,助手端连接对应设置参数即可,如下图所示

连接成功后,如下图所示

4-3-2.虚拟M变量读写
通讯成功后进行M变量的读写,无需其他设置,可直接通过对应线圈地址读取写入
示例1:机器人M变量写入,助手线圈读取
定义机器人虚拟输出M528及M534写入为1

网络助手端直接读取528及534当前状态为1

示例2:机器人M变量读取,助手线圈写入
定义网络助手端线圈912-917写入为1

机器人端虚拟输入M912-M917此时状态都为1

4-3-3.寄存器读写
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寄存器中,网络助手可直接在此寄存器直接读取,如下图所示


5. 常见问题解答
5-1.问:通讯收发数值不正确或者连接不上
答:检查一下485接头是否接好,焊接地方有没有粘连,使用环境是否存在电磁干扰。或者把485线缆调换一下。
5-2.问:寄存器能否支持带小数点位数值
答:modbus协议寄存器都是整数类型的,需要进行带小数点的数据传输可以先将数值乘以一个倍数,传输后再进行整除。
6.附录
modbus_slave.lua
modbus_master.lua