当前位置: 首页 > article >正文

欧姆龙(Omron)协议解析

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个字节,取值如下:

  1.  00:表示本地网络;
  2.  0x01~0x7F:表示远程网络。

2.1.6 Destination node number
  目标节点编号,1个字节,取值如下:

  1.  0x01~0x3E: SYSMAC LINK网络中的节点号;
  2.  0x01~0x7E: YSMAC NET网络中的节点号;
  3.  0xFF: 广播传输。

  Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。

2.1.7 Destination unit address
  目标单元地址,1个字节,取值如下:

  1. 0x00:PC(CPU);
  2. 0xFE: SYSMAC NET Link Unit or SYSMAC LINK Unit connected to network;
  3. 0x10~0x1F:CPU总线单元 ,其值等于10 + 单元号(前端面板中配置的单元号)。

  Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。

2.1.8 Source network address
  源网络地址,1个字节,取值如下:

  1. 0x00:表示本地网络;
  2. 0x01~0x7F:表示远程网络。

2.1.9 Source node number
  源节点编号,1个字节,取值如下:

  1. 0x01~0x3E: SYSMAC LINK网络中的节点号;
  2. 0x01~0x7E: YSMAC NET网络中的节点号;
  3. 0xFF: 广播传输

Omron的官方手册中,该字段只能取上述值,网上的实际抓包发现会有其它值出现,被wireshark标记为unknown。

2.1.10 Source unit address
  源单元地址,1个字节,取值如下:

  1. 0x00:PC(CPU);
  2. 0xFE: SYSMAC NET Link Unit or SYSMAC LINK Unit connected to network;
  3. 0x10~0x1F:CPU总线单元 ,其值等于10 + 单元号(前端面板中配置的单元号)。

Omron的官方手册中,该字段只能取上述值,实际抓包有其它值出现,被wireshark标记为unknown。

2.1.11 Service ID
  服务ID,1个字节,取值0x00~0xFF,产生会话的进程的唯一标识。

2.1.12 Command Code字段
  2个字节,其取值由第一个字节表示的大分类和第二个字节表示的子分类复合而成,取值及其含义如下表:


http://www.kler.cn/news/341088.html

相关文章:

  • uniapp 设置 tabbar 的 midButton 按钮
  • 软考新教程10月出版?11月软考会用到新内容吗?
  • excel表格转换为在线成绩查询怎么制作?
  • 2024年区块链钱包现状与未来趋势分析
  • 微信小程序处理交易投诉管理,支持多小程序,一键授权模式
  • LangChain入门
  • 串接模式对网络性能的影响
  • [实时计算flink]双流JOIN语句
  • [每日一练]利用子查询配合union all进行全连接后丢失数据的查询
  • Redis:分布式 - 主从复制
  • 通过阿里云Milvus和LangChain快速构建LLM问答系统
  • 阿里云NAS之间迁移实践
  • Python酷库之旅-第三方库Pandas(141)
  • 自动化测试中如何高效进行元素定位!
  • springboot接口如何支持400并发量
  • postman变量,断言,参数化
  • C++ day05(模版与容器)
  • MySQL高阶2010-职员招聘人数2
  • 前端Javascript常见算法题(一)【待学】
  • Android SELinux——基础介绍(一)