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