• 制作日期:2020/02/25
  • 硬件配置:CJ2M-CPU31 , CJ2M-CPU31
  • 软件配置:CX-Programmer
  • 实现功能:通过网口用Cmnd通信,实现CJ间的数据读写 (也可以用于CP系列网口通信)


1.硬件接线:

  1. <br /> ![image.png](https://cdn.nlark.com/yuque/0/2020/png/974473/1582680571459-5ca3bc17-1741-483c-b254-5f6d88ca9f52.png#align=left&display=inline&height=581&margin=%5Bobject%20Object%5D&name=image.png&originHeight=581&originWidth=975&size=120619&status=done&style=none&width=975)
主站 从站
IP:192.168.250.2 IP:192.168.250.3
节点号:2 节点号:3

注意:必须把PLC节点号设为和IP地址最一位一样,否则会连接不上;



2.FINS协议介绍

FINS通信中则是运用网络号、节点号以及单元号来对不同设备(包括PLC、PC等现场设备)执行地址定义的,FINS有FINS/TCPFINS/UDP两种方式。

Fins格式如下:3.png

从ICF到SID属于Fins的报头CMND功能块会自动删除,不需要用户填写,用户只需要确认后面的格式

命令帧格式:
11.png

1) Command Code:功能码,用于读写内存数据,两个字节
2) Memory area code:内存区域码,用于指定D区,CIO等内存,一个字节
3) 开始读写的首地址,三个字节
4) 读写通道的数量,两个字节
5) 用写入功能码时,需要的数据,字节数根据通道数量乘2

响应帧格式:

22.png

1) Command Code:功能码,用于读写内存数据,两个字节
2) End Code: 结束码,表示通信是否异常
3) 读取数据,如果用的是写入功能码;则不会有这几个数据,字节数根据读取的通道数乘2


常用的功能码:0101 读,0102 写
内存区代码:82 D区,30 CIO区

功能码和内存区代码,详细请看Fins通信说明
END CODE 为00时通信正确,详细错误代码请看Fins通信说明


3.程序

用到的功能块
111.png

本案例指令 保存地址开头是D100通道,响应保持地址开头D200
D300 为功能块控制数据
21.png
详细请看CP/CJ指令手册

如:读取节点号3 D0一个通道
命令指令 01 01 82 00 00 00 00 01

触发后可以看到D200 收到数据
响应**指令** 01 01 00 00 00 17

将以上数据从D100开始填入
1.png


根据CP/CJ指令手册D300 填入发送字节数,D301接收字节数
2.png

D302 #0000 第一个0固定,第二位不实用串行端口,目标地址填 00,D303 #0300 目标单元地址就是指从站的节点号,后面一个字填00
3.png4.png

触发前从D200往后3个通道都是0
5.png

第三个通道的未读取数据和节点3 PLC的D0数据一致 D201为00 00 证明读取正常
6.png

如:写入节点号3 D0一个通道
命令指令 01 02 82 00 00 00 00 01 02 20
主站响应区收到
响应指令 01 02 00 00

触发通信前从站D0为0 7.png

触发通信后,从站D0 变为#0220
8.png

4.案例程序

Cmnd网口.zip