由于习惯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连接的调试助手,上图右方充当万用表。
万用表定时发送数据
这里使用调试助手的精简发送列表,编辑下述发送内容:
循环30次,发送“AA 55 12 25 [cs]”
循环30次,发送“AA 55 23 01 [cs]”
步骤1、2循环100次
实验现象
点击按钮,循环发送报文,停止发送数据,波形也自动暂停:
多设备连接
在该模拟实验中,刚好可使用多设备连接,结构如下:
TCP是主设备,UART模拟万用表,是设备2:
设备名作为报文的前缀,通过UART发出去
开发板把UART转成LAN,回到上位机
-END-