一、通过通信协议进行通信
1、先根据操作文档进行基本操作
2、打开通讯协议支持功能并设置
3、Request\Normal response\Error response 全部可输入选项,输入D2进行设置
4、再次操作“模块写入”
二、连接设备的方式
1、连接方式的区别与选择
对象设备名内容 | 内容 |
Active连接设备 | 在通过CPU模块对对象设备进行打开处理(Active打开)、通过TCP/IP通信的情况下选择。 |
Unpassive连接设备 | 在接收来自于不确定的对象设备的打开处理(Unpassive打开)、通过TCP/IP通信的情况下选择。 |
Fullpassive连接设备 | 在接收来自于确定的对象设备的打开处理(Fullpassive打开)、通过TCP/IP通信的情况下选择。 |
如果外部设备非三菱设备(或没有CPU模块的设备),应该选择Unpassive或Fullpassive(后者需要确定设备的端口),因此这里应该选择Unpassive方式,设置方式如下:
2、烧录程序到CPU后,使用TCP&UDP工具进行模拟连接
如图,根据上述PLC设备的设置,连接FX5U成功
三、Unpassive开放方式socket编程
1、以太网端口配置
2、先了解相关指令与回路符号
3、梯形图程序
通过程序编写,确实已经通讯上了,并且能够接收数据,只是PLC上亮起了ERR灯。调试时,貌似运行挺正常的,先暂时放放,不用管他。
4、先分析一下程序
SD10680.0 开放完成信号之一,指的是关闭/开放未完成
MOVP H0 D200 数据传输指令,即将H0数据(16进制的0)传给D200
SP.SOCOPEN "U0" K1 D200 M500 其中,"U0"为虚拟,K1为连接编号(1~8),D200的值不同则含义不同(0:执行型/结束型,1:结束状态,7~9:禁止使用,2:通信协议的使用用途 ...),M500完成时会被标记成ON状态
5、小实验:将上述程序直接将socket通信替换成通信协议的配置
四、MC-3E协议的梯形图编程
1、需求描述
(1)设置PLC为MC协议的主站,所有未知的设备可通过MC协议连接该主站
(2)未知的设备可以通过TCP模拟工具发送请求,并捕获报文
(3)MC协议采用3E帧的方式
2、设置以太网端口
如图,依旧采取Unpassive的方式连接设备,通信手段为通信协议,协议为TCP,这样可以满足PLC的主站需求。
3、实验一:不写任何程序,直接烧录
(1)如图,使用TCP测试工具能连接
(2)因为没有写任何协议,因此只能连接
4、实验二:编写简单的通信协议
(1)实现步骤
(2)协议字段解释
(3)自定义协议
我们要做的是测试工具发送16进制的12,PLC返回34。
①新建
②请求
③响应
(4)不写PLC程序,直接跑PLC
依旧是能连接,且在发送12后不返回数据
(5)尝试写程序,未能实现自定义程序
(6)直接使用FX5U以太网MC协议,并进行直接监控
①使得FX5U作为服务端,这样就不用写MC协议的通信协议了,下面的SLMP就是兼容MC协议的,请求端发送报文如果是3E帧,那么返回的也会是3E帧响应数据。
②监控PLC数据的梯形图程序
③发送报文进行验证
请求报文:50 00 00 FF FF 03 00 0E 00 10 00 01 14 00 00 58 1B 00 A8 01 00 0D 00
响应报文:d0 00 00 ff ff 03 00 02 00 00 00
如图,监视写入模式下,能够捕获到请求的数值 0D 00,就是58 1B 写入了 13。
备注,0D00是低位在前,高位在后,因此16进制数值是 000D(13),同理58 1B就是D7000。
相关分析(只要看红色部分,其他部分是我司的对应字段,无需了解)如下:
至此,我们调通了PLC作为服务端的MC协议3E帧,客户端的还在研究,暂不处理。