FINS(factoryinterface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令/响应系统。使用FINS指令可实现各种网络间的无缝通信,包括用于信息网络的Ethernet(以太网),用于控制网络的ControllerLink和SYSMAC LINK。通过编程发送FINS指令,上位机或PLC就能够读写另一个PLC数据区的内容,甚至控制其运行状态,从而简化了用户程序。FINS协议支持工业以太网,这就为OMRON PLC与上位机以太网通信的实现提供了可能。
FINS通信数据以UDP/IP包或TCP/IP的形式发送和接收包,默认通讯端口为9600。通信过程中包含请求报文和响应报文,每个报文由FINS报文头和FINS请求帧/响应帧组成,报文具体格式如下:
FINS请求报文
FINS响应报文
当一个FINS命令发送时,一个FINS报文头将发送自动生成并附加,FINS报文头格式说明如下:
RSV(预留)总是00十六进制。这些位元被系统使用。不在响应中访问它们。
当跨8个网络层与CPU单元通信时在2.0或更高版本中,设置GCT(网关计数:通过的桥的数量)通过)到07十六进制当发送一个鳍命令。否则,设置GCT到02十六进制(见注)时发送。当接收到鳍响应时,GCT为为通过的每个桥(网络)和接收结果值。此值供系统使用。
目的网络地址。在以下范围内指定(十六进制)。
00:本地网络
01至7F:远程网络地址(小数:1至127)
目的节点的地址。在以下范围内指定(十六进制):
00:本地PLC内部通讯
01 ~ 20:控制器链路网络节点地址(1 ~ 32位小数)
01至FE:以太网(1至254十进制,以ETN21结尾的以太网单元)
FF:广播传输
目标单位地址。在以下范围内指定(十六进制):
00:CPU单元
FE:连接到网络的控制器链路单元或以太网单元
10到1F: CPU总线单元
源网络地址。在以下范围内指定(十六进制):
00:本地网络
01至7F:远程网络(1至127位小数)
源节点的地址。在以下范围内指定(十六进制):
00: PLC内部通讯
01 ~ 20:控制器链路网络节点地址(1 ~ 32位小数)
01至FE:以太网(1至254十进制,以ETN21结尾的以太网单元)
源单位地址。在以下范围内指定(十六进制)。
00:CPU单元
10到1F: CPU总线单元
服务ID。用于标识生成传输的进程。设置SID到00到FF之间的任意数字。
FINS请求帧由功能码(四位十六进制)和参数(数据内容)组成。命令代码是表示命令内容的2字节代码。fins命令必须以2字节的命令代码开始。如果有同样是文本,它是在命令代码之后添加的。
FINS响应帧由功能码(四位十六进制)、结束码(篇幅有限就不展开了)和参数(文本)组成。结束码是显示命令执行结果的2字节代码。(第一个字节显示一般类别,第二个字节显示详细结果。)
类型 | 功能码 | 名称 | 功能 | 功能 |
---|---|---|---|---|
I/O区读写 | 01 | 01 | 内存读取 | 读取连续I/O内存区域数据 |
01 | 02 | 内存写入 | 向连续I/O内存区 | |
01 | 03 | 内存填充 | 向特定范围I/O内存区填充相同的数据 | |
01 | 04 | 非连续内存读取 | 读取指定的非连续I/O内存区域数据 | |
01 | 05 | 内存转移 | 将非连续内存区的 | |
参数区读写 | 02 | 01 | 参数区读取 | 读取连续参数区内容 |
02 | 02 | 参数区写入 | 写入连续参数区内容 | |
02 | 03 | 参数区填充 | 向特定范围参数区填充相同的内容 | |
程序区读写 | 03 | 06 | 程序读取 | 读取UM(用户内存)区 |
03 | 07 | 程序写入 | 写入UM(用户内存)区 | |
03 | 08 | 程序清除 | 清除UM(用户内存)区 | |
操作模式切换 | 04 | 01 | 运行 | 将CPU单元操作模式切换为运行或监视 |
04 | 02 | 停止 | 将CPU单元操作模式切换为编程 | |
设备配置读取 | 05 | 01 | CPU单元数据读取 | 读取CPU单元数据 |
05 | 02 | 连接状态读取 | 读取对应地址的模块数量 | |
状态读取 | 06 | 01 | CPU单元状态读取 | 读取CPU单元状态 |
06 | 20 | 循环时间读取 | 读取最大、最小和平均循环时间 | |
时间数据读写 | 07 | 01 | 时钟读取 | 读取当前年、月、日、分、秒和星期几 |
07 | 02 | 时钟写入 | 改变当前年、月、日、分、秒和星期几 | |
故障信息显示 | 09 | 20 | 信息读取/清除 | 读取和清除信息,读取故障和严重故障信息 |
访问控制权限 | 0C | 01 | 获取访问权限 | 只要没有其它设备持有访问权限,则获得访问权限 |
0C | 02 | 强制获取访问权限 | 即使有其它设备持有访问权限,仍获得访问权限 | |
0C | 03 | 释放访问权限 | 即使已经持有访问权限,仍释放访问权限 | |
错误日志 | 21 | 01 | 清除错误 | 清除错误或报警 |
21 | 02 | 读取错误日志 | 读取错误日志 | |
21 | 03 | 清除若无日志 | 清除错误日志指针 | |
FINS登入日志 | 21 | 40 | FINS登入日志读取 | CPU单元自动保存有执行过FINS登入命令的日志。这条命令读取此日志。 |
21 | 41 | FINS登入日志清除 | 清除FINS登入列表 | |
文件内存 | 22 | 01 | 文件名读取 | 读取文件内存区数据 |
22 | 02 | 单个文件读取 | 从某个文件中的指定位置读取特定长度的文件数据 | |
22 | 03 | 单个文件写入 | 从某个文件中的指定位置写入特定长度的文件数据 | |
22 | 04 | 文件内存格式化 | 格式化文件内存 | |
22 | 05 | 文件删除 | 从文件内存中删除指定文件 | |
22 | 07 | 文件复制 | 在系统中将某些文件复制到其他位置 | |
22 | 08 | 重命名文件 | 改变一个文件的名字 | |
22 | 0A | 内存区间数据转移1 | 在I/O内存和文件内存间转移或比较数据 | |
22 | 0B | 内存区间数据转移2 | 在参数区和文件内存间转移或比较数据 | |
22 | 0C | 内存区间数据转移3 | 在用户内存和文件内存间转移或比较数据 | |
22 | 15 | 创建/删除文件夹 | 创建或删除一个文件夹 | |
22 | 20 | 存储盒转移(只针对CP1H,CP1L CPU单元) | 在存储盒与CPU单元间转移和修改数据 | |
调试 | 23 | 01 | 强制设置/重置 | 强制设置或重置位,或推出强制设置状态 |
23 | 02 | 强制设置/重置取消 | 取消所有强制设置或重置过的位 |
以FINS/UDP为例,(FINS/TCP通信过程更复杂,现有资料介绍的比较少,下次会仔细介绍)UDP/IP是一种无连接的通信协议。当一个消息从一个节点发送到另一个节点,这两个节点具有相等的关系,两者之间没有明显的联系。如果使用TCP就像打电话一样呼叫时,UDP更像是手工传递备忘录。虽然UDP协议速度快,数据通信不如TCP可靠。特别是,当发送大量涉及重要路由的数据时,用户必须在应用程序中编写度量(如重试),以便提高可靠性。通信过程如下图所示。
*本文作者:工控安全123,转载请注明来自FreeBuf.COM