当前位置: 首页 > 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
                //  写入多个线圈: WriteMultipleCoils

                ushort[] 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.dtcms.com/a/49026.html

相关文章:

  • 详解DeepSeek模型底层原理及和ChatGPT区别点
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(三)
  • 什么是 Prompt?——一篇详细的介绍
  • 一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类
  • 【向量数据库Weaviate】 和Elasticsearch的区别
  • 0012SSM+VUE学生考勤管理系统的设计与实现程序+文档
  • PGlite:浏览器中运行的PostgreSQL
  • ‌Vetur‌ 与 Vue-Official 的区别
  • Leetcode 316 去除重复字母
  • 第10篇:文件IO与数据持久化(下)(JSON、二进制文件)
  • 塔能物联运维:城市照明运维成本的破局之道
  • Python:全方位赋能,开启科技前沿无限可能
  • win32汇编环境,窗口程序中使控件子类化的示例一
  • 使用Linux服务器搭建。
  • (十 九)趣学设计模式 之 中介者模式!
  • Linux IO编程核心要点解析:文件、流与缓冲区实战指南
  • 多空狙击线-新指标-图文教程,多空分界买点以及强弱操盘技术教程,通达信炒股软件指标
  • 从DNS到TCP:DNS解析流程和浏览器输入域名访问流程
  • QKV 注意力机制在Transformer架构中的作用,和卷积在卷积神经网络中的地位,有哪些相似之处?
  • 使用vue3+element plus 的table自制的穿梭框(支持多列数据)
  • 【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法
  • Linux下安装VS Code
  • HOW - 在Windows浏览器中模拟MacOS的滚动条
  • 栈和队列的模拟实现
  • 从暴力破解到时空最优:LeetCode算法设计核心思维解密
  • Metal学习笔记十:光照基础
  • 【jenkins配置记录】
  • I2C总线详细介绍
  • Kafka 主题 retention.ms 配置修改及深度问题排查指南
  • NAT,代理服务,内网穿透