之前发过几个帖子,求助串口通信程序的编制,得到了无能前辈的无私帮助,还有我的两位同学的大力支持。
( p8 m+ x( j1 [$ K& s现在程序基本完成,写个小结,说不上经验,毕竟我也是第一次写通信程序,算是教训吧。
$ Z$ \3 I3 v2 w8 x5 V1. 通信协议的理解
* r V. O+ ^$ T/ |' e/ M7 d每个硬件设备厂商都有自己的一套通信协议,比如发送或接收命令的定义,发送命令之后返回数据的定义等等。这应该是通信程序收发数据逻辑顺序的依据。( E# O5 L. t7 ~7 a4 K* k) k% _
2. 接受、发送数据的格式
1 Y {. `8 G8 x6 Q, kMSComm接、发数据有两种格式,在属性InputMode里设置,一为comInputModeBinary,二进制;二为comInputModeText,为文本。
+ l7 X7 o; d) e我之前就是数据格式弄混了,所以一直出现错误。例如,MSComm1.Output = "R00000016U"," "里面的就是文本形式的数据,如果InputMode里设置的是InputMode=comInputModeBinary,那么发送肯定有误。, M/ E2 K1 ]0 i, j, a
3. 清空缓存和清空接收数据存放的缓冲数组! u7 ?' j! W; H/ B% e- `, q
每收发一次数据,就要清空缓存或是数据存放的缓冲数组。以免两次收发的数据发生交叠,产生错误。- p' V* S2 D, m6 t
; x5 p3 f2 `- a
, U: {( h* \8 b5 c B: I/ a
这三点是之前编程时最常犯的错误。希望能给各位需要编制串口通信程序的社友提个醒。! s7 k. l: n! ~ t% @. z; Z% m2 x; I2 D
! I& q) }3 F5 h4 J" }% d5 ]再次感谢各位社友的关注和帮助!$ L" A, e: b* }/ l1 y
u1 W( }# @+ d8 A- @
3 A1 T) A1 Y3 ]& t# a
! J5 t& \, X" m1 K4 e9 n |