注意:
對于一般的支持 Modbus TCP 設備,可能無法在其設備手冊中查找到諸如 40001、30001 這種數(shù)據(jù)地址,而是以功能碼 + 十六進制數(shù)形式的變量地址,這樣有兩種處理辦法:
方法 1:將功能碼 + 100 作為 MB_MODE,十六進制地址數(shù)轉(zhuǎn)化為十進制數(shù)作為 MB_DATA_ADDR。例如 0x03 功能碼,地址 0x00FF,這樣就是 MB_MODE = 103, MB_DATA_ADDR = 255。
方法 2:通過判斷功能碼決定是讀是寫,決定 MB_MODE 為 0 讀還是 1 寫(2 寫比較特殊,只用于不支持 5、6 號功能碼的設備),然后將十六進制地址數(shù)轉(zhuǎn)化為十進制數(shù),然后對于不同的功能碼,十進制數(shù)增加不同的偏移量,對于功能碼 1、5、15 偏移量為 1,對于功能碼 2 偏移量為 10001,對于功能碼 3、6、16 偏移量為 40001(對于超過 9999 的地址,偏移量為 400001),對于功能碼 4 偏移量為 30001。同樣以 0x03 功能碼,地址 0x00FF 為例,因為是讀,所以 MB_MODE = 0, 0x00FF 轉(zhuǎn)換為十進制為 255,加上偏移量 40001 就是 40256,這樣 MB_DATA_ADDR = 40256。