過去,在我們(men) 為(wei) 客戶做技術支持時常會(hui) 發生這樣的情況,由於(yu) 儀(yi) 表支持的Modbus協議與(yu) 我們(men) 軟件所支持的有一些細微區別,就會(hui) 導致世紀星讀出的數據與(yu) 實際數據不符合。要解決(jue) 這個(ge) 問題,就必須重新定製一個(ge) 驅動提供給客戶進行更新,這樣一來,對於(yu) 客戶或者對於(yu) 我們(men) 技術支持人員都會(hui) 耽誤一定的時間,而且,某些客戶的現場沒有條件上網進行驅動更新,這樣就給客戶造成了更大的不便。
為(wei) 解決(jue) 這一問題,我們(men) 在總結常遇問題的基礎上,對世紀星中的Modbus驅動進行了改善,可以通過Modbus設備初始化字設置直接解決(jue) 以下三個(ge) 問題:
1)16位整數的字節順序的調整;
2)32位整數(或實數)字順序的調整;
3)寫(xie) 單個(ge) 寄存器時所使用功能碼的選擇。
初始化字格式為(wei) (XXX),每個(ge) X的值為(wei) 1或者為(wei) 0,括號為(wei) 半角符號,當初始化字設置為(wei) 空時,係統默認為(wei) (000)。
第一,16位整數的字節順序的調整:
第一個(ge) X:值為(wei) 0時,表示16位整數傳(chuan) 送時高字節在前,低字節在後;值為(wei) 1時,表示16位整數傳(chuan) 送時低字節在前,高字節在後。
例:設備傳(chuan) 送的16位整數(即兩(liang) 個(ge) 字節):12H 34H。當X值為(wei) 0時,賦值給變量的數據為(wei) 1234H(十進製數為(wei) 4660);當X值為(wei) 1時,賦值給變量的數據為(wei) 3412H(十進製數為(wei) 13330)。
第二,32位整數(或實數)字順序的調整:
第二個(ge) X:值為(wei) 0時,表示32位數據低字在前,高字在後;值為(wei) 1時,表示32位數據高字在前,低字在後。當讀取的數據為(wei) 32位的長整型或浮點數時,要搭配第一個(ge) X和第二個(ge) X配置讀取數據的字節順序。
以長整型為(wei) 例:
設備傳(chuan) 送的32位整數(即四個(ge) 字節):12H 34H 56H 78H。
當XX值為(wei) 00時,賦值給變量的數據為(wei) 56781234H(十進製數為(wei) 1450709556);
當XX值為(wei) 01時,賦值給變量的數據為(wei) 12345678H(十進製數為(wei) 305419896);
當XX值為(wei) 10時,賦值給變量的數據為(wei) 78563412H(十進製數為(wei) 2018915346);
當XX值為(wei) 11時,賦值給變量的數據為(wei) 34127856H(十進製數為(wei) 873625686)。
第三,寫(xie) 單個(ge) 寄存器時所使用功能碼的選擇:
第三個(ge) X:X值為(wei) 0時,使用06(06H)號功能碼向設備寫(xie) 入單字整數數據;X值為(wei) 1時,使用16(10H)號功能碼像設備寫(xie) 入單字整數數據。
例如:上位機要將設備地址為(wei) 2,寄存器地址為(wei) 5的16位寄存器設置為(wei) 18(12H):
當X值為(wei) 0時,上位機發送的命令為(wei) :02 06 00 05 00 12 19 F5;
第一個(ge) 字節:02,表示設備地址;
第二個(ge) 字節:06,為(wei) 功能碼字節,06號功能碼的作用為(wei) 預置單個(ge) 16位寄存器;
第三第四個(ge) 字節:0005,表示的是上位機發送命令所預置的寄存器的地址;
第五第六個(ge) 字節:0012H,表示上位機要將地址為(wei) 5的16位寄存器設置為(wei) 18(12H);
第七第八個(ge) 字節:19 F5,為(wei) CRC校驗字節。
當X值為(wei) 1時,上位機發送的命令為(wei) :02 10 00 05 00 01 02 00 12 70 D3。
第一個(ge) 字節:02,表示設備地址;
第二個(ge) 字節:10H(十進製為(wei) 16),為(wei) 功能碼字節;
第三第四個(ge) 字節:0005,表示的是上位機發送命令所預置的多個(ge) 寄存器的起始地址為(wei) 0005H;
第五第六個(ge) 字節:0001,表示上位機要進行設置的寄存器個(ge) 數;
第七個(ge) 字節:02,表示後麵跟著的2個(ge) 字節數據是要預置到指定寄存器中去的;
緊跟在第七個(ge) 字節後的兩(liang) 個(ge) 字節便是要預置到指定寄存器中的數據了;
最後兩(liang) 個(ge) 字節:9C08,為(wei) CRC校驗字節。
當初始化字為(wei) 空或者三個(ge) X值都為(wei) 0時,世紀星采用原版的Modbus驅動解析數據的方式進行存取數據。因此用戶在使用Modbus驅動進行通信時,可以暫時不設置初始化字,當取出的數據與(yu) 實際的數據相差較大時,再參考這篇文章進行調試,或者可直接聯係我們(men) 世紀星的技術支持人員幫助您調試
轉載請注明出處。







相關文章
熱門資訊
精彩導讀



















關注我們

