4 系統(tǒng)通訊協(xié)議設(shè)計
組態(tài)王提供了通過PC機與單片機串口進行十六進制數(shù)據(jù)通訊的驅(qū)動,而驅(qū)動中已經(jīng)規(guī)定好其通訊協(xié)議。
4.1 通訊參數(shù)
通訊參數(shù)包括數(shù)據(jù)位、停止位、波特率、校驗方式。其中,數(shù)據(jù)位、停止位、波特率由單片機決定。組態(tài)王中的設(shè)定和單片機一致即可。校驗方式參照“數(shù)據(jù)傳輸格式”部分。
4.2 數(shù)據(jù)傳輸格式與協(xié)議說明
格式1 組態(tài)王發(fā)送地址請求格式(檢驗位為1):
格式2單片機應答地址格式(檢驗位為0):
格式3組態(tài)王讀數(shù)據(jù)請求格式(檢驗位為0):
格式4單片機應答讀數(shù)據(jù)格式(正確)(檢驗位為O):
格式5單片機應答讀數(shù)據(jù)格式(錯誤)(檢驗位為0):
格式6組態(tài)王寫數(shù)據(jù)請求格式(檢驗位為O):
格式7單片機應答寫數(shù)據(jù)格式(正確)(檢驗位為0):
協(xié)議具體說明如下:
ENQ(頭):H05,詢問,請求幀的開始代碼;
ACK(頭):H06,確認,ACK應答幀的開始代碼;
NAK(頭):H15,否認,NAK應答幀的開始代碼;
EOT(尾):H04,正文的結(jié)束,請求幀的結(jié)束ASCII代碼;
ETX(尾):H03,結(jié)束正文,應答幀的結(jié)束ASCII代碼;
數(shù)據(jù)傳輸:所有數(shù)據(jù)均為16進制數(shù);
Sta:設(shè)備地址,1個字節(jié),組態(tài)王設(shè)備地址范圍為0~255,此地址為單片機的地址,由單片機中的程序決定;
R:讀標志,1個字節(jié)(0x52);
W:寫標志,1個字節(jié)(0x57);
DataType:需要交換的數(shù)據(jù)類型,1字節(jié)。其中“1”代表字節(jié),“2”代表字,“3”代表浮點型;
DataNum:讀取數(shù)據(jù)的個數(shù),1字節(jié);
DataAddr:數(shù)據(jù)偏移地址,2字節(jié),低字節(jié)在前,高字節(jié)在后;
Data:實際傳輸?shù)臄?shù)據(jù),低字節(jié)在前,高字節(jié)在后;
DataLong:單片機返回Data的字節(jié)數(shù),2字節(jié),低字節(jié)在前,高字節(jié)在后:
CRC:為從第1個字節(jié)至CRC前的所有字節(jié)的異或值,1字節(jié);
ErrorCode:錯誤代碼,“0”代表正確應答,“1”代表數(shù)據(jù)類型錯誤,“2”代表數(shù)據(jù)范圍超限,“3”代表指令無法識別。
5 單片機通訊程序流程設(shè)計
圖4為組態(tài)王程序流程,圖5為單片機通訊程序流程。80C51系列單片機多機通訊可歸納如下:
上位機的SM2=0,所有下位機的SM2=1,以便只接收上位機發(fā)來的地址;
上位機給下位機發(fā)送地址時,第9數(shù)據(jù)位應該為1,以指示下位機接收這個地址;
所有下位機在SM2=1,RB8=1和RI=0時,接收上位機發(fā)來的地址,進入相應中斷服務(wù)程序,并與本機地址相比較,以確認是否為被尋址的下位機;
被尋址下位機通過指令清除SM2,以便正常接收上位機發(fā)送來的數(shù)據(jù),并向上位機發(fā)回接收到的地址以便核實。未被尋址的下位機保持SM2=1,并退出各自的中斷服務(wù)程序;
完成上位機和被尋址下位機之間的數(shù)據(jù)通信后,被尋址從機使SM2=1,并退出中斷服務(wù)程序,等待下次通信。
6 結(jié)束語
該系統(tǒng)實現(xiàn)組態(tài)王軟件與單片機多機的實時通信,已經(jīng)在實際項目中得到應用。應用的結(jié)果表明該設(shè)計方法簡單有效,實時性好,成本低廉,可以在控制與監(jiān)控系統(tǒng)中推廣應用。
評論