WinForm 巧用 FINS UDP 协议,轻松搭建欧姆龙 PLC 通信

699 阅读3分钟

前言

在工业自动化领域,数据的实时传输和设备之间的高效沟通至关重要。

FINS(Factory Interface Network Service)通信协议是欧姆龙公司开发的一种指令/响应系统,广泛应用于工业自动化控制网络中。

本文将详细介绍FINS协议的基本格式、功能码以及如何使用HslCommunication库实现与欧姆龙PLC的通信。

一、效果展示

以下是使用FINS协议与欧姆龙PLC通信的效果展示图:

二、FINS 协议格式及功能码简介

FINS协议简介

FINS通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令/响应系统。

通过使用FINS指令,可以实现各种网络间的无缝通信,包括以太网、ControllerLink和SYSMAC LINK等。

通过编程发送FINS指令,上位机或PLC能够读写另一个PLC数据区的内容,甚至控制其运行状态,从而简化了用户程序。

FINS报文格式

FINS通信数据以UDP/IP包或TCP/IP的形式发送和接收,默认通讯端口为9600。

通信过程中包含请求报文和响应报文,每个报文由FINS报文头和FINS请求帧/响应帧组成。

以下是具体的报文格式:

FINS请求报文

FINS响应报文

三、代码示例

为了方便开发者快速上手,本文使用HslCommunication库来实现与欧姆龙PLC的通信。

安装HslCommunication

首先需要在项目中安装HslCommunication库,可以通过NuGet包管理器安装:

引用以下命名空间:

using HslCommunication;
using HslCommunication.Profinet.Omron;

Form1.cs

以下是一个简单的Windows Forms应用程序示例,展示了如何使用HslCommunication库与欧姆龙PLC进行通信:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WFormFinsUdp
{
    public partial class Form1 : Form
    {
        OmronFinsUdp omronFins;
        public Form1()
        {
            InitializeComponent();
        }

        private void btStart_Click(object sender, EventArgs e)
        {
            // 创建OmronFinsUdp实例
            omronFins = new OmronFinsUdp("192.168.1.10", 9600);

            // 连接PLC
            OperateResult connectResult = omronFins.Run();
            if (!connectResult.IsSuccess)
            {
                Console.WriteLine("连接失败: " + connectResult.Message);
                return;
            }
        }

        private void btRead_Click(object sender, EventArgs e)
        {
            // 读取D100寄存器值(16位整数)
            OperateResult<short> readResult = omronFins.ReadInt16("D100");
            if (readResult.IsSuccess)
            {
                Console.WriteLine("D100值: " + readResult.Content);
            }

            // 连续读取D100-D109共10个寄存器
            //OperateResult<short[]> batchRead = omronFins.ReadInt16("D100", 10);
            //if (batchRead.IsSuccess)
            //{
            //    for (int i = 0; i < batchRead.Content.Length; i++)
            //    {
            //        Console.WriteLine($"D{100 + i}值: {batchRead.Content[i]}");
            //    }
            //}
        }

        private void btWrite_Click(object sender, EventArgs e)
        {
            // 写入W0.05位状态
            OperateResult writeResult = omronFins.Write("W0.05", true);
            if (writeResult.IsSuccess)
            {
                Console.WriteLine("写入成功");
            }
        }
    }
}

总结

本文详细介绍了FINS协议的基本概念及其报文格式,并通过一个实际的代码示例展示了如何使用HslCommunication库与欧姆龙PLC进行通信。

通过FINS协议,用户可以轻松地实现对PLC的读写操作,极大地提高工业自动化系统的灵活性和效率。

关键词

FINS协议、欧姆龙PLC、HslCommunication、工业自动化、通信协议、Ethernet、ControllerLink、SYSMAC LINK、FINS报文格式、OmronFinsUdp

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:上位机李工

出处:mp.weixin.qq.com/s/1yPTj-WgRgv-PkI4-Ld9zQ

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!