欧姆龙PLC的FinsTCP协议

三个流行的PLC:

PLC通讯协议默认IP和端口区别(发错误的报文)
西门子S7-1200S7192.168.1.201 :1022次验证(正常连接后,第一次发不断开,第二次发断开)
三菱Q系列MC192.168.1.250 :4096不验证(正常连接后,怎么发都不断开)
欧姆龙CJ-2M系列FinsTCP192.168.1.14 :96001次验证(正常连接后,第一次发断开)

这里主要写FinsTCP通讯
本机电脑IP:192.168.1.200
PLC IP和端口:192.168.1.1:9600

以下报文都是按16进制发送。

一,握手命令
1、客户端向服务器发送命令00000000:这个命令长20字节,分成5组4字节。分别是:头(FINS) + 长度(0000000C) + 命令(00000000)+ 错误码(00000000) + 客户机节点地址。

46494E53是FINS的ASCII码值,即命令头。
0000000C是命令长度20(这个是按长度后面的命令长度来算,这里即:命令+错误码+客户机节点地址)。
00000000是命令码。
00000000是错误码。
000000C8是客户节点地址,(电脑的IP尾数16进制)。
即: 46494E53 0000000C 00000000 00000000 000000C8

2、PLC回复命令00000001:这个命令的长度是24字节,分成6组4字节。分别是:头(FINS)+ 长度(00000010) + 命令(00000001) + 错误码 + 客户机节点地址 + 服务器地址

46494E53是FINS的ASCII码值,即命令头。
00000010是命令长度24。
00000001是命令码。
00000000是错误码。
000000C8是客户节点地址,即电脑IP地址的末位(电脑的IP尾数16进制)。
00000001是服务器节点地址,即PLC IP地址的末位(电脑的IP尾数16进制)。
即: 46494E53 00000010 00000001 00000000 000000C8 00000001
上面的命令错误代码为0,客户端ip地址200已被服务器01(hex01)成功记录。

注意:如果发生错误,服务器回应的命令会包含错误码,连接断开,端口立刻关闭。当连接建立之后,不要再次发送这个命令,否则服务器会返回03错误码,即不支持的命令。

全部的错误代码如下:

十六进制错误码含义
00000000正常
00000001头不是‘FINS’ (ASCII code)。
00000002数据太长。
00000003不支持的命令。
00000020所有的连接被占用。
00000021制定的节点已经连接。
00000022未被指定的IP地址试图访问一个被保护的节点。
00000023客户端FINS节点地址超范围。
00000024相同的FINS节点地址已经被使用。
00000025所有可用的节点地址都已使用。

二、FINS帧发送命令
如果向服务器发送FINS帧,就要用到这个命令。由于FINS帧长度是12-2012,因此命令长度可变,
格式:头(FINS)+长度+命令(00000002)+错误码+FINS帧
1、FINS帧组成:

组成字节数说明
Header4固定值 46494E53(FINS)
Length4从command命令开始到结束
command4固定值 00000002
Error Code4固定值 00000000
ICF1固定值 80,其中bit0:0表示需要回复,1表示不需要回复;bit7:0表示命令,1表示响应
RSV1固定值 00
GCT1固定值 02
DNA1目标网络号,固定值 00
DA11目标节点号, IP地址最后一位而定 这里是01
DA21目标单元号, 固定值 00
SNA1源网络号,固定值 00
SA11源节点号, IP地址最后一位而定 这里是C8
SA21源单元号,固定值 00
SID1固定值 00
MRC1主请求码
SRC1次请求码,主/次请求码组合:0101是读操作;0102是写操作代码;2301是强制操作代码;
ParameterNN个字节

其中Parameter命令格式:
1、读/写操作

Fins读取数据是在通用命令基础上,将Parameter替换为Area+Address+Length

Fins写数据是在通用命令基础上,将Parameter替换为Area+Address+Length+Value

组成字节数说明
Area1不同存储区值不一样,D区:82(DM存储区代码);W区:B1(W字代码),31(W位代码)
Address3起始地址(2bit)+位地址(1bit)
Length2读取或写入长度
value2写入内容(针对写操作)

回复:

Fins回复读取数据是在通用命令基础上,将Parameter替换为Error Code+Value

Fins回复写数据是在通用命令基础上,将Parameter替换为Error Code

组成字节数说明
Error Code2错误码(先判定错误码,再去读值)
ValueLength*2变量数值

例如:读取D500开始的2个通道:

发送:46494E53 0000001A 00000002 00000000 80 00 02 00 01 00 00 C8 00 00 01 01 82 01F400 0002
接收:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 C0 0002 00 C8 00 00 01 00 00 01 01 00 00 00 00 00 01

2、强制操作

Fins强制操作是在通用命令基础上,将Parameter替换为Length+Value+Area+Address

组成字节数说明
Length2强制的数量,例如 0001
Value2强制操作命令(例如:0001代表强制置位操作;0000代表强制复位操作;FFFF代表取消强制操作;)
Area131(W位代码)
Address3起始地址(2bit)+位地址(1bit)

例如:强制W212.01=On:

发送: 46494E53 0000001C 00000002 00000000 80000200 010000C8 00002301 00010001 3100D401
回应: 46494E53 00000016 00000002 00000000 C0000200 C8000001 00002301 0000
2301后面紧跟的0000表示操作成功。

3、按位置位

Fins按位置位是在通用命令基础上,将Parameter替换为Area+Address+Length+Value

组成字节数说明
Area131(W位代码)
Address3起始地址(2bit)+位地址(1bit)
Length2写入数量
Value1写入值

例如:W212.01 按位置位:

发送: 46494E53 0000001B 00000002 00000000 80000200 010000C8 00000102 3100D401 000101
000101:0001是数量,01代表写入值1;
回应: 46494E53 00000016 00000002 00000000 C0000200 C8000001 00000102 0000
0102后面紧跟的0000表示操作成功。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值