跳到主要内容

OMRON FINS 驱动

概述

OMRON FINS over TCP。仅依据 OMRON 官方手册(W342、W421)的 wire spec 实现的自研 Java 版本,不依赖任何外部库或外部进程。

项目
opc_typeFINS
实现类plantpulse.driver.protocol.fins.FINSDriver
(无 — 自研实现。OMRON W342/W421)
read良好 (Memory Area Read 0101)
write良好 (Memory Area Write 0102)
默认端口9600
安全

类 / 结构

FINSDriver (BaseProtocolDriver)
├── Socket — host:9600
├── clientNode/serverNode — connect() 의 Auto-Assign 응답에서 획득
├── sid — 0~255 순환 (요청-응답 매칭, 0 회피)
├── ParsedAddr — areaChar, wordAddr, bit
├── putBeInt / beInt — 4-byte big-endian helper
└── memAreaRead / memAreaWrite — synchronized

connect() 时通过 FINS/TCP Node Address Auto-Assign (CIP cmd=0) 获取 client/server 节点地址。


wire 格式摘要

CIP 头 (16 byte, big-endian)

'F' 'I' 'N' 'S' | length(4) | command(4) | error(4)
  • command = 0 Auto-Assign Request、=1 Auto-Assign Response、=2 FINS frame send
  • length = 自 command 起到末尾的字节数

FINS 头 (10 byte)

ICF | RSV | GCT | DNA | DA1 | DA2 | SNA | SA1 | SA2 | SID
0x80 0x00 0x02 <dn> <sn> <du> <sn> <cn> <su> <sid>
  • ICF=0x80 :要求响应
  • DA1 = 服务器节点,SA1 = 客户端节点(auto-assign 结果)

Memory Area Read (MRC=01 SRC=01)

01 01 | area(1) | addrHi addrLo | bit | countHi countLo

响应 = FINS 头(10) + 01 01 + MRES(1) SRES(1) + 数据。


内存区域代码

区域word 代码bit 代码
CIO0xB00x30
W (Work)0xB10x31
H (Holding)0xB20x32
A (Auxiliary)0xB30x33
D (DM)0x820x02
Timer / Counter PV0x890x09 (完成 flag)

wordAreaCode(char) / bitAreaCode(char) 负责转换。


OPC 注册选项 (options)

含义默认值
dnaDestination Network Address0
da2Destination Unit0
snaSource Network Address0
sa2Source Unit0
connect-timeoutms3000
read-timeoutms3000

标签地址格式

表示法含义
D100DM 100 (16-bit word)
D100.05D100/5DM 100 的 bit 5
H0.05Holding bit
CIO10CIO word
W50Work word

format 关键字(大写):

format含义
X / BITbit
W / WORDsigned 16
UI / UW / UWORDunsigned 16
DW / DWORDsigned 32 (low word first)
UDW / DUW / UDWORDunsigned 32
LW / LWORDsigned 64
REAL / FLOATIEEE 32-bit
LREAL / DOUBLEIEEE 64-bit
BIN[n]提取 word 的第 n 位

32/64-bit 多字数据遵循 OMRON 惯例,采用 low word first


支持 / 不支持

  • ✅ Memory Area Read / Write (MRC=01 SRC=01/02)
  • ✅ Bit / Word / DWord / LWord / Float / Double
  • ✅ FINS/TCP Auto-Assign 握手
  • ❌ Multiple Memory Area Read (MRC=01 SRC=04)
  • ❌ Program Area / Parameter Area / Clock 命令
  • ❌ FINS over UDP

测试覆盖率

test/java/plantpulse/driver/protocol/fins/

测试数
FINSDriverTest38

共 38 项测试 — 地址解析、区域代码映射、字解码、握手模拟等。


参考

  • OMRON W342 FINS Communications Reference Manual
  • OMRON W421 CS/CJ Series Communications Commands Reference
  • 代码: src/plantpulse/driver/protocol/fins/FINSDriver.java