# omron-tcp-fins **Repository Path**: note-java/omron-tcp-fins ## Basic Information - **Project Name**: omron-tcp-fins - **Description**: 使用finstcp协议连接欧姆龙 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-07-25 - **Last Updated**: 2025-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: finsTcp协议连接欧姆龙, fins-tcp ## README # [欧姆龙Fins读写指令大全](https://www.cnblogs.com/resplendent/p/15219216.html) 以下指令均为16进制数,PC IP地址:192.168.250.24,PLC IP地址:192.168.250.23 ##### 注:1个十六进制数占0.5字节 # 一、Fins Tcp 1.握手指令 1.1. 发送 46494E53 0000000C 00000000 00000000 00000018 46494E53:ASCII编码:FINS; 0000000C:指后面跟的字节长度; 00000000:固定命令; 00000000:错误代码; 00000018:PC节点IP,当设置为0时,会自动获取节点IP。 1.2. 反馈 46494E53 00000010 00000001 00000000 00000018 00000017 46494E53:ASCII编码:FINS; 00000010:指后面跟的字节长度; 00000001:固定命令; 00000000:错误代码; 00000018:本机电脑节点IP; 00000017:PLC节点IP。 2. 读取指令 读D100开始的2个地址,注:一次最多读1000个地址。 2.1. 发送 46494E53 0000001A 00000002 00000000 80 00 02 001700 001800 FF 0101 82 006400 0002 46494E53:ASCII编码:FINS; 0000001A:指后面跟的字节长度; 00000002:固定命令; 00000000:错误代码; 80:ICF; 00:RSV; 02:GCT; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; FF:SID; 0101:读指令; 82:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0); 006400:起始地址; 0002:读个数。 2.2. 反馈 46494E53 0000001A 00000002 00000000 C0 00 02 001800 001700 FF 0101 0000 AABB CCDD 46494E53:ASCII编码:FINS; 0000001A:指后面跟的字节长度; 00000002:固定命令; 00000000:错误代码; C0:ICF; 00:RSV; 02:GCT; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; FF:SID; 0101:读指令; 0000:读取成功标识; AABB CCDD:读到的数据。 3.写入指令 往W10,W11写入AABB,CCDD 3.1. 发送 46494E53 0000001E 00000002 00000000 80 00 02 001700 001800 FF 0102 B1 000A00 0002 AABBCCDD 46494E53:ASCII编码:FINS; 0000001E:指后面跟的字节长度; 00000002:固定命令; 00000000:错误代码; 80:ICF; 00:RSV; 02:GCT; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; FF:SID; 0102:写指令; B1:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0); 000A00:起始地址; 0002:写个数; AABBCCDD:写入数据。 3.2. 反馈 46494E53 00000016 00000002 00000000 C0 00 02 001800 001700 FF 0102 0000 46494E53:ASCII编码:FINS; 00000016:指后面跟的字节长度; 00000002:固定命令; 00000000:错误代码; C0:ICF; 00:RSV; 02:GCT; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; FF:SID; 0102:写指令; 0000:写入成功标识。 # 二、Fins Udp Fins Udp与Fins Tcp很像,只是Fins Udp不需要发握手指令,指令从80(ICF)开始。 1.读取指令 读D100开始的2个通道 1.1. 发送 80 00 02 001700 001800 FF 0101 82 006400 0002 80:ICF; 00:RSV; 02:GCT; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; FF:SID; 0101:读指令; 82:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0); 006400:起始地址; 0002:读个数。 1.2. 反馈 C0 00 02 001800 001700 FF 0101 0000 AABB CCDD C0:ICF; 00:RSV; 02:GCT; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; FF:SID; 0101:读指令; 0000:读取成功标识; AABB CCDD:读到的数据。 2.写入指令 往W10,W11写入AABB,CCDD 2.1. 发送 80 00 02 001700 001800 FF 0102 B1 000A00 0002 AABBCCDD 80:ICF; 00:RSV; 02:GCT; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; FF:SID; 0102:写指令; B1:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0); 000A00:起始地址; 0002:写个数; AABBCCDD:写入数据。 2.2. 反馈 C0 00 02 001800 001700 FF 0102 0000 C0:ICF; 00:RSV; 02:GCT; 00:PC网络地址; 18:PC节点地址; 00:PC单元地址; 00:PLC网络地址; 17:PLC节点地址; 00:PLC单元地址; FF:SID; 0102:写指令; 0000:写入成功标识。 # 三、错误代码 ![img.png](img.png) # 四、测试 ##### 注:DB 需要 x 256 在转16进制 #### 读取 ```TXT 读指令:46494E530000001A000000020000000080000200CA00003D00FF0101821774000001 46494E53 0000001A 00000002 00000000 80 00 02 00CA00 003D00 FF 0101:读指令 82:D字 177400:DB位 × 256 0001:偏移量 返回数据:46 49 4E 53 00 00 00 18 00 00 00 02 00 00 00 00 C0 00 02 00 3D 00 00 CA 00 FF 01 01 00 00 00 07 说明:读取D6004,返回数据为7 ``` #### 写入 ```TXT 写指令:46494E5300000023000000020000000080000200CA00003D00FF010202177000000101 46494E53 00000023 00000002 00000000 80 00 02 00CA00 003D00 FF 0102:写指令 02:D字 177000:DB位 × 256 0001:偏移量 01:写入值 返回值:46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 3D 00 00 CA 00 FF 01 02 00 00 说明:写入D6000.1,值为true,长度不足四位需要补足 ```