我們用電腦作為Modbus主站來對Modbus從站來進行讀寫調試。首先需要對設備的工作參數進行配置,下面重點講解一下如何配置CAN數據ID和寄存器首地址的映射表來具體實現CAN數據和Modbus總線數據相互轉換。
1.將設備斷電后拆開,將撥碼開關2撥到on如下圖,之后將模塊上電。

2.然后用RS485轉CAN線連接設備,如下圖所示。

3.進入配置軟件,如下圖所示。

4.選擇正確的com端口,點擊“連接”,如下圖所示。

5.點擊“讀參數”,顯示“UPload Date Success”,點擊確定,如下圖。

6.進入“Recieve CAN”進入接收CAN總線數據映射表,點擊“添加”按鈕添加一條空數據,如下圖所示。

7.之后對新添加的數據進行修改,本經驗中的設置是:COB-ID 18F00401、擴展幀、數據幀、modbus寄存器首地址01、數據長度8。設置好后點擊“設置參數”按鈕如下圖所示。

設置成功后,將設備撥碼開關2撥下來,重新上電后,設置生效。這時設備就可以連接CAN設備和Modbus主站,進行通信了。注意:映射關系可以按需要配置。

在串行鏈路中,我們(Modbus)使用一種簡單的主從協議(客戶機/服務器協議)進行通信??蛻魴C作為主站,向服務器發送請求;服務器(從站)接到請求后,對請求進行分析并作出應答。我和小伙伴的通信幀被稱為應用數據單元(Application Data Unit,ADU),它包括通信地址段、功能代碼段、數據段和校驗段,如下圖:

其中,功能代碼段和數據段組合稱為協議數據單元(Protocol Data Unit,PDU)。功能代碼段占用一個字節,取值范圍為1~255,其中128~255為保留值,用于異常消息應答報文。1~127為功能代碼編號,其中65~72和100~110為用戶自定義編碼,具體請看下面這張圖片:

通用功能編碼(Public function code)是已經公布的功能代碼,有確定的功能,用戶不能修改。比如:0x01表示讀取線圈,0x02表示讀取離散量的輸入等等。下圖是一些常用的功能代碼的描述:

早期在RS485串行通信中規定ADU的最大長度為256個字節,其中:通信地址占用1個字節,校驗段占用2個字節,所以協議數據單元(PDU)的最大長度為256-1-2=253 字節。而我三弟(Modbus TCP)因為要增加一個7個字節的MBAP(MODBUS Application Protocol)的報文頭,所以他的ADU的長度=253+7=260 字節。