Omron Fins 协议

概述

欧姆龙(Omron)的通信协议体系是其工业自动化生态系统的核心,它并非单一协议,而是一套为不同层级和应用场景设计的多层次协议家族

这些协议共同构建了一个从设备级、控制级到信息级的无缝通信网络,使得PLC、上位机、传感器、执行器等设备能够高效协同工作

FINS(Factory Interface Network Service)是欧姆龙(Omron)为其工业自动化网络设计的核心指令/响应系统

它的核心优势在于能够实现以太网、控制网络和串行通信等多种物理网络间的无缝通信

协议类型

FINS 协议主要在 TCP/IP 模型的应用层工作,并有两种主要实现方式:

  • FINS/UDP:基于 UDP 协议,是一种无连接的通信方式,通信前不需要建立连接,速度更快,适合实时性要求高的数据交换

  • FINS/TCP:基于 TCP 协议,是一种面向连接的通信方式,需要先建立会话,提供更可靠的通信,适合大数据量或对可靠性要求高的传输

两种方式默认都使用 端口 9600 进行通信

FINS/TCP 会话建立

当使用FINS/TCP时,通信双方在传输数据前需要建立一个会话

  • 连接请求:客户端向服务器的9600端口发起TCP连接,并发送一个连接请求帧

  • 确认响应:服务器收到请求后,会回复一个连接确认帧,其中包含其自身的节点参数

  • 数据传输:会话建立成功后,双方即可开始进行FINS命令和数据的交换

FINS 报文结构

一个 FINS 报文主要由报头(Header) 和数据(Data) 两大部分构成

其结构会因底层传输协议(UDP 或 TCP)的不同而有所差异

FINS/UDP 报文结构

FINS/UDP 的报文结构最为基础,由 FINS/UDP 报头和命令数据组成

FINS/UDP 报头长度为 12 个字节,包含以下关键字段

字段 (Field) 长度 (字节) 描述 (Description)
ICF 1 信息控制字段。包含是否使用网关、是命令还是响应等信息
RSV 1 保留字段,通常为 0x00
GCT 1 网关计数字段。表示数据包经过的网关/桥接数量
DNA 1 目标网络地址。0x00 代表本地网络
DA1 1 目标节点地址。目标 PLC 的节点号
DA2 1 目标单元地址。0x00 代表 CPU 单元
SNA 1 源网络地址
SA1 1 源节点地址
SA2 1 源单元地址
SID 1 服务 ID。用于标识不同的通信进程
Command Code 2 命令码。标识具体的操作,如读取、写入等

FINS/TCP 报文结构

FINS/TCP 的报文是在 FINS/UDP 报文的基础上,增加了一个 FINS/TCP 报头

  • FINS/TCP 报头:长度固定,用于 TCP 层面的连接管理和数据传输控制。其结构通常包含协议 ID、数据长度等信息

  • FINS/UDP 报文:作为 FINS/TCP 报头后面的数据负载(Payload)存在

功能码

FINS 协议通过不同的命令码来实现对 PLC 的各种操作。命令码是两个字节的十六进制数

功能分类 命令码 (Hex) 命令名称 (Name) 功能描述 (Description)
I/O内存访问 01 01 MEMORY AREA READ 读取连续I/O内存区域的数据
I/O内存访问 01 02 MEMORY AREA WRITE 向连续I/O内存区域写入数据
I/O内存访问 01 03 MEMORY AREA FILL 用相同数据填充指定范围的I/O内存
I/O内存访问 01 04 MULTIPLE MEMORY AREA READ 在一个命令中读取多个不连续的I/O内存区域
I/O内存访问 01 05 MEMORY AREA TRANSFER 将数据从一个I/O内存区域复制到另一个
参数区访问 02 01 PARAMETER AREA READ 读取PLC参数区域
参数区访问 02 02 PARAMETER AREA WRITE 写入PLC参数区域
参数区访问 02 03 PARAMETER AREA FILL (CLEAR) 填充或清除参数区域
程序区访问 03 06 PROGRAM AREA READ 读取用户内存(UM)区域的程序数据
程序区访问 03 07 PROGRAM AREA WRITE 写入用户内存(UM)区域的程序数据
程序区访问 03 08 PROGRAM AREA CLEAR 清除用户内存(UM)区域的程序数据
运行模式控制 04 01 RUN 将CPU单元的运行模式切换为RUN或MONITOR
运行模式控制 04 02 STOP 将CPU单元的运行模式切换为PROGRAM(停止)
状态/数据读取 05 01 CPU UNIT DATA READ 读取CPU单元数据(如型号等)
状态/数据读取 06 01 CPU UNIT STATUS READ 读取CPU单元的运行状态
状态/数据读取 06 20 CYCLE TIME READ 读取CPU的循环时间(最大、最小、平均)
时钟访问 07 01 CLOCK READ 读取PLC的内部时钟
时钟访问 07 02 CLOCK WRITE 写入/修改PLC的内部时钟
访问权限 0C 01 ACCESS RIGHT ACQUIRE 获取访问权限(如果未被其他设备占用)
访问权限 0C 02 ACCESS RIGHT FORCED ACQUIRE 强制获取访问权限(即使被其他设备占用)
访问权限 0C 03 ACCESS RIGHT RELEASE 释放已获取的访问权限
错误日志 21 01 ERROR LOG READ 读取CPU单元的错误日志
错误日志 21 02 ERROR LOG CLEAR 清除错误日志
错误日志 21 03 ERROR CLEAR 清除错误或错误信息

实战案例

Omron Fins

过滤 omron 协议,可以看到操作中有读取有写入

根据题目描述找写入的流量,其 Command Data 就是 flag

评论