陳俊煒,周政,李宇翔,繆文南
(廣州城市理工學(xué)院電子信息工程學(xué)院,廣東廣州,510800)
隨著中國科技的快速發(fā)展,工業(yè)控制系統(tǒng)在各個(gè)行業(yè)中應(yīng)用非常廣泛,例如農(nóng)業(yè)、礦山、油田等領(lǐng)域發(fā)揮著巨大的作用。在工業(yè)現(xiàn)場中,通常是采用一個(gè)主節(jié)點(diǎn)對(duì)多個(gè)子節(jié)點(diǎn)進(jìn)行控制或數(shù)據(jù)采集。在傳輸介質(zhì)方面可以利用無線技術(shù),相對(duì)于有線通訊網(wǎng)絡(luò),無線通訊網(wǎng)網(wǎng)絡(luò)具有極高的靈活性的移動(dòng)性,且傳輸范圍廣。因此,在工業(yè)現(xiàn)場的設(shè)計(jì)中,對(duì)主節(jié)點(diǎn)和子節(jié)點(diǎn)的通信方式和通信協(xié)議的設(shè)計(jì)就顯得至關(guān)重要。針對(duì)控制器通信問題,本文將Modbus技術(shù)與無線技術(shù)相結(jié)合,設(shè)計(jì)一套低成本,高安全性,高快捷且基于Modbus協(xié)議的無線控制系統(tǒng)。通過無線Modbus通信網(wǎng)絡(luò),主機(jī)可以根據(jù)地址調(diào)用設(shè)備,隨時(shí)讀取設(shè)備的場數(shù)據(jù)和控制設(shè)備的工作狀態(tài)。
系統(tǒng)主要由STM32最小系統(tǒng)、SX1268無線模塊、RS-485通信模塊、穩(wěn)壓模塊、繼電器電路、電壓采集模塊、拓展模塊、LED電路組成。系統(tǒng)方案如圖1所示。其中電源供電使用了LM2596開關(guān)電源電路和AMS1117線性低壓差穩(wěn)壓電源電路。繼電器電路使用TPL521可控制的光耦合器件和ULN2003大電流驅(qū)動(dòng)陣列驅(qū)動(dòng)繼電器。TPL521負(fù)責(zé)強(qiáng)電和弱電的隔離,增強(qiáng)系統(tǒng)穩(wěn)定性。ULN2003是高壓大電流達(dá)林頓晶體管陣列,STM32主控器內(nèi)置的模數(shù)轉(zhuǎn)換器(ADC)進(jìn)行電壓采集。
圖1 系統(tǒng)硬件框圖
STM32的最小系統(tǒng)的電路圖如圖2所示,主要由復(fù)位電路、下載接口、BOOT選擇電路、濾波電路組成。選用STM32G070芯片,內(nèi)置了16MHZ的晶振,經(jīng)過PLL倍頻器,可以得到64M的時(shí)鐘頻率。在STM32G0x0中,通過BOOT0引腳和引導(dǎo)配置位nBOOT1、BOOT_SEL和nBOOT0來選擇三種不同的引導(dǎo)模式,我們禁用BOOT0引腳功能,然后軟件將所有bit置1,將用戶閃存作為啟動(dòng)區(qū)。選用SW調(diào)試接口。使用的j-link仿真器,最高可以達(dá)到50M的調(diào)試速度。結(jié)合RC電路,當(dāng)按鍵按下時(shí),復(fù)位引腳處于低電平,單片機(jī)進(jìn)入復(fù)位狀態(tài)。
圖2 STM32最小系統(tǒng)工作電路原理圖
系統(tǒng)供電部分輸入電壓為12V,通過開關(guān)電源電路將電壓降到5V,再利用低壓差線性穩(wěn)壓電源將電壓降到3.3V,分別給各個(gè)模塊供電。開關(guān)電源的供電接口采用了常用的DC接口,使用方便,而電源芯片則采用了貼片的LM2596-5.0。LM2596集成芯片是一個(gè)開關(guān)電源的芯片,開關(guān)頻率為150khz,最大輸出電流可以達(dá)到3A,電源工作原理圖如圖3所示。圖中輸入12V電壓經(jīng)過一個(gè)二極管,利用二極管的正向?qū)ㄌ匦?,可以有效的防止電源反接。輸入電容C5具有濾波的作用,可以使輸出電壓平穩(wěn)。
圖3 開關(guān)電源電路
同時(shí)輸出3.3V的低壓差線性采用TPS73733DCQR線性電源芯片,為系統(tǒng)提供穩(wěn)定的3.3V的工作電壓,在TPS73733DCQR的輸入端口和輸出端口都放置了1uF的濾波電容,用于濾除干擾,提高了系統(tǒng)的穩(wěn)定性。
繼電器的控制電路如圖4所示,本次設(shè)計(jì)選用了歐姆龍的兩開兩閉電磁式繼電器,最大可以承受5A的電流,觸發(fā)電壓12V,為了驅(qū)動(dòng)繼電器,使用ULN2003ADR高壓大電流達(dá)林頓晶體管陣列進(jìn)行電流放大,使用TPL521可控制的光耦合器件對(duì)強(qiáng)電和弱電進(jìn)行隔離,防止高壓沖擊損壞單片機(jī)。
圖4 繼電器電路
本文使用RTX實(shí)時(shí)操作系統(tǒng)對(duì)系統(tǒng)創(chuàng)建了3個(gè)任務(wù),分別用于無線模塊數(shù)據(jù)處理、RS-485模塊數(shù)據(jù)處理、用戶輸入檢測。其中串口的數(shù)據(jù)使用了中斷+FIFO隊(duì)列的方式進(jìn)行傳輸,收到數(shù)據(jù)之后將數(shù)據(jù)存放到消息郵箱中,然后任務(wù)會(huì)對(duì)郵箱中的數(shù)據(jù)進(jìn)行處理解析,使用全局標(biāo)志位標(biāo)記表示各個(gè)模式,并在模式切換時(shí)清除舊數(shù)據(jù),初始化新數(shù)據(jù),系統(tǒng)軟件流程圖如圖5所示。
圖5 系統(tǒng)軟件流程
當(dāng)無線控制器被設(shè)置為從機(jī)時(shí),根據(jù)Modbus協(xié)議,從機(jī)不會(huì)主動(dòng)與主機(jī)進(jìn)行通信,也不會(huì)和其他的子節(jié)點(diǎn)進(jìn)行通信。所以從機(jī)的程序以對(duì)主機(jī)的請(qǐng)求做出判斷并作出響應(yīng)的應(yīng)答為主。其運(yùn)行的流程圖如圖6所示。
圖6 從機(jī)軟件框架流程圖
其中Modbus根據(jù)數(shù)據(jù)模型的不同定義了許多的功能碼,其中比較常用的有:01H、02H、03H、04H、05H、10H。功能碼01H的作用是讀取線圈狀態(tài),其請(qǐng)求的協(xié)議格式為子節(jié)點(diǎn)的地址+功能碼+寄存器地址的高字節(jié)和低字節(jié)+寄存器數(shù)量的高字節(jié)和低字節(jié)+ CRC校驗(yàn)的高字節(jié)和低字節(jié),從機(jī)的應(yīng)答格式為子節(jié)點(diǎn)的地址+功能碼+返回?cái)?shù)據(jù)長度+返回?cái)?shù)據(jù)1到n,CRC校驗(yàn)的高字節(jié)和低字節(jié)。響應(yīng)處理的流程圖如圖7所示。
圖7 功能碼01H軟件處理流程圖
功能碼05H和0FH功能都是寫線圈,區(qū)別在于05H是對(duì)單個(gè)線圈操作,0FH是對(duì)多個(gè)線圈操作,0FH的用法和01H差不多,而且用的不多,這里不詳細(xì)介紹。Modbus數(shù)據(jù)幀的地址域、功能碼和CRC域的定義都是相同的,區(qū)別主要在于數(shù)據(jù)域,所以05H其請(qǐng)求的協(xié)議數(shù)據(jù)域?yàn)榧拇嫫鞯刂返母叩妥止?jié)+數(shù)據(jù)的高低字節(jié),從機(jī)的數(shù)據(jù)域?yàn)椋杭拇嫫鞯刂犯咦止?jié):1,寄存器地址低字節(jié):1,被讀取寄存器值的高低字節(jié),數(shù)據(jù)段處于FF00表示設(shè)置ON狀態(tài),0000H表示設(shè)置OFF狀態(tài)。響應(yīng)處理的流程圖如圖8所示,先讀取寄存器號(hào)和數(shù)據(jù),然后設(shè)置寄存器的值,完成之后返回應(yīng)答,最后計(jì)算CRC檢驗(yàn)之后發(fā)送給主機(jī)。
圖8 功能碼05H軟件處理流程圖
功能碼02H的作用是讀取離散寄存器的狀態(tài),離散寄存器的狀態(tài)是只讀的,不可以改寫。功能碼04H的作用是讀輸入寄存器,輸入寄存器的數(shù)據(jù)支持16位的寬度,只讀。功能碼03H是用于讀保持寄存器,06H是寫單個(gè)保持寄存器,10H是寫多個(gè)保持寄存器,保持寄存器的數(shù)據(jù)格式和輸入寄存器一樣都是16位字節(jié),但可以進(jìn)行讀寫。
系統(tǒng)測試采用需要兩套無線控制器進(jìn)行測試。主機(jī)使用電腦的上位機(jī)作為主機(jī),通過USB轉(zhuǎn)RS485連接到無線控制器,該控制器工作在轉(zhuǎn)發(fā)模式的主機(jī)模式下,用于將主機(jī)發(fā)送的指令通過無線模塊發(fā)送給從機(jī)。采用另一個(gè)無線控制器作為從機(jī),使其工作在從機(jī)模式下。配置完成之后就可以開始進(jìn)行調(diào)試。
功能碼01H用于讀線圈,本設(shè)計(jì)的從機(jī)一共有6個(gè)線圈寄存器,從機(jī)地址為1,寄存器首地址為0x0101,提前設(shè)置6個(gè)寄存器的值為110101,測試結(jié)果如表1所示。
表1 功能碼01H測試數(shù)據(jù)表
功能碼02H用于讀離散輸入寄存器,本設(shè)計(jì)的從機(jī)有1個(gè)離散輸入寄存器,用于采集按鍵2的狀態(tài),寄存器首地址為0x0201,默認(rèn)情況值為0,按鍵按下值為1,測試結(jié)果如表2所示。
表2 功能碼02H測試數(shù)據(jù)表
功能碼03H用于讀保持寄存器,本設(shè)計(jì)的從機(jī)有4個(gè)保持寄存器,通常保持寄存器可用于存儲(chǔ)版本號(hào)等信息,提前設(shè)置保持寄存器的值為0x2020, 0x0507, 0x1240, 0x0000,寄存器首地址為0x0301,測試結(jié)果如表3所示。
表3 功能碼03H測試數(shù)據(jù)表
以此類推,功能碼04H(輸入寄存器)、功能碼05H(單個(gè)線圈寄存器)、功能碼06H(保持寄存器)的結(jié)果表明可以一次尋址可實(shí)現(xiàn)多通道數(shù)據(jù)采集,具有良好的可擴(kuò)展性。
本文將Modbus技術(shù)與無線技術(shù)相結(jié)合,設(shè)計(jì)了一款Modbus控制系統(tǒng)進(jìn)行設(shè)計(jì),通過方案設(shè)計(jì),模塊電路設(shè)計(jì),軟件設(shè)計(jì)以及Modbus報(bào)文從機(jī)分析,較好實(shí)現(xiàn)了人機(jī)交互功能,通過系統(tǒng)測試表明,主機(jī)采集的數(shù)據(jù)與從機(jī)屏幕顯示的數(shù)據(jù)完全一致,一次尋址可實(shí)現(xiàn)多通道數(shù)據(jù)采集,數(shù)據(jù)發(fā)送出錯(cuò)率低,穩(wěn)定性高,因此本系統(tǒng)的實(shí)現(xiàn)為各自工業(yè)環(huán)境的數(shù)據(jù)傳輸及無線通信具有一定的研究價(jià)值。