|
之前發(fā)過幾個(gè)帖子,求助串口通信程序的編制,得到了無能前輩的無私幫助,還有我的兩位同學(xué)的大力支持。
+ T! `, n& n0 x G0 Q i4 d6 M) e0 y現(xiàn)在程序基本完成,寫個(gè)小結(jié),說不上經(jīng)驗(yàn),畢竟我也是第一次寫通信程序,算是教訓(xùn)吧。
# R- l' J9 z5 }- m5 X1. 通信協(xié)議的理解
U l" V. B7 L" H( s' |" z每個(gè)硬件設(shè)備廠商都有自己的一套通信協(xié)議,比如發(fā)送或接收命令的定義,發(fā)送命令之后返回?cái)?shù)據(jù)的定義等等。這應(yīng)該是通信程序收發(fā)數(shù)據(jù)邏輯順序的依據(jù)。- a" `& Q, o5 n$ {. Q7 n) }
2. 接受、發(fā)送數(shù)據(jù)的格式
Z% B3 T0 u8 y6 p7 sMSComm接、發(fā)數(shù)據(jù)有兩種格式,在屬性InputMode里設(shè)置,一為comInputModeBinary,二進(jìn)制;二為comInputModeText,為文本。! `- B3 K& G) n& J- f4 n8 R/ {
我之前就是數(shù)據(jù)格式弄混了,所以一直出現(xiàn)錯(cuò)誤。例如,MSComm1.Output = "R00000016U"," "里面的就是文本形式的數(shù)據(jù),如果InputMode里設(shè)置的是InputMode=comInputModeBinary,那么發(fā)送肯定有誤。0 E, x# k$ c$ F' @! ?
3. 清空緩存和清空接收數(shù)據(jù)存放的緩沖數(shù)組0 y# f& W$ B$ }" i6 {! u
每收發(fā)一次數(shù)據(jù),就要清空緩存或是數(shù)據(jù)存放的緩沖數(shù)組。以免兩次收發(fā)的數(shù)據(jù)發(fā)生交疊,產(chǎn)生錯(cuò)誤。
& H7 {1 b$ R- @" G2 Z% A6 x9 L* o6 z/ K. r( [9 R6 Q# x
: ?0 o, e7 Y. s6 V& M這三點(diǎn)是之前編程時(shí)最常犯的錯(cuò)誤。希望能給各位需要編制串口通信程序的社友提個(gè)醒。
e7 Y F3 [5 m; f, n, L0 p" _% u( h% X+ ~2 F
再次感謝各位社友的關(guān)注和幫助!
1 X! e8 }- V+ r9 Q, z) z. h& {+ |% q! b* j+ H$ Q6 E
- _4 j. F: M+ n9 @
& F" f/ x$ r; f4 \( T |
評(píng)分
-
查看全部評(píng)分
|