当前位置:Gxlcms > 数据库问题 > C# 开发ModBus Tcp的服务器程序 实现ModBus Tcp数据总换

C# 开发ModBus Tcp的服务器程序 实现ModBus Tcp数据总换

时间:2021-07-01 10:21:17 帮助过:32人阅读

前言


 本文将使用一个Nuget公开的组件技术来实现一个ModBus TCP的服务器端数据引擎,方便的实现接收来自各种设备的数据。

 

在visual studio 中的Nuget管理器中可以下载安装,也可以直接在Nuget控制台输入下面的指令安装:

Install-Package HslCommunication

Nuget安装教程  http://www.cnblogs.com/dathlin/p/7705014.html

技术支持QQ群:592132877  (组件的版本更新细节也将第一时间在群里发布)

 

Reference


 

ModBus组件所有的功能类都在 HslCommunication.ModBus命名空间,所以再使用之前先添加

using HslCommunication.Enthernet;

How to Use


 

        private bool m_IsModBusStart { get; set; } = false; // 服务是否启动
        private ModBusTcpServer tcpServer; // 服务器引擎对象

        private void userButton1_Click(object sender, EventArgs e)
        {
            if (!m_IsModBusStart)
            {
                m_IsModBusStart = true;
                tcpServer = new ModBusTcpServer(); // 实例化服务器接收对象
                tcpServer.LogNet = new HslCommunication.LogNet.LogNetSingle(Application.StartupPath + @"\Logs\log.txt"); // 设置日志文件
                tcpServer.OnDataReceived += TcpServer_OnDataReceived; // 关联数据接收方法
                tcpServer.ServerStart(51234); // 绑定端口
                timer.Start(); // 启动服务
            }
        }


        private void TcpServer_OnDataReceived(byte[] object1)
        {
            // 显示出来接收到了什么数据
            BeginInvoke(new Action<byte[]>(ShowModbusData), object1);
        }


        private void ShowModbusData(byte[] modbus)
        {
            textBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " :" +
                HslCommunication.BasicFramework.SoftBasic.ByteToHexString(modbus) + Environment.NewLine);
        }            

 

 

特别说明:

服务器只负责接受Modbus TCP协议的数据,无论客户端发了读写指令,都会触发接收事件,并返回一串成功的数据。

所以在服务器端,接收客户端的读取是无效的,返回数据空。

最关键的地方在于接收来自各个设备的写入功能,这样你就可以开发一个数据总站,来负责搜集数据信息。

 

 

如下窗口就是测试例子,西门子1215C的PLC向服务器进行发送读写数据,服务器端的接收数据显示。

注意:

数据串的第7个字节为Modbus的站号信息,如下界面是FF,也即255,可以以此来区分不同的设备发来的数据信息,所以此处一个服务器实例挂的最大客户端数为256台设备,前两个字节为消息的头序列,如果设备可以固定消息头,用这个来标识设备的话,就可以区分65536台设备。

技术分享

 

参考链接:

如果你对MODBUS TCP不熟悉,那么请参照如下地址,我就是参照该地址的博客开发的代码:

http://blog.csdn.net/thebestleo/article/details/52269999

C# 开发ModBus Tcp的服务器程序 实现ModBus Tcp数据总换

标签:env   void   管理   sda   hub   cps   实例化   href   控制台   

人气教程排行