新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 自動攤鋪機通信模塊的設計

        自動攤鋪機通信模塊的設計

        作者: 時間:2009-09-11 來源:網絡 收藏
        下面為實現串口的程序:

        本文引用地址:http://www.104case.com/article/157854.htm

        #include

        unsigned int a;

        interrupt(0x2B) void S0RINT(void)//接收中斷服務子程序

        {

        a=S0RBUF;//將接收數據保存

        }

        void putchar(unsigned char tdata)//串行發送程序

        {

        while(!S0TBIR){;}//等待發送緩沖區清空

        S0TBIR=0;//復位發送緩沖區中斷請求標志

        S0TBUF=tdata;//裝載發送緩沖寄存器

        }

        void ASC_vInit(void)//串行初始化

        {

        S0CON=0x8011;//定義控制寄存器:SOR=1;SOREM=1;串行方式1

        S0BG=0x0040;//定義波特率9 600Bd

        S0RIC=0x0062;//定義接收中斷控制寄存器

        S0TBIC=0x0080;//定義發送緩沖控制寄存器

        P3 |=0x0400;//定義P3.10引腳為輸出鎖存(TXD0)

        DP3 |=0x0400;//定義P3.10方向控制(TXD0為輸出)

        Dp3 =0xF7FF;//定義P3.11方向控制(RXD0為輸入)

        IEN=1;//開中斷

        }

        void main(void)

        {

        ………………;

        ASC_vInit();//串口初始化

        putchar(‘…..’);//串行發送

        ………………;

        }

        6.總線軟件

        6.1C164CI的概述

        C164CI的特點如下:

        (1)遵循CAN V2.0B規定(符號標準和擴展功能)。

        (2)最大CAN通信速率為1MB/S。

        (3)完全的CAN裝置:

        l15個信息體,帶有自己的識別器和狀態控制位;

        l每個信息體可以定義為發送或接收。

        (4)通過在片內部XBUS(16位獨立方式)與主CPU相連(C166-內核)。

        (5)接收濾波器用可編程屏蔽寄存器:

        l全域屏蔽輸入信息體(全CAN功能);

        l信息體15有附加屏蔽(基本CAN功能);

        l靈活的中斷事件控制;

        l帶有兩個接收緩沖器;

        l用自己的全域屏蔽寄存器進行接接收濾波。

        6.2CAN總線通信軟件

        系統CAN總線通信軟件的任務是:在選定通信規程CAN2.0B以后,規定各計算機傳送數據的格式和約定;協調各計算機之間的通信;統一考慮通信中的可靠性措施。

        6.2.1 數據發送模式

        由于要傳送數據的重要程度、傳送周期不同,在本系統的通信中采用兩種不同的數據發送模式:

        (1)發送模式0:即發送一次,不檢測接收是否正確,發送結束返回。接收方接收到此類數據包后,不必發送應答信息包。該數據包的特點是:按照一定周期定時發送,用于主操作面板上的狀態顯示,所以偶爾的傳送失敗不會影響系統的正常運行與操作。

        (2)發送模式1:即一定要將數據包正確發送給接收方。采用重發機制,等待接收方應答,若沒有接收到應答則重發。5次發送均失敗,則返回FALSE,由發送方做出相應的處理動作,如報警、停機等;成功則返回TRUE。該數據包的特點是:由相應事件觸發發送,如果傳送失敗,將影響系統的正常運行。

        6.2.2 數據發送模式

        對于系統來說,其CAN網絡中節點數量較少,而每種數據包只需要一部分節點來接收,因此在通信設計中利用數據幀標識符來實現定址組播。為避免接收不必要的數據包,對接收節點按位編址,每個節點對應驗收濾波中的一位。若一個報文標識符高8位中對應位為1,則接收;否則忽略。因此只要在發送節點根據數據包內容設置合適的報文標識符,數據包即可被相關節點正確接收,而被無關節點忽略。

        6.2.3 校驗

        CAN結構的MAC層中已經實現了循環冗余碼〔CRC〕校驗。但工作環境惡劣,工作條件復雜,為了系統通信的可靠性,在控制程序級的通信中也進行校驗。為減輕系統負擔及降低程序復雜性,控制程序級的校驗采用了比較簡單的求和取模校驗方式,每個數據幀的最后一個數據字節作為校驗和,其值是之前所有數據字節求和后對256取模的值。各節點的接收接口中以相同方法計算校驗和,若校驗正確則將數據包壓入接收隊列,否則拋棄該包。

        6.2.4 數據包格式及內容

        其中:L取值為2―8:采用CAN2.0B標準,使用29位標識符。

        ID28―ID21:確定此幀的接收節點,每位代表1個節點,可以廣播。

        ID20―IDl7:此幀的順序號,每發一個幀增1,用于區分不同數據幀與重發數據幀。

        IDl6:應答標志位:為1表示此幀需要應答,為0表示此幀不需應答。

        IDl5―IDl3:指定此幀的發送節點,0―3分別代表左交互機、右交互機、車體行駛測控機和找平輸分料測控機。

        ID12―ID0:無意義。

        6.3CAN總線通信編程

        CAN總線通信編程是一個比較煩瑣的事情,主要是涉及諸多的CAN寄存器,但只要掌握其規律和技術關鍵,就會變得容易起來。下面是CAN總線通信編程的實現步驟:

        (1)CAN模量初始化;

        (2)定義每一個信息體;

        (3)裝載信息體數據(僅針對發送信息體);

        (4)接收信息體接收數據;

        (5)發送一個信息體;

        (6)檢查一個信息體;

        (7)檢查是否關閉CAN總線。

        為便于進行化編程,將CAN通信功能封裝成一個個子程序,并且生成一個專用的程序庫,供不同的程序員調用,這樣就提高了編程效率,并易于功能擴展。下面給出其中的兩個子程序。

        下面為發送一個信息體的CAN通信程序:

        #include //C164寄存器定義

        #include //CAN控制寄存器定義

        void send_mo_16x(unsigned char a)//發送信息體“a”(1..14)

        {

        if((a15)(a))*msgctrl_ptr_16x[a]=0xefff;//置位TXRQ

        }

        下面為檢查是否關閉CAN總線的CAN通信程序:

        #include //CAN控制寄存器定義

        unsigned char check_busoff_16x(void)//檢查總線是否關閉,并在必要時恢復

        {

        unsigned char busoff_var=0;

        if(SR0x80)//如果BOFF=1

        {

        busoff_var=1;

        CR=CR0xfe;//恢復關閉的總線(清零INIT)

        }

        }

        7.結論

        由于攤鋪機的功能繁多,運作復雜,工作環境十分惡劣,因此控制系統的工作可靠性問題就是自動攤鋪機設計的關鍵。在本系統中,利用RS232C實現了主交互機與移動電話之間的串行通信;采用帶CAN總線的單片機完成不同模塊各自的功能,又通過CAN總線傳送數據或命令,實現了功能分散又集中監視,危險分散。因此,很適合于自動攤鋪機中分布式控制系統的實現。現場實驗結果表明:該通信模塊具有良好的可靠性、穩定性和安全性。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安吉县| 遂溪县| 黔西县| 莒南县| 六枝特区| 万载县| 韶山市| 石嘴山市| 含山县| 洛扎县| 敦煌市| 垣曲县| 宜黄县| 五莲县| 浦北县| 巧家县| 雅江县| 岚皋县| 盐池县| 合水县| 旺苍县| 巴南区| 平邑县| 宁城县| 灵石县| 鲁甸县| 灵宝市| 额济纳旗| 鄂温| 城口县| 二手房| 翁源县| 鹰潭市| 彝良县| 延吉市| 叙永县| 克什克腾旗| 新兴县| 乌兰县| 河北省| 宝清县|