有一種Modus協(xié)議設(shè)計(jì)為了把玻璃管液位計(jì)模塊設(shè)計(jì),對這一模塊中的RS485接口電路進(jìn)行了介紹。分析了這一玻璃管液位計(jì)模塊設(shè)計(jì)的通信方式,對內(nèi)部程序進(jìn)行了介紹,并進(jìn)行了輸入輸出測試。將所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)應(yīng)用于十字滑臺(tái)電氣控制,取得了良好的效果。
1 設(shè)計(jì)背景
傳統(tǒng)玻璃管液位計(jì)系統(tǒng)中,常用可編程序控制器控制步進(jìn)驅(qū)動(dòng)器或伺服驅(qū)動(dòng)器,進(jìn)而實(shí)現(xiàn)運(yùn)動(dòng)控制。但是,可編程序控制器較難實(shí)現(xiàn)復(fù)雜的運(yùn)動(dòng)軌跡控制。隨著嵌入式技術(shù)日趨完善,各類ARM處理器在玻璃管液位計(jì)中被廣泛應(yīng)用。筆者應(yīng)用ARMSTM32F407芯片,基于Modbus協(xié)議設(shè)計(jì)了一種玻璃管液位計(jì)模塊設(shè)計(jì)[1-2]。這一模塊具有數(shù)字量輸入采集、數(shù)字量輸出控制和高速脈沖輸出功能,能夠通過內(nèi)部程序來控制步進(jìn)驅(qū)動(dòng)器或伺服驅(qū)動(dòng)器,實(shí)現(xiàn)復(fù)雜的運(yùn)動(dòng)軌跡控制。
2 硬件設(shè)計(jì)
所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)結(jié)構(gòu)如圖1所示,采用ARMSTM32F407芯片作為控制核心,應(yīng)用MAX485芯片實(shí)現(xiàn)RS485通信[3],應(yīng)用EL357芯片實(shí)現(xiàn)輸入信號(hào)和輸出信號(hào)的隔離[]。這一玻璃管液位計(jì)模塊設(shè)計(jì)可以接收16位開關(guān)型輸入信號(hào),控制7路輸出,能夠?qū)崿F(xiàn)4路高速脈沖控制。
2.1RS485接口電路
所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)有兩路RS485通信接口。RS485接口電路采用MAX485芯片,如圖2所示。電路不發(fā)送數(shù)據(jù)時(shí),TXD1為高電平,三極管Q1導(dǎo)通,RE為低電平使能,RO端接收數(shù)據(jù),MAX485芯片處于接收狀態(tài)。電路發(fā)送數(shù)據(jù)時(shí),TXD1由高電平變?yōu)榈碗娖?,時(shí)間長短與通信速率有關(guān),三極管Q1截止,MAX485芯片處于發(fā)送狀態(tài)。
2.2輸入輸出口
輸入信號(hào)電路如圖3所示。EX0為玻璃管液位計(jì)模塊設(shè)計(jì)的開關(guān)量輸入信號(hào)端。EX0輸入信號(hào)經(jīng)過電路處理后,產(chǎn)生輸出信號(hào)X0。X0接ARMSTM32F407芯片的引腳,為玻璃管液位計(jì)模塊設(shè)計(jì)內(nèi)部程序提供輸入信號(hào)。采用EL357芯片完成外部設(shè)備輸入信號(hào)與ARMSTM32F407芯片接口信號(hào)之間的隔離,提高模塊的抗干擾能力。
輸出信號(hào)電路如圖4所示。SignalY0為ARMSTM32F407芯片引腳所產(chǎn)生的輸出信號(hào)。SignalY0信號(hào)經(jīng)過電路處理后,變?yōu)椋希酰簦?信號(hào)。OutY0信號(hào)連接輸出驅(qū)動(dòng)電路,產(chǎn)生實(shí)際的輸出控制信號(hào)。輸出端也采用EL357芯片進(jìn)行信號(hào)隔離。
2.3 高速脈沖信號(hào)
所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì),其高速脈沖信號(hào)直接由ARMSTM32F407芯片生成,通過接線端子與外部電路相連。
3 通信方式
這一玻璃管液位計(jì)模塊設(shè)計(jì)基于Modbus協(xié)議的遠(yuǎn)程終端(RTU)模式設(shè)計(jì),按客戶端模式進(jìn)行工作。上位機(jī)包括觸摸屏、工控機(jī)等,可以發(fā)送0X01~0X04指令,使輸入端口(X端口)、輸出端口(Y端口)的狀態(tài)數(shù)據(jù)反饋至上位機(jī)。上位機(jī)也可以使用0X05、0X06、0X0F和0X10指令實(shí)現(xiàn)輸出端口通斷控制和模塊內(nèi)部寄存器數(shù)據(jù)設(shè)定功能。上位機(jī)與模塊之間的數(shù)據(jù)通信采用串口通道接發(fā)數(shù)據(jù)幀來實(shí)現(xiàn)。每一個(gè)指令都有特定的符合Modbus協(xié)議的數(shù)據(jù)幀格式,數(shù)據(jù)幀采用Hex編碼。
4 軟件設(shè)計(jì)
所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì),其內(nèi)部程序可以分為四部分———系統(tǒng)初始化、數(shù)據(jù)接收、數(shù)據(jù)分析與執(zhí)行、數(shù)據(jù)反饋,其中系統(tǒng)初始化包括端口初始化和通信口初始化[5-7]。
內(nèi)部程序結(jié)構(gòu)如圖5所示。
模塊通電后,自動(dòng)進(jìn)入系統(tǒng)初始化程序,初始化ARMSTM32F407芯片各引腳狀態(tài),讀取芯片存儲(chǔ)數(shù)據(jù),恢復(fù)至前一次斷電前狀態(tài)。同時(shí)完成模塊的通信參數(shù)設(shè)置,如將傳輸速率設(shè)置為19200bit/s等,并開始連續(xù)監(jiān)聽通信口,等待上位機(jī)發(fā)送控制指令。當(dāng)上位機(jī)發(fā)送控制指令數(shù)據(jù)幀后,模塊讀取數(shù)據(jù)幀。接收數(shù)據(jù)幀后,通過循環(huán)冗余校驗(yàn)碼判斷數(shù)據(jù)是否有效。如果無效,那么程序返回通信口監(jiān)聽狀態(tài)。如果接收數(shù)據(jù)有效,那么對數(shù)據(jù)的地址進(jìn)行判斷。如果發(fā)送來的地址與模塊設(shè)置的地址不相同,那么程序返回通信口監(jiān)聽狀態(tài)。如果發(fā)送來的地址與模塊設(shè)置的地址相同,那么模塊程序?qū)Πl(fā)送來的數(shù)據(jù)幀進(jìn)行數(shù)據(jù)分析與提取,對比模塊內(nèi)部芯片內(nèi)存中的指令庫,按對比結(jié)果執(zhí)行相應(yīng)的功能。執(zhí)行功能完成后,模塊程序?qū)?zhí)行結(jié)果數(shù)據(jù)通過通信口以數(shù)據(jù)幀的格式反饋至上位機(jī)。
5 測試
ModbusPoll是一種基于Modbus協(xié)議的服務(wù)端模擬器[8],可以作為上位機(jī)測試和調(diào)試客戶端,支持遠(yuǎn)程終端模式、美國信息交換標(biāo)準(zhǔn)碼,以及傳輸控制協(xié)議和網(wǎng)際協(xié)議[9]。筆者將ModbusPoll作為上位機(jī)對所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)進(jìn)行測試。模塊接線如圖6所示,通過這一接線,可以實(shí)現(xiàn)兩路輸入信號(hào)采集和中間繼電器控制。
5.1 輸入測試
二線制傳感器和三線制傳感器都處于工作狀態(tài)時(shí),模塊的X0端口和X1端口有高電平輸入。其余X2~X15端口都處于低電平狀態(tài)。此時(shí),使用ModbusPoll的TestCenter界面輸入數(shù)據(jù)幀01020000001079C6。其中,01為模塊地址,02表示讀取X端口狀態(tài)指令,0000表示讀取端口起始地址,即X0端口地址,0010表示一次性讀?。保段唬囟丝跔顟B(tài),79C6為循環(huán)冗余校驗(yàn)碼[10]。接收到以上數(shù)據(jù)幀,模塊在執(zhí)行0X02指令后返回?cái)?shù)據(jù)幀01020203B948,其中,01為模塊地址,前一個(gè)02表示X端口狀態(tài)指令,后一個(gè)02表示兩個(gè)字節(jié),03表示X0和X1端口有信號(hào),B948為循環(huán)冗余校驗(yàn)碼。
5.2 輸出測試
模塊控制中間繼電器KA1線圈通電時(shí),使用ModbusPoll的TestCenter界面輸入數(shù)據(jù)幀01050000FF008C3A,Y0端口輸出高電平,其余Y1~Y6端口為低電平,模塊返回?cái)?shù)據(jù)幀01050000FF008C3A。返回的數(shù)據(jù)幀中,01為模塊地址。05表示執(zhí)行0X05指令,即控制單個(gè)輸出端口。0000表示控制端口為Y0,如需要控制Y1,則數(shù)據(jù)幀為0001,依次類推。FF00表示設(shè)置端口為有輸出,如果需要設(shè)置端口為無輸出,則數(shù)據(jù)幀為0000。8C3A為循環(huán)冗余校驗(yàn)碼。執(zhí)行Y0輸出指令后,中間繼電器KA1線圈得電,其觸點(diǎn)狀態(tài)發(fā)生改變。如果模塊控制KA1線圈失電,則所發(fā)送的數(shù)據(jù)幀為010500000000CDCA。
5.3 高速脈沖控制
當(dāng)需要有高速脈沖時(shí),上位機(jī)使用0X06或0X10指令設(shè)置數(shù)據(jù)。發(fā)送和接收數(shù)據(jù)的過程與使用0X02、0X05指令過程類似,此處不再詳述。
6 應(yīng)用案例
應(yīng)用所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)進(jìn)行十字滑臺(tái)電氣控制,電氣控制原理如圖7所示。將所設(shè)計(jì)的玻璃管液位計(jì)模塊設(shè)計(jì)作為核心控制器件,采集十字滑臺(tái)傳感器信號(hào)、按鈕信號(hào),控制步進(jìn)驅(qū)動(dòng)器,進(jìn)而完成對步進(jìn)電機(jī)的控制。十字滑臺(tái)X軸、Y軸的前后端限位傳感器信號(hào)與模塊的X0、X1、X2、X3輸入端口相連,防止滑臺(tái)機(jī)械行程超限。-S1啟動(dòng)按鈕和-S2停止按鈕與模塊的X16、X17輸入端口相連,為模塊提供啟動(dòng)和停止信號(hào)。模塊的Y0輸出端口與十字滑臺(tái)X軸步進(jìn)驅(qū)動(dòng)器的EN+端相連,控制軸步進(jìn)驅(qū)動(dòng)器工作。模塊的Y1輸出端口與十字滑臺(tái)Y軸步進(jìn)驅(qū)動(dòng)器的EN+端相連,控制Y軸步進(jìn)驅(qū)動(dòng)器工作。模塊的A_DIR和A_PUL高速脈沖輸出端口向X軸步進(jìn)驅(qū)動(dòng)器提供控制信號(hào),實(shí)現(xiàn)十字滑臺(tái)X軸的運(yùn)動(dòng)控制。模塊的D_DIR和D_PUL高速脈沖輸出端口向Y軸步進(jìn)驅(qū)動(dòng)器提供控制信號(hào),實(shí)現(xiàn)十字滑臺(tái)Y軸的運(yùn)動(dòng)控制。模塊具有兩路RS485通信總線,一路與觸摸屏相連。通過觸摸屏,可以設(shè)置步進(jìn)驅(qū)動(dòng)器的X軸、Y軸行程,實(shí)時(shí)顯示X軸和Y軸前后端傳感器狀態(tài)、電機(jī)運(yùn)行距離、運(yùn)行次數(shù)等參數(shù)。通過觸摸屏上的啟動(dòng)和停止按鈕,能夠控制十字滑臺(tái)啟動(dòng)和停止。另一路RS485通信總線可與其它設(shè)備相連,用于實(shí)現(xiàn)功能擴(kuò)展。
進(jìn)行十字滑臺(tái)電氣控制時(shí),點(diǎn)擊觸摸屏上的啟動(dòng)按鈕或按下-S1按鈕,玻璃管液位計(jì)模塊設(shè)計(jì)根據(jù)觸摸屏設(shè)定的軌跡來控制單個(gè)步進(jìn)驅(qū)動(dòng)器或協(xié)調(diào)控制兩個(gè)步進(jìn)驅(qū)動(dòng)器實(shí)現(xiàn)十字滑臺(tái)的復(fù)雜軌跡運(yùn)行。點(diǎn)擊觸摸屏上的停止按鈕或按下-S2按鈕,玻璃管液位計(jì)模塊設(shè)計(jì)通過內(nèi)部程序使十字滑臺(tái)停止運(yùn)行。
7 結(jié)束語
筆者應(yīng)用ARMSTM32F407芯片,基于Modbus協(xié)議設(shè)計(jì)了一種玻璃管液位計(jì)模塊設(shè)計(jì)。ARMSTM32F407芯片具有強(qiáng)大的邏輯運(yùn)算能力,通過編寫不同程序能快速實(shí)現(xiàn)出入與輸出之間復(fù)雜的邏輯控制,適用于較為煩瑣的控制場合。通過十字滑臺(tái)電氣控制應(yīng)用案例分析,當(dāng)您全面了解了相關(guān)玻璃管液位計(jì)模塊設(shè)計(jì)具有更高利用工業(yè)儀表上的價(jià)值觀。