王師原
摘 要:隨著皮帶傳動裝置的廣泛應(yīng)用,其故障檢測顯得至關(guān)重要。本文主要介紹了一種皮帶傳動設(shè)備故障檢測系統(tǒng)的軟件設(shè)計方法,采用C語言以及Modbus等主要技術(shù),包含主控制器與PC的通信、主控制器通過LCD顯示信息、主控制器將數(shù)據(jù)通過MODBUS協(xié)議重新打包并發(fā)送給每個站點及檢測控制模塊設(shè)計。主要功能是實現(xiàn)故障的自動檢測以及處理功能。
關(guān)鍵詞:C語言 皮帶傳動 自動檢測
中圖分類號:TP36 文獻標識碼:A 文章編號:1672-3791(2016)06(a)-0000-00
軟件系統(tǒng)總體結(jié)構(gòu)
1.1程序整體設(shè)計
整體程序采用分模塊設(shè)計法,各模塊主要包括:主函數(shù)模塊,數(shù)據(jù)包校驗?zāi)K,拉繩故障報警模塊,其它故障報警模塊,485串口接收中斷處理模塊,拉繩地址解析與控制繼電器模塊,其它地址解析與控制繼電器模塊,RTC實時時鐘模塊,EEPROM數(shù)據(jù)存儲模塊,MODBUS協(xié)議數(shù)據(jù)打包模塊以及各模塊串口及變量的賦值與定義。
1.2 數(shù)據(jù)包格式
數(shù)據(jù)包的包頭是FFFFFFAA,第五個字節(jié)是數(shù)據(jù)包的長度,第6個字節(jié)是終端電壓,第7個字節(jié)是校驗碼,第8個字節(jié)放的是節(jié)點電路板的個數(shù),第9個字節(jié)放的是拉繩開關(guān)量的個數(shù),第10個字節(jié)放的是其它故障的開關(guān)量的個數(shù),接下的1~16個字節(jié)是拉繩狀態(tài)每個開關(guān)量的狀態(tài),最后1~5個字節(jié)是其它狀態(tài)的開關(guān)量的狀態(tài)。所以數(shù)據(jù)包的長度最大為32個字節(jié)。拉升和其它狀態(tài)的節(jié)點排序與物理地址ID剛好相反。
2主要開發(fā)技術(shù)
2.1 C語言
C語言具有良好的程序結(jié)構(gòu),適用于模塊化程序設(shè)計,因此采用C語言設(shè)計單片機應(yīng)用系統(tǒng)程序時,首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計方法,將功能模塊化,由不同的模塊完成不同的功能,這樣可使整個應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),對于一些要重復(fù)調(diào)用的程序一般把其編成函數(shù),這樣可以減少程序代碼的長度,又便于整個程序的管理,還可增強可讀性和移植性。
C語言是一種編譯型程序設(shè)計語言,它兼顧了多種高級語言的特點,并具備匯編語言的功能。C語言有功能豐富的庫函數(shù)、運算速度快、編譯效率高、有良好的可移植性,而且可以直接實現(xiàn)對系統(tǒng)硬件的控制。C語言也是一種結(jié)構(gòu)化程序設(shè)計語言,它支持當(dāng)前程序設(shè)計中廣泛采用的由頂向下結(jié)構(gòu)化程序設(shè)計技術(shù)。
2.2 Modbus協(xié)議
Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。控制器能直接或經(jīng)由 Modem組網(wǎng)??刂破魍ㄐ攀褂弥鲝募夹g(shù),僅有一設(shè)備能初始化傳輸。其它設(shè)備根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應(yīng)應(yīng)答。當(dāng)使用modbus通信時,每個控制器須要知道它們的設(shè)備地址,識別按地址發(fā)來的消息,決定要產(chǎn)生何種行動。如果需要回應(yīng),控制器將生成反饋信息并用Modbus 協(xié)議發(fā)出。。
3 各模塊具體設(shè)計
3.1主函數(shù)模塊
當(dāng)執(zhí)行某個中斷程序時,CPU自動禁止其它中斷發(fā)生。執(zhí)行完后恢復(fù)。在接受485數(shù)據(jù)包的過程中禁止其它中斷,不允許其它任務(wù)發(fā)生。硬件規(guī)定的優(yōu)先級由高到低次序:UART1(485中斷),RTC(實時時鐘更新時間中斷,中斷間隔為一秒)。初始化后,如果數(shù)據(jù)包頭接收正確,則判斷485總線準備好接收信息,進行數(shù)據(jù)校驗,如果校驗正常則去解析故障信息,控制繼電器動作進行故障保護,重組PC包發(fā)到PC機顯示,在初始化值,如果校驗和不正常,則PC上顯示出網(wǎng)絡(luò)故障并且在LCD上顯示,還將數(shù)據(jù)包存儲到EEPROM,如果PC命令主控制器發(fā)回數(shù)據(jù),則主控制器將數(shù)據(jù)包通過MODBUS協(xié)議打包并且發(fā)送給PC,如果key_up按下進行對EEPROM數(shù)據(jù)包讀取,如果485沒接收則也是網(wǎng)絡(luò)出現(xiàn)故障。
3.2 485串口中斷接收模塊
把前級工作狀態(tài)計數(shù)器清零,看包頭是否完全正確,如果正確,則有效數(shù)據(jù)包組接收數(shù)據(jù),數(shù)據(jù)包的長度增加,看數(shù)據(jù)包的長度是否等于發(fā)送數(shù)據(jù)包的長度,如果相等的話則把數(shù)據(jù)包組的長度初值賦為5,完整接收數(shù)據(jù),把包頭完全接收標志清0,如果包頭接收不正確,則看三個FF是否接收正確,如果正確,則看AA是否正確,三個FF再逐一判斷是否正確。
3.3主控制器與PC通信模塊
每次進入中斷USART2接收PC發(fā)來的命令,命令總共是8個字節(jié)。接收完成后RECALL_OK2置1,并將記錄接收自己數(shù)接b_counter2置0。
3.4 MODBUS協(xié)議數(shù)據(jù)打包模塊
對于MODBUS協(xié)議,它是PC和主控制器的通信協(xié)議。從上述可知PC是通過USART2串口實現(xiàn)與主控制器通信的。每次接收到PC發(fā)到主控制器的命令80030000000D9A1E,總共八個字節(jié)。且通過crc校驗后得到整個八個字節(jié)的CRC碼為零,表示正確接收,主控制器會將最近一次故障數(shù)據(jù)通過MODBUS協(xié)議打包發(fā)回給PC。
3.5 皮帶拉繩地址解析與控制繼電器模塊
拉繩的長度模8取余。看是不是整數(shù)個字節(jié),如果是整數(shù)個字節(jié),就確定拉繩狀態(tài)用的字節(jié)數(shù),得到拉繩的狀態(tài)數(shù),如果皮帶有故障,首先控制處理并且控制繼電器動作。皮帶有故障判斷皮帶的地址,節(jié)點的排序與物理地址ID相反,則通過一種算法,實現(xiàn)節(jié)點排序到物理地址ID的轉(zhuǎn)化。如果不是整數(shù)個字節(jié),則出最后一個字節(jié)外用上述同樣的方法得到物理地址ID,最后一個字節(jié)用另一種算法實現(xiàn)排序到物理地址ID的轉(zhuǎn)化,并把故障寫到故障信息表。
3.6 數(shù)據(jù)包校驗?zāi)K
接收到數(shù)據(jù)包后要對數(shù)據(jù)包進行校驗,取到數(shù)據(jù)包校驗和,把接收到的數(shù)據(jù)以字節(jié)的形式一個字節(jié)一個字節(jié)得到,在模256取余,如果余數(shù)和取得的數(shù)據(jù)包校驗和相等,則數(shù)據(jù)包正確,否則不正確。
3.7 拉繩故障報警模塊
對接收的數(shù)據(jù)包進行拉繩部分的解析,如果故障表的字節(jié)數(shù)大于1,則把故障表的字節(jié)通過串口0送給PC機,PC機進行顯示。
3.8 LCD屏顯示模塊
LCD模塊包括以下功能:顯示實時時間,顯示實時有故障的站點號。
LCD顯示模塊每次發(fā)生事故的時候會在數(shù)據(jù)包分析的時候自動調(diào)用,輸出到LCD最上方是作者,每兩次輸出更新一次,并且每次顯示發(fā)送事故的時間,還有站點標號及出事故的記錄次數(shù)。
4 運行結(jié)果
設(shè)定拉繩的狀態(tài)個數(shù)是128,其它狀態(tài)的個數(shù)設(shè)置是60個,有故障是紅色,無故障是綠色。我們設(shè)定1,60,128拉繩狀態(tài)有故障,點擊數(shù)據(jù)包組合,點擊發(fā)送數(shù)據(jù)。
R2323的RX與TX分別與USART2的TX與RX,即就是PA2與PA3相連接。當(dāng)PC發(fā)送命令80030000000D9A1E,總字節(jié)數(shù)是八個。主控制器會將包含故障信息的數(shù)據(jù)包發(fā)回給PC,該數(shù)據(jù)包是通過MODBUS協(xié)議打包的。解析出的故障:01,3C,80,01,3C。十六進制數(shù)01,3C,80,01,3C正好是十進制的1,60,128,1,60??梢?,發(fā)送的故障和解析出的故障相同,硬件正常工作,運行結(jié)果正確。
參考文獻
[1] 沈文.《STM32單片機C語言開發(fā)入門指導(dǎo)》.清華大學(xué)出版社.2005
[2] 周俊杰.《嵌入式C編程與Atmel STM32》.北京. 清華大學(xué)出版社.2006