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地址位40001-40002
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编程没有这个问题,具体原因有知道的大神还请告知。