尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

modbus(二)用NModbus4库实现Modbus tcp从站

modbus(二)用NModbus4库实现Modbus tcp从站
📅 发布时间:2026/6/19 3:31:01
public class ModbusTcpSlaveDemo : IDisposable
{ILogger _Logger;public ModbusTcpSlaveDemo(ILogger<ModbusTcpSlaveDemo> logger){_Logger = logger;Start();}#region Modbus TCP 从站实现private TcpListener _listener;private ModbusSlave _slave;private bool _isRunning;public byte SlaveId { get; set; } = 1;public int Port { get; set; } = 502;public void Start(){if (_isRunning) return;try{// 创建TCP监听器_listener = new TcpListener(IPAddress.Any, Port);_listener.Start();// 创建Modbus TCP从站_slave = ModbusTcpSlave.CreateTcp(SlaveId, _listener);// 初始化测试数据到Modbus数据存储
            InitializeTestData();// 启动从站
            _slave.Listen();_isRunning = true;_Logger.LogInformation($"Modbus TCP从机启动成功");_Logger.LogInformation($"从站ID: {SlaveId}, 端口: {Port}");PrintTestDataInfo();}catch (Exception ex){_Logger.LogError(ex, $"Modbus TCP从机启动失败");throw;}}private void InitializeTestData(){// 获取数据存储var dataStore = _slave.DataStore;// 初始化保持寄存器 (地址 0-9) - 使用正确的APIfor (ushort i = 1; i < 10; i++){dataStore.HoldingRegisters[i] = (ushort)((i + 1) * 100);}// 初始化输入寄存器 (地址 0-9)for (ushort i = 1; i < 10; i++){dataStore.InputRegisters[i] = (ushort)((i + 1) * 50);}// 初始化线圈 (地址 0-9) - NModbus4 2.1.0 的正确API// 线圈使用 CoilDiscretes 而不是 Coilsfor (ushort i = 1; i < 10; i++){dataStore.CoilDiscretes[i] = (i % 2 == 0);}}private void PrintTestDataInfo(){var dataStore = _slave.DataStore;_Logger.LogInformation("测试数据已设置:");// 读取并显示保持寄存器var holdingValues = new List<string>();for (int i = 1; i < 5; i++){holdingValues.Add(dataStore.HoldingRegisters[i].ToString());}_Logger.LogInformation($"保持寄存器 (地址0-4): {string.Join(", ", holdingValues)}");// 读取并显示输入寄存器var inputValues = new List<string>();for (int i = 1; i < 5; i++){inputValues.Add(dataStore.InputRegisters[i].ToString());}_Logger.LogInformation($"输入寄存器 (地址0-4): {string.Join(", ", inputValues)}");// 读取并显示线圈var coilValues = new List<string>();for (int i = 1; i < 5; i++){coilValues.Add(dataStore.CoilDiscretes[i] ? "ON" : "OFF");}_Logger.LogInformation($"线圈 (地址0-4): {string.Join(", ", coilValues)}");}public void UpdateHoldingRegister(ushort address, ushort value){if (_isRunning){_slave.DataStore.HoldingRegisters[address] = value;_Logger.LogInformation($"更新保持寄存器地址{address} = {value}");}}public ushort ReadHoldingRegister(ushort address){if (_isRunning){return _slave.DataStore.HoldingRegisters[address];}return 0;}public void UpdateCoil(ushort address, bool value){if (_isRunning){_slave.DataStore.CoilDiscretes[address] = value;_Logger.LogInformation($"更新线圈地址{address} = {(value ? "ON" : "OFF")}");}}public bool ReadCoil(ushort address){if (_isRunning){return _slave.DataStore.CoilDiscretes[address];}return false;}public void Stop(){if (!_isRunning) return;try{_listener?.Stop();_isRunning = false;_Logger.LogInformation("Modbus TCP从机已停止");}catch (Exception ex){_Logger.LogError(ex, "停止Modbus从机时出错");}}public void Dispose(){Stop();}#endregion
}

 

相关新闻

  • 计算机字长与字节大小的发展历程
  • 2025年快递纸箱定做厂家权威推荐榜单:五层纸箱/重型纸箱/单层纸板箱源头厂家精选
  • 2025年镀锌角码实力厂家权威推荐榜单:万能立柱角码/角码连接件/钢结构预埋件源头厂家精选

最新新闻

  • 企业AI使用政策设计:从风险识别到落地执行的实操框架
  • 2026 成都大牌包包回收避坑指南 爱马仕香奈儿防压价防套路门店盘点 - 开心测评
  • 告别平台限制:3步实现《塞尔达传说:旷野之息》存档跨平台迁移
  • Kafka集群管理利器:Offset Explorer 3.0 核心功能实战解析
  • 2026年铝方通厂家推荐排行榜:东莞木纹铝方通/异形铝方通/铝方通吊顶/质感现代高性价比厂家精选 - 品牌发掘
  • 硬件设计-PLL篇(下):从理论到实战的性能调优

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号