之前发过几个帖子,求助串口通信程序的编制,得到了无能前辈的无私帮助,还有我的两位同学的大力支持。
1 Y4 i& z& }' s. S2 f9 }8 y0 q现在程序基本完成,写个小结,说不上经验,毕竟我也是第一次写通信程序,算是教训吧。 d8 k, f) I! ?, h
1. 通信协议的理解4 A0 k+ y; E+ F3 N) y
每个硬件设备厂商都有自己的一套通信协议,比如发送或接收命令的定义,发送命令之后返回数据的定义等等。这应该是通信程序收发数据逻辑顺序的依据。
! {4 Z3 _. s1 J) W* r2. 接受、发送数据的格式
3 p& M1 X* |+ z+ G" H, @" Z6 j8 oMSComm接、发数据有两种格式,在属性InputMode里设置,一为comInputModeBinary,二进制;二为comInputModeText,为文本。0 y4 P0 _) _4 X( B6 s& z4 f
我之前就是数据格式弄混了,所以一直出现错误。例如,MSComm1.Output = "R00000016U"," "里面的就是文本形式的数据,如果InputMode里设置的是InputMode=comInputModeBinary,那么发送肯定有误。
# X5 ~6 ^- J: L* X* e7 z! L3. 清空缓存和清空接收数据存放的缓冲数组7 `7 F# k" U( I$ M+ j! i. |
每收发一次数据,就要清空缓存或是数据存放的缓冲数组。以免两次收发的数据发生交叠,产生错误。* S& ?/ Y3 \2 Y7 d
( d1 D6 z; [8 F' Z i) {7 q
! c# q2 m( J: |% Q8 b4 h( s这三点是之前编程时最常犯的错误。希望能给各位需要编制串口通信程序的社友提个醒。
' P( b) y" L* f$ c
+ C+ ~, J, P# T6 u( t) c4 p再次感谢各位社友的关注和帮助!
u, i2 `9 ~8 p( D, g g) X$ l9 l. T
% Q+ K1 y# j. E, L; ]' M% F- n" f' F# v- t( B
|