嵌入式現(xiàn)場總線通信網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)(二)
出處:電子愛好者博客 發(fā)布于:2013-05-28 15:09:50
軟件設(shè)計(jì)
的應(yīng)用層定義
本文設(shè)計(jì)的現(xiàn)場總線通信網(wǎng)關(guān)定義了CANBUS的應(yīng)用層協(xié)議.
(1)規(guī)定網(wǎng)關(guān)收到的CAN數(shù)據(jù)幀中的第1個(gè)字節(jié)為CANBUS的功能碼,該功能碼為0x0F時(shí),與MODBUS進(jìn)行通信.
?。?)規(guī)定CAN數(shù)據(jù)幀中的第2個(gè)字節(jié)的高4位為該幀的標(biāo)號位,低4位為該幀中包含的數(shù)據(jù)字節(jié)數(shù),該字節(jié)數(shù)為MODBUS協(xié)議中數(shù)據(jù)域的字節(jié)數(shù).
?。?)規(guī)定CAN 數(shù)據(jù)幀中的第3,第4 個(gè)字節(jié)分別為MODBUS的地址碼和功能碼.
?。?)規(guī)定從CAN 數(shù)據(jù)幀的第5個(gè)字節(jié)開始為
的數(shù)據(jù)域,由于MODBUS 的數(shù)據(jù)域一般為4 個(gè)字節(jié),此時(shí)CAN數(shù)據(jù)幀的數(shù)據(jù)段恰好為8個(gè)字節(jié).
?。?)當(dāng)MODBUS 數(shù)據(jù)長度大于4 字節(jié)時(shí),需要從2 個(gè)或者多個(gè)連續(xù)發(fā)送的標(biāo)號相同的CAN 數(shù)據(jù)幀中獲得完整的MODBUS數(shù)據(jù).當(dāng)獲得的數(shù)據(jù)位數(shù)與幀中給出的位數(shù)不同時(shí)丟棄該幀.
定義一個(gè)數(shù)據(jù)緩沖區(qū)A,一個(gè)數(shù)據(jù)緩沖區(qū)B,分別用于臨時(shí)存放CANBUS到MODBUS的數(shù)據(jù)和MODBUS到CANBUS的數(shù)據(jù).
的收發(fā)程序設(shè)計(jì)
該部分包括CAN初始化,CAN發(fā)送程序,CAN接收程序.CAN 的初始化包括以下內(nèi)容:配置嵌套向量中斷控制器(NVIC),設(shè)置CAN的RX0和TX中斷的響應(yīng)優(yōu)先級和搶占優(yōu)先級,RX0和TX 中斷使能.根據(jù)硬件連接配置GPIO,本文中RX 使用GPIOD0,TX 使用GPI-BOD2.設(shè)置波特率及過濾器配置.
數(shù)據(jù)的接收是通過接收郵箱(FIFO)中斷進(jìn)行處理的,當(dāng)FIFO接收到一個(gè)新的報(bào)文時(shí),過濾器根據(jù)預(yù)設(shè)的值判斷報(bào)文的標(biāo)示符是否匹配,若不匹配,直接丟棄該報(bào)文;若該報(bào)文的標(biāo)示符與預(yù)設(shè)值匹配則中斷處理程序?qū)⒔邮锗]箱中的數(shù)據(jù)拷貝到數(shù)據(jù)緩沖區(qū)A,該數(shù)據(jù)將作為MODBUS 主站發(fā)往MODBUS 從站的數(shù)據(jù).
數(shù)據(jù)接收程序流程如圖5所示.

的數(shù)據(jù)發(fā)送同樣使用郵箱機(jī)制,網(wǎng)關(guān)從數(shù)據(jù)緩沖區(qū)B中獲得從MODBUS接收的數(shù)據(jù),設(shè)置標(biāo)示符和數(shù)據(jù)長度,選擇一個(gè)發(fā)送郵箱,使能發(fā)送郵箱空中斷.因此當(dāng)該郵箱為空時(shí)產(chǎn)生一個(gè)中斷,中斷處理程序?qū)?shù)據(jù)從緩沖區(qū)拷貝到發(fā)送郵箱,該郵箱狀態(tài)變?yōu)轭A(yù)定發(fā)送狀態(tài).
當(dāng)CAN 總線進(jìn)入空閑狀態(tài),預(yù)定發(fā)送郵箱中的報(bào)文就馬上被發(fā)送,進(jìn)入發(fā)送狀態(tài).郵箱中的報(bào)文被成功發(fā)送后,它馬上變?yōu)榭锗]箱.CANBUS數(shù)據(jù)發(fā)送程序如圖6所示.

主站.從站的收發(fā)程序設(shè)計(jì)
網(wǎng)關(guān)作為MODBUS從站時(shí)的主要工作是初始化串口,初始化定時(shí)器,配置嵌套向量中斷控制器(NVIC),分別對串口接收數(shù)據(jù)中斷和定時(shí)器中斷設(shè)置響應(yīng)優(yōu)先級和搶占優(yōu)先級.從數(shù)據(jù)緩沖區(qū)A中獲得數(shù)據(jù),對獲得的數(shù)據(jù)生成CRC 校驗(yàn)碼,組成MODBUS 幀從串口按照時(shí)序發(fā)送這一幀數(shù)據(jù).
串口初始化如下:
設(shè)置波特率為
數(shù)據(jù)長度為8位
位停止位
無奇偶校驗(yàn)
無硬件流控制
使能串口發(fā)送和接收
協(xié)議規(guī)定了2 種傳輸模式:ASCII 模式和RTU 模式.本文設(shè)計(jì)的網(wǎng)關(guān)使用RTU模式傳輸,在此模式下報(bào)文中每個(gè)8位字節(jié)含有2個(gè)4位16進(jìn)制字符它的優(yōu)點(diǎn)是較高的數(shù)據(jù)密度,在相同的波特率下比ASCII 模式有更高的吞吐率.命令幀由地址碼.功能碼.數(shù)據(jù)語和CRC校驗(yàn)碼構(gòu)成.在RTU模式下,幀與幀之間必須由時(shí)長至少為3.5 個(gè)字符時(shí)間的空閑間隔區(qū)分.整個(gè)幀必須以連續(xù)的字符流發(fā)送,如果兩個(gè)字符之間的空閑間隔大于1.5 個(gè)字符時(shí)間,則該幀被認(rèn)為不完整的幀而被丟棄,接收設(shè)備假定下一字節(jié)是一個(gè)新消息的地址域.
主站程序需要使用3個(gè)定時(shí)器,其中TIM2用于控制發(fā)送的3.5 個(gè)字符的幀間隔.TIM3 用于控制接收MODBUS 從站的回應(yīng)幀的3.5 個(gè)字符的幀間隔.
用于接收時(shí)確保字符間的間隔小于1.5 個(gè)字符時(shí)間.初始化TIM2 與TIM3,定時(shí)時(shí)間為定時(shí)3.645 8 ms(波特率為9 600 b/s時(shí)的3.5字符時(shí)間):
設(shè)置定時(shí)周期
設(shè)置預(yù)分頻值
設(shè)置時(shí)鐘分頻
×
設(shè)置計(jì)數(shù)器增長方式
網(wǎng)關(guān)作MODBUS主站的工作流程如圖7所示.

網(wǎng)關(guān)工作在MODBUS主站模式時(shí)對從站響應(yīng)幀的接收使用中斷處理的方式.在個(gè)字節(jié)傳輸結(jié)束后啟動TIM4定時(shí)器,定時(shí)時(shí)間為1.5個(gè)字符時(shí)間,在后續(xù)的字節(jié)傳輸結(jié)束時(shí)清零計(jì)數(shù)器,保證一個(gè)幀中的字符間隔不超過1.5 個(gè)字符時(shí)間.接收完成后啟動定時(shí)器TIM3,定時(shí)3.5 個(gè)字符時(shí)間,在此時(shí)間內(nèi)的接收的任何數(shù)據(jù)都將丟棄.
網(wǎng)關(guān)作為MODBUS從站時(shí)對化串口和定時(shí)器的初始化與MODBUS主站相同,將數(shù)據(jù)組成CAN的幀,發(fā)送該幀,并向MODBUS主站發(fā)送響應(yīng)幀.網(wǎng)關(guān)作為
從站的工作流程如圖8所示.

主程序
主程序中初始化FSMC,初始化LCD,初始化觸摸屏,校正觸摸屏,顯示工作模式選擇界面.參數(shù)配置界面及當(dāng)前工作模式界面.根據(jù)選擇進(jìn)入相應(yīng)工作模式.
測試結(jié)果
在PC 機(jī)上使用串口助手和USB-BCAN 軟件模擬CANBUS與MODBUS的收發(fā).MODBUS到CANBUS的通信模擬:由PC機(jī)向網(wǎng)關(guān)發(fā)送一幀數(shù)據(jù)00 01 02 03 0405 06 07,網(wǎng)關(guān)設(shè)置幀ID為0×321并發(fā)出數(shù)據(jù),通過CAN-USB軟件接收該數(shù)據(jù)為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)解析其中數(shù)據(jù)00 01 02 03,并作為MODBUS主站發(fā)送數(shù)據(jù),將數(shù)據(jù)輸出到串口助手為00 01 02 03.如圖10所示.


結(jié)語
本文設(shè)計(jì)實(shí)現(xiàn)了一種在CANBUS和MODBUS間進(jìn)行透明的數(shù)據(jù)傳輸?shù)那度胧浆F(xiàn)場總線通信網(wǎng)關(guān),軟硬件設(shè)計(jì)簡單,通信參數(shù)可現(xiàn)場配置,能夠很好地實(shí)現(xiàn)CAN-BUS與MODBUS間的通信.該網(wǎng)關(guān)解決了異類現(xiàn)場總線間通信的問題,使系統(tǒng)的兼容性.互聯(lián)性.可擴(kuò)充性都得到了極大的提高,具有良好的應(yīng)用前景.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- ARM技術(shù)架構(gòu)與應(yīng)用開發(fā)實(shí)踐指南2026/1/6 10:40:19
- 嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)選型與移植技術(shù)指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術(shù)選型與抗干擾設(shè)計(jì)實(shí)踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時(shí)代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎(chǔ)知識2025/7/14 16:59:04
- PCB焊盤與過孔設(shè)計(jì)核心實(shí)操規(guī)范(含可焊性與可靠性保障)
- 汽車電子常用電子元器件選型指南
- MOSFET驅(qū)動與隔離方案設(shè)計(jì)
- 高溫環(huán)境下電源IC選型建議
- 安防監(jiān)控設(shè)備連接器應(yīng)用分析
- 高速PCB信號完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測試方法









