在GPRS通信電路中設(shè)計(jì)晶振為芯片提供工作頻率,它是構(gòu)成芯片的最小系統(tǒng)必不可少的元器件,一般與它串聯(lián)2個(gè)電容,是固定接法,一個(gè)是輸入電容,一個(gè)是輸出電容,根據(jù)Datasheet確定電容的大小為30pF。
2.2 軟件設(shè)計(jì)
2.2.1 負(fù)控管理終端的軟件設(shè)計(jì)
在負(fù)控管理終端的整體流程是終端上電后,初始化串口,啟動(dòng)撥號,建立TCP連接成功后,主站向負(fù)控管理終端發(fā)送登陸幀,負(fù)控管理終端監(jiān)聽到登陸幀后(主站和負(fù)控管理終端建立通信前,主站要知道負(fù)控管理終端中GPRS模塊的SIM卡號),發(fā)出確認(rèn)幀,主站與負(fù)控管理終端就可以開始通信。負(fù)控管理終端接收到數(shù)據(jù)時(shí),先判斷是不是主站發(fā)送過來的控制命令,如果是,將該命令透明傳輸給電能表,電能表通過解析判斷其要是采集數(shù)據(jù)命令,就將相應(yīng)的電能數(shù)據(jù)返回給負(fù)控管理終端,負(fù)控管理終端收到數(shù)據(jù)后通過TCP發(fā)送給主站;如果不是控制命令,說明是電能表的返回?cái)?shù)據(jù),同樣通過TCP協(xié)議發(fā)送給主站。在沒有任何命令時(shí),負(fù)控管理終端進(jìn)入低功耗模式,間隔一定時(shí)間發(fā)送心跳包,以確定它與主站沒有斷開連接。每隔15 min,負(fù)控管理終端會(huì)定時(shí)采集電能數(shù)據(jù),并將其存儲(chǔ)在NANDFLASH中,等待主站隨時(shí)調(diào)用。此外,當(dāng)負(fù)控管理終端處于異常狀態(tài),或者發(fā)生一些特殊事件時(shí),比如事故報(bào)警信息,負(fù)控管理終端通過遙信控制主動(dòng)上報(bào)給主站,以做出適當(dāng)處理。
負(fù)控管理終端的應(yīng)用軟件主要包括數(shù)據(jù)采集及處理程序和網(wǎng)絡(luò)通信程序。數(shù)據(jù)采集及處理程序完成電能表數(shù)據(jù)采集,并進(jìn)行處理。網(wǎng)絡(luò)通信程序完成將處理后的數(shù)據(jù)傳送到主站。另外,網(wǎng)絡(luò)通信程序還要發(fā)送主站的控制指令。
該部分的軟件編寫采用自上而下的設(shè)計(jì)思路,以模塊化設(shè)計(jì)為原則,采用C語言編程,通過建立數(shù)據(jù)采集與處理線程、GPRS網(wǎng)絡(luò)通信線程、按鍵控制線程,使其相互協(xié)調(diào)地運(yùn)行。
結(jié)合上面給出的設(shè)計(jì)思路,下面重點(diǎn)介紹如何利用多進(jìn)程技術(shù)和管道技術(shù)來實(shí)現(xiàn)抄表和發(fā)送數(shù)據(jù)的功能。
在進(jìn)行網(wǎng)絡(luò)通信之前,先設(shè)定網(wǎng)絡(luò)端口最大允許接入的客戶端數(shù)、父進(jìn)程和子進(jìn)程設(shè)定的2個(gè)狀態(tài)變量。
進(jìn)入主函數(shù),創(chuàng)建管道和子進(jìn)程,分別啟動(dòng)父進(jìn)程和子進(jìn)程,開始數(shù)據(jù)采集和網(wǎng)絡(luò)傳輸,function_farther()函數(shù)和function_child()函數(shù)分別為父進(jìn)程和子進(jìn)程的主函數(shù)。
在main()函數(shù)中還有以下幾個(gè)主要的子函數(shù):
gprs_com_task():GPRS通信任務(wù)主要功能是接收來自主站的信息,直接從Nand FLASH中讀出數(shù)據(jù)上發(fā)給主站,主站接收完畢后掛機(jī)結(jié)束通信。
gather_meter_realtime():實(shí)時(shí)采集任務(wù)主要完成和電能表的通信工作。根據(jù)自定義規(guī)約判斷主站想要什么數(shù)據(jù),然后將該數(shù)據(jù)TCP打包后發(fā)回到通信任務(wù),通信任務(wù)就會(huì)以相應(yīng)的形式(數(shù)據(jù))上傳給主站。
gather_meter_time():定時(shí)采集任務(wù)指每天定時(shí)主動(dòng)讀取電能表,并將讀到的數(shù)據(jù)存放在NandFLASH中。這樣當(dāng)主站下發(fā)命令索要數(shù)據(jù)時(shí),終端就不必再去讀表,可以直接將存儲(chǔ)的數(shù)據(jù)上發(fā)給主站。
alarm_task():報(bào)警任務(wù)每隔一定時(shí)間程序就去讀三相電壓,并將讀到的實(shí)時(shí)值與存放在Nancl FLASH中規(guī)定的電壓上限值作比較,當(dāng)實(shí)時(shí)電壓值超過上限值或者低于下限值時(shí),負(fù)控管理終端軟件就對電網(wǎng)狀態(tài)字置位。當(dāng)故障消除,電壓恢復(fù)正常時(shí),終端軟件再向電網(wǎng)狀態(tài)字置位。
led_task():指示燈任務(wù)用于判斷程序和通信模塊是否處于正常工作狀態(tài)。負(fù)控管理終端有2個(gè)運(yùn)行指示燈,一個(gè)用于指示程序的正常運(yùn)行,1 s閃爍1次;另一個(gè)用于指示通信模塊的工作狀態(tài),GPRS模塊沒有注冊到網(wǎng)絡(luò)時(shí),該指示燈1 s閃爍1次,注冊上網(wǎng)絡(luò)后,3s閃爍1次。
2.2.2 主站管理軟件的設(shè)計(jì)
本系統(tǒng)的主站管理軟件是用面向?qū)ο蟮木幊坦ぞ遃B開發(fā)完成的。通過使用面向?qū)ο蟮臄?shù)據(jù)模型來構(gòu)建主站,將負(fù)控管理終端模型化為一系列邏輯沒備組成,每個(gè)邏輯設(shè)備是該物理設(shè)備的一個(gè)功能子集,各種功能則用對象模型來標(biāo)準(zhǔn)化。主站設(shè)置2個(gè)邏輯設(shè)備:管理邏輯設(shè)備與數(shù)據(jù)邏輯設(shè)備。管理邏輯設(shè)備是主站中必需的,管理邏輯設(shè)備中存放一些與全局相關(guān)的及負(fù)控管理終端參數(shù)設(shè)置數(shù)據(jù)對象;數(shù)據(jù)邏輯設(shè)備用來存儲(chǔ)和管理負(fù)控管理終端下屬的電能表數(shù)據(jù)。
評論
查看更多