FINS协议格式及功能码简介

2019 年 6 月 9 日 FreeBuf

FINS(factoryinterface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令/响应系统。使用FINS指令可实现各种网络间的无缝通信,包括用于信息网络的Ethernet(以太网),用于控制网络的ControllerLink和SYSMAC LINK。通过编程发送FINS指令,上位机或PLC就能够读写另一个PLC数据区的内容,甚至控制其运行状态,从而简化了用户程序。FINS协议支持工业以太网,这就为OMRON PLC与上位机以太网通信的实现提供了可能。

一、FINS报文格式

FINS通信数据以UDP/IP包或TCP/IP的形式发送和接收包,默认通讯端口为9600。通信过程中包含请求报文和响应报文,每个报文由FINS报文头和FINS请求帧/响应帧组成,报文具体格式如下:

FINS请求报文

FINS响应报文

当一个FINS命令发送时,一个FINS报文头将发送自动生成并附加,FINS报文头格式说明如下:

ICF

RSV

RSV(预留)总是00十六进制。这些位元被系统使用。不在响应中访问它们。

GCT

当跨8个网络层与CPU单元通信时在2.0或更高版本中,设置GCT(网关计数:通过的桥的数量)通过)到07十六进制当发送一个鳍命令。否则,设置GCT到02十六进制(见注)时发送。当接收到鳍响应时,GCT为为通过的每个桥(网络)和接收结果值。此值供系统使用。

DNA

目的网络地址。在以下范围内指定(十六进制)。

00:本地网络

01至7F:远程网络地址(小数:1至127)

DA1

目的节点的地址。在以下范围内指定(十六进制):

00:本地PLC内部通讯

01 ~ 20:控制器链路网络节点地址(1 ~ 32位小数)

01至FE:以太网(1至254十进制,以ETN21结尾的以太网单元)

FF:广播传输

DA2

目标单位地址。在以下范围内指定(十六进制):

00:CPU单元

FE:连接到网络的控制器链路单元或以太网单元

10到1F: CPU总线单元

SNA

源网络地址。在以下范围内指定(十六进制):

00:本地网络

01至7F:远程网络(1至127位小数)

SA1

源节点的地址。在以下范围内指定(十六进制):

00: PLC内部通讯

01 ~ 20:控制器链路网络节点地址(1 ~ 32位小数)

01至FE:以太网(1至254十进制,以ETN21结尾的以太网单元)

SA2

源单位地址。在以下范围内指定(十六进制)。

00:CPU单元

10到1F: CPU总线单元

SID

服务ID。用于标识生成传输的进程。设置SID到00到FF之间的任意数字。

FINS请求帧由功能码(四位十六进制)和参数(数据内容)组成。命令代码是表示命令内容的2字节代码。fins命令必须以2字节的命令代码开始。如果有同样是文本,它是在命令代码之后添加的。

FINS响应帧由功能码(四位十六进制)、结束码(篇幅有限就不展开了)和参数(文本)组成。结束码是显示命令执行结果的2字节代码。(第一个字节显示一般类别,第二个字节显示详细结果。)

二、FINS功能码

类型 功能码 名称 功能 功能
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通信过程

以FINS/UDP为例,(FINS/TCP通信过程更复杂,现有资料介绍的比较少,下次会仔细介绍)UDP/IP是一种无连接的通信协议。当一个消息从一个节点发送到另一个节点,这两个节点具有相等的关系,两者之间没有明显的联系。如果使用TCP就像打电话一样呼叫时,UDP更像是手工传递备忘录。虽然UDP协议速度快,数据通信不如TCP可靠。特别是,当发送大量涉及重要路由的数据时,用户必须在应用程序中编写度量(如重试),以便提高可靠性。通信过程如下图所示。

*本文作者:工控安全123,转载请注明来自FreeBuf.COM

精彩推荐



登录查看更多
8

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
36+阅读 · 2020年4月26日
《强化学习》简介小册,24页pdf
专知会员服务
272+阅读 · 2020年4月19日
【ICMR2020】持续健康状态接口事件检索
专知会员服务
17+阅读 · 2020年4月18日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
知识神经元网络 KNN(简介),12页pdf
专知会员服务
14+阅读 · 2019年12月25日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
五步帮你实现用户画像的数据加工
云栖社区
6+阅读 · 2018年2月4日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
Arxiv
35+阅读 · 2019年11月7日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
6+阅读 · 2016年1月15日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
36+阅读 · 2020年4月26日
《强化学习》简介小册,24页pdf
专知会员服务
272+阅读 · 2020年4月19日
【ICMR2020】持续健康状态接口事件检索
专知会员服务
17+阅读 · 2020年4月18日
【图神经网络(GNN)结构化数据分析】
专知会员服务
115+阅读 · 2020年3月22日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
67+阅读 · 2020年3月9日
知识神经元网络 KNN(简介),12页pdf
专知会员服务
14+阅读 · 2019年12月25日
相关资讯
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
一天精通无人中级篇:遥控器协议 S-BUS
无人机
51+阅读 · 2018年12月20日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
五步帮你实现用户画像的数据加工
云栖社区
6+阅读 · 2018年2月4日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
相关论文
Arxiv
35+阅读 · 2019年11月7日
Meta-Learning to Cluster
Arxiv
17+阅读 · 2019年10月30日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
6+阅读 · 2016年1月15日
Top
微信扫码咨询专知VIP会员