前言
本文将使用一个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
时间: 2024-10-03 09:02:09