zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

西门子S7-1200与FUNUC机器人MODBUS TCP通信

2023-04-18 16:43:51 时间

PLC与机器人MB通信时,funuc作为服务器端,1200作为客户端。1200向funuc发送读写请求,funuc应答后PLC接收funuc的数据,实现数据的传递。

注意:Modbus不能同步进行通信,主机在同一时间内只能向一个从机发送请求,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信。从机不会自己发送消息给主站,只能回复从主机发送的消息请求

一、机器人端设置

1、硬件连接,此处我用的事端口1

IP设置:MENU-设置-设置2-主机通讯,选择TCP/IP设置

 在此界面可以设置FUNUC的IP,以及固定要连接的PLC的IP,防止未授权的主机连接机器人。

端口设置:MENU-下一页-系统-变量进入MODBUSTCP设置,在PORT参数中修改端口号

 

2、PLC要读写的机器人的寄存器数值设定:此设定值要大于PLC要读写的存储器数量

MENU-IO-MODBUS TCP进入,此处可以设置MODBUS TCP 通信参数

比如我要写UI【1】-UI【20】需要3个16位存储器,还要写6个GI存储器,此处输入字数位4就显然不够了 可以设大一点

 

 3、机器人存储器分配:MODBUS TCP通信时机器人机架号固定为96,槽位号为1

UO需要两个存储器 对应的MB地址位30001-30002

UI需要两个存储器 对应的MB地址位40003-40004

GI需要6个存储器 对应的MB地址位40005-40010

 

 

二、PLC端设置 

1、PLC 的IP应与机器人处于同一IP段,在PLC属性里可以设置其IP

2、 PLC读写机器人数据需调用MB_CLIENT指令,位置在指令-通信-其它中可找到

 MB块CONNECT的参数如图所示

 此处需注意的是每一个从机连接的ID是唯一的 不同的从机或者PLC还需要做服务器时ID不能相同,且PLC做服务器端时,CONNECT参数中设置的目标客户端的IP既可以是客户端的IP也可以全设为0,但是端口一定是目标客户端的端口。

 

 3、MODBUS TCP功能码如下图所示,可在博途的系统帮助中找到

PLC读写FUNUC数据时主要是以下几个方面:

①PLC读取FUNUC UO【1】-UO【18】状态:用的是MODBUS通信中04功能码, MB块MB_MODE参数设置为0,MB_DATA_ADDR参数为30001此处不能为40001

 ②PLC读取FUNUC UI【1】-UI【20】状态:用的是MODBUS通信中03功能码, MB块MB_MODE参数设置为0,MB_DATA_ADDR参数为40003

 ③PLC写FUNUC UI【1】-UI【20】状态:用的是MODBUS通信中16功能码, MB块MB_MODE参数设置为1,MB_DATA_ADDR参数为40003

④PLC向机器人传递坐标值,我用的是FUNUC的GI存储器存储PLC传送的坐标值:用的是MODBUS通信中16功能码, MB块MB_MODE参数设置为1,MB_DATA_ADDR参数为40005

由于FUNUC 每一个GI存储器最大是16位而不是32位存储器,所以PLC如果向FUNUC发送实数坐标时,应把整数和小数部分转化为整数(乘以10的N次方,N为小数位数),传递给FUNUC两个GI存储器,FUNUC接收坐标数据后再在程序中转化为一个实数

 

注意:由于FUNUC端口号唯一,因此PLC对机器人进行多通信请求的时候(以上4个每一个都可以作为一个通信请求)必须采用轮询的方式: 此处我调用了多个MB块,以“DONE”为读写数据的完成标志位,一个块完成后再启动下一个块。不用固定存取器存储MB_DATA_ADDR等参数,调用一个MB块,赋值给这些存储器而是采用多个块的原因是跑程序时发现“DONE”信号触发传递MB_DATA_ADDR等参数后经常出现端口冲突的报警,而采用SCL编程没有这个问题,具体原因有知道的大神还请告知