組態(tài)王與單片機(jī)協(xié)議2
字節(jié)數(shù)據(jù)格式:由單片機(jī)決定。
起始位 | 數(shù)據(jù)位 | 校驗(yàn)位 | 停止位 |
注意:在組態(tài)王中設(shè)置的通訊參數(shù)如波特率,數(shù)據(jù)位,停止位,奇偶校驗(yàn)必須與單片機(jī)編程中的通訊參數(shù)一致
2.在組態(tài)王中定義設(shè)備地址的格式
格式:##.?!?/p>
前面的兩個(gè)字符是設(shè)備地址,范圍為0-255,此地址為單片機(jī)的地址,由單片機(jī)中的程序決定 ;
后面的一個(gè)字符是用戶設(shè)定是否打包,“0”為不打包、“1”為打包,用戶一旦在定義設(shè)備時(shí)確定了打包,組態(tài)王將處理讀下位機(jī)變量時(shí)數(shù)據(jù)打包的工作。
3.在組態(tài)王中定義的寄存器格式
寄存器名稱 | dd上限 | dd下限 | 數(shù)據(jù)類型 |
Xdd | 65535 | 0 | FLOAT/BYTE/UINT |
斜體字dd代表數(shù)據(jù)地址,此地址與單片機(jī)的數(shù)據(jù)地址相對(duì)應(yīng)。
注意:在組態(tài)王中定義變量時(shí),一個(gè)X寄存器根據(jù)所選數(shù)據(jù)類型(BYTE,UINT,FLOAT)的不同分別占用一個(gè)、兩個(gè),四個(gè)字節(jié),定義不同的數(shù)據(jù)類型要注意寄存器后面的地址,同一數(shù)據(jù)區(qū)內(nèi)不可交叉定義不同數(shù)據(jù)類型的變量。為提高通訊速度建議用戶使用連續(xù)的數(shù)據(jù)區(qū)。
例如,
1、在單片機(jī)中定義從地址0開始的數(shù)據(jù)類型為BYTE型的變量:
則在組態(tài)王中定義相應(yīng)的變量的寄存器為X0、X1、X2、X3、X4。。。。。。。。,數(shù)據(jù)類型為BYTE,每個(gè)變量占一個(gè)字節(jié)
2、在單片機(jī)中定義從地址100開始的數(shù)據(jù)類型為UINT型的變量:
則在組態(tài)王中定義相應(yīng)的變量的寄存器為X100、X102、X104、X106、X108。。。。。。。。,數(shù)據(jù)類型UINT,每個(gè)變量占兩個(gè)字節(jié)
3、在單片機(jī)中定義從地址200開始的數(shù)據(jù)類型為FLOAT型的變量:
則在組態(tài)王中定義相應(yīng)的變量的寄存器為X200、X204、X208、X212。。。。。。。,
3.組態(tài)王與單片機(jī)通訊的命令格式:
讀寫格式(除字頭、字尾外所有字節(jié)均為ASCII碼)
字頭 | 設(shè)備地址 | 標(biāo)志 | 數(shù)據(jù)地址 | 數(shù)據(jù)字節(jié)數(shù) | 數(shù)據(jù)… | 異或 | CR |
說明;
字頭:1字節(jié)1個(gè)ASCII碼,40H
設(shè)備地址: 1字節(jié)2個(gè)ASCII碼,0—255(即0---0x0ffH)
標(biāo)志:1字節(jié)2個(gè)ASCII碼,bit0~bit7,
bit0= 0:讀,bit0= 1:寫。
bit1= 0:不打包。
數(shù)據(jù)地址: 2字節(jié)4個(gè)ASCII碼,0x0000~0xffff
數(shù)據(jù)字節(jié)數(shù):1字節(jié)2個(gè)ASCII碼,1—100,實(shí)際讀寫的數(shù)據(jù)的字節(jié)數(shù)。
數(shù)據(jù)…:為實(shí)際的數(shù)據(jù)轉(zhuǎn)換為ASCII碼,個(gè)數(shù)為字節(jié)數(shù)乘2。
異或:異或從設(shè)備地址到異或字節(jié)前,異或值轉(zhuǎn)換成2個(gè)ASCII碼
CR:0x0d。
通訊嘗試恢復(fù)命令(COMERROR),請(qǐng)求地址為0的一個(gè)BYTE數(shù)據(jù)
3.1.上位機(jī)發(fā)送讀命令
字頭 | 設(shè)備地址 | 標(biāo)志 | 數(shù)據(jù)地址 | 數(shù)據(jù)字節(jié)數(shù) | 異或 | CR |
下位機(jī)應(yīng)答:若正常:
字頭 | 設(shè)備地址 | 數(shù)據(jù)字節(jié)數(shù) | 數(shù)據(jù)… | 異或 | CR |
若不正常:
字頭 | 設(shè)備地址 | ** | 異或 | CR |
例1:讀15號(hào)儀表,數(shù)據(jù)地址為15的數(shù)據(jù)。其中數(shù)據(jù)為100,數(shù)據(jù)類型為字節(jié),不打包。組態(tài)王所發(fā)數(shù)據(jù)為:
40 | 30 | 46 | 43 | 30 | 30 | 30 | 30 | 46 | 30 | 31 | 37 | 32 | 0d |
字頭 | 設(shè)備地址15 | 標(biāo)志 讀操作 字節(jié)型 不打包 | 數(shù)據(jù)地址15 | 數(shù)據(jù)字節(jié)數(shù)1 | 異或 |
若正確:
40 | 30 | 46 | 30 | 31 | 36 | 34 | 37 | 35 | 0d |
字頭 | 設(shè)備地址15 | 數(shù)據(jù)字節(jié)數(shù)1 | 數(shù)據(jù)100 | 異或 |
若不正確:
40 | 30 | 46 | 2a | 2a | 37 | 36 | 0d |
字頭 | 設(shè)備地址15 | ** | 異或 |
例2:讀15號(hào)儀表,數(shù)據(jù)地址為15的數(shù)據(jù)。其中數(shù)據(jù)為100,數(shù)據(jù)類型為字節(jié),打包。組態(tài)王所發(fā)數(shù)據(jù)為:
40 | 30 | 46 | 43 | 32 | 30 | 30 | 30 | 46 | 30 | 31 | 37 | 30 | 0d |
字頭 | 設(shè)備地址15 | 標(biāo)志 讀操作 字節(jié)型 打包 | 數(shù)據(jù)地址15 | 數(shù)據(jù)字節(jié)數(shù)1 | 異或 |
若正確:
40 | 30 | 46 | 30 | 31 | 36 | 34 | 37 | 35 | 0d |
字頭 | 設(shè)備地址15 | 數(shù)據(jù)字節(jié)數(shù)1 | 數(shù)據(jù)100 | 異或 |
若不正確:
40 | 30 | 46 | 2a | 2a | 37 | 36 | 0d |
設(shè)備地址15 | ** | 異或 |
3.2.上位機(jī)發(fā)送寫命令
字頭 | 設(shè)備地址 | 標(biāo)志 | 數(shù)據(jù)地址 | 數(shù)據(jù)字節(jié)數(shù) | 數(shù)據(jù)… | 異或 | CR |
下位機(jī)應(yīng)答:若正常:
字頭 | 設(shè)備地址 | ## | 異或 | CR |
若不正常:
字頭 | 設(shè)備地址 | ** | 異或 | CR |
例1:寫15號(hào)儀表,數(shù)據(jù)地址為15。寫數(shù)據(jù)255,數(shù)據(jù)類型為字,不打包。組態(tài)王所發(fā)數(shù)據(jù)為:
40 | 30 | 46 | 43 | 35 | 30 | 30 | 30 | 46 | 30 | 32 | 30 | 30 | 46 | 46 | 37 | 34 | 0d |
字頭 | 設(shè)備地址15 | 標(biāo)志 寫操作 字型 不打包 | 數(shù)據(jù)地址15 | 數(shù)據(jù)字節(jié)數(shù)2 | 數(shù)據(jù)255 | 異或 |
若正確:
40 | 30 | 46 | 23 | 23 | 37 | 36 | 0d |
字頭 | 設(shè)備地址15 | ## | 異或 |
若不正確:
40 | 30 | 46 | 2a | 2a | 37 | 36 | 0d |
字頭 | 設(shè)備地址15 | ** | 異或 |
評(píng)論