C# + WPF 实现高效通用测控上位机

1,179 阅读6分钟

前言

工业自动化和测控领域,开发通用测控上位机是实现设备监控、数据采集和自动化控制的关键环节。

嵌入式设备开发中,上位机工具用于查看设备状态、下达指令,并通过可视化和数据记录辅助调试。然而,不同设备和项目需求导致上位机开发工作量巨大,且通用工具功能有限。

本文将推荐一款开源的通用测控上位机,以适应多种设备和协议,减少重复开发,提升调试效率。

项目介绍

嵌入式设备开发调试过程中,使用上位机工具查看设备状态和下达指令是必不可少的步骤。

通过曲线实现状态可视化、记录数据以供事后分析等功能,可以显著提高开发调试效率。

然而,不同嵌入式设备和项目的需求差异巨大,导致几乎每块电路都需要定制化的上位机软件,这无疑增加了巨大的开发工作量,难以承受。

实际项目中,我们经常依赖串口助手、串口数据曲线显示等通用工具进行调试,但这些工具的功能和通用性有限,无法满足复杂项目的全面需求。

一款通用上位机,能够尽可能广泛的适应各种项目,各种设备和各种协议的调试工作。

1、通过文本行或二进制协议方式对设备进行测控,包括状态上报和指令下达。协议易于描述

2、上传状态和下发指令的界面都通过配置文件描述,所以上位机可以在各项目间通用。

3、不仅实现曲线显示、变量显示、指令下达,还显示是否有数据刷新、指令是否有回复,回复是否正确

4、曲线显示不仅是图形,还通过游标实现特定位置的值显示、两点测距功能、区域缩放功能

5、具有数据记录/回放、曲线导出/导入功能

例如如下几个项目中的上位机:

注: 均由本通用上位机软件的不同配置而成。

项目功能

测控UI功能

界面曲线显示区、传感值显示区、基础控制区和配置控制区,对参数的显示包括:

1、传感数值型:显示名称、数值、最近是否收到过数据、选择是否显示曲线

2、控制数值型:显示名称、期望值、结果是否成功

3、控制指令:显示名称、结果是否成功

4、开关型:显示名称、状态、最近是否收到过数据,无论当前状态是开还是关,都可以下达开和关的指令(即使在开的状态也可以下达开的指令)

5、参数型:显示名称、期望、当前值、最近是否收到过数据

曲线功能

1、上位机为多个传感值显示曲线,每个曲线可实时选择显示、隐藏

2、曲线具有统一的纵坐标,横坐标可以使用次数和时间两种

3、曲线可按一定长度循环显示,可长期实时显示

4、曲线可保存、加载历史曲线

5、曲线显示界面可使用鼠标左键拖动框选一定的区域放大显示

6、曲线显示界面可使用鼠标滚轮实现缩放

7、曲线显示界面可使用鼠标右键拖动平移

3、数据源

上位机的数据源可以是串口、网络、日志回放等方式,以相同的方法实现数据输入、输出。

上位机选择数据源,实现"打开" "关闭"操作,以方便的实现对端口的占用和释放。

数据源端口、波特率等配置在配置文件中,以免对UI造成不必要的需求

4、记录与回放

软件可将接收到的数据记入日志文件,并通过回放数据源实现数据回放功能。

可变速回放,单帧回放。

5、动态协议

通过配置支持不同的通信协议,包括基于行、列的(类NMEA)文本通信协议,以及二进制数据包。

在配置文件中描述协议的信息,如列数、同步头、子域类型长度等,即可解析协议中的参数。

开发环境

语言与框架:C# 和 WPF 进行上位机开发,基于 .NET Framework 3.5 或更高版本。

集成开发环境 (IDE):当前使用 Visual Studio 2022。

文件编码与格式

文件编码:UTF-8(无 BOM)

缩进:制表符缩进,长度为 4 个字符

换行符:Unix 风格换行符 (\n)

项目结构

项目源码解释和说明,具体可以下载学习。

主体结构

测控概念结构

测控概念主要由几个大的部分组成:测控通信、动态协议、数据源、日志记录与回放。

概念图如下:

测控部分

可复用的测控模块不包含应用部分,具体功能为:

1、测量量字典:通过唯一的字符串名称索引测量变量

2、指令字典:通过唯一的字符串名称索引指令

3、指令界面定义:仅定义下发指令的控件,按钮、开关等 模块代码放在两个文件中:com_mc.cs,com_mc_gui.cs

主体流程

项目文档

1、使用说明

软件使用说明,界面、曲线使用方法,配置案例。

2、软件设计

软件结构和流程描述。

3、日志与回放

软件支持的带时间戳多种数据混合日志的设计和回放方法。

4、插件设计

程序的插件扩展方法、原理。

5、配置设计

协议配置,软件自身指令。

项目地址

GitHub:github.com/yangzigy/co…

Gitee:gitee.com/yangzifb/co…

总结

以上仅展示了通用测控上位机的部分功能。更多实用特性和详细信息,请大家访问项目地址。

希望通过本文能为上位机系统开发和调试方面提供有价值的参考。欢迎在评论区留言交流,分享您的宝贵经验和建议。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!