• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于ARM的PLC的CAN通信協(xié)議設(shè)計與實現(xiàn)*

    2011-05-28 15:30:54王珍珠劉占清
    關(guān)鍵詞:通信協(xié)議字節(jié)寄存器

    王珍珠,劉 偉,劉占清

    (1.中國科學(xué)院研究生院,北京 100039;2.中國科學(xué)院 沈陽計算技術(shù)研究所,沈陽 110168;3.沈陽高精數(shù)控技術(shù)有限公司,沈陽 110168)

    0 引言

    目前,ARM(Advanced RISC Machine)憑借其開放性、高可靠性、低功耗、低成本和操作系統(tǒng)的易移植普遍應(yīng)用于汽車、消費電子、工業(yè)控制等各領(lǐng)域[1-2]。CAN(Controller Area Network)總線是一種有效支持分布式控制和實時控制的串行通信網(wǎng)絡(luò),它憑借高可靠性和靈活性等優(yōu)勢廣泛應(yīng)用于多種領(lǐng)域。文獻[3]采用SJA1000作為CAN控制器使PC機成為CAN總線上的一個節(jié)點從而實現(xiàn)PC機和PLC之間的通信。文獻[4]實現(xiàn)了一種在CAN open協(xié)議上實現(xiàn)主從模塊進行通信的協(xié)議。Jung-Ki Choi等提出了一種在CAN網(wǎng)絡(luò)中進行重新組織數(shù)據(jù)來提高傳輸效率的算法[5]。D.I.Orekhov等設(shè)計了一種基于CAN總線的請求和分析數(shù)據(jù)系統(tǒng)[6]。高檔數(shù)控工程研究中心研發(fā)的PLC的主CPU采用LPC2368,而I/O板采用 LPC2119,都內(nèi)置2個 CAN控制器。本文設(shè)計了LPC2368和LPC2119之間的CAN通信協(xié)議,正確有效了實現(xiàn)了數(shù)據(jù)的采集與輸出。并通過I/O測試臺有效地驗證了通信的正確性。

    1 CAN通信模型

    CAN總線支持多主機通信方式。多主機是指總線空閑時,任何單元都可以開始傳送報文。具有較高優(yōu)先權(quán)報文的單元可以獲得總線訪問權(quán)[5]。主CPU向I/O板請求位置信息,I/O板收到請求后同時發(fā)送信息到CAN總線上采用的多主機方式。

    2 幀ID設(shè)計

    CAN已成為國際標(biāo)準(zhǔn) ISO11898和ISO11519。CAN技術(shù)規(guī)范包括A和B兩部分。2.0A給出了CAN技術(shù)規(guī)范版本定義的CAN報文格式,而2.0B給出了標(biāo)準(zhǔn)幀和擴展幀兩種報文格式[7-9]。標(biāo)準(zhǔn)幀的ID占11位,擴展幀的ID占29位,我們這里采用的是11位的標(biāo)準(zhǔn)幀。標(biāo)準(zhǔn)幀11位ID的每一位的含義如圖1所示。

    圖1 幀ID格式圖

    Bit10位:表示發(fā)送該幀的芯片類型,0代表該幀是LPC2368發(fā)送的,1代表該幀是LPC2119發(fā)送的。

    Bit 98位:表示底板編號,我們現(xiàn)在做的第一版的PLC只有兩塊底板,一塊底板上有6個插槽。分別是底板0和底板1。01代表底板0,10代表底板1,00代表底板0和底板1。

    底板的左端有 4 個開關(guān) 1、2、3、4,分別對應(yīng)LPC2368 中的管腳 P1.22,P1.23,P1.24,P1.25 和LPC2119 中的 P1.23,P1.22,P1.21,P1.20,可以控制調(diào)節(jié)底板的編號。

    Bit76位:表示板子類型。10代表輸入板;01代表輸出板。

    Bit5~0位:表示底板上的六個插座編號,一個底板上有6個插槽。

    因為多主機發(fā)送必須為節(jié)點分配不同的優(yōu)先級,而CAN總線上的節(jié)點的優(yōu)先級是按照ID的大小來判斷的,ID越小優(yōu)先級越大;ID越大優(yōu)先級越小。我們這樣設(shè)計ID,不僅可以為I/O板設(shè)置不同的優(yōu)先級,而且也為輸出板有選擇地接受來自主CPU的數(shù)據(jù)奠定了基礎(chǔ)。輸出板的截取數(shù)據(jù)算法將在第四章講述。

    3 CAN驅(qū)動層設(shè)計

    CAN控制器相對于微控制器來說是基于事件觸發(fā)的。CAN控制器在狀態(tài)發(fā)生變化時,將變化結(jié)果通知微控制器。微控制器可以采用中斷或者查詢的方式對CAN控制器作相應(yīng)處理。鑒于功能的需要,我們設(shè)計的CAN通信程序,在發(fā)送幀信息時采用查詢方式,接收幀信息時采用中斷方式。CAN驅(qū)動層的設(shè)計是通過對CAN控制器進行配置和操作、實現(xiàn)收發(fā)程序等工作來實現(xiàn)的。主要有以下三部分。

    3.1 CAN控制器初始化

    CAN通信工作需要CAN控制器和驗收濾波器協(xié)調(diào)工作。CAN控制器初始化包括使能CAN外設(shè),CAN管腳初始化,CAN中斷接收初始化和波特率初始化設(shè)置等。

    3.2 驗收濾波器的初始化

    當(dāng)CAN控制器的接收端接收到一個完整的標(biāo)識符時,它將通知驗收濾波器。驗收濾波器響應(yīng)這個信號,并讀出控制器編號、標(biāo)識符格式(標(biāo)準(zhǔn)幀格式或擴展幀格式),然后驗收濾波器搜索AF RAM中的表格進行匹配,根據(jù)是否匹配來決定是接受還是丟棄這一幀信息[10]。通過設(shè)置驗收濾波器寄存器可以進行有選擇的接收發(fā)送到CAN總線上幀。將需要接收到的ID寫入驗收濾波器的相應(yīng)地址即可。此通信協(xié)議中使用的是明確的標(biāo)準(zhǔn)幀格式標(biāo)識符。驗收濾波器的工作模式隨著通信的時序不同而不同。系統(tǒng)初始上電時,驗收濾波器處于旁路模式。

    3.3 CAN報文發(fā)送和接收

    3.3.1 CAN發(fā)送

    CAN控制器的發(fā)送緩沖區(qū)包括三部分,一是存放發(fā)送幀信息的寄存器CANTFI。二是存放發(fā)送幀的ID的發(fā)送標(biāo)識符寄存器CANTID。三是存放發(fā)送數(shù)據(jù)信息的發(fā)送數(shù)據(jù)寄存器A(CANTDA)和發(fā)送寄存器B(CANTDB)。CANTDA用來存放將要發(fā)送報文的前1-4個數(shù)據(jù)字節(jié),CANTDB用于存放將要發(fā)送報文的第5-8個字節(jié)。

    CAN發(fā)送報文時,首先要將發(fā)送相關(guān)的寄存器值清零,然后將相應(yīng)寄存器中填寫幀信息,幀信息填寫好之后,選擇發(fā)送緩沖區(qū)啟動發(fā)送命令。通過查看狀態(tài)寄存器CANSR或者全局狀態(tài)寄存器CANGSR能夠得知發(fā)送報文是否成功。

    3.3.2 CAN接收

    CAN控制器具有雙重緩沖區(qū)。CAN報文接收到的幀信息也包括三部分,分別是接收到的幀狀態(tài)、接收標(biāo)識符和接收到的數(shù)據(jù)。

    CAN報文的接收我們采用的是中斷接收方式。當(dāng)CAN總線的節(jié)點使能中斷接收后,驗收濾波器或者處于旁路模式,或者接收到的幀ID在驗收濾波器的RAM中存放,就會觸發(fā)接收中斷。CAN控制器可以從接收幀狀態(tài)寄存器、接收標(biāo)識符寄存器和接收數(shù)據(jù)寄存器中讀取接收到的報文。接收成功以后釋放緩沖區(qū),用于存放下次接收到的報文。

    4 CAN通信協(xié)議設(shè)計

    主CPU和I/O板之間的CAN通信流程如下。

    (1)主CPU向全部I/O板發(fā)送標(biāo)準(zhǔn)遠(yuǎn)程幀。為了通信方便,當(dāng)驗收濾波器處于旁路模式時主CPU發(fā)送的ID是0x00000000。初始上電之后,主CPU向所有I/O板發(fā)送一個遠(yuǎn)程幀,要求所有的I/O板回送一個字節(jié)的數(shù)據(jù),標(biāo)識自己的位置信息及所接物理量的線數(shù)。位置信息包括芯片類型、所在底板號、板子類型、所在插槽號。物理量線數(shù)代表I/O板所接的物理量的個數(shù)。

    (2)I/O板在驗收濾波器處于旁路模式時,都能接收到主CPU發(fā)來的請求I/O板位置信息的遠(yuǎn)程幀(該遠(yuǎn)程幀的ID為0x00000000),并觸發(fā)接收中斷。當(dāng)I/O板收到ID為0X00000000的遠(yuǎn)程幀后,就立即將自己的位置信息發(fā)送給主CPU。

    (3)當(dāng)主CPU接收所有I/O板發(fā)來的一個字節(jié)的數(shù)據(jù)幀后,將進行一系列的處理。

    ①建立一個輸出板位置碼表和一個輸入板位置碼表,分別保存各輸出板發(fā)來的ID和各輸入板發(fā)來的ID,并且將所有的ID按照從小到大的順序排列。

    ②發(fā)送ID為0x13F的數(shù)據(jù)幀,此幀的發(fā)送數(shù)據(jù)寄存器里存放著底板0上所有輸出板的位置碼相與后的配置碼0和底板1上所有輸出板位置碼相與后的配置碼1(如果有底板1的話)。此幀有同步信號的作用。

    ③將ID按從小到大的順序存放到驗收濾波器的RAM中,并設(shè)置驗收濾波器的模式為工作模式。

    (4)輸出板在接到ID為0X13F的數(shù)據(jù)幀之后,設(shè)置濾波碼并將濾波的旁路模式改為工作模式。輸出板建立濾波碼的方法是:

    ①建立接受主CPU發(fā)到同一底板的所有輸出板的濾波碼.根據(jù)接到ID為0X13F的數(shù)據(jù)幀的數(shù)據(jù)字節(jié)數(shù)來首先建立1項或者2項濾波碼,如果接到的是1個字節(jié),則首先建立1項 ID,該 ID高 5位為00101,低六位為上面生成的底板0的輸出板配置碼0。如果接到的是2個字節(jié),則首先建立2項,第1項與上述相同,第2項ID的高5位01001,低6位為上面生成的底板1的輸出板配置碼1。

    ②建立接收主CPU發(fā)到該輸出板的數(shù)據(jù)幀的濾波碼,該ID高5位0010,低 6位為本板在底板上的位置編碼。

    ③建立某輸出板發(fā)到該輸出板的數(shù)據(jù)幀的濾波碼10101,低六位為本板在底板上的位置編碼。

    ④將這三種濾波器進行排序,并按照從小到大的順序存放到輸出板的驗收濾波器的RAM中。

    輸入板在接到ID為0X13F的數(shù)據(jù)幀之后,設(shè)置濾波碼并將驗收濾波器的旁路模式改為工作模式。輸入板建立濾波碼標(biāo)的方法是:

    ①接收主CPU發(fā)送到所有輸入板的標(biāo)準(zhǔn)幀的濾波碼,該幀的ID為0X80。

    ②接收主CPU發(fā)送到本輸入板的標(biāo)準(zhǔn)幀的濾波碼,此ID的高5為00110或01010,低6位為本板在底板上的位置碼。

    ③輸入板對兩個濾波碼按照從小到大的順序存放到輸入板驗收濾波器的RAM中。

    (5)主CPU向全部輸入板發(fā)送標(biāo)準(zhǔn)遠(yuǎn)程幀要求回送2個字節(jié)的數(shù)據(jù),該發(fā)送幀的ID為0X80。用于PLC梯形圖的解釋執(zhí)行。

    (6)輸入板收到來自主CPU板發(fā)來的 ID為0X80的請求數(shù)據(jù)的幀后,填寫發(fā)送幀狀態(tài)寄存器、發(fā)送幀標(biāo)識符寄存器,發(fā)送數(shù)據(jù)寄存器,然后啟動發(fā)送。

    (7)主CPU收到輸入板的采集的數(shù)據(jù)后,用于SIPROM編碼的解釋執(zhí)行,刷新輸出結(jié)果,并向輸出板發(fā)送數(shù)據(jù)幀,該數(shù)據(jù)幀的數(shù)據(jù)寄存器中存放著刷新的輸出結(jié)果。

    (8)輸出板收到來自主CPU發(fā)送的數(shù)據(jù)進行截取數(shù)據(jù),來選擇自己對應(yīng)的2個數(shù)據(jù)字節(jié)。并行截取數(shù)據(jù)的算法如下:

    根據(jù)j值來確定截取哪些字節(jié)。

    如果j==0截取第2和第1字節(jié)

    如果j==1截取第4和第3字節(jié)

    如果j==2截取第6和第5字節(jié)

    如果j==3截取第8和第7字節(jié)

    通信協(xié)議流程圖如圖2所示。

    圖2 通信協(xié)議流程圖

    5 實驗驗證

    利用串口調(diào)試助手和I/O測試臺對該PLC通信模塊進行測試。當(dāng)主CPU接收到一幀時,就將該幀的ID發(fā)到串口調(diào)試助手,用I/O測試臺可以模擬數(shù)據(jù)的采集和輸出。觀察串口調(diào)試助手,可以清晰地看到主CPU收到了所有輸入板和輸出板的信息,有效地驗證主CPU和I/O板之間的通信的正確性和可靠性。

    6 結(jié)束語

    本文針對PLC系統(tǒng)的主CPU和I/O板之間數(shù)據(jù)傳輸?shù)男枰?,設(shè)計并實現(xiàn)了進行數(shù)據(jù)采集和輸出的CAN通信協(xié)議。該通信協(xié)議在充分考慮PLC系統(tǒng)需要的基礎(chǔ)上進行了ID設(shè)計和通信機制的設(shè)計。通過驗證,該通信機制可以準(zhǔn)確可靠地運用到PLC通信模塊中。

    [1]唐明軍.基于ARM的可編程控制器的研制[D].南京:南京信息工程大學(xué),2007.

    [2]馬然,馬耀卿,包金明.基于ARM的交流電量數(shù)據(jù)采集系統(tǒng)的研制[J].電氣傳動,2010,40(10):61-65.

    [3]陳魯華.基于CAN總線的網(wǎng)絡(luò)化PLC技術(shù)研究與實現(xiàn)[D].南京:南京航空航天大學(xué),2003.

    [4]趙博.基于CAN總線的PLC模塊通信協(xié)議[D].西安:西安石油大學(xué),2009.

    [5]Jung-Ki Choi,Sungyun Jung,and Kwang-Ryul Baek.A Data Reorganization Algorithm to Improve Transmission Efficiency in CAN Networks.Intelligent Control and Automation.2006,344:438 -443.

    [6]D.I.Orekhov,A.S.Chepurnov,A.A.Sabel’nikov.A Distributed Data Acquisition and Analysis System Based on a CAN Bus.Instruments and Experimental Techniques.2007,50(4):487-493.

    [7]程力.CAN總線與DeviceNet現(xiàn)場總線分析[J].電站設(shè)備自動化,2006(2):4 -13,31.

    [8]佟為明.工業(yè)控制網(wǎng)絡(luò)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2005.

    [9]Bosch.CAN Specification Version 2.0.Robert GmbH,Stuttgart(1991).

    [10]謝斌,毛恩榮.基于CAN總線的拖拉機電液懸掛系統(tǒng)控制器研制[J].機床與液壓,2006(8):185-187.

    猜你喜歡
    通信協(xié)議字節(jié)寄存器
    No.8 字節(jié)跳動將推出獨立出口電商APP
    Lite寄存器模型的設(shè)計與實現(xiàn)
    No.10 “字節(jié)跳動手機”要來了?
    基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設(shè)計
    簡談MC7字節(jié)碼
    分簇結(jié)構(gòu)向量寄存器分配策略研究*
    基于DMX512通信協(xié)議的多路轉(zhuǎn)發(fā)器設(shè)計與研究
    基于NS-3的PLC多頻通信協(xié)議仿真平臺設(shè)計與實現(xiàn)
    電測與儀表(2016年2期)2016-04-12 00:24:52
    RSSP-I、RSSP-Ⅱ及SAHARA三種安全通信協(xié)議實現(xiàn)技術(shù)簡介
    高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
    汉川市| 秭归县| 醴陵市| 筠连县| 曲松县| 高台县| 玛沁县| 建昌县| 娄烦县| 湖北省| 林州市| 天门市| 万安县| 晋中市| 青川县| 临颍县| 陇川县| 宁晋县| 阿克苏市| 津市市| 囊谦县| 乃东县| 海林市| 三亚市| 晴隆县| 固镇县| 和林格尔县| 蒙城县| 利辛县| 和田市| 顺义区| 克拉玛依市| 蓝山县| 扬州市| 阿合奇县| 梅州市| 永济市| 舒城县| 铜梁县| 乳山市| 类乌齐县|