標題: Modbus DTU與服務端間的通訊協議 [打印本頁]
作者: ruiho 時間: 2018-9-15 15:26
標題: Modbus DTU與服務端間的通訊協議
一.數據幀格式 為防止DTU和服務器傳輸過程中因網絡原因導致拆包、粘包,因此約定傳輸的基本數據幀格式如下,DTU上傳和服務器下發的數據包均需滿足此數據幀格式要求。服務器應解決TCP傳輸過程中的拆包粘包問題,確保每次處理的是完整的數據包。
基本數據幀格式:
| | | | |
| | | | |
| | | | |
| | 從Data到CheckSum的字節數。大端格式(高字節在前) |
| 從Type開始按字節累加到本域的前一字節.每次累加進位去掉。 |
Type:數據包類型,也理解為Command. 不同的Tyep其對應的Length大小可能不同,Data也有所區別。
Length:在此之后的數據長度。大端格式。
CheckSum:校驗和,雖然TCP傳輸協議本身已經有CRC校驗,但網絡傳輸路徑的復雜性仍然無法保證數據一定無誤,因此需要對每個數據幀(包)再進行簡單的校驗。
二.Login和LoginAck及其Data含義DTU每次和服務器建立TCP連接后,首先必須先往服務器發Login命令,服務器根據業務需要判斷其合法性(鑒權),然后回復LoginAck命令。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | PSN(uint32)|PASS(uint32)|PName(uchar[8])|CurVer(uint16)| CCID(char[20]) | |
| | | | Right(uchar)|FoTaFlag(uchar)|TickTime(uchar)|SendTestMode(uchar)|SendTestTime(uchar)|NewVer(uint16)|NewPort(uint16)|NewIP(uchar[4])| |
PSN:DTU編碼.每個DTU都有唯一的產品序列號(或簡稱DTU編碼)。
PASS: DTU密碼。
服務器建立PSN和PASS關系表,初始化情況下PASS為0,當DTU請求Login時,如果數據庫里PSN對應的PASS為0時,不需比對直接通過,并將DTU上傳的PASS值寫入數據庫中,下次DTU再登錄服務器時,因數據庫的PASS非0而需要比較DTU上傳的PASS和數據庫的PASS是否相同,不同則認為鑒權失敗。
PName:產品名稱,如HS121, 不夠8字節的后面補0.
CurVer:當前DTU應用版本號。
CCID: SIM卡的ICCID號(20個字符)。
Right:服務器鑒權結果。
Right=0xEA表示鑒權成功! 其他值均表示鑒權失敗。如果鑒權失敗,服務器應在發完這條響應數據包后主動關閉此TCP連接。
FoTaFlag: 空中升級配置標志:
FoTaFlag =0--不支持空中升級;
FoTaFlag =1--可手動空中升級;用戶通過串口或按鍵組合才能觸發觸發空中升級。
FoTaFlag =2--可自動空中升級。DTU收到此信息后應馬上進入空中升級模式。
TickTime:上傳心跳時間間隔
SendTestMode: 數據上傳模式,可以選擇服務器查詢,或者DTU自動上傳。(目前此模式無效,只支持定時上傳)
SendTestMode=0 :任何一個測量值發生變化終端馬上上傳,但上傳速度不大于SendTestTime 所設定的時間。如SendTestTime=3則最快上傳速度為3 秒一次。
SendTestMode =255:忽略Test值是否有變化,只按照SendTestTime設定的時間間隔上傳。
SendTestMode=x( 0<x<255):當第1~x個Test參數中有任何一個變化時馬上上傳,否則將根據SendTestTime所設定的時間定時上傳. Test測量值順序按終端和服務器約定的SendTest命令中Data的TestValue順序排列,2字節一組(組成unsigned short 或short類型數據)。
SendTestTime: DTU上傳Test時間,在沒有服務端下發查詢的時候DTU以此時間間隔上傳DTU保存值,為0時表示不自動上傳。
NewVer:表示當前DTU軟件的最新版本號,0表示沒有新版本。當DTU檢查到當前版本小于最新版本時,DTU根據FoTaFlag決定是否遠程升級。
NewPort:新服務器端口。
NewIP:新服務器端IP地址。如123.86.55.33 第一個字節為123 按此順序。
NewPort和NewIP 可用于服務器遷移和負載均衡需要。為0時終端不處理,非0時終端將更新存儲的服務器IP和Port,下次鏈接服務器將用新的IP和Port.
三、SendTick和SendTickAck及其Data含義: DTU Login到服務器時,服務器下發的LoginAck中包含了TickTime參數(單位為秒),其值代表了DTU應該至少在多長時間內發起一次上行數據,如果在這個時間段內沒有任何上行數據傳輸(如SendTest或SendSetup),則必須發一個SendTick 數據包到服務器,以便服務器持續保持TCP鏈路。
四. SaveSetup和SaveSetupAck及其相關的Data含義:SaveSetup用于服務器配置自動上傳數據的時間間隔,以及DTU里關于寄存器地址的信息列表,即“寄存器列表”,DTU將根據此列表讀取對應寄存器地址的值(value)。配置成功后DTU用SaveSetupAck包把所配置的寄存器列表返回給服務器,可供服務器用于校驗配置成功與否。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | SendTestTime(uchar)| SetDev1(uchar)|SetAddr1 (int16)|SetDev2(uchar)| SetAddr2(int16)|... |
| | | | Result(uchar)|SendTestTimeAck(uchar)|SetDevAck1(uchar)|SetAddrAck1 (int16)|SetDevAck2(uchar)| SetAddrAck2(int16)|... |
寄存器地址列表:
下行SaveSetup:
SendTestTime:配置自動上傳數據的時間間隔(單位:秒)
SetDev1,SetAddr1:從機號,寄存器地址
SetDev2,SetAddr2:從機號,寄存器地址
SetDev3,SetAddr3:從機號,寄存器地址
SetDev4,SetAddr4:從機號,寄存器地址
SetDev5,SetAddr5:從機號,寄存器地址
......
上行SaveSetupAck:
成功返回:
Result:1
SendTestTimeAck: 自動上傳數據的時間間隔(單位:秒)
SetDevAck1,SetAddrAck1:從機號,寄存器地址
SetDevAck2,SetAddrAck2:從機號,寄存器地址
SetDevAck3,SetAddrAck3:從機號,寄存器地址
SetDevAck4,SetAddrAck4:從機號,寄存器地址
SetDevAck5,SetAddrAck5:從機號,寄存器地址
......
失敗返回:
Result:0
五. ReadSetup和ReadSetupAck及其相關的Data含義:ReadSetup用于服務器讀取DTU里存儲的自動上傳時間間隔參數,以及“寄存器列表”。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | |
| | | | SendTestTime (uchar)|ReadDev1(uchar)|ReadAddr1 (int16) | ReadDev2(uchar)|ReadAddr2(int16)|... |
SendTestTime:自動上傳時間間隔
ReadDev1,ReadAddr1:從機號,寄存器地址
ReadDev2,ReadAddr2:從機號,寄存器地址
ReadDev3,ReadAddr3:從機號,寄存器地址
ReadDev4,ReadAddr4:從機號,寄存器地址
ReadDev5,ReadAddr5:從機號,寄存器地址
......
六、SendTest和SendTestAck及其相關的Data含義: SendTest是DTU定時自動上傳的數據包,數據內容為寄存器里的值(value)。DTU將根據“寄存器列表”去獲取從機的對應的寄存器里對應值(value),按順序排列為如Value1,Value2,Value3... 將所有測量數據一起打包成SendTest數據包上傳給服務器。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | NetState(uchar)|TestCode(uchar)|Value1(int16) | Value2(int16)... |
| | | | |
NetState: 網絡狀態.DTU通訊模塊的CSQ值。
TestCode: 測量值標識碼。為了DTU同步Value數據到服務器,服務器收到SendTest數據包并成功解析、存儲后將此TestCode回傳給DTU。
當DTU本地的各種Value發生變化且滿足SendTestMode要求時,本地記錄的TestCode加一(255加1等于0),然后和所有的Value打包成SendTest數據包上傳給服務器,當服務器收到SendTest數據包且成功解析并保存后將其值返回給DTU即可,假如服務器收到的SendTest數據包和事先約定的數據包不相符(比如個數少了),則服務器可以通過將TestCode減一(0減1等于255)后再回傳給DTU,這樣DTU會觸發重傳。TestCode服務器不需要保存在數據庫中。
Value1 : 第一個寄存器地址里的值;
Value2 : 第二個寄存器地址里的值;
Value3 : 第三個寄存器地址里的值;
Value4 : 第四個寄存器地址里的值;
......
七.ReadTest和ReadTestACK及相關的Data含義ResdTest用于服務器查詢指定寄存器的數據。
ResdTestAck是DTU返回給服務器的數據包,由對應的寄存器的值(value)組成。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | ReadValueDev1(uchar)|ReadValueAddr1 (int16)|ReadValueDev2(uchar)| ReadValueAddr2(int16)|... |
| | | | Result(uchar)|ReadValue1(int16)| ReadValue12(int16)...... |
上行ResdTest:
ReadValueDev1,ReadValueAddr1:從機號,寄存器地址
ReadValueDev2,ReadValueAddr2:從機號,寄存器地址
ReadValueDev3,ReadValueAddr3:從機號,寄存器地址
ReadValueDev4,ReadValueAddr4:從機號,寄存器地址
ReadValueDev5,ReadValueAddr5:從機號,寄存器地址
......
下行ResdTestAck:
成功返回:
Result:1
ReadValue1: 第一個寄存器地址里的值
ReadValue2: 第一個寄存器地址里的值
ReadValue3: 第一個寄存器地址里的值
ReadValue4: 第一個寄存器地址里的值
ReadValue5: 第一個寄存器地址里的值
......
失敗返回:
Result:0
八. SetControl和SetControl Ack及相關的Data含義從機中,某些寄存器是用于配置的。SetControl用于服務器給DTU下發指令,讓DTU去設置某些寄存器的參數. SetControlAck為DTU響應服務器的數據包,跟服務器下發的配置參數一致,可供服務器校驗配置成功與否。
| | | | Data內容格式 (按順序排列,排在前面的先傳輸,大端格式) |
| | | | SetValueDev1 (uchar) |SetValueAddr 1(int16)| SetValue(int16)1| SetValueDev2 (uchar) |SetValueAddr 2(int16)| SetValue(int16)2|...... |
| | | | Result(uchar)|SetValueDevAck1 (uchar)|SetValueAddrAck1 (int16)| SetValueAck1 (int16) |SetValueDevAck2 (uchar)|SetValueAddrAck2 (int16)| SetValueAck2 (int16)|...... |
下行SetControl:
SetValueDev1: 從機號
SetValueAddr1:寄存器地址
SetValue1:參數
SetValueDev2: 從機號
SetValueAddr2:寄存器地址
SetValue2:參數
......
上行SetControlAck:
成功返回:
Result:1
SetValueDevAck1: 從機號
SetValueAddrAck1:寄存器地址
SetValueAck1:參數
SetValueDevAck2: 從機號
SetValueAddrAck2:寄存器地址
SetValueAck2:參數
......
失敗返回:
Result:0
附:
DTUDTU內的寄存器列地址和寄存器值列表示意:
完整的Word格式文檔51黑下載地址:
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
一区观看
|
性精品|
国产污视频在线
|
久久精品国产一区二区电影
|
一级电影免费看
|
国产日韩一区二区
|
亚洲一区av
|
久久在线看
|
久久大
|
国产一区二区a
|
欧美人妖网站
|
国产精品一级在线观看
|
丝袜 亚洲 另类 欧美 综合
|
欧美性吧|
成人国产精品视频
|
亚洲最色视频
|
99这里只有精品视频
|
午夜视频在线观看一区二区
|
国产高清一区二区三区
|
亚洲一区二区三区免费观看
|
亚洲综合婷婷
|
色婷婷久久久亚洲一区二区三区
|
亚洲色图婷婷
|
日韩美女在线看免费观看
|
97视频精品|
久久aⅴ乱码一区二区三区
91综合网
|
人碰人操|
91亚洲国产成人久久精品网站
|
青青草视频免费观看
|
欧美综合国产精品久久丁香
|
亚洲午夜av久久乱码
|
黄色免费网站在线看
|
浮生影院免费观看中文版
|
久久久一区二区三区四区
|
欧美日韩在线观看一区二区三区
|
日韩视频免费
|
亚洲精品在线看
|
一区天堂
|
狠狠综合久久av一区二区老牛
|
黄色91在线
|
久久久久亚洲
|