Windows下VB6.0开发——VB程序断点调试与顺序执行不一致问题(通信原因)

it2025-08-26  1

前言:这几天手上写的一段VB程序出现了断点调试与顺序执行结果不一致的情况,找问题找了很久,最后发现其实也是个能够注意的小问题,特此记录。


1. 程序架构

  本次的实验结构如下,PC端的VB通过串口和转接板通信,而转接板又通过串口和控制器通信。


2. 通信转接

  上述架构中的两个UART通信条件如下:

2.1 PC

通信设置:“115200,o,8,2”发送数据帧间隔:50ms接收数据帧:实时接收数据到缓冲区,将接收数据填充到缓冲区末尾

2.2 转接板

2.2.1 与PC通信

通信设置:“115200,o,8,2”发送数据帧间隔:50ms接收数据帧间隔:20ms,接收缓冲区数据覆盖

2.2.1 与控制器通信

通信设置:“1200,o,8,1”发送数据帧间隔:20ms接收数据帧间隔:2.5ms,接收缓冲区数据覆盖

2.3 控制器

通信设置:“1200,o,8,1”发送数据间隔:收到数据马上发送,否则间隔1s一次接收数据间隔:80ms,接收缓冲区数据覆盖

3. 原因分析

顺序执行:PC端程序在顺序执行时,PC发送数据请求命令给转接板,转接板收到命令后处理命令,并向控制器请求数据。在上述参数情况下,一个数据请求命令,控制器最多花80ms实现更新数据返回,而转接板以50ms的间隔向PC端返回数据,在这种情况下,对于PC端来说,发送了数据请求命令后,紧接着等到的返回数据帧还是上一次命令请求的数据。断点调试:相对于顺序执行,断点调试后,转接板有足够时间返回新的数据帧,这样PC端就会收到正确的对应数据帧。

4. 问题解决

  究其原因,还是增加了转接板,数据收发速率不一致问题。为了解决这个问题,在通信数据包中增加了一个数据标识,PC端每发一个数据包,再接收数据包时,查看是否找到对应标识,若找到对应标识,则为目标数据包。计算机网络数据包中的帧序列也是一样的道理,帧序列同时也可以解决数据排序的问题。

最新回复(0)