1. 协议概述
欧姆龙(Omron)是来自日本的知名电子和自控设备制造商,其中、小型PLC在国内市场有较高的占有率,有CJ、CM等系列。PLC可以支持Fins、Host link等协议进行通信。
支持以太网的欧姆龙PLC CPU、以太网通信模块根据型号的不同,一般都会持 FINS(Factory Interface Network Service)协议,一些模块也会支持EtherNet/IP协议。Omron fins协议缺省TCP/UDP端口号为9600。Fins协议封装在TCP/UDP之上,需要注意的是基于TCP的Fins数据包和基于UDP的包在头部上差异较大。协议的具体构造可以参考欧姆龙官方文档。
FINS协议实现了OMRON PLC与上位机以太网通信。Fins基于TCP/UDP的报文的概览如下:
Fins over TCP
+-----------------------------------------------------------+
| Fins/TCP Header | Fins over UDP(optional) |
+-----------------------------------------------------------+/ \/ Fins over UDP \ +---------------------------------------+| Fins/UDP Header | Command Data |+---------------------------------------+
由上图可知,Fins/TCP实际上是将Fins/UDP报文作为其负载,在其前面加了一个Fins/TCP报头。需要注意的是,Fins/TCP报文中负载即Fins/UDP部分不一定会出现,它可以只有一个简单的Fins/TCP报头。
先介绍Fins/UDP报文的组成,然后再介绍Fins/TCP结构。
2. 协议详解
2.1 Fins over UDP
基于UDP的Fins协议的结构相对简单,整体结构由报头和数据两部分组成,如下所示:
Fins over UDP
+--------------------------+
| Fins/UDP Header |
+--------------------------+
| Command Data(opitonal) |
+--------------------------+
其中报头部分为必要组成部分,为固定长度12个字节,数据部分非必现。
2.1.1 Fins/UDP Header
报头部分由11个定长字段组合而成,前面10个字段分别简称为:ICF、RSV、GCT、DNA、DA1、DA2、SNA、SA1、SA2、SID,如下所示:
0 1 2 6 7
+---------+-----------+----------+---------------------+
| Gateway | Data Type | Reserved | Response setting |
+------------------------------------------------------+
| Reserved |
+------------------------------------------------------+
| Gateway Counts |
+------------------------------------------------------+
| Destination Network Address |
+------------------------------------------------------+
| Destination Node Number |
+------------------------------------------------------+
| Destination Unit Addres |
+------------------------------------------------------+
| Source Network Address |
+------------------------------------------------------+
| Source Node Number |
+------------------------------------------------------+
| Source Unit Addres |
+------------------------------------------------------+
| Service Id |
+------------------------------------------------------+
| Command |
+ +
| Code(2B) |
+------------------------------------------------------+
上述11个字段中,除最后一个Command Code字段为2个字节外,其余所有字段均只占1个字节。
2.1.2 Information control filed
ICF,信息控制字段,1个字节,由4个子字段组成,分述如下:
1... .... = Gateway bit,是否使用网关,0x01表示使用;
.1.. .... = Data Type bit,数据类型比特位,0x01表示响应,0x00表示命令;
..0. .... = Reserved bit,保留比特位,默认置0;
...0 .... = Reserved bit,保留比特位,默认置0;
.... 0... = Reserved bit,保留比特位,默认置0;
.... .0.. = Reserved bit,保留比特位,默认置0;
.... ..0. = Reserved bit,保留比特位,默认置0;
.... ...1 = Response setting bit,响应标志,0x01表示非必需回应,0x00表示必须进行回应。
2.1.3 Reserved
保留字段,1个字节,置为0x00。
2.1.4 Gateway count
网关计数,1个字节,置为0x02。
2.1.5 Destination network address
目标网络地址,1个字节,取值如下:
- 00:表示本地网络;
- 0x01~0x7F:表示远程网络。
2.1.6 Destination node number
目标节点编号,1个字节,取值如下:
- 0x01~0x3E: SYSMAC LINK网络中的节点号;
- 0x01~0x7E: YSMAC NET网络中的节点号;
- 0xFF: 广播传输。
Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。
2.1.7 Destination unit address
目标单元地址,1个字节,取值如下:
- 0x00:PC(CPU);
- 0xFE: SYSMAC NET Link Unit or SYSMAC LINK Unit connected to network;
- 0x10~0x1F:CPU总线单元 ,其值等于10 + 单元号(前端面板中配置的单元号)。
Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。
2.1.8 Source network address
源网络地址,1个字节,取值如下:
- 0x00:表示本地网络;
- 0x01~0x7F:表示远程网络。
2.1.9 Source node number
源节点编号,1个字节,取值如下:
- 0x01~0x3E: SYSMAC LINK网络中的节点号;
- 0x01~0x7E: YSMAC NET网络中的节点号;
- 0xFF: 广播传输
Omron的官方手册中,该字段只能取上述值,网上的实际抓包发现会有其它值出现,被wireshark标记为unknown。
2.1.10 Source unit address
源单元地址,1个字节,取值如下:
- 0x00:PC(CPU);
- 0xFE: SYSMAC NET Link Unit or SYSMAC LINK Unit connected to network;
- 0x10~0x1F:CPU总线单元 ,其值等于10 + 单元号(前端面板中配置的单元号)。
Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。
2.1.11 Service ID
服务ID,1个字节,取值0x00~0xFF,产生会话的进程的唯一标识。
2.1.12 Command Code字段
2个字节,其取值由第一个字节表示的大分类和第二个字节表示的子分类复合而成,取值及其含义如下表: