基于USB移動存儲的鋼絲繩探傷報警系統設計
3 系統設計
3.1 系統工作原理
現在,鋼絲繩的應用越來越廣泛,為了保護人身和財產安全,鋼絲繩探傷檢測儀器也隨之發展起來。目前,鋼絲繩探傷檢測多以PC機作為檢測數據的接收和存儲器件,但是這樣成本高、攜帶不方便。在此,運用MemMaster模塊實現現場檢測數據存儲到移動存儲器就克服了這些缺點,提高了系統的性價比。系統的工作原理描述如下:檢測傳感器開始工作時,輸出脈沖信號作為控制電路的同步信號,同時檢測鋼絲繩的三路參數數據(模擬信號)。當控制電路獲得同步信號后,啟動A/D轉換,取得轉換結果,系統對數據進行處理后,判斷是否有斷絲發生,如果有則報警。同時把數據寫入移動存儲器中在控制電路上電時就建好的文件中,以便將來分析處理。
3.2 系統配置
在此,A/D轉化器件采用的是MAX186[3],MAXl86將8通道模擬開關、大帶寬跟蹤/保持電路、12位A/D轉換器和移位寄存器集成到一片20腳雙列直插芯片上,消除了傳輸誤差,提高了采樣精度和轉換精度。它體積小、轉換速度快、轉換精度高、功耗低、用5V單電源或 V雙電源供電,模擬輸入可由軟件設置為單或雙極性和單端或差分兩種輸入轉換方式。它的SCLK引腳作為時鐘信號輸入, 作為片選信號輸入,DIN作為串行信號輸入,DOUT作為串行信號輸出。
在系統上電時,需要創建接收文件,文件的創建時間由DS1302[4]提供。DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,具有主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。它的I/O引腳作為數據輸入輸出, 作為復位信號輸入,SCLK作為時鐘信號輸入。
單片機采用的是華邦公司的W78E58B[5],它是8位單片機,內含32KB Flash/EEPROM,其引腳功能與8051系列單片機完全兼容。系統連接圖如圖1所示。
4 軟件設計
為了使各部分硬件電路按一定順序進行工作,在單片機的程序存儲器中固化了用C51編寫的應用程序,包括系統初始化程序、時間參數獲取程序、文件創建程序、A/D轉換程序、報警分析程序、數據寫入程序。軟件采用模塊化設計方式,將各個功能分成獨立的模塊。其中,A/D轉換程序放在中斷程序中。程序流程圖如圖2所示。
4.1 報警算法分析
鋼絲繩斷絲檢測信號為疊加于噪聲背景上的局部區域的異常信號。為了能夠對斷絲進行報警,首先應從檢測信號中將它分離出來。根據報警的實時處理要求,提取斷絲檢測信號的方法應簡潔,花費的運算時間短,占據的內存空間小。下面給出一種峰峰值超限法。
峰峰值超限法利用局部異常信號波形的峰谷差值特征進行斷絲檢測信號的提取。從信號波形來看,檢測信號是由大量的局部波峰和波谷構成的,在檢測信號的每一微小的局部均將存在著一個完整的峰谷波形信號。峰峰值定義為某一局部峰谷波形信號的峰值與谷值之差的絕對值,當某一局部峰谷波形信號的峰峰值超過門限時,則認為是局部異常波形信號。在基于聚磁的鋼絲繩斷絲檢測中,檢測信號波形是一個完整的局部峰谷波形,這是由斷絲斷口漏磁場的分布決定的,且當選擇好聚磁器的結構和檢測元件的布置位置時,斷絲檢測信號將是單一的正峰信號,且信號的峰峰值比鄰近的信號波形大得多,因此很容易用峰峰值超限法提取。
設vn,n=0,1,2,3,4,為5個連續的局部極值點,在程序中我們判斷:當( (v[1]-v[2])>3*(v[1]-v[0]))((v[3]-v[2])>3*(v[3]-v[4]) )(v[0]-v[2]>26)(v[4]-v[2]>26)時,報警。
4.2 USB數據存儲程序設計
在接口使用中已經介紹了用戶系統與MemMaster系統的協議交互命令包括2種類型:Command和Response,下面就來具體說明一下Command/Response消息。
Command/Response消息用于在用戶系統或MemMaster系統將要發出的Command或Response及相應數據準備好后,通過對方(MemMaster或用戶系統)Command或Response已經準備完畢,可以開始執行的消息。該消息通過向雙口RAM的0xFFFE或0xFFFF地址寫/讀數據來完成。該消息通過中斷方式來實現,即:對用戶系統而言,當向0xFFFE寫入數據時,即為通知MemMaster有命令待執行。當系統進入中斷程序確定時,說明MemMaster端已經完成了命令,并將響應準備好,可以進入下一步操作。這時,從0xFFFF即清除了該中斷。目前系統定義,向0xFFFE寫入和從0xFFFF讀出的值都是0x01。參考代碼如下[6]:
#define DPRAMRInt ((char*)0xFFFF)
#define DPRAMLInt ((char*)0xFFFE)
#define SEND_SYSCMD *DPRAMLInt = 0x01
void service_int1() interrupt 0 /*外部中斷0*/
{
bRecvResp = *DPRAMRInt;
}
下面給出文件創建函數來說明用戶系統與MemMaster系統是如何實現Command消息傳送的(Response消息類似)。
void CreateFile(unsigned char nm) /*nm用于判斷文件是否存在*/
{
CreateFileCmdPkg* crCmdPkg;
/* CreateFileCmdPkg為創建命令包,包括創建命令的各個屬性*/
crCmdPkg=(CreateFileCmdPkg*)Command;
MemSet((char*)crCmdPkg,0,64);
MemSet(crCmdPkg->FileName,0x20,8);
crCmdPkg->CommandCode=SYS_CREATE_FILE;
/* SYS_CREATE_FILE為創建命令碼*/
crCmdPkg->FileName[0]=’T’;
評論