我们搞工控的,每次用到新的知识点难免会遇到一些挫折。
今年碰巧项目用到发那科机器人165F型,项目中机器人与PLC通信必然少不了的,记得之前做项目用到川崎的机器人,当时自己通信的知识不是太好,当时机器人与欧姆龙PLC之间的交互就采用的IO方式,也是第一次用到二进制转换方式让交互的数据不收限制。
最近几年PLC通信用的较多了,自认为比较熟悉了,本项目机器人与PLC的通信方式就采用了MODBUSTCP.
这里需要提示下,发那科机器人目前常见的通信协议都支持,唯独MODBUSTCP是免费的。。。
好了言归正传,能够让发那科机器人与汇川EasyPLC通过MODBUSTCP方式进行通信,我们需要了解PLC的通信配置,机器人的通信配置,机器人通信IO的分配(每个品牌的工控设备对于MODBUS对应自身寄存器的分配均不一样,但都会遵循MODBUS的协议)。
Modbus协议是应用于电子控制器上的一种通用语言,通过此协议,控制器相互之间、控制器与其它设备之间都可进行通讯,此协议是请求/应答的协议,采用主从通讯模式,Modbus支持RS-232、RS-422、RS-485和Ethernet设备。Modbus主要包含Modbus TCP、Modbus RTU与Modbus ASCII三种,本篇文章采用Modbus TCP作为主要讲解内容,其余两者使用的是RS-串口通讯,在报文、数据帧上略有不同。
Modbus TCP本篇文章只涉及I/O信号的读写。
一、Modbus TCP数据的组成 (此处只做简单介绍,部分内容也是借鉴于网络)
1、Modbus TCP = 表头 + 功能码 + 数据区 方便简写:RO-只读,WO-只写,RW-读写
表1-1 MPAB(报文头) | ||||
名称 | 标识 | 标志协议 | 长度 | 单元标识符 |
字节 | 2 Byte | 2 Byte | 2 Byte | 1Byte |
含义 | 报文序号(任意) | 固定为00 00 | 数据位长度 | 设备地址 |
表1-2 PDU(帧结构) | ||
功能代码 | 功能码 | 对应机器人 单位<信号>权限 |
01 | 线圈寄存器读取 | 1位<DI>RO |
02 | 分离输入寄存器读取 | 1位<DO>RO |
03 | 保持寄存器读取 | 16位<DO/DI>RO |
04 | 输入寄存器读取 | 16位<DO>RO |
05 | 线圈寄存器写入(1Bit) | 1位<DI>WO |
06 | 保持寄存器写入(1Bit) | 1位<GO/GI>WO |
16 | 多保持寄存器写 | 16位<GO/GI>WO |
23 | 多保持寄存器读写 | 16位<GO/GI>RW |
2、MODBUS功能码简单介绍
线圈寄存器:开关量,支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码:01、05
离散输入寄存器:相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,功能码:02
保持寄存器:单位为两个byte,可以存放具体的数据量,并且可读写。比写也分为单个写和多个写,功能码有对应的三个:03、06、16、23
输入寄存器:和保持寄存器类似,只支持读。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值。对功能码:04
表1-3 数据位组成结构 | |||||||||
MPAB | PDU | ||||||||
请求 | 标识 | Modbus | 长度 | 设备地址 | 功能 | 起始地址 | 点数 | ||
字节数 | 2 | 2 | 2 | 1 | 1 | 2 | 2 | ||
响应 | 标识 | Modbus | 长度 | 设备地址 | 功能 | 字节数 | 数据1 | .... | 数据2 |
字节数 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
3、发那科机机器人IO地址范围,目前使用后的结论,此对应内容基本用不到。
表1-4 发那科机器人地址范围 | ||
离散输入寄存器 | 地址 | Robot I/O |
0 | DO[1] | |
1 | DO[2] | |
2 | DO[3] | |
... | ... | |
线圈寄存器 | 0 | DI[1] |
1 | DI[2] | |
2 | DI[3] | |
... | ... | |
保持寄存器 | 0 | DI[1] - DI[16] |
1 | DI[17] - DI[32] | |
2 | DI[33] - DI[48] | |
... | ... | |
保持寄存器 | 10000(RO) | DI[17] - DI[32] |
10001(RO) | DI[33] - DI[48] | |
10002(RO) | ... |
二、通讯测试
二(1)Modbus TCP机器人只能作为服务端,在进行测试时需要对机器人进行网络配置:
通信配置打开步骤:>>点击菜单MENU>>选择设置>>选择主机通信>>确认ENTER >>进入通信设定界面>>给机器人设定自己规划的IP地址即可。其他项根据需要选择设定。
二(2)Modbus TCP配置 依次按下 MENU - IO - Modbus TCP进入tcp配置界面:
二(3)机器人IO分配 依次按下 MENU - IO - 数字 进入IO监控配置界面-按下分配进入IO分配界面-利用IN/OUT进行切换DI和DO。
第4栏 状态 显示黄色PEND 代表配置正常,需要系统重新启动。状态显示ACTIV表示激活中。
二(4)利用ModbusPoll测试工具 进行ModbusTcp/IP测试读取数据,这里我已经配置了机器人组通信(一个组==16个位),就没有测试单个的IO读写,其他的需求小伙伴们自己动手测试吧。