欧姆龙FinsTcp通信详解(一)--PLC常用命令格式

1 获取PLC节点地址

PLC和上位机建立TCP通信后,可以发送Fins Node Address Data Send(Client to Server) Command命令获取PLC的节点地址。

具体格式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdQp9bKS-1571825512529)(https://note.youdao.com/yws/api/personal/file/WEBdf968b520a3e150bd6f157bc1eb8c18f?method=download&shareKey=8bb855386e0290087ee1db7c7bfa97de)]

详细说明:

列表内容(十六进制)说明
Header46494E53ASCII码:FINS
Length0000000C从command之后的数据长度
Command00000000
Error code00000000没用,服务器不需要检测错误
Client node address(Fins node address of Fins/Tcp client00000000到000000FE0到254。设置为0,自动获取客户端的Fins节点地址
该命令是在建立Tcp连接之后发送的,当FINS/TCP客户端或服务器建立连接后,再次发送该命令会产生错误,错误代码会通过FINS FRAME SEND ERROR NOTIFICATION命令发送给客户端, 并中断连接。

2 读写PLC地址内容

PLC和上位机建立通信后,可以通过Fins Frame Send命令读写PLC地址。Fins Frame Send命令分为两部分:Fins/Tcp Header和Fins frame。具体格式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asIIhu6b-1571825512531)(https://note.youdao.com/yws/api/personal/file/WEB1fc1bdb379ced01eee42ae5827dbda6d?method=download&shareKey=80d933acc01d3971d88846d814047034)]

详细说明:

列表内容(十六进制)说明
Header46494E53ASCII码:FINS
Length00000014到000007E4从command之后的数据长度,包含FinsFrame
Command00000002
Error code00000000没用,接收结束后不需要检测错误
FINS frame……从Fins header ICF到最后的数据

2.1 Fins/Tcp Header

Fins/Tcp Header格式相对简单,内容见上表。

2.2 Fins Frame

FINS通信服务是通过FINS命令帧(FINS command frames)及其对应的响应帧(response frames)来实现的。 (也存在没有回应的命令)。
命令帧(command frames)和响应帧(response frames)用于存储传送控制信息,并且都包含FINS header,FINS命令字段存储命令,FINS参数/数据字段用于存储命令参数和传输/响应数据。

2.2.1 Fins Command Frame

Fins Command Frame的格式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Jf3hMFV-1571825512532)(https://note.youdao.com/yws/api/personal/file/WEB920e6fd29e415f9247fcb7a3a1dd4838?method=download&shareKey=67530c7fa5bc79801e3a290cfea0c4a0)]

2.2.2 Fins Header信息
列表说明
ICF (Information Control Field)
RSV (Reserved by System)设置为00(Hex)
GCT (Permissible Number of Gateways)设置为02(Hex)
DNA (Destination Network Address) 指定目标节点所在的网络的编号
00(hex):           本地网络
01 to 7F (Hex): 目标网络地址(1到127)
DA1 (Destination Node Address) 指定发送命令的节点的编号。 这个节点地址是FINS所用的地址,不同于IP用于以太网的地址:
00 (Hex):           本地PLC
01 to FE (Hex): 目标节点地址 (1 to 254)
FF (Hex):           广播
当安装多个通信单元时,DA1指定连接到由DNA指定的网络的单元的节点地址
DA2 (Destination Unit Address) 指定目标节点上的单元数:
00 (Hex):           PLC(CPU单元)
10 to 1F (Hex): CPU总线单元号0〜15(16〜31)
E1 (Hex):           内板
FE (Hex):           连接到网络的单元
SNA (Source Network Address) 指定本地节点所在网络的编号。 可以指定的数字范围与DNA相同
SA1 (Source Node Address) 指定本地节点地址。 可以指定的数字范围与DA1相同
SA2 (Source Unit Address) 指定本地节点的单元号。可以指定的数字范围与DA2相同
SID (Service ID) SID用于标识数据发送的过程。 SID可以设置为00到FF十六进制的任何数字。SID用于检测响应请求是否正确,当发送节点与响应节点的SID值相同,代表响应的数据是请求的数据,不相同,代表响应的数据非请求数据。
2.2.3 FINS command和FINS parameter/data

常用Fins命令如下表所示:

类型命令代码名称功能
MRSR
访问I/O存储区0101读内存区读取连续I/O存储区字的内容
0102写内存区写入连续I/O存储区字的内容
0103填充内存区将相同的数据写入指定范围的I/O存储器区
0104多个存储区读取读取指定的非连续I/O存储区字
0105存储区传输将连续存储I/O存储区字内容复制到另外的I/O存储区
访问参数区0201读取参数区读取连续参数区字内容
0202写入参数区写入连续参数区字内容
0203填充参数区将相同数据写入到指定范围参数区域字
改变操作模式0401RUN将CPU单元的操作模式更改为RUN或MONITOR
0402STOP将CPU单元的操作模式更改为编程
读取状态0601读取CPU单元状态读取CPU单元状态
0620(*)STOP读取最大、最小和平均周期时间
错误日志2101错误清除清除错误或错误信息
2102读取错误日志读取错误日志
2103清除错误日志清除错误日志指针
2.2.4 I / O存储器地址标识
区域数据类型CS/CJ/CP/NSJ-seriesCVM1/CV-series占用字节长度
存储区代码存储区地址存储地址存储区代码存储区地址存储地址
DM区DMBit02D0000000到D3276715000000到7FFF0F………………1
DM区DMWord82D00000到D32767000000到7FFF0082D00000到D32767000000到7FFF002

3 常用Fins Command格式

3.1 读存储区: 01 01

发送格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFgTMJa4-1571825512532)(https://note.youdao.com/yws/api/personal/file/WEBdc7714f99a3300c54ab5636b101ba47a?method=download&shareKey=dbe1c4b5d180f18ddb5ba4ec46f063d1)]

返回格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1hhdDYf-1571825512533)(https://note.youdao.com/yws/api/personal/file/WEBa080804848023c94b443f869c90b965a?method=download&shareKey=88adaf80c4902bf124337762fcbc4d4b)]

举例:

读取DM区地址100,连续10个地址的数据

发送命令:010182006400000A
返回命令:010100000102030405060708090A

3.2 写入存储区:01 02

发送格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G95t2wxF-1571825512533)(https://note.youdao.com/yws/api/personal/file/WEBedfb96b9b171595cf41a2220e6a9447e?method=download&shareKey=9dae1f29b956fc2378a80e19ca5565cc)]

返回格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O0iPkf9P-1571825512534)(https://note.youdao.com/yws/api/personal/file/WEB9f8c7cc1658bfd56cd0a4105dd6337fc?method=download&shareKey=af063328bb91ec681efbd2eeb22534c8)]

结束码

主码子码描述问题原因解决方法
00:正常情况00正常结束-----
01服务被取消服务被取消检查PLC目标节点容量或数据连接状态
01:本地节点错误01本地节点错误本地节点不在网络中将目标节点添加到网络中
02令牌超时超出最大节点地址设置本地节点小于最大节点地址
03重试失败在指定的重试次数内,发送失败测试通信是否正常
04发送的帧太多超出设置的最大发送值循环发送或重设最大发送值
05节点地址错误节点地址设置错误检查旋转开关的设置,以确保地址在范围内,并且每个地址只在同一个网络中设置一次
06节点地址重复相同的节点地址在同一个网络中设置两次更改相同地址中的节点地址
02:目标节点错误01目标节点不在网络中目标节点不在网络中将目标节点添加到网络中
02Unit missingThere is no Unit with thespecified unit address.Check the destination unit address
03Third node missingThe third node does not exist.Check the unit address of the third node. Check the node address of the third node in the send data for CMND(490).
Broadcasting was specified. Specify only one node for the third node.
04Destination node busyThe destination node is busy.Increase the number of retries or review the system so that the destination node does not receive so many messages.
05Response timeoutThe message was destroyed by noise.Increase the number of retries or test communications between nodes to see if there is too much noise.
The response monitor time is too short.Increase the length of the response monitor time.
The send/receive frame was discarded.Take appropriate measures based on the error history.

注:结束码未完,详见w342-e1-16_cs1_cj1_cp1_com_cmd.pdf中5-1-3 End Code章节中

通信手册下载地址:Ethernet Units Operation Manual

### FINS协议TCP通信配置和实现 FINS(Factory Interface Network Service)是欧姆龙PLC专用的通信协议,支持通过TCP/IP协议栈实现PLC与上位机或其他设备之间的高效通信。FINS/TCP协议适用于工业自动化环境,能够提供稳定、可靠的数据传输。 #### 1. FINS/TCP通信的基本配置 在配置FINS/TCP通信时,需要确保以下关键参数正确设置: - **IP地址与端口号**:欧姆龙PLC通常使用默认端口9600进行FINS/TCP通信。需要确保上位机和PLC处于同IP子网,并正确配置IP地址。 - **节点地址(Node Address)**:每个PLC在网络中都有个唯的节点地址,通常通过PLC的配置软件进行设置。 - **网络ID与单元地址**:在FINS协议中,设备可以通过网络ID、节点地址和单元地址来唯标识。 #### 2. FINS/TCP通信的实现 在C#中实现FINS/TCP通信,可以使用.NET框架中的`TcpClient`类来建立与PLC的连接,并通过发送和接收FINS协议数据包实现数据交换。以下是实现FINS/TCP通信的基本步骤: ##### 建立TCP连接 使用`TcpClient`类连接到PLC的FINS/TCP端口(默认为9600): ```csharp using System.Net.Sockets; TcpClient tcpClient = new TcpClient(); tcpClient.Connect("192.168.1.10", 9600); // 替换为PLC的实际IP地址 NetworkStream stream = tcpClient.GetStream(); ``` ##### 构建FINS命令 FINS协议中的命令通常以二进制格式发送,包含命令头、地址信息和数据。例如,读取PLC寄存器的命令可能如下: ```csharp byte[] command = new byte[] { 0x01, // 命令类型:读取 0x02, // 子命令 0x03, // 网络ID 0x04, // 节点地址 0x05, // 单元地址 0x06, // 数据长度高位 0x07 // 数据长度低位 }; stream.Write(command, 0, command.Length); ``` ##### 接收响应数据 PLC接收到命令后,会返回响应数据。需要从`NetworkStream`中读取响应: ```csharp byte[] response = new byte[1024]; int bytesRead = stream.Read(response, 0, response.Length); // 处理响应数据 ``` ##### 关闭连接 通信完成后,关闭TCP连接以释放资源: ```csharp tcpClient.Close(); ``` #### 3. FINS/TCP通信的高级功能 - **双向通信**:支持从上位机向PLC发送命令,同时也能接收PLC返回的数据[^2]。 - **错误处理**:在实际应用中,建议添加错误处理机制,如超时检测和重试逻辑,以提高通信的稳定性。 - **数据解析**:接收到的响应数据需要根据FINS协议规范进行解析,以提取所需的信息。 #### 4. 应用场景 FINS/TCP通信广泛应用于工业自动化领域,例如: - **设备监控**:通过实时读取PLC寄存器数据,监控设备状态并进行故障诊断。 - **远程控制**:通过发送命令控制PLC执行特定操作,实现远程控制功能。 - **数据采集**:定期采集PLC中的数据,用于分析和报表生成。 #### 5. 技术优势 - **高效通信**:FINS/TCP协议能够确保数据传输的实时性和准确性。 - **灵活配置**:支持多种网络环境和通信需求,适应性强。 - **易于集成**:代码结构清晰,便于开发者快速集成到现有项目中[^2]。
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值