前言
工业自动化和测控领域,开发通用测控上位机是实现设备监控、数据采集和自动化控制的关键环节。
嵌入式设备开发中,上位机工具用于查看设备状态、下达指令,并通过可视化和数据记录辅助调试。然而,不同设备和项目需求导致上位机开发工作量巨大,且通用工具功能有限。
本文将推荐一款开源的通用测控上位机,以适应多种设备和协议,减少重复开发,提升调试效率。
项目介绍
嵌入式设备开发调试过程中,使用上位机工具查看设备状态和下达指令是必不可少的步骤。
通过曲线实现状态可视化、记录数据以供事后分析等功能,可以显著提高开发调试效率。
然而,不同嵌入式设备和项目的需求差异巨大,导致几乎每块电路都需要定制化的上位机软件,这无疑增加了巨大的开发工作量,难以承受。
实际项目中,我们经常依赖串口助手、串口数据曲线显示等通用工具进行调试,但这些工具的功能和通用性有限,无法满足复杂项目的全面需求。
一款通用上位机,能够尽可能广泛的适应各种项目,各种设备和各种协议的调试工作。
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技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!