我有一个旧的VB6程序打开COM1只读串口;要初始化COM1串行端口,我在Form_Load()事件上执行以下操作:
commStats.ComPort = 1
commStats.Settings = "9600,N,8,1"
commStats.InputMode = comInputModeText
commStats.InputLen = 0
commStats.PortOpen = True
我在定时器事件中读取串口并解析输入缓冲区 - 我收到的数据包非常简单;以STX开头,以ETX结束,STX和ETX之间的所有字节都是ASCII可打印字符。数据包不是很大,最多可能是100个字节。
在开发,调试和测试过程中,我一直在我的ASUS XP笔记本电脑上阅读此数据包,没有任何问题。在大约2年的时间里,我第一次回去做一些程序测试,并开始测试再次将这些数据包发送到这个程序。令我惊讶的是,我在解析数据包时遇到错误,并发现当数据包连续有3个ASCII零时,第三个零不是零,而是我的VB6接收数据包中的度数符号?
我以为是计算机发送数据包所以我在接收计算机上进入HyperTerminal并使用HyperTerminal来查看收到的数据包,但没有看到HyperTerminal中的度数符号。所以我退出HyperTerminal并回到我的VB6程序并开始测试并且数据包是正确的,不再是数据包中每个第3个ASCII零点的度数符号它们是ASCII零。
任何人都可以解释可能发生的事情 - 在我看来HyperTerminal改变了修复问题的COM1串口的一些设置吗?我一直试图重现这个问题所以我知道根本原因是什么;我有一个直接的C程序,它使用旧的Win32 API和DCB结构来修改串口设置,但我还是无法重新创建上述问题
有关这个串口如何进入上述模式的想法吗?
以下是VB6中收到的数据包现在看起来很喜欢它没有度数符号到达:
"STX6C1505 3008019003008004004001003005005001005000023032004005003006000013004000HTaurasi, Diana 15F5ETX"
继续前进到您看到的数据包部分1005000023 - 在5之后的第3个ASCII零是一个度数符号,并且所有其他包含3个ASCII零的数据包,第3个ASCII零被转换为a度数符号 - 在VB6调试观察器中,当它出现错误时,如上所述,它最初看起来像这样:
100500°023
我想要做的是弄清楚这是怎么发生的?