新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Windows CE設備與PLC串行通信的實現

        Windows CE設備與PLC串行通信的實現

        作者: 時間:2012-03-26 來源:網絡 收藏

        1.2 使用多線程和通訊事件來的編程方法

        對于桌面Windows來說,有查詢、重疊I/O、及事件驅動的三種編程方法可供選擇,由于Windows CE不支持重疊I/O方式,并且考慮到對于接收串口數據來說,由于數據到來的時刻通常是隨機的,采用查詢方式來讀取串口的內容將非常浪費嵌入式系統寶貴的CPU時間和系統資源。所以需要采用多線程與通訊事件結合的方法,以提高程序的執行效率并減少系統的資源消耗。

        建立起來之后,創建一個線程專門進行串口的讀操作。在該線程內部通過調用Windows CE平臺提供的API函數WaitCommEvent來等待通信事件的發生,當串口上沒有數據到來時,WaitCommEvent的內部操作會使該線程被操作系統掛起,從而不占用系統運行時間。當串行通信上有數據到來時,該線程又會被系統調度,轉到運行模式接收串行的數據。這樣從而實現自動高效的接收串行數據。

        對于發送串行數據來說,發送什么數據和什么時刻進行發送都是根據使用的要求來設計,可以把串行通信設計成半雙工或者全雙工式。要在Windows CE下實現全雙工通信需要再建立一個發送線程直接進行向串口發送數據即可,這就在桌面Windows平臺下實現全雙工通信的方式有所不同,在桌面 Windows下串行通信的全雙工通信不能直接使用兩個線程同時進行接收,只能通過重疊I/O的方式進行,否則會因為讀“線程”的對串口資源的等待而造成 “寫線程”發生“死鎖”的現象。但在Windows CE下由于其線程調度機制的不同,不需要使用也不支持重疊I/O的方式,讀寫兩個線程可以同時“并行”而并不會發生“死鎖”[5]。具體的分析可以參考文獻5的關于Windows CE線程調用的分析,在這里由于篇幅的關系就不做詳述。通過上面的分析可以看出在Windows CE下實現串行通信全雙工通信比桌面Windows 平臺下編程更為簡單,通信的實時性、效率也更高。

        1.3 在Windows CE內部全部使用Unicode 編碼,發送字符串時要進行編碼轉換

        由于Windows CE的內核全部是采用Unicode編碼來編寫的,即不同于ANSI的單個字節進行編碼的方式,所以通過串行通信發送字符串時,需要在兩種編碼之間進行轉換。對于ASCII字符可以把單個字節的字符通過在高字節補零直接擴展為兩個字節,對于非ASCII字符則可以通過調用Windows CE的API函數MultiByteToWideChar及WideCharToMultiByte來實現非Unicode字符向Unicode字符的轉換。

        2 Windows CE系統設備與組成的串口通信的實現

        由上面的分析可知,Windows CE系統對串行通信提供了強有力的支持。通過在應用程序中使用多線程并結合其串行通信API就可以很方便的實現全雙工或半雙式形式的串行通信。針對 提供的串行通信功能較簡單,編程不方便的特點,需要在Windows CE設備一端設計出更靈活并適合于通信的通信方式來完成其的通信要求。具體到數控切紙中應用中,PC104是上位機即Windows CE設備,當與PLC進行通信時,由于操作命令和用戶輸入都由是上位機發起的,通過實現一種PC104發起PLC應答的半雙工的串行通信方式就可以滿足對的電氣和運動控制的需要,并且較之全雙工的通信方式也更節約系統資源。下面就對PLC端的串行通信形式和特點做一下說明。并對Windows CE設備與PLC結合進行通信的程序流程和通信協議進行詳細的分析。

        2.1 PLC端的通信協議的分析

        對于PLC來講,市場上主流PLC的都提供基本相近的通信功能,本文就舉三菱公司的FX2n系列PLC對其的串行通信進行說明。根據使用的通信模塊與協議不同FX2n系列PLC的串行通信可以有分為以下兩種通信模式[3][4]:

        1)專有協議的串行通信方式

        在這種通信方式下,無須使用梯形圖,通信發起端可以直接讀寫操縱PLC內部的單元,但必須通過PLC指定的通信協議(dedicated protocol),通信的效率較低,實時性不夠,上下位機的獨立性不夠好。

        2)無協議串行通信方式(RS指令方式)

        這種通信方式使用專用通信模塊FX2N-232-DB與PLC連接,在PLC的梯形圖程序中采用RS指令方式來驅動串行通信。RS指令舉例如下表所示:

        RS

        D200

        D2

        D100

        D1

        通信指令

        發送數據地址

        發送個數

        接收數據地址

        接收個數

        通過RS指令可自定義通信協議,通信過程簡單,系統實時性高。對嵌入式系統來說通常要采用在該協議下完成的串行通信。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 朝阳县| 涿鹿县| 浑源县| 南溪县| 祁阳县| 莎车县| 孝义市| 三穗县| 杭州市| 巩义市| 德化县| 栾川县| 赫章县| 仁寿县| 綦江县| 获嘉县| 连江县| 长治县| 疏勒县| 自治县| 威信县| 黄石市| 襄汾县| 饶平县| 宝山区| 仲巴县| 定南县| 富源县| 德兴市| 都匀市| 武安市| 明溪县| 西乡县| 孟津县| 小金县| 个旧市| 靖远县| 正宁县| 澜沧| 鸡泽县| 佛学|