前言:这几天手上写的一段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端每发一个数据包,再接收数据包时,查看是否找到对应标识,若找到对应标识,则为目标数据包。计算机网络数据包中的帧序列也是一样的道理,帧序列同时也可以解决数据排序的问题。

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

  1. Windows下VB6.0开发——关于String类型数据的思考

    前言:之前做工程时候出现了打不开VB工程或者EXE文件打开就闪退的现象,最后一步步调试发现是程序出错.出错的地方竟然是一个小小的String类型数据处理引起的,记录下来. 1. 字符数组和字符串 1. ...

  2. Win10下VB6.0开发之串口通信基础(一)控件属性篇

    前言:VB串口通信的方法一般有两种:一是通过Windows的通信API进行通信:另一种是通过VB的标准控件MSComm来实现.这篇文章要讲的是上位机如何通过VB的串口控件MSComm和下位机进行串口通 ...

  3. Win10下VB6.0开发之串口通信基础(二)代码功能篇

    MSComm控件串口通信开发 1. MSComm控件的处理流程   MSComm在适当时候引发控件的处理流程主要分为两步: 1)通过事件驱动处理连接端口通信   在收发一个字符或者生一个事件时,不管是 ...

  4. Windows下使用Eclipse开发Arduino程序

    Arduino IDE功能简单,对于不熟悉编程环境的用户十分容易上手:但是对于大型的Arduino项目开发,如果再使用自带的IDE就会多少显得不便.之前我曾经使用过Eclipse + CDT + av ...

  5. Win10下VB6.0开发之错误--无法打开对象窗口和代码窗口

    错误:Win10下使用VB6.0打开一个.vbp文件时,打不开对象窗口和代码窗口 解决办法:找了很久之后才发现,笔者所用笔记本外接了扩展显示屏,在断开外接显示屏连接后,打开VB,再重新外接显示屏即可. ...

  6. Windows10下VB6.0开发——常用的字符串处理函数工具

    前言:下面记录整理了VB中经常使用用于字符串转换的工具函数. 字符串处理 1. 获取字符串长度--Len   Len函数中的一个参数是目标字符串,返回目标字符串的长度,例如num = Len(&quo ...

  7. Windows10下VB6.0开发——ini文件存储参数信息

    前言:在使用VB编写上位机程序时,想要实现一个功能--每次修改Text文本框中的值后,使得关闭程序后该数值能够保存,在下次打开时可以直接使用.本文介绍了INI文件对该功能的支持. 1.INI文件    ...

  8. Windows10下VB6.0开发——常见控件使用整理

    前言:以下整理了一些常见控件的使用,关于串口通信的控件的使用,在之前文章介绍过. 1. 单选按钮 -- OptionButton   有很多场景中会需要用到单选按钮,使用单选按钮的基本原则是:在同一个 ...

  9. Windows10下VB6.0开发——常用数值处理函数工具

    前言:下面记录整理了VB中经常使用用于数据转换的工具函数. 数值处理 1. 取不大于n的最大整数--Int a = Int(-5.6) '=-6 a = Int(4.88) '=4 2. 四舍五入取整 ...

最新文章

  1. oppo怎么广告接入_OPPO游戏的承转启合,携手开发者迎接万物互融时代
  2. Tkinter的Message组件
  3. QTP - 描述性编程
  4. C# socket编程第三篇
  5. poj 3517
  6. Oracle 发布基于 VS Code 的开发者工具,轻松连接 Oracle 数据库
  7. 1030. 完美数列(25)
  8. windows 覆盖linux,您是否曾考虑过用Linux替换Windows?
  9. Hadoop系列之九:Hadoop集群伪分布式模式的实现详解
  10. Shell脚本学习-阶段九-数据库被攻击恢复
  11. SpringBoot 启动过程,你不知道的秘密!
  12. stm32+TB6612驱动直流电机
  13. ibm x60 学习linux,IBM X60 T60系列安装系统时SATA设置问题
  14. 2021漏洞扫描服务TOP20排行榜
  15. Keras中的深度学习的模型:序列模型(Sequential)和通用模型(Model)
  16. win10程序员软件列表(持续更新中...)
  17. colorbox弹出层插件使用方法及注意事项
  18. 搭建sql-libs的环境
  19. 老罗如果输了整个民族都输了
  20. [Android开发] ButterKnife8.5.1 使用方法教程总结

热门文章

  1. linux中通用GPIO接口的操作
  2. Tcl Tutorial 笔记4 ·if
  3. linux卸载文件系统什么意思,Linux文件系统的安装和卸载
  4. Android 实现计时器功能,Android实现倒计时30分钟功能
  5. php采到的数据自动修改入库,基于PHP的简单采集数据入库程序【续篇】_php实例...
  6. android activity启动模式_Android知识点【Activity】清单文件
  7. 固定 顶部_抗拉固定球铰支座优点与施工步骤
  8. php获取视频大小代码怎么写,利用php获得flv视频长度的实例代码
  9. java常用类的特征_Java常用类-包装类
  10. int 为什么是2147483647_「2147483647」当int类型超出了[-2147483648,2147483647]会发生什么? - seo实验室...