[激光原理与应用-80]:PLC通信协议之-OMRON欧姆龙FINS TCP通信协议详细解析

目录

一、OMRON欧姆龙 PLC简介

1.1 OMRON欧姆龙 PLC

1.2 OMRON欧姆龙 PLC通信协议简介

1.3 通信架构

二、欧姆龙FINS协议简介

2.1 简介

2.2 协议分层

2.3 OMRON(欧姆龙)FINS协议的本质

2.4 OMRON(欧姆龙)FINS(Factory Interface Network Service)如何与外部软件通信

三、Fins over UDP

3.1 包格式

3.2 Fins/UDP Header

3.2.1 ICF字段

3.2.3 RSV字段

3.2.4 GCT字段

3.2.5 DNA字段

3.2.6 DA1字段

3.2.7 DA2字段

3.2.8 SNA字段

3.2.9 SA1字段

3.2.10 SA2字段

3.2.11 SID字段

3.3 Command Code字段

四、Fins Over TCP

4.1 分层结构

4.2 Fins/TCP Header

4.2.2 Magic字段

4.2.3 Length字段

4.2.4 Command字段

4.2.5 Error Code字段


一、OMRON欧姆龙 PLC简介

1.1 OMRON欧姆龙 PLC

OMRON欧姆龙是一家全球知名的自动化控制和工业自动化解决方案提供商,其产品线包括包括PLC(可编程逻辑控制器)传感器、运动控制、人机界面、工业机器人、安全控制等多个领域。其中,PLC产品是其核心产品之一。

PLC是可编程逻辑控制器(Programmable Logic Controller)的缩写,是一种专门用于工业控制系统中的可编程控制器。PLC主要通过编程控制其输入输出模块,实现对工业设备、生产线等自动化控制的功能。OMRON欧姆龙的PLC产品广泛应用于工业自动化领域,具有可靠性高、扩展性强、易维护等特点。

OMRON欧姆龙的PLC产品系列包括CP1、CP2、CS1、NJ、NX等多个系列,覆盖了各种规模和应用场景下的自动化控制需求。这些PLC产品支持多种通信协议,具有强大的功能扩展性,广泛应用于制造业、电力行业、自动化设备等领域。

除了PLC产品,OMRON欧姆龙还提供全面的工业自动化解决方案,包括传感器、运动控制、机器人、人机界面等产品,帮助客户实现生产流程的自动化与智能化。

总的来说,OMRON欧姆龙作为工业自动化领域的领先企业,其PLC产品在自动化控制领域有着广泛的应用和良好的口碑

1.2 OMRON欧姆龙 PLC通信协议简介

OMRON欧姆龙的PLC产品支持多种通信协议,以便与其他设备或系统进行数据交换和通信。

以下是一些常见的OMRON PLC通信协议简介:

  1. MODBUS协议:MODBUS是一种常用的串行通信协议,用于在工业控制系统中实现设备之间的通信。OMRON的PLC可以通过MODBUS协议与其他设备(如传感器、人机界面、监控系统等)进行数据传输和控制。

  2. Ethernet/IP协议:Ethernet/IP是一种工业以太网通信协议,适用于实时数据交换和控制。OMRON的PLC可以通过Ethernet/IP协议与其他设备或上位机系统实现高速数据通信和控制功能。

  3. DeviceNet协议:DeviceNet是一种用于工业自动化现场总线网络的通信协议,用于连接和控制各种设备。OMRON的PLC可以通过DeviceNet协议与其他支持DeviceNet的设备(如传感器、执行机构等)进行通信和控制。

  4. PROFIBUS协议:PROFIBUS是一种常用的现场总线通信标准,用于工业自动化系统中的设备互联。OMRON的PLC可以通过PROFIBUS协议与其他支持PROFIBUS的设备进行数据交换和通信。

  5. TCP/IP协议TCP/IP是互联网的基本通信协议,在工业控制系统中也有广泛应用。OMRON的PLC可以通过TCP/IP协议与其他设备或系统进行远程监控、数据传输等功能。

        以上是一些常见的OMRON欧姆龙PLC通信协议,不同的PLC型号和系列可能支持的通信协议略有不同。在选择和配置通信方式时,需要根据实际的应用需求和对接设备的要求进行选择

1.3 通信架构

二、欧姆龙FINS协议简介

2.1 简介

欧姆龙FINS(FINS is Not Sufficient)协议是一种用于欧姆龙(OMRON)工业自动化设备之间通信的专有协议。FINS协议被设计用于支持欧姆龙PLC、人机界面、伺服驱动器和其他自动化设备之间的数据交换和通信。

以下是欧姆龙FINS协议的一些关键特点和功能:

  1. 多功能性:FINS协议支持各种不同的通信功能,包括数据读写、远程控制、传输监视等,使得不同类型的欧姆龙自动化设备能够在工业控制系统中进行灵活的数据交换和协作。

  2. 高效性:FINS协议采用了高效的数据交换机制,支持快速的数据传输和响应,有助于实现实时控制和监视功能。

  3. 灵活性:FINS协议是一种灵活的协议,支持多种不同的数据格式和数据类型,包括二进制数据、ASCII数据等,使得欧姆龙设备能够与各种不同类型的设备进行通信和数据交换。

  4. 安全性:FINS协议支持数据加密和身份验证功能,以确保通信数据的安全性和可靠性。

  5. 广泛应用:FINS协议被广泛应用于欧姆龙PLC、触摸屏、伺服系统、远程I/O等各种类型的工业自动化设备上,成为这些设备之间通信的重要协议标准。

总的来说,欧姆龙FINS协议是一种高效、灵活、安全的专有通信协议,为欧姆龙工业自动化设备之间的数据交换和通信提供了稳定可靠的解决方案。

2.2 协议分层

  欧姆龙(Omron)是来自日本的知名电子和自控设备制造商,其中、小型PLC在国内市场有较高的占有率,有CJ、CM等系列。PLC可以支持Fins、Host link等协议进行通信。

  支持以太网的欧姆龙PLC CPU、以太网通信模块根据型号的不同,一般都会支持FINS(Factory Interface Network Service)协议,一些模块也会支持EtherNet/IP协议。

        Omron fins协议缺省TCP/UDP端口号为9600。Fins协议封装在TCP/UDP之上,需要注意的是基于TCP的Fins数据包和基于UDP的包在头部上差异较大。协议的具体构造可以参考欧姆龙官方文档:

        由上图可知,Fins/TCP实际上是将Fins/UDP报文作为其负载,在其前面加了一个Fins/TCP报头。

        需要注意的是,Fins/TCP报文中负载即Fins/UDP部分不一定会出现,它可以只有一个简单的Fins/TCP报头。因此我们先介绍Fins/UDP报文的组成,然后再介绍Fins/TCP结构。

2.3 OMRON(欧姆龙)FINS协议的本质

西门子FINS协议提供了一种远程软件操作和控制PLC内部内存地址空间的通信手段和通信方式。

通过该通信协议,远端管理程序可以读和写PLC内部的内存或寄存器地址空间!!!

OMRON(欧姆龙)FINS(Factory Interface Network Service)协议的本质是一种通信协议,旨在实现工厂自动化设备之间的数据交换和控制。该协议定义了数据传输的格式、规则和命令,使得不同类型的OMRON设备(如PLC、传感器、执行器等)能够通过网络进行通信,并实现监控、控制和数据交换等功能。

FINS协议采用了基于UDP或TCP/IP的通信方式,通过指定设备的网络地址和端口号,实现设备之间的数据交换和通信。使用FINS协议,用户可以远程监控和控制工厂设备,实现工业自动化系统的实时监控和管理。

总的来说,OMRON的FINS协议的本质是一种便捷而高效的工业通信协议,为工业自动化系统的实现提供了重要的技术支持。

2.4 OMRON(欧姆龙)FINS(Factory Interface Network Service)如何与外部软件通信

OMRON(欧姆龙)的FINS(Factory Interface Network Service)协议可以通过以下方式与外部软件进行通信:

  1. OPC协议:使用OPC(OLE for Process Control)标准,可以实现与外部软件(如SCADA系统、MES系统等)的数据交换和通信。用户可以通过OPC服务器与OMRON设备建立连接,实现数据读写等操作。

  2. 软件开发包:OMRON提供了针对不同编程语言的软件开发包(如C/C++、C#等),用户可以使用这些开发包编写自定义的通信程序,通过FINS协议与OMRON设备进行通信与控制

  3. FINS网关:在一些情况下,可以使用特定的FINS网关设备,将FINS协议转换为其他协议(如Modbus TCP、Ethernet/IP等),从而实现与外部软件系统的集成和通信。

  4. 直接socket通信:通过在外部软件中编写socket通信程序,可以直接与支持FINS协议的OMRON设备进行通信,实现数据读写和控制操作。

  5. 第三方通信中间件有些第三方软件提供了与FINS协议兼容的通信中间件或驱动程序,用户可以通过这些软件实现与OMRON设备的通信。

在具体选择如何与外部软件进行通信时,需要考虑外部软件的接口支持、通信协议要求以及系统集成的具体情况。根据需求选择合适的通信方式,并遵循相应的通信协议规范进行配置和开发。

三、Fins over UDP

3.1 包格式

基于UDP的Fins协议的结构相对简单,整体结构由报头和数据两部分组成,如下所示:

其中报头部分为必要组成部分,为固定长度12个字节,数据部分非必现。

3.2 Fins/UDP Header

头部分由11定长字段组合而成,前面10个字段分别简称为:

ICF、RSV、GCT、DNA、DA1、DA2、SNA、SA1、SA2、SID,如下所示:

 上述11个字段中,除最后一个Command Code字段为2个字节外,其余所有字段均只占1个字节Command Code是最重要的字段。

3.2.1 ICF字段

  第一个字段被称为ICF字段(即Information control filed,信息控制字段),1个字节,由4个子字段组成,分述如下:

1… …. = Gateway bit,是否使用网关,0x01表示使用;
.1.. …. = Data Type bit,数据类型比特位,0x01表示为响应,0x00表示命令;
..0. …. = Reserved bit,第一个保留比特位,默认置0;
…0 …. = Reserved bit,第二个保留比特位,默认置0;
…. 0… = Reserved bit,第三个保留比特位,默认置0;
…. .0.. = Reserved bit,第四个保留比特位,默认置0;
…. ..0. = Reserved bit,第五个保留比特位,默认置0;
…. …1 = Response setting bit,第一个保留比特位响应标志为,0x01表示非必需回应,0x00表示必须进行回应。

3.2.3 RSV字段

  第二个字段被称为RSV(即Reserved,保留字段),1个字节,置0x00。

3.2.4 GCT字段

  第三个字段被称为GCT(即Gateway count ,网关计数),1个字节,置为0x02。

3.2.5 DNA字段

  第四个字段被称为DNA(即Destination network adrress,目标网络地址),1个字节,取值如下:

00:表示本地网络;
0x01~0x7F:表示远程网络。

3.2.6 DA1字段

  第五个字段被称为DA1(即Destination node number,目标节点编号),1个字节,取值如下:

0x01~0x3E: SYSMAC LINK网络中的节点号;
0x01~0x7E: YSMAC NET网络中的节点号;
0xFF: 广播传输。
  Omron的官方手册中,该字段只能取上述值,然而网上的实际抓包发现会有其它值出现,被wireshark标记为unknown。

3.2.7 DA2字段

  第六个字段被称为DA2(即Destination unit address,目标单元地址),1个字节,取值如下:

0x00:PC(CPU);
0xFE: SYSMAC NET Link Unit or SYSMAC LINK Unit connected to network;
0x10~0x1F:CPU总线单元 ,其值等于10 + 单元号(前端面板中配置的单元号)。
  Omron的官方手册中,该字段只能取上述值,然而网上的实际抓包发现会有其它值出现,被wireshark标记为unknown。

3.2.8 SNA字段

  第七个字段被称为SNA(即Source network address,源网络地址),1个字节,取值及含义同DNA字段。

3.2.9 SA1字段

  第八个字段被称为SA1(即Source node number,源节点编号),1个字节,取值及含义同DA1字段。

3.2.10 SA2字段

  第九个字段被称为SA2(即Source unit addess,源单元地址),1个字节,取值及含义同DA2字段。

3.2.11 SID字段

  第十个字段被称为SID(即Service ID,服务ID**),1个字节,取值0x00~0xFF,产生会话的进程的唯一标识。

3.3 Command Code字段

  这个字段占2个字节,其取值由第一个字节表示的大分类和第二个字节表示的子分类复合而成,取值及其含义如下表:

四、Fins Over TCP

4.1 分层结构

4.2 Fins/TCP Header

4.2.2 Magic字段

  第一个字段为Magic Bytes字段,从字面意思看是魔数字段,其ASCII码(0x46494E53)刚好是FINS这个单词,因此可以推测这个字段的值是恒定的。

4.2.3 Length字段

  第二个字段为Length字段,这个字段的值表示其后所有字段(包括可能出现的Fins/UDP包)的总长度。

4.2.4 Command字段

第三个字段为Command字段,这个字段表示消息中随附的命令的类型。同UDP模式。

这个字段的取值直接决定了后续可选的字段Client Node Address、Server Node Address是否出现,具体情况如下所示:

0x00000000:节点地址数据已发送(C->S),此时仅有Client Node Address字段;
0x00000001:节点地址数据已发送(S->C),此时Client/Server Node Address字段均出现;
其它:不会出现上述两个字段。

4.2.5 Error Code字段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请说明Vue父组件向子组件传值的方法

在Vue中&#xff0c;父组件向子组件传值主要通过props来实现。props是Vue组件之间传递数据的一种基本方式&#xff0c;允许父组件向子组件传递数据。 下面是一个简单的示例&#xff0c;说明如何在Vue中通过props从父组件向子组件传递数据&#xff1a; <template> <…

LeetCode热题Hot100-两数相加

一刷一刷 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不…

Python爬虫之正则表达式与httpx的使用与案例

三、正则表达式 1、实例 模式描述\w匹配字母、数字以及下划线\W匹配不是字母、数字以及下划线\s匹配任意空白字符&#xff0c;等价于[\t\n\r\f]\S匹配任意非空字符\d匹配任意数字&#xff0c;等价于[0-9]\D匹配任意非数字的字符\A匹配字符串开头\Z匹配字符串结尾。如果存在换…

C++中的流

前言 在 C 中&#xff0c;流&#xff08;stream&#xff09;是一种数据传输的抽象概念&#xff0c;用于在程序中对输入和输出进行操作。流分为输入流和输出流&#xff0c;允许数据在程序和外部设备&#xff08;如键盘、屏幕、文件&#xff09;之间进行传输。输入流用于从外部获…

边缘计算【智能+安全检测】系列教程-- Jeton Agx Orin 基础环境搭建

1 .前期准备 Jetson Agx Orin 比Jetson Agx Orin Xavier的算力要高&#xff0c;性能要好通常用来做自动驾驶的AI推理&#xff0c;具体外观如下图 1.刷机软件sdkmanager&#xff1a;下载链接 NVIDIA账号需要注册&#xff0c;正常一步一步往下走就行。在ubuntu18以上的系统安…

Verilog刷题笔记45

题目&#xff1a;Given the finite state machine circuit as shown, assume that the D flip-flops are initially reset to zero before the machine begins. Build this circuit. 解题&#xff1a; module top_module (input clk,input x,output z ); wire [2:0]size;dtou…

第一篇:概述、 目录、适用范围及术语 --- IAB/MRC《增强现实(AR)广告(效果)测量指南1.0 》

第一篇&#xff1a;概述、目录、适用范围及术语 - IAB与MRC及《增强现实广告效果测量指南1.0》 --- 我为什么要翻译美国IAB科技公司系列标准 ​​​​​​​​​​​​​​ 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效…

WSL+Ununtu+Docker踩坑指南

Ubuntu安装docker后启动不了&#xff0c;解决问题如下&#xff1a; 1.在wsl中安装Ubuntu&#xff0c;在Ubuntu中安装docker&#xff0c;此时用的Ubuntu的版本为Ubuntu-22.04发行版&#xff0c;安装docker教程如下。 https://docs.docker.com/engine/install/ubuntu/2. 完成安…

第十五届蓝桥杯模拟赛 第三期 (C++)

第二次做蓝桥模拟赛的博客记录&#xff0c;可能有很多不足的地方&#xff0c;如果大佬有更好的思路或者本文中出现错误&#xff0c;欢迎分享思路或者提出意见 题目A 请问 2023 有多少个约数&#xff1f;即有多少个正整数&#xff0c;使得 2023 是这个正整数的整数倍。 答案&…

Linux telnet命令教程:远程控制工具(附实例详解和注意事项)

Linux telnet命令介绍 telnet&#xff08;Teletype Network&#xff09;是一种网络协议&#xff0c;用于在远程主机和本地计算机之间建立文本式连接。它最初于1969年开发&#xff0c;是Internet的早期协议之一。telnet命令使用TCP/IP网络通过端口23建立连接&#xff0c;提供了…

MySQL B树 和B+数据的区别

MySQL B树 和B数据的区别 树分类&#xff1a;二叉树完全二叉树满二叉树堆红黑树 B树B树 首先我们搞清楚数据结构中的 树这个概念 树 分类&#xff1a; 二叉树 限定每个节点的子节点最多只有2个子节点&#xff0c;且有左右之分。完全二叉树 满二叉树 堆 红黑树 B树 B树 …

上位机图像处理和嵌入式模块部署(qmacvisual之ROI设定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 ROI&#xff0c;全称是region of interest&#xff0c;也就是感兴趣区域。这里面一般分成两种情况&#xff0c;一种是所有的算法都依赖于这个ROI&a…

谷粒商城——缓存的读写一致性

1. 对于实时性要求很强的数据&#xff0c;如果修改完数据库&#xff0c;需要保证缓存中的数据也更新为相应的最新值。此时需要在更新数据库之前加上写锁&#xff0c;在更新/删除完缓存后才释放写锁。 伪代码如下&#xff1a; lock.writeLock().lock(); updateDB(); updateCac…

Jenkins中使用Generic Webhook Trigger插件实现持续集成

项目环境 宝塔Linux面板DockerJenkinsgitee 目的 实现每次push推送dev分支到gitee上&#xff0c;Jenkins自动构建项目&#xff1b;push其它分支时&#xff0c;不运行。 实现方法 1.在Jenkins上安装Generic Webhook Trigger插件 在“系统设置–插件管理–可选插件”界面搜…

第390场 LeetCode 周赛题解

A 每个字符最多出现两次的最长子字符串 滑动窗口&#xff1a;枚举窗口的左边界&#xff0c;尽可能右移窗口的右边界。 (当然也可以暴力枚举) class Solution { public:int maximumLengthSubstring(string s) {vector<int> cnt(26);int res 0;for (int l 0, r -1, n s…

构建以太网交换网络——(生成树实验)

实验介绍 关于本实验 以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路&#xff0c;引发广播风暴以及MAC地址表不稳定等故障现象&#xff0c;从而导致用户通信质量较差&#xff0c;甚至…

【LeetCode-45.跳跃游戏】

题目详情&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返…

C语言 数组指针 指针数组

指针数组 什么是指针数组&#xff0c;他是一个数组&#xff0c;数组的元素是指针。但是指针也有多种数据类型&#xff0c;有数组指针、函数指针、整形指针、字符串指针。 现在我就使用函数指针来写代码&#xff0c;也就是函数指针数组的应用代码&#xff1a; #include <s…

Debezium日常分享系列之:设置MySQL数据库以支持数据实时采集

Debezium日常分享系列之&#xff1a;设置MySQL数据库以支持数据实时采集 一、创建用户二、启用二进制日志三、启用 GTID四、配置会话超时五、启用查询日志事件六、验证二进制日志行值选项七、Debezium技术总结 在安装和运行 Debezium 连接器之前&#xff0c;需要执行一些 MySQL…

Vscode按键占用问题解决

Vscode按键占用 在使用vscode的过程中&#xff0c;官方按键 Ctrl . 按键可以提示修复代码中的问题&#xff0c;但是发现按了没有反应。 解决问题 首先确认vscode中是否设置了这个按键&#xff0c;默认设置了的系统输入法中是否有按键冲突了&#xff0c;打开输入法设置检查 …