要使用MODBUSTCP通讯协议就必须了解它的信息帧格式:
MODBUSTCP是结合了MODBUS协议和TCP/IP网络标准,它是MODBUS协议在TCP/IP上的具体实现,数据传输时在TCP报文中插入MODBUS应用数据单元,Modbus协议赋予TCP端口号为502,这是目前在仪表与自动化行业中唯一分配到的端口号,所使用的硬件接口为以太网接口。
MODBUSTCP信息帧包含了报文头、功能码、数据3部分内容,其中消息报文头由四部分构成,共7个字节,与MODBUSRTU相比,MODBUSTCP中不存在CRC校验,校验部分由TCP/IP协议和以太网的链路层来完成。

传输标符:2个字节长度,标志Modbus询问/应答的传输,一般默认是0000
协议标识符:2个字节长度,0000表示Modbus协议
数据长度:2个字节长度,即从单元标识符以后的数据个数
单元标识符:1个字节长度,相当于MODBUSRTU通信中的从站站号
功能码:1个字节长度。可用于读取设备数据或者往设备中写入数据。
数据:根据读取数据长度的不同。由n个字节组成。

1.MODBUS/TCP基于以太网,故ABB机器人在使用时需要有616-1PCINTERFACE选项。(在机器人主菜单中,选择“系统信息”查看选项)

2.MODBUS/TCP通讯介质使用普通网线即可,但是网线连接的是机器人控制器的“X5”网口中。

1.ABB机器人现在要读取调试工具中的保持寄存器的值,从第6字节开始读取2个字,使用的功能码为0X03。(调试工具上设定IP地址127.0.0.1,端口号502)
2.读取到了数据在机器人的示教器上显示
3.机器人作为客户端,调试工具作为服务器
机器人端程序编写:
VARsocketdevsocket1;定义一个套接字数据类型Socket1
VARbytes_byte{12};定义一个字节数据类型数组s_byte{12}
VARbyterecv_byte{13};定义一个字节数据类型数组s_byte{13}
VARnums_num;定义发送数据个数s_num
VARnumrecv_num;定义接收数据个数recv_num
PROCmain()
SocketClosesocket1;关闭套接字
SocketCreatesocket1;创建套接字
SocketConnectsocket1,"127.0.0.1",502;指定连接的IP地址和端口号
s_byte{1}:=0X00;传输标识符
s_byte{2}:=0X00;传输标识符
s_byte{3}:=0X00;协议标识符
s_byte{4}:=0X00;协议标识符
s_byte{5}:=0X00;长度
s_byte{6}:=0X06;长度(0006代表的是6个字节长度)
s_byte{7}:=0XFF;单元标识符(任意设置)
s_byte{8}:=0X03;功能码
s_byte{9}:=0X00;数据地址
s_byte{10}:=0X06;数据地址(寄存器地址)
s_byte{11}:=0X00;数据个数
s_byte{12}:=0X02;数据个数
s_num:=12;
recv_num:=13;
WHILETRUEDO死循环不断收发数据
SocketSsocket1\data:=s_byte\NoOfBytes:=s_num;
注:\data代表的是数组的格式发送字节数据类型
\NoOfBytes:指定发送字节数
SocketReceivesocket1\data:=recv_byte\NoRecBytes:=recv_num;
TPErase;
TPWrite"serverwrote-"+ValToStr(recv_byte);
WaitTime2;
WHILEPROC在MODBUDS调试工具中设置好IP地址和端口号(127.0.0.1和502),地址0006和0007这两个地址的值,分别手动赋值是5和8。

在MODBUDS调试工具“消息”这一栏中可以看到信息帧数据(蓝色字体代表机器人给到调试工具的,红色字体代表调试工具给到机器人的)

蓝色字体(从左往右):
0000传输表示符
0000协议表示符
0006数据长度
FF:单元标识符
03:功能码
0006:寄存器地址
0002:数据个数
红色字体(从左往右):
0000:传输表示符
0000:协议表示符
0007返回数据长度
01:单元标识符
03:功能码
0004:4个字节
0005:第一个数据值
0008:第二个数据值
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系