|
之前發(fā)過(guò)幾個(gè)帖子,求助串口通信程序的編制,得到了無(wú)能前輩的無(wú)私幫助,還有我的兩位同學(xué)的大力支持。
5 z B' l$ J- o$ K7 _現(xiàn)在程序基本完成,寫(xiě)個(gè)小結(jié),說(shuō)不上經(jīng)驗(yàn),畢竟我也是第一次寫(xiě)通信程序,算是教訓(xùn)吧。! _0 [4 Y( |0 U$ z
1. 通信協(xié)議的理解
7 u8 {6 P/ y k: M# W0 n每個(gè)硬件設(shè)備廠商都有自己的一套通信協(xié)議,比如發(fā)送或接收命令的定義,發(fā)送命令之后返回?cái)?shù)據(jù)的定義等等。這應(yīng)該是通信程序收發(fā)數(shù)據(jù)邏輯順序的依據(jù)。2 G* D& V V& J$ x* D
2. 接受、發(fā)送數(shù)據(jù)的格式
# w8 O4 j G- U. `! }9 N# Z4 z4 j& _& z: BMSComm接、發(fā)數(shù)據(jù)有兩種格式,在屬性InputMode里設(shè)置,一為comInputModeBinary,二進(jìn)制;二為comInputModeText,為文本。; R2 ~; q3 o9 b7 |) w; h; f+ }
我之前就是數(shù)據(jù)格式弄混了,所以一直出現(xiàn)錯(cuò)誤。例如,MSComm1.Output = "R00000016U"," "里面的就是文本形式的數(shù)據(jù),如果InputMode里設(shè)置的是InputMode=comInputModeBinary,那么發(fā)送肯定有誤。
3 K6 P6 t7 u( r3 R3. 清空緩存和清空接收數(shù)據(jù)存放的緩沖數(shù)組- |7 d) ~" @5 ]& I, ^& s4 {
每收發(fā)一次數(shù)據(jù),就要清空緩存或是數(shù)據(jù)存放的緩沖數(shù)組。以免兩次收發(fā)的數(shù)據(jù)發(fā)生交疊,產(chǎn)生錯(cuò)誤。' h3 H+ S$ a) b7 W5 F# `& r8 F
( w$ Z* U& ~$ b- V& m
& T5 q' B. d3 U這三點(diǎn)是之前編程時(shí)最常犯的錯(cuò)誤。希望能給各位需要編制串口通信程序的社友提個(gè)醒。
) w1 ]8 E; @ U- m: `7 Z) _. e, y Q5 m0 @+ o% f+ O
再次感謝各位社友的關(guān)注和幫助!
9 q5 z0 n- H9 P3 o( h# B
+ Q$ a$ b! D _2 Z! S3 _2 k5 p8 n- e
% q3 M) ] G+ R9 p |
評(píng)分
-
查看全部評(píng)分
|