当前位置: 首页 > news >正文

南京玄武网站建设有哪些小公司网站

南京玄武网站建设,有哪些小公司网站,安徽p2p网站建设,制作一个网站多少钱啊1、介绍 对于上位机开发来说,欧姆龙PLC支持的主要的协议有Hostlink协议,FinsTcp/Udp协议,EtherNetIP协议,本项目使用Hostlink协议。 Hostlink协议是欧姆龙PLC与上位机链接的公开协议。上位机通过发送Hostlink命令,可…

1、介绍

 对于上位机开发来说,欧姆龙PLC支持的主要的协议有Hostlink协议,FinsTcp/Udp协议,EtherNetIP协议,本项目使用Hostlink协议。 

Hostlink协议是欧姆龙PLC与上位机链接的公开协议。上位机通过发送Hostlink命令,可以对PLC进行I/O读写、可以对PLC进行I/O读写、改变操作模式、强制置位/复位等操作。由于是公开协议,即便是非欧姆龙的上位设备(软件),都可以通过该协议和欧姆龙PLC实现通信链接,

Hostlink通讯协议有两种模式:C-mode和FINS

上个文章采用C-mode方式,本篇采用FINS方式

1.Cmode:专用于hostlink通讯指令,采用的是ASCII码,适用于所有OMRON的PLC通讯。只能上位机发出指令给CPU,CPU无法主动发数据给上位机,只可以通过串口进行通讯

2.FINS:采用的二进制码,适用于新开发的PLC,可用在多种网络设备(Controller  Link,  Ethernet,  etc),可被 CPU、IO模块、上位机主动发出,不同的指令分别适用于不同的信息接受单元。有两种链接协议:CMND和hostlink,当上位机是做发送源时,必须采用hostlink协议,既可以通过串口通讯也可以通过各类网络通讯(适应性较强)。 

欧姆龙PLC与上位机连接时一般采用的是Hoslink协议,它是一种简易经济的通讯方式,比较适合一台上位机和一台PLC或者多台PLC进行通讯。上位机可对PLC进行程序传送和读写等操作。HOSTLINK系统允许一台上位机通过上位机链接命令向HOSTLINK系统的PLC发送命令,PLC处理来自上位机的每条指令,并把结果传回上位机。

2、欧姆龙Fins协议

欧姆龙FINS协议:现代工业自动化领域的通信利器,欧姆龙FINS协议,全称为”Factory Interface Network Service",是日本欧姆龙(Omron)公司开发的一套高效的工业自动化通信协议。它作为欧姆龙工业设备之间的通信接日,被广泛应用于全球范围内的工业自动化领域。

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

下图表述了FINS会话开始几个数据帧的作用。FINS协议的会话有一次请求帧,请求帧中附带着发起方的节点参数。PLC端(Server端)会确认并将自己的节点参数放回给请求方。

1、Fins协议和我们常用的ModbusTCP协议不同,首先体现在有握手验证命令,就是说在正常的三次握手的基础上,还需要进行一次握手,如果能正常握手,方可通信,这样做的目的也是为了PLC通信安全。

命令均为十六进制 字节数据流

 2、Fins握手命令

发送报文格式:

返回报文格式:

3、Fins通信命令

Fins通信协议的整体命令如下所示

4、Fins读取数据

Fins读取数据的报文会在通用命令的基础上,将 Parameter替换为 Area+Address+Length,因此读取数据命令如下所示:

读取数据返回命令如下所示:

5、Fins写入数据

Fins写入数据会在通用命令的基础上,将 Parameter替换为 Area+Address+Length+Value,因此写入数据命令如下所示:

写入数据返回命令如下所示:

 3、开搞Fins协议

1、确认环境

确认你的cx-simulator的串口设置已经设置好虚拟串口工具软件的com2

 2、运行网络调试工具NetAssist.exe

3、发送握手报文

首先要有握手验证命令,就是说在正常的三次握手的基础上,还需要进行一次握手,如果能正常握手,方可通信,这样做的目的也是为了PLC通信安全。

 发送:46 49 4E 53 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 04
 接收:46 49 4E 53 00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 04 00 00 00 0A

发送报文格式:

1)发送报文分析:

发送:46 49 4E 53 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 04
接收:46 49 4E 53 00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 04 00 00 00 0A

46494E53:转换成ASCII编码就是FINS;

0000000C:指后面跟的字节长度;12个字节,不包括自己的字节长度,也就是后面的 000000000000000000000004,它有12个字节

00000000:固定命令;

00000000:错误代码;

00000004:PC节点IP,当设置为0时,会自动获取节点IP

当前我的机器IP地址是:

格式中的clientnode就是指PC的IP地址中的最后一位,也就是4,转换成16进制就是4,它占4个字节,所以是 00000004,每2位算一个字节。其实这个地址写什么都可以,PLC并不会去校验客户端的IP地址,只是一个表示占位格式而已。

发送报文共占20个字节。

2)接收报文分析如下:

报文格式:

 发送:46 49 4E 53 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 04
 接收:46 49 4E 53 00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 04 00 00 00 0A

46494E53:ASCII编码就是FINS;

00000010:指后面跟的字节长度;16个字节,不包括自己的长度

00000001:固定命令;

00000000:错误代码;

00000004:本机电脑节点IP;

0000000A:PLC节点IP

servernode就是PLC的IP地址的最后一位,其实clientnode和servernode写什么都可以,也只是表示一个占位。

接收报文共24个字节,比发送多了servernode(4个字节)

4、读取和写入CIO区的2进制数据

  设置CIO0.0到0.5的6个数据,分别是111101

 1、读取指令,读取CIO区0.0开始的6个bool数据

发送:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 30 00 00 00 00 06 
接收:46 49 4E 53 00 00 00 1C 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 01 01 01 01 00 01   

1)发送:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 30 00 00 00 00 06 

发送报文格式

发送报文分析如下:

46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 30 00 00 00 00 06

46494E53:ASCII编码:FINS;

0000001A:指后面跟的字节长度;26个字节,不包括自己的长度

00000002:固定命令;

00000000:错误代码,00000000表示没有错误

80:ICF,固定值0x80;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址,PLC的IP地址最后一位

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址,客户端IP地址最后一位

00:PC单元地址;

00:SID,固定值;

0101:读指令;

30:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);

000000:起始地址,占3个字节

0006:读个数,占2个字节

--------------------------------------------------------------------------------------------------------------------------------

2)接收:46 49 4E 53 00 00 00 1C 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 01 01 01 01 00 01

接收报文格式

接收报文分析如下:

46 49 4E 53 00 00 00 1C 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 01 01 01 01 00 01

46494E53:ASCII编码:FINS;

0000001C:指后面跟的字节长度,1C转换成10进制就是28,就是指后面的字节长度是28个(56个字符,每2个字符为1个字节)

00000002:固定命令;

00000000:错误代码,全是0表示没有错误;

C0:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0101:读指令;

0000:读取成功标识;

01 01 01 01 00 01:读到的数据,这是2进制的数据,也就是C#中的bool类型,表示true,true,true,true,false,true,与内存存储区的数据一致。

2、写入指令,写入CIO区0.0开始的6个bool数据true, true, false, false, true,true

发送:46 49 4E 53 00 00 00 20 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 30 00 00 00 00 06 01 01 00 00 01 01 
接收:46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

1)发送报文分析如下:

写入命令格式:

发送:46 49 4E 53 00 00 00 20 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 30 00 00 00 00 06 01 01 00 00 01 01 

46494E53:ASCII编码:FINS;

00000020:指后面跟的字节长度,20转换成10进制就是32,表示后面有32个字节(64个字符);

00000002:固定命令;

00000000:错误代码,全0表示没有错误;

80:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

30:写地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);

000000:起始地址,即0.0开始的地址

0006:写入个数,占2个字节

01 01 00 00 01 01 :写入数据,具体来说表示true, true, false, false, true,true

2)接收报文分析如下:

返回命令如下

46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

46494E53:ASCII编码:FINS;

00000016:指后面跟的字节长度,表示后面的字节有22个字节

00000002:固定命令;

00000000:错误代码;

C0:ICF;

00:RSV;

02:GCT;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

0000:写入成功标识,也就是说写入成功啦,没有错误。

以上读取或写入命令之前都必须先发送握手报文命令,而且只能发一次握手报文

5、读取和写入D区的ushort类型数据

首先设置内存区D区100的4个数据,注意D区设置的数据类型为10进制无符号的整数,对应C#中就是ushort类型。

1、读取D区100开始的4个数据

发送:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 82 00 64 00 00 04
接收:46 49 4E 53 00 00 00 1E 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 00 7B 00 87 00 92 03 84

1)发送报文分析如下:

46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 82 00 64 00 00 04

46494E53:ASCII编码:FINS;

0000001A:指后面跟的字节长度;26个字节,不包括自己的长度

00000002:固定命令;

00000000:错误代码,表示没有错误

80:ICF;

00:RSV;

02:GCT;

00:PLC网络地址;

0A:PLC节点地址,PLC的IP地址最后一位

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址,客户端IP地址最后一位

00:PC单元地址;

00:SID;

0101:读指令;

82:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);

006400:起始地址,100转成16进制就是64,占3个字节,就是006400

0004:读取的个数,占2个字节

2)接收报文分析如下:

46 49 4E 53 00 00 00 1E 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 00 7B 00 87 00 92 03 84

46494E53:ASCII编码:FINS;

0000001E:指后面跟的字节度 

00000002:固定命令;

00000000:错误代码,全是0表示没有错误;

C0:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0101:读指令;

0000:读取成功标识;

00 7B 00 87 00 92 03 84:读到的数据,00 7B转换成10进制就是12300 87就是135,00 92就是146,03 84就是900

这里注意10进制的无符号整数占2个字节,也就是PLC中的一个寄存器,PLC中的word,占一个寄存器,在C#占2个字节,用来表示整数(不用带小数)

2、向D区30的地址写入4个ushort数据110, 120, 130, 140

发送:46 49 4E 53 00 00 00 22 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 82 00 1E 00 00 04 00 6E 00 78 00 82 00 8C 
接收:46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

写入成功

发送报文分析

46 49 4E 53 00 00 00 22 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 82 00 1E 00 00 04 00 6E 00 78 00 82 00 8C 

46494E53:ASCII编码:FINS;

00000022:指后面跟的字节长度 ;

00000002:固定命令;

00000000:错误代码,全0表示没有错误;

80:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

82:写地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);

001E00:起始地址,即0.0开始的地址

0004:写入个数,占2个字节

00 6E 00 78 00 82 00 8C:写入数据,具体来说表示00 6E=》110, 00 78=》120, 00 82=》130, 00 8C=》140


接收报文分析

46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

46494E53:ASCII编码:FINS;

00000016:指后面跟的字节长度,表示后面的字节有22个字节

00000002:固定命令;

00000000:错误代码;

C0:ICF;

00:RSV;

02:GCT;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

0000:写入成功标识,也就是说写入成功啦,没有错误。

以上读取或写入命令之前都必须先发送握手报文命令,而且只能发一次握手报文

6、读取和写入H区的short类型数据

 设置H区的4个数据

1、读取H区100开始的4个short类型的数据

发送:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 B2 00 64 00 00 04
接收:46 49 4E 53 00 00 00 1E 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 00 6E 00 6F FF 90 FF 8F 

1)发送报文分析如下:

46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 B2 00 64 00 00 04

46494E53:ASCII编码:FINS;

0000001A:指后面跟的字节长度;26个字节,不包括自己的长度

00000002:固定命令;

00000000:错误代码,表示没有错误

80:ICF;

00:RSV;

02:GCT;

00:PLC网络地址;

0A:PLC节点地址,PLC的IP地址最后一位

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址,客户端IP地址最后一位

00:PC单元地址;

00:SID;

0101:读指令;

B2:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0,H字:B2);

006400:起始地址,100转成16进制就是64,占3个字节,就是006400

0004:读取的个数,占2个字节

2)接收报文分析如下:

46 49 4E 53 00 00 00 1E 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 00 6E 00 6F FF 90 FF 8F

46494E53:ASCII编码:FINS;

0000001E:指后面跟的字节度 

00000002:固定命令;

00000000:错误代码,全是0表示没有错误;

C0:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0101:读指令;

0000:读取成功标识;

00 6E 00 6F FF 90 FF 8F:读到的数据,00 6E转换成10进制就是110。00 6F就是111,FF 90就是65424,FF 8F就是65423,这里要将65424-65536=-112,同样65423-65536=-113,short的表示范围是 -32,768 到 32,767,表示有符号 16 位整数,ushort:代表有符号的16位整数,范围从0 到 65,535,这就也说明了,我们需要对返回的数据进行有效的处理,这个留着在后面的通讯库封装代码中去处理。

 

 2、向H区30的地址写入4个short数据,分别是-98,654,-800,327

发送:46 49 4E 53 00 00 00 22 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 B2 00 1E 00 00 04 FF 9E 02 8E FC E0 01 47 
接收:46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

发送报文分析

46 49 4E 53 00 00 00 22 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 B2 00 1E 00 00 04 FF 9E 02 8E FC E0 01 47  

46494E53:ASCII编码:FINS;

00000022:指后面跟的字节长度 ;

00000002:固定命令;

00000000:错误代码,全0表示没有错误;

80:ICF,固定值;

00:RSV,固定值;

02:GCT,固定值;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

82:写地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);

001E00:起始地址,即0.0开始的地址

0004:写入个数,占2个字节

FF 9E 02 8E FC E0 01 47:写入数据,具体来说表示FF 9E=》-98, 02 8E=》654,FC E0 =》-800,01 47=》327

同样的可以看到写入的负数,前面的第一个是F,这是因为负数用补码表示。


接收报文分析

46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

46494E53:ASCII编码:FINS;

00000016:指后面跟的字节长度,表示后面的字节有22个字节

00000002:固定命令;

00000000:错误代码;

C0:ICF;

00:RSV;

02:GCT;

00:PLC网络地址;

0A:PLC节点地址;

00:PLC单元地址;

00:PC网络地址;

04:PC节点地址;

00:PC单元地址;

00:SID;

0102:写指令;

0000:写入成功标识,也就是说写入成功啦,没有错误。

以上读取或写入命令之前都必须先发送握手报文命令,而且只能发一次握手报文

7、读取和写入W区的float类型数据

float类型的数据是包括正负整数和正负小数,如40,-98,2.34,-89.53

设置W区的5个数据

1、读取W区100开始的5个float数据

发送:46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 B1 00 64 00 00 0A
接收:46 49 4E 53 00 00 00 2A 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 47 AE 3F 81 8F 5C BF 82 00 00 42 F6 00 00 C4 75 C0 00 44 02

1)发送报文分析如下:
46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 01 B1 00 64 00 00 0A
46494E53:ASCII编码:FINS;
0000001A:指后面跟的字节长度;26个字节,不包括自己的长度
00000002:固定命令;
00000000:错误代码,表示没有错误
80:ICF;
00:RSV;
02:GCT;
00:PLC网络地址;
0A:PLC节点地址,PLC的IP地址最后一位
00:PLC单元地址;
00:PC网络地址;
04:PC节点地址,客户端IP地址最后一位
00:PC单元地址;
00:SID;
0101:读指令;
B1:读地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0,H字:B2);
006400:起始地址,100转成16进制就是64,占3个字节,就是006400
000A:读取的个数,占2个字节,这里为什么是A,即10个,因为一个float类型是占2个寄存器的,那么5个float就是10个寄存器,所以是A,需要注意这个不同的地方。

2)接收报文分析如下:
46 49 4E 53 00 00 00 2A 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 01 00 00 47 AE 3F 81 8F 5C BF 82 00 00 42 F6 00 00 C4 75 C0 00 44 02
46494E53:ASCII编码:FINS;
0000001E:指后面跟的字节度 
00000002:固定命令;
00000000:错误代码,全是0表示没有错误;
C0:ICF,固定值;
00:RSV,固定值;
02:GCT,固定值;
00:PLC网络地址;
0A:PLC节点地址;
00:PLC单元地址;
00:PC网络地址;
04:PC节点地址;
00:PC单元地址;
00:SID;
0101:读指令;
0000:读取成功标识;
47 AE 3F 81 8F 5C BF 82 00 00 42 F6 00 00 C4 75 C0 00 44 02:读到的数据,47 AE 3F 81是第一个数据, 8F 5C BF 82是第二个数据,00 00 42 F6是第三个数据,00 00 C4 75是第四个数据,C0 00 44 02是第五个数据,这里为什么是这样的数据,如果转成10进制都不是当初设置的1.01,-1.02,123,-980,523,这是因为存在大小端,字节序的问题,这需要在程序后端进行处理,这里返回的数据是没有问题的,等后面在我的封装通讯库的进行处理,保证响当当的没有问题。

2、向W区30的地址写入5个数据120, -130, -140,15.6f,-89.4f

发送:46 49 4E 53 00 00 00 2E 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 B1 00 1E 00 00 0A 00 00 42 F0 00 00 C3 02 00 00 C3 0C 99 9A 41 79 CC CD C2 B2
接收:46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

发送报文分析
46 49 4E 53 00 00 00 2E 00 00 00 02 00 00 00 00 80 00 02 00 0A 00 00 04 00 00 01 02 B1 00 1E 00 00 0A 00 00 42 F0 00 00 C3 02 00 00 C3 0C 99 9A 41 79 CC CD C2 B2  

46494E53:ASCII编码:FINS;
0000002E:指后面跟的字节长度 ;
00000002:固定命令;
00000000:错误代码,全0表示没有错误;
80:ICF,固定值;
00:RSV,固定值;
02:GCT,固定值;
00:PLC网络地址;
0A:PLC节点地址;
00:PLC单元地址;
00:PC网络地址;
04:PC节点地址;
00:PC单元地址;
00:SID;
0102:写指令;
B1:写地址区(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0);
001E00:起始地址, 
000A:写入个数,占2个字节,要写入5个float的,每个float占2个寄存器,5个就是10个寄存器,所以是A;
00 00 42 F0 00 00 C3 02 00 00 C3 0C 99 9A 41 79 CC CD C2 B2:写入数据,具体来说00 00 42 F0是第一个, 00 00 C3 02是第二个, 00 00 C3 0C是第三个, 99 9A 41 79是第四个, CC CD C2 B2是第五个。但这5个数据都不是120, -130, -140,15.6f,-89.4f转换成16进制的表示,这也是因为存在大小端,字节序的问题,在后面的通讯库封装中来处理,发送的报文指令绝对没有错。
 

接收报文分析
46 49 4E 53 00 00 00 16 00 00 00 02 00 00 00 00 C0 00 02 00 0A 00 00 04 00 00 01 02 00 00

ASCII编码:FINS;
00000016:指后面跟的字节长度,表示后面的字节有22个字节
00000002:固定命令;
00000000:错误代码;
C0:ICF;
00:RSV;
02:GCT;
00:PLC网络地址;
0A:PLC节点地址;
00:PLC单元地址;
00:PC网络地址;
04:PC节点地址;
00:PC单元地址;
00:SID;
0102:写指令;
0000:写入成功标识,也就是说写入成功啦,没有错误。
以上读取或写入命令之前都必须先发送握手报文命令,而且只能发一次握手报文

4、小结

这节,我们读取和写入了CIO区,D区,H区,W区的二进制数据,ushort数据,short数据,float数据,充分熟悉了fins指令的格式要求,都有固定的格式。

  FINS协议是一种基于TCP/IP网络通信的实时通信协议.能够实现欧姆龙工业设备之间的数据交换和控制指令传输。它采用了客户端/服务器模型,客户端发送请求,服务器返回响应,通过建立连接、传输数据包来实现设备之间的通信。
  FINS协议的核心是消息和指令的传输。消息格式包括消息头、命令和数据区。消息头定义了消息的类型、长度和地址等信息。命令部分包含了具体的指令内容,如读取数据、写入数据或执行其他操作。数据区则是存储实际的数据信息。

注意几点:

1)读取命令0101,写入命令0102,固定的,不能改

2)存储区代号:(D位:02,D字:82,W位:31,C位:30,W字:B1,C字:B0,H字:B2),固定的不能改

3)协议头部:46 49 4E 53,转换成ascii码就是fins

码字不易,截图不易,写作不易,共享不易,请多多点赞支持。



 

http://www.yayakq.cn/news/951484/

相关文章:

  • 舞钢市城乡建设局网站定制床需要多少钱
  • 网站建设岗位主要做什么国外做化工网站
  • 做网站开发的有哪些公司定制wordpress主题多少钱
  • 成都品牌建设网站公司软件外包公司人数
  • 做网站没有手机端网站建设金手指排名稳定
  • 成都培训网站建设详情页设计说明怎么写
  • iis 发布网站 404百度广告联盟推广链接
  • 毕业设计做企业门户网站个人网站制作手机版
  • 哪些公司网站推广能赚钱做网站前景怎么样
  • 正安网站建设网店运营推广中级实训
  • 绵阳网站seo网站建设哪几家公司好
  • 东城网站建设哪家好wordpress 5.2中文版
  • 搜索引擎竞价排名网站优化制作
  • 企业官网网站模板下载不了免费企业推广网站
  • 搜狐员工做网站的工资多少钱企业管理培训公司排名
  • 我做的网站不能往下拉Uie主题WordPress
  • 领诺科技网站建设自己做的小网站
  • 网站核心词如何做文字生成图片
  • 海南州建设厅官方网站网站策划需要具备什么
  • g4560做网站服务器至设计网站
  • 南京培训网站建设网站开发用什么编辑器好点
  • 网站推广的方法及技巧品牌营销策略四种类型
  • 百度网站怎么申请注册淘宝网站的建设目的
  • wordpress主题官方网站湖南省第四工程公司官网
  • 代做土木工程专业毕业设计网站乡镇医院网站建设
  • 后盾网原创实战网站建设教程1-15123手机浏览器
  • 北京城乡建设部网站首页北京wordpress使用什么语言
  • 界首网站建设查询网站备案号app
  • 云服务器能放网站吗设计房子装修效果图软件
  • 做网站编辑好还是新媒体编辑台州汇客网站建设