關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于VxWorks的MB系列智能可編程控制器設計

        基于VxWorks的MB系列智能可編程控制器設計

        作者: 時間:2009-12-23 來源:網絡 收藏

        (1) 信號量
        信號量是實現任務互斥、同步操作的主要機制,提供的信號量經過了高度優化,在所有任務間通信機制中,速度最快。對于互斥,信號量可以上鎖對共享資源的訪問,并且比禁止中斷或禁止搶占提供更精確的互斥粒度。對于同步,信號量可以協調外部事件與任務的執行。
        PLC使用二進制信號量來解決多個任務讀寫數據的互斥問題,使用計數器信號量來解決定時器計數問題;
        (2) 消息隊列
        消息隊列是提供的單CPU中任務間通信的主要機制。消息隊列允許以FIFO或優先級方式排隊消息,消息的數目可變,消息的長度可變。任何任務都可以向消息隊列發送消息,也可以從消息隊列接收消息。多個任務允許從一個消息隊列收發消息。但是,兩個任務間的雙向通信通常需要兩個消息隊列,各自用于一個方向。
        PLC使用消息隊列來實現任務間的數據交換。首先調用msgQCreate()函數創建消息隊列,再用msgQSend()和msgQReceive()函數發送和接受消息,最后調用msgQDelete()函數中止消息隊列。
        3.3 中斷處理程序
        中斷處理程序是實時系統的重要組成部分。系統通過中斷機制了解外部世界,并對外部事件作出響應。實時系統的反應取決于系統對于中斷的響應速度和中斷處理程序的處理速度。由于在很短的時間內,可能產生很多中斷,高優先級的中斷將阻塞低優先級的中斷,因此,必須使中斷處理程序的處理時間最短。
        PLC的中斷包括秒中斷、分同步中斷、CAN網中斷以及BSP級的以太網中斷、硬盤中斷等等。下面以秒中斷(中斷級別為5)為例說明中斷的使用方法:
        ntConnect(INUM_TO_IVEC(INT_VEC_GET(5)), SECISR, 0);
        sysIntEnablePIC(5);
        這兩個函數用于將中斷處理程序SECISR()與秒中斷相關聯,存放于中斷向量表的對應表項中,當秒中斷事件出現時,內核將調用中斷處理程序。這時可利用中斷處理程序釋放一個信號量(通過semGive()函數),通過該信號量驅動相應的數據處理模塊(通過sem- Take()函數),從而實現實時操作。
        此外,我們還使用intLock()函數和intUnlock()函數來設置中斷屏蔽,用以保證受保護的代碼在執行過程中不受中斷的干擾。
        3.4 網絡通信
        網絡通信一般可通過套接口(socket)實現。Vx- Works提供了標準的BSD socket調用,具有兩種類型:Stream socket(全雙工流類型)、Datagram socket(數據報類型)。前者支持TCP協議,后者支持UDP協議。任何一個任務都可以打開一或多個socket,其它任務的socket可與之連接。
        客戶端程序首先調用socket()函數產生用于與各分系統連接的套接字,然后初始化一個套接口結構體,為其賦上服務端的IP地址和端口號,并將其作為函數connect()的參數,調用connect()函數主動去連接服務器端。連接成功后,用send()和recv()函數讀寫數據,直到全部數據都交換完,再用close()函數關閉套接口。
        服務器端也先用socket()函數建立套接口,再調用bind()函數將自身IP和端口號綁定,以保證客戶端正確識別,然后用listen()函數指明已準備好接受來自客戶端的連接,又用accpet()函數接受一個連接請求,接受后用send()和recv()函數來傳輸數據,直到全部數據都交換完,再用close()函數關閉套接口。為了確保服務器能夠實時接收客戶端的數據,當服務端與客戶端建立連接之后,必須嵌入循環,利用recv()函數不斷等待客戶數據。同時客戶端每次發送數據之后也應等待服務端回復,建立握手機制。
        3.5 串行口通信
        在VxWorks中,將I/O系統成為任何類型的設備,提供一個簡單、統一、獨立于設備的接口,任何對于串行口的操作仍然可以視為對一個文件的操作,而不必了解關于設備或程序驅動實現的細節。在使用串口之前利用open()打開相應串口,再用ioctl()設置波特率、數據位、停止位、奇偶校驗等屬性,然后依據串口打開時的讀寫標志,調用函數write()、read()對串口進行只讀操作、只寫操作或同時進行讀寫操作,最后用close()關閉串口。
        對于串口通信,仍然要關心數據接收的實時性。可采用中斷方式,利用VxWorks提供的select()函數的事件觸發機制,將讀串口的任務阻塞使其一直等待數據,當有數據來到的時候該任務會立刻自動響應,提高系統的實時性。

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

        4 結束語
        嵌入式實時操作系統VxWorks及其開發環境的引入,大大簡化了軟件的復雜性,縮短了開發周期,提高了產品的實時性和可靠性。因此,VxWorks RTOS在MB中的應用是成功的。MB作為新一代的PLC產品,相信能在電力、化工、工業過程控制、城市及樓宇自動化等各種復雜控制領域發揮更大的優勢,使這些行業的自動化水平得到更大的提高。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 桐庐县| 太保市| 西安市| 随州市| 蒙山县| 六安市| 鸡泽县| 乌兰浩特市| 北京市| 兴义市| 溧水县| 岳阳县| 乐亭县| 天门市| 郴州市| 湾仔区| 乌海市| 罗定市| 杭锦后旗| 黄石市| 韩城市| 米泉市| 耿马| 固安县| 门源| 温泉县| 溆浦县| 兴山县| 汪清县| 黑河市| 孟连| 佛学| 云龙县| 随州市| 本溪| 宜黄县| 化隆| 淮南市| 西宁市| 萍乡市| 大理市|