之前发过几个帖子,求助串口通信程序的编制,得到了无能前辈的无私帮助,还有我的两位同学的大力支持。
* w6 Z' s$ ~$ U5 Q( R7 g现在程序基本完成,写个小结,说不上经验,毕竟我也是第一次写通信程序,算是教训吧。
) v- X" _ {& z' a1 N1. 通信协议的理解
6 A. x% U: ^1 V每个硬件设备厂商都有自己的一套通信协议,比如发送或接收命令的定义,发送命令之后返回数据的定义等等。这应该是通信程序收发数据逻辑顺序的依据。$ y0 u0 X6 Y6 G/ }3 C, M7 d+ k
2. 接受、发送数据的格式
9 Z7 @' C$ M# @$ h y5 aMSComm接、发数据有两种格式,在属性InputMode里设置,一为comInputModeBinary,二进制;二为comInputModeText,为文本。8 ^# B5 q! D: `* k) F2 D" r: t- c
我之前就是数据格式弄混了,所以一直出现错误。例如,MSComm1.Output = "R00000016U"," "里面的就是文本形式的数据,如果InputMode里设置的是InputMode=comInputModeBinary,那么发送肯定有误。5 ~3 Q9 s, `0 O/ u o
3. 清空缓存和清空接收数据存放的缓冲数组
0 c* f! W H+ _0 y9 G: E每收发一次数据,就要清空缓存或是数据存放的缓冲数组。以免两次收发的数据发生交叠,产生错误。1 S Q- Y. R& R
3 }" G2 |4 q1 }
6 e+ y! j! J/ |8 i这三点是之前编程时最常犯的错误。希望能给各位需要编制串口通信程序的社友提个醒。, i3 V, c; I" i. {
3 A- V8 ? C. f8 w2 w
再次感谢各位社友的关注和帮助!
5 F. X" u4 j( K: `" i
) V. s; C/ A1 D8 w5 D4 d, M0 Z% w9 p) Y1 _& D- _
+ t" I! m L8 |2 T5 q* b" q G |