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应用程序设置访问类二模块关系流程图graph TD A[Program.cs] -- B[Form1.cs] B -- C[Form1.Designer.cs] B -- D[jsonFormat.cs] B -- E[Logger.cs] E -- F[LoggerEnum.cs] B -- G[OPCDAAuto.dll] B -- H[MQTTnet库]三、核心功能模块详解一配置管理模块基于jsonFormat.cs数据模型定义采用类结构映射配置文件内容包含MQTT和OPCDA两部分配置csharppublic 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; } // 客户端IDpublic 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 { get; set; } // 采集项列表}配置操作- 读取配置通过cfgRead()方法从程序目录下的config.json文件加载配置解析后填充到界面控件- 保存配置通过cfgSave()方法将界面配置参数序列化后写入config.json文件二OPCDA通信模块基于Form1.cs核心对象-OPCServer myOPCsvrOPCDA服务器实例-OPCGroups opcGroupsOPC组集合-OPCGroup opcGroup数据采集组-OPCItems opcItems具体采集项集合主要功能- 服务搜索通过buttonopcdasearchClick事件实现搜索指定IP下的OPCDA服务并填充到下拉框- 服务器连接ConnectOpcdaServer方法实现与OPCDA服务器的连接设置组属性csharpopcGroup.UpdateRate 1000; // 更新频率1000msopcGroup.IsSubscribed true; // 启用订阅模式opcGroup.DataChange opcGroupDataChange; // 绑定数据变化事件- 数据采集通过opcGroupDataChange事件处理函数获取实时数据更新本地缓存数组DataArray三MQTT通信模块基于Form1.cs核心对象-MqttClient mqttClientMQTT客户端实例-System.Timers.Timer timer_publish数据发布定时器主要功能- 服务器连接ConnectMqttServerAsync方法实现MQTT连接支持用户名密码认证- 数据发布MqttClientSend方法将数据发布到指定主题- 定时上传通过定时器timerpublish按配置间隔触发数据上传默认10秒数据格式上传数据采用JSON格式包含采集项值和时间戳json{参数1:值1,参数2:值2,time:2025-10-20 10:00:00}四日志记录模块基于Logger.cs与LoggerEnum.cs日志类型通过LogType枚举定义日志级别csharppublic enum LogType { All, Information, Debug, Success, Failure, Warning, Error }日志处理- 日志存储路径C:\\OpcDaLogs\\Log\\[日期]\\- 记录内容包含时间戳、日志类型、消息详情异常日志额外记录堆栈信息- 界面同步重要日志同时显示在主窗口的textBox2控件中四、界面功能与操作流程一界面控件功能控件区域主要控件功能描述OPCDA配置区服务器IP输入框输入OPCDA服务器IP地址| | 服务查找按钮 | 搜索指定IP下的OPCDA服务 || | 服务名称下拉框 | 选择要连接的OPCDA服务 || | 参数添加相关控件 | 管理需要采集的OPCDA参数列表 || MQTT配置区 | 服务器地址、端口输入框 | 配置MQTT服务器连接信息 |opcda转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的数据转发功能代码逻辑围绕数据采集、传输和配置管理三大核心需求展开适合工业场景中不同系统间的数据互通应用。