欧姆龙通信协议 FINS 2.0
••••
点击上面“蓝字”关注我们
0x00 FINS简介
欧姆龙全球制造用于工业和制造业的机器。FINS用于通过网络控制其中一些机器。FINS以太网协议基于OSI模型:
OSI layer |
Protocol |
7 Application Layer |
FINS |
6 Presentation Layer |
|
5 Session Layer |
|
4 Transport Layer |
ISO-on-TCP (RFC 1006) |
3 Network Layer |
IP |
2 Data Link Layer |
Ethernet |
1 Physical Layer |
Ethernet |
其中,第1-4层会由计算机自己完成(底层驱动程序),关于这些神马的定义,大家可以上网查一下;
第7层,FINS,这一层和用户数据相关,对PLC数据的读取报文在这里完成。
图1 FINS协议请求结构模型
图2 FINS协议响应结构模型
0x01 协议依赖
FINIS协议使用的TCP端口:9600
FINS协议使用的编码格式为:ASCII
0x02 FINS协议
FINS会话流程
FINS会话流程是基于TCP/IP协议,下图表述了FINS会话开始几个数据帧的作用。FINS协议的会话有一次请求帧,请求帧中附带着发起方的节点参数。PLC端(Server端)会确认并将自己的节点参数放回给请求方。
图3 FINS会话流程
FINS帧结构
FINS帧结构包含三部分组成,分别由FINS Header、FINS Commands和FINS Text组成。
图4 FINS 帧结构
FINS Header 是由标示性的 FINS的ASCII开头,
即:0x46 0x49 0x4e 0x53 转换成字符串就是“FINS”。
FINS Commands 是由功能码组成,分别为Request 和 Response两种内容组成。
FINS Header部分
FINS Header部分包含了3个信息:协议标识符,数据长度、预留及帧类型组成。如图5所示:
图5 S7CommPlus Header结构
FINS Header的结构为:
-
0~3:Protocol ID,协议ID,通常为0x46 0x49 0x4e 0x53 即“FINS”;
-
4~7:Length,数据长度,指后续跟着的字符长度。
-
8~10:Reserved,预留,通常为0x00 0x00 0x00;
-
11:Type,数据帧类型,一般有以下值:
-
0x00:connect requst 连接请求数据帧
-
0x01:connect Response,连接请求确认数据;
-
0x02:data,数据传输;
-
12~15:Reserved,保留。
举个例子,如图6所示:
图6 FINS Header结构内容举例
接下来介绍重要的部分(FINS Commands),后面的帧结构都是由PDU类型与功能码来决定的。
FINS Commands部分
图7 FINS Commands结构内容举例
-
0:ICF:(Information Control Field)信息控制码:
-
1:Rev:(Reserved)预留 一般为0x00。
-
2:GCT:(Gateway count)网关数量,一般为0x02。
-
3:DNA:(Destination network address)目标网络地址。
-
00:本地网络
-
01 to 7F:远程网络
-
4:DA1:(Destination node number)目标节点号。
-
01 to 7E:SYSMAC NET 网络节点号
-
01 to 3E:SYSMAC LINK 网络节点号
-
FF:广播节点号
-
5:DA2:(Source unit number)源单元号。
-
00:PC(CPU)
-
FE:SYSMAC NET连接单元或者SYSMAC LINK单元连接网络
-
10 to 1F:CPU 总线单元
-
6:SNA:(Source network address)源网络地址。
-
00:本地网络
-
01 to 7F:远程网络
-
7:SA1:(Source node number)源节点号
-
01 to 7E:SYSMAC NET 网络节点号
-
01 to 3E:SYSMAC LINK 网络节点号
-
FF:广播节点号
-
8:SA2:(Source Unit address)源单元地址
-
00:PC(CPU)
-
FE:SYSMAC NET连接单元或者SYSMAC LINK单元连接网络
-
10 to 1F:CPU 总线单元
-
9:SID:(Service ID) 序列号 范围00-FF
-
10~11:Commands code:命令码,分为一级命令码和二级命令码。详细的命令码可参考FINS Commands code。
举个例子,如图8所示:
几个关键功能码
本节主要介绍STOP、RUN及FORCED(强制输出)三个功能码结构。
FINS RUN
通过PC将PLC改变DEBUG、MONITOR及RUN三种模式切换。
图9 FINS RUN数据格式
-
0~1:Commands Code:功能码,0x04,0x01 -
2~3:Program No.:项目码,一般为0xFF,0xFF -
4:Mode:模式
-
Debug模式 0x00,0x00 -
Monitor模式 0x00,0x02 -
Run模式 0x00,0x04
举个例子,如图10所示:
图10 RUN例子
FINS STOP
通过PC将PLC改变PROGRAM模式,停止程序运行。
图11 FINS STOP数据格式
-
0~1:Commands Code:功能码,0x04,0x01 -
2~3:Program No.:项目码,一般为0xFF,0xFF
举个例子,如图12所示:
图12 SetVariable帧结构
FINS FORCED
Forced功能码可以强制设置或者强制重置位。也可以强制设置状态及释放状态。在恢复强制状态前,程序将无法继续执行。其命令结构如下图所示。
-
0~1:Commands Code:功能码,0x04,0x01
-
2~3:No.of bits/flags:位号。
-
4~9:Force Set/Reset data:强制/置位数据。
-
4~5:Set/Reset Specification:执行动作。
-
0x0000:强制复位
-
0x0001:强制置位
-
0x8000:强制释放并复位
-
0x8001:强制释放并置位
-
0xFFFF:解除强制状态
-
6:Memory Area Code:存储区域代码
-
7~9:Bit/Flags:位/状态设置
举个例子,如图13所示:
图13
FINS Commands Code
下表是PDU Type几种典型的数据类型及含义:
序号 |
一级命令 |
二级命令 |
含义 |
1 |
0x01 |
0x01 |
读存储区域 |
2 |
0x02 |
写存储区域 |
|
3 |
0x04 |
连续读多个存储区域 |
|
4 |
0x03 |
0x06 |
读项目区域 |
5 |
0x07 |
写项目区域 |
|
6 |
0x04 |
0x01 |
运行 |
7 |
0x02 |
停止 |
|
8 |
0x05 |
0x01 |
读控制数据区 |
9 |
0x06 |
0x01 |
写控制状态 |
10 |
0x07 |
0x01 |
读时钟 |
11 |
0x02 |
写时钟 |
|
12 |
0x21 |
0x01 |
清除错误 |
13 |
0x22 |
0x0F |
读文件存储区序号 |
14 |
0x10 |
读文件存储区 |
|
15 |
0x11 |
写文件存储区 |
|
16 |
0x23 |
0x01 |
强制设置/置位 |
17 |
0x02 |
取消强制设置/置位 |
|
18 |
0x0A |
读多个强制状态 |
FINS Memery Area Code
下表是OP Code几种典型的数据类型及含义:
存储区 |
数据 |
数据地址 |
地址范围 |
存储区代码 |
位数 |
|
起始范围 |
第三字节 |
|||||
CIO |
Bit status |
00000 to 25515 |
0000 to FFFF |
00 to 0F |
00 |
1 |
Word contents |
000 to 255 |
00 to 00 |
80 |
2 |
||
LR |
Bit status |
LR 0000 to LR 6315 |
03E8 to 0427 |
00 to 0F |
00 |
1 |
Word contents |
LR 00 to LR 63 |
00 to 00 |
80 |
2 |
||
HR |
Bit status |
HR 0000 to HR 9915 |
0428 to 048B |
00 to 0F |
00 |
1 |
Word contents |
HR 00 to HR 99 |
00 to 00 |
80 |
2 |
||
AR |
Bit status |
AR 0000 to AR 2715 |
048C to 04A7 |
00 to 0F |
00 |
1 |
Word contents |
AR 00 to AR 27 |
00 to 00 |
80 |
2 |
||
Timer/ Counter |
Completion Flag status |
TIM 000 to TIM 511 CNT 000 to CNT 511 |
0000 to 01FF |
00 to 00 |
01 |
1 |
PV |
TIM 000 to TIM 511 CNT 000 to CNT 511 |
00 to 00 |
81 |
2 |
||
DM |
Word contents |
DM 0000 to DM 9999 |
0000 to 270F |
00 to 00 |
82 |
2 |
0x03 结尾
以上仅仅是个人对欧姆龙通信协议 FINS 2.0理解和建议。如果有其他想法或者想一起讨论的可以关注下面公众号。
如有侵权请及时联系删除。
公众号专注工业控制系统网络安全内容,以工控设备、工控协议、协议解析及检测评估为主要内容及研究方向。
本文始发于微信公众号(渗透云笔记):欧姆龙通信协议 FINS 2.0
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论