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

c#实现modbus rtu定时采集数据

以下是使用C#实现Modbus RTU定时采集数据的完整代码示例,包含定时任务、数据采集和异常处理:

csharp

复制

using System;
using System.IO.Ports;
using System.Timers;

public class ModbusRtuCollector : IDisposable
{
    private readonly SerialPort _serialPort;
    private readonly Timer _timer;
    private readonly object _portLock = new object();

    // 配置参数
    public string PortName { get; }
    public int BaudRate { get; }
    public int PollingInterval { get; set; } = 1000; // 默认1秒采集间隔

    public ModbusRtuCollector(string portName, int baudRate)
    {
        PortName = portName;
        BaudRate = baudRate;
        
        // 初始化串口
        _serialPort = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One)
        {
            ReadTimeout = 500,
            WriteTimeout = 500,
            Handshake = Handshake.RequestToSend // RTS控制收发
        };

        // 初始化定时器
        _timer = new Timer(PollingInterval);
        _timer.Elapsed += async (s, e) => await PollDataAsync();
    }

    public void Start()
    {
        if (!_serialPort.IsOpen)
        {
            _serialPort.Open();
            _timer.Start();
            Console.WriteLine($"已启动数据采集,端口:{PortName}");
        }
    }

    public void Stop()
    {
        _timer.Stop();
        if (_serialPort.IsOpen) _serialPort.Close();
        Console.WriteLine("已停止数据采集");
    }

    private async Task PollDataAsync()
    {
        try
        {
            // 示例:读取设备地址1的保持寄存器40001-40004
            var result = await ReadHoldingRegistersAsync(0x01, 0x0000, 4);
            var timestamp = DateTime.Now.ToString("HH:mm:ss.fff");
            
            Con

相关文章:

  • Spring AI:让AI应用开发更简单
  • JavaScript系列03-异步编程全解析
  • 【Markdown 语法简洁讲解】
  • OpenHarmony启动系统-U-Boot简介和源码下载与编译
  • CMU15445(2023fall) Project #4 - Concurrency Control踩坑历程
  • Spring Boot 日志配置与常见问题解析(详解)
  • 【PHP脚本语言详解】为什么直接访问PHP文件会显示空白?从错误示例到正确执行!
  • mysql内置工具导入csv包,简单便捷高效
  • 蓝桥杯C语言组:基于蓝桥杯煤球数目问题的数列累加解决方案研究
  • 基于springboot的高校物品捐赠系统
  • C++ Qt OpenGL渲染FFmpeg解码后的视频
  • Vue+Elementui 全局配置el-table表格列宽可拖拽
  • 如何快速的解除oracle dataguard
  • python项目依赖哪些whl
  • Pwntools 的详细介绍、安装指南、配置说明
  • Unity Burst编译
  • DeepSeek助力科研:文献处理新方式
  • git管理的项目 发布时有收费版/免费版/客户定制版,如何管理分支,通过merge(合并) 还是 cherry-pick(挑拣) 引入更新的代码?
  • 数据结构之八大排序算法详解
  • 看视频学习方法总结
  • 门户网站建设和推广/哪里可以买链接网站
  • 做b2b网站用什么架构/南京网站设计公司大全
  • 网站劫持怎么做/关键词优化是怎样收费的
  • 高端网站设计定制公司/网站建设案例
  • python基础教程第二版/东莞seo建站优化哪里好
  • 织梦网站如何做地区分站/社区营销