翟海慶,張正本
(河南機電高等??茖W(xué)校計算機科學(xué)與技術(shù)系,河南 新鄉(xiāng) 453000)
廣播、電視、報刊、雜志等廣告形式,其作用和意義眾所周知,不需要多做討論。而傳單、條幅、小字報宣傳的對象是路上的行人,其主要存在于車站、碼頭、公交站牌等人口密集處。這些廣告形式傳遞的信息量非常少,且需要耗費大量的人力物力,不僅對社會資源造成浪費,而且廣告滿天飛、廣告到處粘貼,對人們的居住環(huán)境也會帶來負(fù)面影響。因此,設(shè)計一種基于CAN總線和遠(yuǎn)程控制的廣告發(fā)布系統(tǒng),以節(jié)省人力物力、提高廣告發(fā)布效果,具有重要的現(xiàn)實意義和較大的社會效益。公交公司可應(yīng)用本文所設(shè)計的廣告發(fā)布系統(tǒng)實現(xiàn)發(fā)布廣告的目的,還可以向乘客通知車輛到站信息等;也可在銀行、賓館、醫(yī)院等單位使用,實現(xiàn)信息發(fā)布和通告的目的。
系統(tǒng)主要包括上位計算機、總控制器、街口控制器和終端控制器等幾部分??偪刂破?、街口控制器和終端控制器都內(nèi)置AT89S52單片機[1],實現(xiàn)通信和智能控制功能。其中,終端控制器中設(shè)置液晶屏,作為廣告發(fā)布的顯示平臺;多個終端控制器通過CAN總線[2]連接到街口控制器,多個街口控制器再通過CAN總線連接到總控制器,總控制器通過RS-232[3]總線連接到上位計算機。上位計算機上的廣告信息經(jīng)由總控制器和街口控制器,傳送到終端控制器,并在液晶屏上進(jìn)行顯示。如果將多個終端控制器放置于城市的若干人口密集處,就構(gòu)成了一個覆蓋整個城市的數(shù)據(jù)傳輸網(wǎng)絡(luò),實現(xiàn)了遠(yuǎn)程控制發(fā)布廣告的目的。系統(tǒng)的總體設(shè)計框圖如圖1所示:
圖1 廣告發(fā)布系統(tǒng)總體結(jié)構(gòu)框圖
上位計算機放置在廣告發(fā)布控制室內(nèi),運行廣告發(fā)布軟件,由工作人員在指定的界面上輸入需要發(fā)布的廣告信息,這些廣告信息將在終端控制器上循環(huán)顯示。
另外,該軟件可以發(fā)出遠(yuǎn)程探查命令以檢查街口控制器和終端控制器的工作狀態(tài),并根據(jù)反饋信號判斷它們的工作狀態(tài)是否正常。
總控制器接收到上位計算機傳送過來的廣告信息后,將其由RS-232通信協(xié)議形式轉(zhuǎn)換為CAN總線通信協(xié)議形式,再通過外總線傳送到各個街口控制器??偪刂破饕卜胖迷趶V告發(fā)布控制室內(nèi)。
上位計算機發(fā)出的探查工作狀態(tài)命令,以及街口控制器和終端控制器反饋回來的狀態(tài)信息都需要經(jīng)過總控制器的中轉(zhuǎn)和協(xié)議格式轉(zhuǎn)換,才能被傳送到其相應(yīng)的目標(biāo)。
街口控制器接收到總控制器傳送過來的廣告信息后,再將其轉(zhuǎn)發(fā)至各終端控制器。街口控制器接收到自身狀態(tài)探查命令后,直接將其自身的工作狀態(tài)信息發(fā)送到總控制器;但如果接收到的是終端控制器工作狀態(tài)探查命令,需要將其轉(zhuǎn)發(fā)至相應(yīng)的終端控制器,然后再將終端控制器反饋回來的工作狀態(tài)信息轉(zhuǎn)發(fā)至總控制器。
終端控制器接收街口控制器傳送過來的廣告信息后,在液晶屏幕上循環(huán)顯示,以達(dá)到廣告發(fā)布的目的。系統(tǒng)發(fā)布廣告信息時有三種情況可以選擇,即從發(fā)送到某一個單獨的終端控制器、某一街口控制器的所有終端控制器、所有的終端控制器這三種情況中選擇一種進(jìn)行操作。通常情況下,存儲在終端控制器的廣告信息在液晶屏幕上定時滾動顯示;如用戶有特殊需要,可以通過按鍵自行查詢廣告信息:當(dāng)用戶按下上翻按鍵時,屏幕上顯示上一條廣告信息;當(dāng)用戶按下下翻按鍵時,屏幕上顯示下一條廣告信息。
終端控制器如果接收到工作狀態(tài)探查命令,會將其自身的工作狀態(tài)信息發(fā)送給街口控制器。
終端控制器安裝在車站、碼頭、公交站牌等人口密集場所。
連接總控制器及各個街口控制器,實現(xiàn)數(shù)據(jù)通信的功能。外總線應(yīng)該在一個方向上貫穿城市的兩端。為了改善通信性能,擴展通信距離,可在總線上附設(shè)中繼器。
連接街口控制器和同一條街上的多個終端控制器,實現(xiàn)數(shù)據(jù)通信的功能。內(nèi)總線應(yīng)該在另外一個方向上貫穿城市的兩端。這樣,外總線和多條內(nèi)總線交叉起來就形成了一個覆蓋整個城市的通信網(wǎng)絡(luò)。
系統(tǒng)硬件設(shè)計主要指的是總控制器、街口控制器和終端控制器的硬件電路設(shè)計。
總控制器硬件電路主要包括電源模塊、串行口通信模塊、CAN通信模塊、存儲器模塊。其中,電源模塊負(fù)責(zé)總控制器各部分電路的供電;串行通信模塊連接至通用計算機;CAN通信模塊通過外總線連接所有的街口控制器;存儲器采用串行EEPROM,用于存儲固定的信息。
街口控制器硬件電路主要包括電源模塊、兩個CAN通信模塊、存儲器模塊。其中,電源模塊和存儲器模塊與總控制器的模塊相似,只是街口控制器有兩個CAN通信模塊,這正是內(nèi)、外總線兩級網(wǎng)絡(luò)設(shè)計的關(guān)鍵所在,兩個CAN通信模塊分別與內(nèi)、外總線上的其他節(jié)點相連。
終端控制器硬件電路主要包括電源模塊、CAN通信模塊、鍵盤電路、存儲器模塊和顯示模塊。其中,CAN通信模塊用于連接街口控制器和其他的終端控制器;顯示模塊采用OCMJ4X8C,用于顯示廣告信息;鍵盤電路采用HD7279集成電路設(shè)計,供廣告閱讀者使用。
CAN通信模塊電路和串行口通信電路是系統(tǒng)硬件設(shè)計部分的核心,總控制器的串行口通信電路和CAN通信模塊電路的設(shè)計分別如圖2、圖3所示:
圖2 串行口通信電路
圖3 總控制器CAN通信模塊電路
圖3中,在總線的兩端需分別加一只120Ω電阻, 以減少信號的反射;由于總控制器和終端控制器并沒有擴展其他的片外數(shù)據(jù)存儲器,SJA1000的片選端可以直接接地,而街口控制器由于擴展了兩片SJA1000,其片選端必須接至CPU口線以便進(jìn)行控制。
總控制器、街口控制器和終端控制器程序均采用MCS-51匯編語言編寫,每個程序都由一個主程序和多個功能模塊程序構(gòu)成。論文以總控制器程序為例,介紹其主程序的編制方法。
總控制器既有輸入功能,又有輸出功能。其輸入包括串行口接收、鍵盤輸入、外總線接收等,其輸出包括串行口發(fā)送、外總線發(fā)送等??偪刂破髦鞒绦蛄鞒虉D如圖4所示,其中SJA1000的初始化流程圖如圖5所示:
SJA1000[4,5]上電復(fù)位時間較長,CPU 在完成上電復(fù)位后,必須等待一段時間,才能對這些芯片進(jìn)行初始化,否則芯片不能正常工作。
廣告發(fā)布軟件主要完成程序界面的設(shè)計、串行口通信功能的實現(xiàn)等任務(wù),它是在VC++6.0編譯環(huán)境中利用C++語言編寫完成的。該軟件由串行口發(fā)送模塊、串行口接收模塊、用戶界面模塊等構(gòu)成。在串行口發(fā)送模塊和接收模塊編程中,采用API函數(shù),提高了系統(tǒng)的響應(yīng)速度,實現(xiàn)了總控制器和通用計算機的可靠通信。
系統(tǒng)所選用的液晶顯示模塊內(nèi)置國標(biāo)漢字庫,因此在傳送廣告信息時,不需要傳送漢字的點陣數(shù)據(jù)而是直接傳送漢字的內(nèi)碼。在漢字內(nèi)碼表中,每個漢字用2個字節(jié)表示。實際上,少于3個漢字的廣告不能表達(dá)一定的含義,加之系統(tǒng)規(guī)定一條廣告信息的最大長度為32個漢字,因此,一條廣告的長度就應(yīng)為6~64個字節(jié)。
廣告發(fā)布軟件把一條廣告信息分成若干幀,按照規(guī)定的串行口通信協(xié)議,逐一發(fā)送至總控制器。其中首幀和尾幀是必需的,且每條信息只有一個,中間幀的多少由廣告的長度決定。終端控制器在接收到數(shù)據(jù)進(jìn)行處理時,認(rèn)為首幀是信息的開始、尾幀是信息的結(jié)束,接收到首幀后在EEPROM中找一個新地址存儲,接收到尾幀把該條信息標(biāo)記為接收完畢。串行口發(fā)送程序的流程圖如圖6所示:
圖6 串行口發(fā)送程序的流程圖
串行口接收線程的流程圖如圖7所示。
圖7 串行口接收程序的流程圖
相對于串行口發(fā)送模塊而言,串行口接收模塊要復(fù)雜得多,因為通用計算機不知道串行口何時會接收到數(shù)據(jù),因此需要不停地監(jiān)視串行口。一旦有串行口事件發(fā)生,立即進(jìn)行處理,這樣才能保證通信和信息處理的實時性。實際上,程序在串行口打開后啟動了一個接收工作者線程,用它來監(jiān)視串行口事件的發(fā)生,并獲取串行口緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)。當(dāng)緩沖區(qū)中的數(shù)據(jù)足以表達(dá)一定的信息時,這個接收線程會向主線程發(fā)送一個消息,主線程讀取串行口緩沖區(qū)中的數(shù)據(jù),進(jìn)行下一步的處理。
使用CAN總線構(gòu)建了一個廣告發(fā)布的通信平臺,初步完成了廣告發(fā)布系統(tǒng)的架構(gòu)。樣機調(diào)試實驗表明,系統(tǒng)性能穩(wěn)定、可靠,已具有批量生產(chǎn)的價值。為了進(jìn)一步改善通信性能,可以采取在總線和數(shù)字電路之間加光電隔離器、采用高性能的傳輸導(dǎo)線、重新設(shè)置位定時參數(shù)等辦法來實現(xiàn)。
[1]梅麗鳳,等.單片機原理及接口技術(shù)[M].北京:清華大學(xué)出版社,2004,78 -79.
[2]吳志祥.基于Infineon單片機的CAN智能節(jié)點的研究與應(yīng)用[J].儀表技術(shù),2008,(2):21 -23.
[3]吳志偉,丁鉑.USB-CAN-RS232總線轉(zhuǎn)換電路設(shè)計及實現(xiàn)[J].國外電子元器件,2006,(6):31 -34.
[4]SJA1000 stand - alone CAN controller Data - sheet[Z].Philips Semiconductors,1997.
[5]叢蘭美.基于CAN總線的提升設(shè)備狀態(tài)監(jiān)測系統(tǒng)研究[J].機械制造與自動化,2006,(5):110 -111,114.