FINS通讯概述
FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令/响应系统。运用 FINS指令可实现各种网络间的无缝通信,通过编程发送FINS指令,上位机或PLC就能够读写另一个PLC数据区的内容,甚至控制其运行状态,从而简化了用户程序。FINS协议支持工业以太网,这就为OMRON PLC与上位机以太网通信的实现提供了途径。
FINS-TCP需要握手命令成功后方可真正连接上PLC。
以下命令均为十六进制 字节数据流:
1. 握手指令
1.1. 发送
46494E53 0000000C 00000000 00000000 00000018
46494E53:ASCII编码:FINS;
0000000C:指后面跟的字节长度;12个字节
00000000:固定命令;
00000000:错误代码;
00000018:PC节点IP,当设置为0时,会自动获取节点IP。
1.2. 反馈
46494E53 00000010 00000001 00000000 00000018 00000017
46494E53:ASCII编码:FINS;
00000010:指后面跟的字节长度;16个字节
00000001:固定命令;
00000000:错误代码;
00000018:本机电脑节点IP;
00000017:PLC节点IP。
2. 读取指令
读D100开始的2个地址,注:一次最多读1000个地址【以字为单位,也就是2000个字节】。
2.1. 发送
46494E53 0000001A 00000002 00000000 80 00 02 001700 001800 FF 0101 82 006400 0002
46494E53:ASCII编码:FINS;
0000001A:指后面跟的字节长度;26个字节
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:读个数。读取字【WORD】个数,也就是【WORD*2】个字节
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:起始地址;【2的24次方-1】,十进制范围【0~16777215】
0002:写个数;写入的字【WORD】个数,也就是【WORD*2】个字节
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:写入成功标识。
【原封装代码有误,这次重新更新 斯内科 20211116】
下面C#封装程序【部分类FinsTcpUtil.cs】,代码如下:
PLC寄存器区域类型枚举类【OmronAddressType.cs】,源程序如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OmronFinsDemo
{
/// <summary>
/// Omron PLC地址类型【存储区域类别】
/// </summary>
public enum OmronAddressType
{
/// <summary>
/// C区:I/O继电器区 【Input Output Area】
/// 输入区Input 1600 bits=100 word 范围【CIO0~CIO99】
/// 输出区Output 1600 bits=100 word 范围【CIO100~CIO199】
/// CPU Bus Unit Area 6400 bits=400Word 范围【CIO1500~CIO1899】
/// </summary>
CIO = 0,
/// <summary>
/// W区:工作继电器区 【Work Relay Area】
/// 8192 bits = 512 words 范围【W0~W511】
/// </summary>
WR = 1,
/// <summary>
/// D区:动态数据存储区,仅可由字(16位Word)进行存取【Data Memory Area】
/// 32768Words 范围【D0~D32767】
/// </summary>
DM = 2,
/// <summary>
/// 保持继电器区 【Hold Relay】
/// 8192 bits = 512 words 范围【H0~H511】
/// </summary>
HR = 3,
/// <summary>
/// 定时器区 【Timer】
/// PVs 4096Words 范围【T0~T4095】
/// CompletionFlag 4096bits 范围【T0~T4095】
/// </summary>
TIM = 4,
/// <summary>
/// 特殊辅助继电器区 【Auxiliary Relay Area】
/// ReadOnly 7168 bits=448Words 范围【A0~A447】
/// Read-Write 8192 bits=512Words 范围【A448~A959】
/// </summary>
AR = 5,
/// <summary>
/// 计数器区 【Counter】
/// PVs 4096Words 范围【C0~C4095】
/// CompletionFlag 4096bits 范围【C0~C4095】
/// </summary>
CNT = 6
}
}
【部分类FinsTcpUtil.cs】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OmronFinsDemo
{
/// <summary>
/// FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令-响应系统。
/// 我们只使用欧姆龙PLC的FINS-TCP协议,FINS协议可以读写位(Bit)、字(WORD)操作
/// 斯内科
/// </summary>
public partial class FinsTcpUtil
{
/// <summary>
/// 是否已连接

本文详细介绍了FINS通信协议,欧姆龙公司开发的用于工业自动化控制网络的指令响应系统,包括握手过程、读写指令示例和C#封装程序。通过实例演示了如何使用FINS-TCP连接PLC,以及如何执行位操作和字操作来读写PLC数据区。

1万+

被折叠的 条评论
为什么被折叠?



