我试图通过UMB协议气象站获得CR6,但我很麻烦。当我轮询传感器时,CR6似乎无法存储所有数据。我知道数据正在使用终端仿真器传输,但只有前几个字节存储在我的字符串中。到底是怎么回事?
删节代码:
公众录制为字符串* 128
公共umbpoll(8)只要我省略了如何为简洁起见表达这个命令。假设这是魔术的魔法。
公共Serialincount.
公共del10,del11,del12,del13作为字符串
Serialopen(COMC3,19200,3,100,128,4)
SerialFlush(COMC3)
SerialOutblock(COMC3,UMBPOLL,32)
延迟(0,150,MSEC)
serialincount = SerialInblock(COMC3,Instring,128)
Del5 = ASCII(中期(Instring,10,1))
del6 = ascii(MID(Instring,11,1))
del7 = ascii(MID(Instring,12,1))
DEL8 = ASCII(MID(Instring,13,1))
结果:
在第12个接收的字节之前,一切都是正确的,当一切报告ASCII 0.使用终端仿真器时,我可以看到正在传输和接收的正确值,包括从第12个接收的字节上的所有内容。为什么CR6没有忠实地从串行通讯记录我的数据?
del10 = 16'好
del11 = 0'好
del12 = 0'应该是07
del13 = 0'应该是08
解决了。
这是字符串处理的空终止问题。SerialInblock没有什么是错误的。相反,字符串“打印”我在第11个字符(您可以在变量del11中看到)使用杀死自身。我解决了它的变化这个帖子,它利用MoveBytes忽略NULL字符。