一種嵌入式現場(chǎng)總線(xiàn)通信網(wǎng)關(guān)的設計與實(shí)現
3.3 MODBUS主站、從站的收發(fā)程序設計
網(wǎng)關(guān)作為MODBUS從站時(shí)的主要工作是初始化串口,初始化定時(shí)器,配置嵌套向量中斷控制器(NVIC),分別對串口接收數據中斷和定時(shí)器中斷設置響應優(yōu)先級和搶占優(yōu)先級。從數據緩沖區A中獲得數據,對獲得的數據生成CRC校驗碼,組成MODBUS幀從串口按照時(shí)序發(fā)送這一幀數據。
串口初始化如下:


MODBUS協(xié)議規定了2種傳輸模式:ASCII模式和RTU模式。本文設計的網(wǎng)關(guān)使用RTU模式傳輸,在此模式下報文中每個(gè)8位字節含有2個(gè)4位16進(jìn)制字符它的優(yōu)點(diǎn)是較高的數據密度,在相同的波特率下比ASCII模式有更高的吞吐率。命令幀由地址碼、功能碼、數據語(yǔ)和CRC校驗碼構成。在RTU模式下,幀與幀之間必須由時(shí)長(cháng)至少為3.5個(gè)字符時(shí)間的空閑間隔區分。整個(gè)幀必須以連續的字符流發(fā)送,如果兩個(gè)字符之間的空閑間隔大于1.5個(gè)字符時(shí)間,則該幀被認為不完整的幀而被丟棄,接收設備假定下一字節是一個(gè)新消息的地址域。
MODBUS主站程序需要使用3個(gè)定時(shí)器,其中TIM2用于控制發(fā)送的3.5個(gè)字符的幀間隔。TIM3用于控制接收MODBUS從站的回應幀的3.5個(gè)字符的幀間隔。TIM4用于接收時(shí)確保字符間的間隔小于1.5個(gè)字符時(shí)間。初始化TIM2與TIM3,定時(shí)時(shí)間為定時(shí)3.645 8 ms(波特率為9 600 b/s時(shí)的3.5字符時(shí)間):

網(wǎng)關(guān)作MODBUS主站的工作流程如圖7所示。本文引用地址:http://dyxdggzs.com/article/148017.htm
網(wǎng)關(guān)工作在MODBUS主站模式時(shí)對從站響應幀的接收使用中斷處理的方式。在第一個(gè)字節傳輸結束后啟動(dòng)TIM4定時(shí)器,定時(shí)時(shí)間為1.5個(gè)字符時(shí)間,在后續的字節傳輸結束時(shí)清零計數器,保證一個(gè)幀中的字符間隔不超過(guò)1.5個(gè)字符時(shí)間。接收完成后啟動(dòng)定時(shí)器TIM3,定時(shí)3.5個(gè)字符時(shí)間,在此時(shí)間內的接收的任何數據都將丟棄。
網(wǎng)關(guān)作為MODBUS從站時(shí)對化串口和定時(shí)器的初始化與MODBUS主站相同,將數據組成CAN的幀,發(fā)送該幀,并向MODBUS主站發(fā)送響應幀。網(wǎng)關(guān)作為MODBUS從站的工作流程如圖8所示。
3.4 主程序
主程序中初始化FSMC,初始化LCD,初始化觸摸屏,校正觸摸屏,顯示工作模式選擇界面、參數配置界面及當前工作模式界面。根據選擇進(jìn)入相應工作模式。
4 測試結果
在PC機上使用串口助手和USB-CAN軟件模擬CANBUS與MODBUS的收發(fā)。MODBUS到CANBUS的通信模擬:由PC機向網(wǎng)關(guān)發(fā)送一幀數據00 01 02 03 0405 06 07,網(wǎng)關(guān)設置幀ID為0x321并發(fā)出數據,通過(guò)CANUSB軟件接收該數據為00 01 02 03 04 05 06 07。如圖9所示。CANBUS到MODBUS的通信模擬:使用CAN-USB軟件發(fā)送一幀0f 14 0f 05 00 01 02 03,網(wǎng)關(guān)解析其中數據00 01 02 03,并作為MODBUS主站發(fā)送數據,將數據輸出到串口助手為00 01 02 03。如圖10所示。
5 結語(yǔ)
本文設計實(shí)現了一種在CANBUS和MODBUS間進(jìn)行透明的數據傳輸的嵌入式現場(chǎng)總線(xiàn)通信網(wǎng)關(guān),軟硬件設計簡(jiǎn)單,通信參數可現場(chǎng)配置,能夠很好地實(shí)現CANBUS與MODBUS間的通信。該網(wǎng)關(guān)解決了異類(lèi)現場(chǎng)總線(xiàn)間通信的問(wèn)題,使系統的兼容性、互聯(lián)性、可擴充性都得到了極大的提高,具有良好的應用前景。
通信相關(guān)文章:通信原理
評論