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