前言:这几天手上写的一段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. python隐藏部分代码_python隐藏类中属性的3种实现方法
  2. mysql9索引实战_课程介绍目录索引
  3. mysql repalication_mysql replication(主从复制)(一)MS模式
  4. Java将小数转换为成百分比输出
  5. 50本.NTE、C#相关技术书籍免费下载
  6. npm安装vue 解决VUE无法打开图形界面工具,输入vue ui无反应 vue-cli版本2.9.6无法升级 npm uninstall vue-cli卸载时失败
  7. vue动画transition(笔记)
  8. IE与FF的常见兼容问题及总结
  9. 雪色光晕(计算几何+暴力)
  10. Android pm命令(持续更新中...)
  11. Java httpClient 发送http请求
  12. 移动端分享链接给微信好友
  13. 文字转换片假字_模仿文字转换笔迹,word手写字体在线生成器网站
  14. 疯狂HTML5 CSS 3 JavaScript讲义 (李刚) 高清PDF扫描版
  15. 杂记(git标签,echo命令,ps命令,gdb调试)
  16. 基于LabVIEW的WIFI通信人机交互界面设计
  17. java cnzz_cnzz 模拟请求登录(传入url get data ) demo
  18. android集成sdk 马甲包,Android配置马甲包
  19. 用户登录很重要,实现游戏陪玩app源码注册功能
  20. 产品经理到底是做什么的?|️ 什么是产品经理?

热门文章

  1. 启动另一个Activity、Service、应用程序
  2. android之读取相册照片并显示
  3. 解决OpenCV3+VS2015(VS2017)运行时出现debug error abort()has been called的问题
  4. CNN中input,output的计算推导
  5. html复选框控制元素禁用,如何勾选复选框时禁用HTML必需属性?
  6. %02 java_Java基础02—变量、运算符和数据类型转换(示例代码)
  7. linux学习笔记:linux中磁盘管理常用的几个命令
  8. linux shell locate,shell学习之locate和find命令
  9. 文本圆角背景_ppt模板航天日PPT,半透明几何圆角长方形文本框
  10. nand flash和nor flash区别_从闪存的发展历史看,eMMC与NAND Flash有什么区别与联系?...