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

NModbus 连接到Modbus服务器(Modbus TCP)

 1、在项目中通过NuGet添加NModbus,在界面中添加一个Button。

using NModbus.Device;
using NModbus;
using System.Net.Sockets;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Diagnostics;namespace WpfAppModbus
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void btnRead_Click(object sender, RoutedEventArgs e){// 1. 连接到 Modbus 服务器(Modbus TCP)string ipAddress = "127.0.0.1"; // 设备的 IP 地址int port = 502; // Modbus TCP 默认端口TcpClient client = new TcpClient(ipAddress, port);// 2. 获取 Modbus TCP 设备的协议客户端var factory = new ModbusFactory();IModbusMaster master = factory.CreateMaster(client);// 3. 读取从站设备的寄存器ushort startAddress = 0;  // 寄存器起始地址ushort numRegisters = 10; // 读取 10 个寄存器// 4.从站地址(Slave ID)byte slaveId = 2;try{// 读取保持寄存器 // ReadHoldingRegisters: 读取保持寄存器的值。参数包括从站地址(Slave ID)、起始地址和要读取的寄存器数量。// NModbus 还支持其他 Modbus 操作,例如://  读取输入寄存器: ReadInputRegisters//  读取线圈状态: ReadCoils//  写入单个寄存器: WriteSingleRegister//  写入多个寄存器: WriteMultipleRegisters//  写入单个线圈: WriteSingleCoil//  写入多个线圈: WriteMultipleCoilsushort[] registers = master.ReadHoldingRegisters(slaveId,startAddress, numRegisters);// 输出结果Debug.WriteLine("读取到的寄存器值:");foreach (var register in registers){Debug.WriteLine(register);}}catch (Exception ex){Debug.WriteLine($"读取错误: {ex.Message}");}// 5. 关闭连接client.Close();}}
}

2、使用Modscan32软件模拟一个Modbus服务器,选择文件->新建,设置Device Id、Address、Lenght,在下拉框中选择03:HOLDING REGISTER。在下方灰色框中双击要修改的数据。

https://download.csdn.net/download/xingchengaiwei/90341117

3、运行程序后,读取到的数据如下。

http://www.lryc.cn/news/546207.html

相关文章:

  • 蓝桥杯 之 图形规律
  • 多线程学习之路
  • 英码科技携昇腾DeepSeek大模型一体机亮相第三届北京人工智能产业创新发展大会
  • 【AI】如何理解与应对AI中的敏感话题:详细分析与实用指南
  • (十 三)趣学设计模式 之 模版方法模式!
  • 20250225-代码笔记03-class CVRPModel AND other class
  • 【postman】postman找回接口数据
  • Milvus向量数据库部署
  • 显式 GC 的使用:留与去,如何选择?
  • 探秘基带算法:从原理到5G时代的通信变革【二】Viterbi解码
  • 从零实现高并发内存池
  • 3-7 WPS JS宏 工作表移动复制实例-2(多工作簿的多工作表合并)学习笔记
  • 【计算机网络】考研复试高频知识点总结
  • IDEA Tab 页设置多行显示
  • Spark核心之02:常用算子详解
  • Redis---LRU原理与算法实现
  • matlab 包围盒中心匹配法实现点云粗配准
  • Mermaid语法介绍
  • RHCE9.0版本笔记3:创建、查看和编辑文本文件
  • VSCode知名主题带毒 安装量900万次
  • deepseek、腾讯元宝deepseek R1、百度deepseekR1关系
  • 二、QT和驱动模块实现智能家居-----5、通过QT控制LED
  • 基于Android平台的SOME/IP测试模块 EPT-ETS
  • QT实现计算器
  • Go红队开发—语法补充
  • 二、Redis 安装与基本配置:全平台安装指南 服务器配置详解
  • halcon学习笔记1
  • 解决Docker拉取镜像超时错误,docker: Error response from daemon:
  • Masscan下载Linux安装
  • js的简单介绍