欢迎光临
我们一直在努力

基于C# Windows Forms开发的OPCDA客户端工具,核心功能是实现从OPCDA服务器采集数据,并通过MQTT协议将数据上传至指定服务器

OPCDA转MQTT数据上传工具功能说明(基于原始代码解读)

一、程序概述

本程序是一款基于C# Windows Forms开发的OPCDA客户端工具,核心功能是实现从OPCDA服务器采集数据,并通过MQTT协议将数据上传至指定服务器。程序依赖OPCDAAuto.dll组件实现OPC通信,通过MQTTnet库处理MQTT协议交互,支持配置参数持久化存储和运行日志记录,整体设计围绕工业数据采集与转发的核心需求展开。

二、代码结构与模块划分

(一)核心文件清单

文件名功能描述
Form1.cs 主窗口逻辑,包含核心业务流程
Form1.Designer.cs 窗口控件布局与初始化
jsonFormat.cs 配置数据的JSON序列化/反序列化模型
Logger.cs 日志记录工具类
LoggerEnum.cs 日志类型枚举定义
Program.cs 程序入口点
AssemblyInfo.cs 程序集属性配置
Resources.Designer.cs 资源文件访问类
Settings.Designer.cs 应用程序设置访问类

(二)模块关系流程图

#mermaid-svg-8RhwRGnOPC5DBtQf {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .error-icon{fill:#552222;}#mermaid-svg-8RhwRGnOPC5DBtQf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8RhwRGnOPC5DBtQf .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8RhwRGnOPC5DBtQf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8RhwRGnOPC5DBtQf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8RhwRGnOPC5DBtQf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8RhwRGnOPC5DBtQf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8RhwRGnOPC5DBtQf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8RhwRGnOPC5DBtQf .marker.cross{stroke:#333333;}#mermaid-svg-8RhwRGnOPC5DBtQf svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8RhwRGnOPC5DBtQf .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .cluster-label text{fill:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .cluster-label span{color:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .label text,#mermaid-svg-8RhwRGnOPC5DBtQf span{fill:#333;color:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .node rect,#mermaid-svg-8RhwRGnOPC5DBtQf .node circle,#mermaid-svg-8RhwRGnOPC5DBtQf .node ellipse,#mermaid-svg-8RhwRGnOPC5DBtQf .node polygon,#mermaid-svg-8RhwRGnOPC5DBtQf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8RhwRGnOPC5DBtQf .node .label{text-align:center;}#mermaid-svg-8RhwRGnOPC5DBtQf .node.clickable{cursor:pointer;}#mermaid-svg-8RhwRGnOPC5DBtQf .arrowheadPath{fill:#333333;}#mermaid-svg-8RhwRGnOPC5DBtQf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8RhwRGnOPC5DBtQf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8RhwRGnOPC5DBtQf .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-8RhwRGnOPC5DBtQf .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-8RhwRGnOPC5DBtQf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8RhwRGnOPC5DBtQf .cluster text{fill:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf .cluster span{color:#333;}#mermaid-svg-8RhwRGnOPC5DBtQf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8RhwRGnOPC5DBtQf :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}Program.csForm1.csForm1.Designer.csjsonFormat.csLogger.csLoggerEnum.csOPCDAAuto.dllMQTTnet库

三、核心功能模块详解

(一)配置管理模块(基于jsonFormat.cs)

  • 数据模型定义
    采用类结构映射配置文件内容,包含MQTT和OPCDA两部分配置:

    public class MainRootJson
    {
    public MQTTcfg MqttCfg { get; set; }
    public OPCDAcfg OpcdaCfg { get; set; }
    }
    public class MQTTcfg
    {
    public string Addr { get; set; } // MQTT服务器地址
    public string Port { get; set; } // 端口
    public string ClientId { get; set; } // 客户端ID
    public string UserName { get; set; } // 用户名
    public string Password { get; set; } // 密码
    public string Topic { get; set; } // 发布主题
    public string Inerval { get; set; } // 上传间隔(秒)
    }
    public class OPCDAcfg
    {
    public string Addr { get; set; } // OPC服务器地址
    public string Host { get; set; } // OPC服务名称
    public List<Item> Item { get; set; } // 采集项列表
    }

  • 配置操作

    • 读取配置:通过cfgRead()方法从程序目录下的config.json文件加载配置,解析后填充到界面控件
    • 保存配置:通过cfgSave()方法将界面配置参数序列化后写入config.json文件
  • (二)OPCDA通信模块(基于Form1.cs)

  • 核心对象

    • OPCServer myOPCsvr:OPCDA服务器实例
    • OPCGroups opcGroups:OPC组集合
    • OPCGroup opcGroup:数据采集组
    • OPCItems opcItems:具体采集项集合
  • 主要功能

    • 服务搜索:通过button_opcda_search_Click事件实现,搜索指定IP下的OPCDA服务并填充到下拉框
    • 服务器连接:ConnectOpcdaServer方法实现与OPCDA服务器的连接,设置组属性:opcGroup.UpdateRate = 1000; // 更新频率1000ms
      opcGroup.IsSubscribed = true; // 启用订阅模式
      opcGroup.DataChange += opcGroup_DataChange; // 绑定数据变化事件

    • 数据采集:通过opcGroup_DataChange事件处理函数获取实时数据,更新本地缓存数组Data_Array
  • (三)MQTT通信模块(基于Form1.cs)

  • 核心对象

    • MqttClient mqttClient:MQTT客户端实例
    • System.Timers.Timer timer_publish:数据发布定时器
  • 主要功能

    • 服务器连接:ConnectMqttServerAsync方法实现MQTT连接,支持用户名密码认证
    • 数据发布:MqttClient_Send方法将数据发布到指定主题
    • 定时上传:通过定时器timer_publish按配置间隔触发数据上传,默认10秒
  • 数据格式
    上传数据采用JSON格式,包含采集项值和时间戳:

    {"参数1":1,"参数2":2,"time":"2025-10-20 10:00:00"}

  • (四)日志记录模块(基于Logger.cs与LoggerEnum.cs)

  • 日志类型
    通过LogType枚举定义日志级别:

    public enum LogType { All, Information, Debug, Success, Failure, Warning, Error }

  • 日志处理

    • 日志存储路径:C:\\\\OpcDaLogs\\\\Log\\\\[日期]\\\\
    • 记录内容:包含时间戳、日志类型、消息详情,异常日志额外记录堆栈信息
    • 界面同步:重要日志同时显示在主窗口的textBox2控件中
  • 四、界面功能与操作流程

    (一)界面控件功能

    控件区域主要控件功能描述
    OPCDA配置区 服务器IP输入框 输入OPCDA服务器IP地址
    服务查找按钮 搜索指定IP下的OPCDA服务
    服务名称下拉框 选择要连接的OPCDA服务
    参数添加相关控件 管理需要采集的OPCDA参数列表
    MQTT配置区 服务器地址、端口输入框 配置MQTT服务器连接信息
    认证信息输入框 设置MQTT连接的用户名和密码
    主题和间隔输入框 配置数据发布主题和上传频率
    操作区 连接/运行按钮 控制OPCDA和MQTT的连接与数据上传
    参数保存按钮 保存当前配置到config.json文件
    日志区 日志显示文本框 实时显示程序运行状态和错误信息

    (二)典型操作流程

  • 程序启动后自动读取config.json配置文件
  • 配置OPCDA参数:输入服务器IP→点击"查找"→选择服务→添加采集参数
  • 配置MQTT参数:输入服务器地址、端口、认证信息、主题和上传间隔
  • 点击"参数保存"按钮保存配置
  • 分别点击OPCDA和MQTT的"连接"按钮建立连接
  • 点击"运行"按钮启动数据采集与上传任务
  • 五、程序运行特性

  • 自动重连机制

    • OPCDA连接异常时,通过定时器定期尝试重新连接
    • MQTT连接断开时,触发Disconnected事件进行重连
  • 数据处理特性

    • OPC数据采用订阅模式,数据变化时实时更新本地缓存
    • MQTT上传采用定时读取缓存的方式,降低网络交互频率
  • 错误处理

    • 关键操作(如连接、数据读写)均包含异常捕获
    • 错误信息通过日志系统详细记录,便于问题排查
  • 六、注意事项

  • 程序依赖OPCDAAuto.dll组件,需确保该组件已正确注册
  • 首次运行需手动配置OPCDA和MQTT参数并保存,否则可能无法正常工作
  • 日志目录C:\\OpcDaLogs需保证程序有读写权限
  • OPCDA参数名需与服务器端保持一致,否则无法正常采集数据
  • MQTT服务器需提前创建对应主题,确保客户端有发布权限
  • 本程序通过模块化设计实现了OPCDA到MQTT的数据转发功能,代码逻辑围绕数据采集、传输和配置管理三大核心需求展开,适合工业场景中不同系统间的数据互通应用。

    赞(0)
    未经允许不得转载:171主机测评 » 基于C# Windows Forms开发的OPCDA客户端工具,核心功能是实现从OPCDA服务器采集数据,并通过MQTT协议将数据上传至指定服务器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址