《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式Linux平臺(tái)下電力載波路由器的軟件設(shè)計(jì)
嵌入式Linux平臺(tái)下電力載波路由器的軟件設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2010年第11期
田 霆, 郭前崗, 周西峰
南京郵電大學(xué) 自動(dòng)化學(xué)院, 江蘇 南京 210003
摘要: 針對載波電表集抄系統(tǒng)中,電力載波通信距離有限、抄收率低等問題,提出了一種應(yīng)用于載波電表集抄系統(tǒng)的中繼轉(zhuǎn)發(fā)技術(shù),并設(shè)計(jì)出應(yīng)用此技術(shù)的電力載波通信路由器。采用多叉樹遍歷尋優(yōu)算法實(shí)現(xiàn)了用戶節(jié)點(diǎn)路徑的自動(dòng)尋優(yōu)及自動(dòng)更新,并在此基礎(chǔ)上提供了網(wǎng)絡(luò)和串口兩種通信方式,以方便采集站對用戶節(jié)點(diǎn)進(jìn)行快速、準(zhǔn)確、無誤的數(shù)據(jù)抄收。
中圖分類號(hào): TN925
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2010)10-0135-03
The software design of powerline communication route based on embedded Linux platform
TIAN Ting, GUO Qian Gang, ZHOU Xi Feng
Automation College, Nanjing University of Posts and Telecommunications, Nanjing 210003, China
Abstract: In the carrier meter reading system, the electric power carrier communication distance is Limited, and meter reading has low rates. This paper proposes a set of copy used in carrier-meter relay system technology and designs power line carrier communication routers to apply this technology. The user node, the path to achieve automatic optimization, each node of the routing path of automatic updates, and providing Ethernet and serial port pairs of nodes in the data fast, accurate and correct meter reading function.
Key words : relaying technology; DLT/645 protocol; embedded Linux; multi-branch tree traversal algorithm for optimizing; multi-threaded

    電力載波(PLC)是電力系統(tǒng)通信的一種基本方式,廣泛應(yīng)用于電力行業(yè)的自動(dòng)化抄表系統(tǒng)中。由于電力載波是利用電力線來作為傳輸媒介,因此,電力線路的距離長短和用戶的用電負(fù)荷都會(huì)對電力載波通信效果造成影響,而通過載波模塊實(shí)現(xiàn)對一臺(tái)區(qū)下所有電表的直抄是不可能的。目前常用的解決方法是為每塊電表安裝帶中繼轉(zhuǎn)發(fā)功能的載波模塊,不能直抄的表可以通過距離遠(yuǎn)近或信號(hào)質(zhì)量較佳的表對其進(jìn)行中繼轉(zhuǎn)發(fā)抄收。電力載波通信信道,其載波通信信號(hào)衰減大、干擾嚴(yán)重、不穩(wěn)定,如何根據(jù)線路狀態(tài)以及通信距離的遠(yuǎn)近自動(dòng)分配各電表的中繼節(jié)點(diǎn)并動(dòng)態(tài)維護(hù)這些節(jié)點(diǎn)是進(jìn)行中繼轉(zhuǎn)發(fā)抄收時(shí)應(yīng)解決的問題。因此有必要設(shè)計(jì)一種電力載波通信路由器以實(shí)現(xiàn)對一臺(tái)區(qū)下各節(jié)點(diǎn)中繼路徑的智能制定及其維護(hù),以方便其上級采集器對所有節(jié)點(diǎn)的抄收。
1 系統(tǒng)拓?fù)浣Y(jié)構(gòu)
    載波集抄系統(tǒng)拓?fù)鋱D如圖1所示。


2  電力載波路由器的軟件設(shè)計(jì)
2.1 DLT/645—2007多功能電表通信規(guī)約

    本通信規(guī)約規(guī)定了多功能電表與手持單元(HHU)或其他數(shù)據(jù)終端設(shè)備之間的物理連接、通信鏈路及應(yīng)用技術(shù)規(guī)范,適用于本地系統(tǒng)中多功能電表與手持單元或其他數(shù)據(jù)終端設(shè)備進(jìn)行點(diǎn)對點(diǎn)或一主多從的數(shù)據(jù)交換方式[1]。645協(xié)議規(guī)定了通信采用異步串行的通信方式,其每個(gè)字節(jié)包含有1個(gè)起始位、8個(gè)數(shù)據(jù)位、1個(gè)偶校驗(yàn)位及1個(gè)停止位,缺省通信速率為2 400 b/s,傳輸時(shí)先傳低位,后傳高位。應(yīng)用規(guī)定了如圖2所示的每一幀的信息格式。

    在圖2中,68H為幀的起始符;A0~A5為通信端的物理地址,一共是6個(gè)字節(jié);L為數(shù)據(jù)域的長度;DATA為數(shù)據(jù)域;16H為幀的結(jié)束符;CS表示校驗(yàn)碼,校驗(yàn)碼是從第1幀起始符開始到校驗(yàn)碼之前的所有各字節(jié)的模256的和,即各字節(jié)二進(jìn)制算術(shù)和,不計(jì)超過256的算術(shù)值;C為控制碼,控制碼一共有8位,在保留645協(xié)議中對控制碼各位定義的基礎(chǔ)上,本設(shè)計(jì)針對中繼功能的使用重新定義了控制碼。同時(shí)為了保障載波通信的可靠性,還省去了645協(xié)議中關(guān)于后續(xù)幀的定義。控制碼的格式[2]如圖3所示。

2.2 路由算法的設(shè)計(jì)
     路由的目的是要建立一張各節(jié)點(diǎn)的最優(yōu)路徑表,此表記錄了臺(tái)區(qū)下每個(gè)節(jié)點(diǎn)的中繼級別、各級的中繼地址及目的地址。這種路由表是動(dòng)態(tài)的,存放在RAM中,每隔5 min會(huì)自動(dòng)更新一次。路由表的初始值各項(xiàng)均為0,其格式如圖4所示。

    路由表的建立是軟件中最核心的部分,本設(shè)計(jì)采用了多叉樹遍歷尋優(yōu)[3]算法,從路由器節(jié)點(diǎn)開始逐層搜索。其算法描述如下:
    (1)路由器先將網(wǎng)絡(luò)中的所有節(jié)點(diǎn)建成一個(gè)帶有頭節(jié)點(diǎn)的單向鏈表,然后開始向網(wǎng)絡(luò)中所有節(jié)點(diǎn)依次發(fā)送直抄查詢命令,并等待回應(yīng)。若能在規(guī)定時(shí)間內(nèi)(10 s)收到節(jié)點(diǎn)的應(yīng)答信息,則表明該節(jié)點(diǎn)可以進(jìn)行直抄;然后將可以進(jìn)行直抄的電表從鏈表中刪除,并將刪除的節(jié)點(diǎn)重新組成一個(gè)新的鏈表。路由表建立示意圖如圖5所示。

    單個(gè)節(jié)點(diǎn)的屬性如下:
    struct mac_list
    {
    U8_t mac[6];                        //節(jié)點(diǎn)的MAC地址
    U8_t flag;
              //flag表示路由表中已建立該MAC對應(yīng)的路由項(xiàng)
    int use_tim;
  //此項(xiàng)只在中繼轉(zhuǎn)發(fā)時(shí)有用,表示轉(zhuǎn)發(fā)過程所花費(fèi)的時(shí)間
    U8_t num;                                            //節(jié)點(diǎn)的序號(hào)
    U8_t respond_num[10];
                            //記錄可以與自身進(jìn)行通信的電表序號(hào)
    struct mac_list *next;
    };
     完成第一次遍歷直抄搜索后,建立了以Head 1為首的單向鏈表(稱為第一層)。第一層中的各節(jié)點(diǎn)都可以直抄,它們在路由表中只要填寫中繼級別和目的地址即可。由于是可以直抄的節(jié)點(diǎn),所以中繼級別填為0;
    (2)對剩下的節(jié)點(diǎn)進(jìn)行一級中繼遍歷搜索,依照鏈表中各節(jié)點(diǎn)的序列順序,依次選取第一層中單個(gè)節(jié)點(diǎn)作為剩下節(jié)點(diǎn)的一級中繼,對余下的節(jié)點(diǎn)進(jìn)行轉(zhuǎn)發(fā)抄收測試,如圖6所示。

    在一級中繼節(jié)點(diǎn)確定的過程中,第一層中的每個(gè)節(jié)點(diǎn)都會(huì)嘗試對剩下的節(jié)點(diǎn)進(jìn)行一級中繼轉(zhuǎn)發(fā),若剩下的節(jié)點(diǎn)中,存在能對中繼轉(zhuǎn)發(fā)幀作出回應(yīng)的節(jié)點(diǎn),則表明該節(jié)點(diǎn)可以進(jìn)行一級中繼抄收。通常一個(gè)節(jié)點(diǎn)的中繼抄收路徑存在好幾條,這時(shí)需要通過計(jì)算中繼抄收時(shí)間來選擇一條用時(shí)最短的路徑,這樣才能保證采集器抄收時(shí)用時(shí)最短。經(jīng)過對剩下節(jié)點(diǎn)進(jìn)行一級中繼遍歷抄收搜索后,剩下的節(jié)點(diǎn)中可以進(jìn)行一級中繼抄收的節(jié)點(diǎn)將會(huì)組成第二層。同樣,第二層由從Head中刪除的一級中繼抄收節(jié)點(diǎn)組成,并順序存儲(chǔ)在以Head2為頭節(jié)點(diǎn)的鏈表中,建立好的第二層結(jié)構(gòu)如圖7所示。

    (3)對剩下的節(jié)點(diǎn)進(jìn)行二級中繼遍歷搜索。一般而言,二級中繼可以做到對一臺(tái)區(qū)下所有節(jié)點(diǎn)的覆蓋。剩下的節(jié)點(diǎn)要進(jìn)行中繼路徑的確定,首先要確定它的父節(jié)點(diǎn)(二級中繼節(jié)點(diǎn)),父節(jié)點(diǎn)是從建立好的第二層來選擇的;然后確定它的一級中繼節(jié)點(diǎn),而一級中繼節(jié)點(diǎn)是從第一層中選擇的。由圖7可知,一級中繼路由建立完成之后,第一層與第二層有著確定的連接關(guān)系,所以在節(jié)點(diǎn)的屬性中設(shè)置了respond_num數(shù)組來記錄可以與自身進(jìn)行通信的電表序號(hào)。這樣,建立二級中繼時(shí)可通過比較從路由器發(fā)送二級中繼轉(zhuǎn)發(fā)命令到目的節(jié)點(diǎn)作出的響應(yīng),即這個(gè)通信過程所花費(fèi)的時(shí)間來確定中繼路徑。建立二級中繼的過程示意圖如圖8所示。

2.3 嵌入式Linux平臺(tái)下路由器的多線程程序設(shè)計(jì)
    Linux是一種完全開源的32位操作系統(tǒng),它幾乎支持所有體系架構(gòu)的處理器。由于它具有開源、可定制、安全、穩(wěn)定等特征,所以可對其進(jìn)行裁剪、修改使之能夠穩(wěn)定運(yùn)行在嵌入式開發(fā)平臺(tái)上。針對電力載波通信路由器的實(shí)際應(yīng)用需求,本設(shè)計(jì)移植了Linux-2.6.29.4內(nèi)核至ARM9平臺(tái)上,并配置了EXT2/VFAT/NFS文件系統(tǒng)及串口和網(wǎng)絡(luò)通信驅(qū)動(dòng)。為了使路由器能夠更快速和穩(wěn)定地進(jìn)行路由、路由表動(dòng)態(tài)維護(hù)、抄表查詢等工作,本文提出了一種多線程的解決方案,利用Linux對多線程的支持很好地解決了各項(xiàng)任務(wù)的快速切換、相互通信等問題。
    Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,鏈接時(shí)需要使用庫libpthread.a[4]。在程序中,本文給路由表的建立分配了id_route線程,為串口2和網(wǎng)絡(luò)UDP通信分別分配了id_com和id_net線程。這三個(gè)線程是相互獨(dú)立的,其中串口2和網(wǎng)絡(luò)UDP線程以阻塞的方式來等待采集器發(fā)出的抄表查詢指令。線程的初始化工作均由pthread_creat函數(shù)來開啟,id_route線程開啟后,串口1開始對外發(fā)送直抄、一級中繼抄表、二級中繼抄表的數(shù)據(jù)命令幀并根據(jù)接收到的節(jié)點(diǎn)響應(yīng)數(shù)據(jù)幀來建立臺(tái)區(qū)下相應(yīng)節(jié)點(diǎn)的路由信息。id_route線程結(jié)束后會(huì)激活id_reroute線程,這個(gè)線程主要是為下次路由表更新進(jìn)行定時(shí),定時(shí)時(shí)間設(shè)為20 min,即每隔20 min,更新一次路由表。id_route線程的主要功能就是不停地查詢20 min定時(shí)有沒有到,如果定時(shí)到,則關(guān)閉20 min定時(shí)器,并開啟id_route線程。程序多線程化后,就要考慮線程間的同步問題,如線程id_route正從文本文件中讀取當(dāng)中記錄的各個(gè)節(jié)點(diǎn)的MAC地址、id_net線程正試圖向文本文件中添加某一節(jié)點(diǎn)的MAC地址。如果兩個(gè)線程不加以同步,必會(huì)導(dǎo)致節(jié)點(diǎn)MAC地址的混亂。本設(shè)計(jì)采用一種稱為“互斥鎖”的同步方式,它可以保證任一時(shí)刻只有一個(gè)線程能訪問它,利用這一性質(zhì)可以保護(hù)共享數(shù)據(jù)。建立路由表的線程流程圖如圖9所示。

    本文提出了一種路由路徑尋優(yōu)算法并在嵌入式Linux平臺(tái)下實(shí)現(xiàn)了這種路由算法,該算法可以保證節(jié)點(diǎn)搜索的不重復(fù)性、路由建立的快速性和數(shù)據(jù)抄收的正確性。利用Linux對多線程編程的支持及強(qiáng)大的網(wǎng)絡(luò)通信功能,實(shí)現(xiàn)了路由維護(hù)與網(wǎng)絡(luò)、串口通信的并發(fā)運(yùn)行,很好地滿足了自動(dòng)化抄表系統(tǒng)中對網(wǎng)絡(luò)通信和抄表實(shí)時(shí)性的要求。
參考文獻(xiàn)
[1]    DL/T 645-2007.多功能電能表通信規(guī)約[S].2008.
[2]    青島東軟電腦技術(shù)有限公司.PLCI36G-III-E電力載波芯片通信協(xié)議指南, 2010.
[3]    彭啟偉,張浩.基于多叉樹遍歷的中壓配電線載波自適應(yīng)中繼算法[M].電力系統(tǒng)通信, 2009(197):21-27.
[4]    童永清.Linux C編程實(shí)戰(zhàn)[J].北京:人民郵電出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 免费a级毛片在线播放| 国产极品美女高潮抽搐免费网站| 中文在线免费看视频| 日韩精品免费一区二区三区| 亚洲国产av高清无码| 污网站在线观看| 免费又黄又硬又爽大片| 美女扒开胸露出奶乳免费视频| 无码人妻精品一二三区免费| 亚洲av日韩av无码av| 精品久久久久久无码专区| 国产亚洲精品美女久久久| 97影院在线午夜| 女大学生的沙龙室| 久久精品aⅴ无码中文字字幕不卡| 欧美性猛交xxxx乱大交蜜桃| 亚洲色图校园春色| 白丝爆浆18禁一区二区三区| 午夜爽爽爽男女免费观看影院 | 污污网站在线播放| 人人色在线视频播放| 秋霞日韩一区二区三区在线观看| 周妍希美乳三点尽露四季图片| 色综合一区二区三区| 国产亚洲av片在线观看播放 | 久久精品动漫一区二区三区| 最近韩国电影免费高清播放在线观看| 亚洲国产日韩欧美在线| 欧美欧美欧美欧美| 亚洲欧美偷自乱图片| 美国式禁忌23| 国产一区二区精品久久| 蜜臀av免费一区二区三区| 国产女主播喷水视频在线观看| 久草视频免费在线| 国产欧美日韩精品专区| 免费观看美女用震蛋喷水的视频| 国产真人无遮挡作爱免费视频| 性宝福精品导航| 国产激情在线观看| 四虎永久在线观看视频精品|