C#上位机 - 调试助手新增实时曲线,及数据接收异常的修复

文摘   科技   2023-02-18 20:53   广东  

Keep Moving 

保持·热爱

调试助手

上位机开发

C#

功能升级优化



由于习惯C的思维,代码写得比较凌乱

代码仓库:github.com/L231/SerialAssistant

实时曲线数据采集周期建议500ms以上

欢迎后台提需求,软件也在不断更新中

后台回复开源获取软件、源代码



问题修复

串口接收异常

最近搞PIC16LF系列的BootLoader,与W5500实现网口、串口的互转,环境如下:

单片机上电首先跑BootLoader,读取标志后决定是否跳转APP。运行APP时,调试信息老是打印不了,一度怀疑看门狗配置错了。持续猜疑中,临下班时注意到调试助手,果然换一个串口助手就正常了。


查看调试助手关于串口接收处理部分:

System.IO.Ports.SerialPort uart = (System.IO.Ports.SerialPort)sender;length = uart.BytesToRead;           do{    Delay(1);} while (length != uart.BytesToRead);

每次延时之前未缓存长度,就无法正常获取串口接收缓冲区的数据了。


之前调试C#程序时,直接短接串口线的TX、RX脚,加之通信数据量小,通信未出现异常。


TCP接收显示异常

再进行全面测试后,发现TCP接收显示异常。一次发送几百字节数据,显示区明显丢包了。

排查“RxShow.cs”文件,初步断定是新加的显示线程出事了。


由于添加了超级报文等功能,接收显示处理函数中,需要嵌入报文解析函数,而解析过程费时,当时考虑用一个线程去处理。


这个过程无法避免地使用了全局变量,如果是C语言就好处理了,C#不熟悉,最后妥协砍掉线程:


大数据量的测试

串口、TCP客户端,一次发送60KB数据,无丢包,开发板数据传输正常,调试助手正常。


在ASCII传输时,暴力处理了中文断帧乱码问题。



实时曲线

介绍链表             

              链表功能

主界面

从超级报文的逻辑衍生,解析报文参数绘制曲线:

  • 解析规则自定义

  • 支持HEX、ASCII数据的识别

  • 曲线名可修改

  • 可调整曲线缩放比例


曲线编辑器

单击新建、设置按钮:



实时曲线的应用

实验平台

就拿手头上的开发板,模拟读取万用表,绘制电压实时曲线的实验:

其中LAN连接的调试助手,上图右方充当万用表。


万用表定时发送数据

这里使用调试助手的精简发送列表,编辑下述发送内容:

  1. 循环30次,发送“AA 55 12 25 [cs]”

  2. 循环30次,发送“AA 55 23 01 [cs]”

  3. 步骤1、2循环100次


实验现象

点击按钮,循环发送报文,停止发送数据,波形也自动暂停:


多设备连接

在该模拟实验中,刚好可使用多设备连接,结构如下:

TCP是主设备,UART模拟万用表,是设备2:

  • 设备名作为报文的前缀,通过UART发出去

  • 开发板把UART转成LAN,回到上位机





-END-


碎片聚合
求真务实
 最新文章