<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Windows CE設(shè)備與PLC串行通信的實現(xiàn)

          Windows CE設(shè)備與PLC串行通信的實現(xiàn)

          作者: 時間:2012-03-26 來源:網(wǎng)絡(luò) 收藏

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

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

          當(dāng)建立起來之后,創(chuàng)建一個線程專門進行串口的讀操作。在該線程內(nèi)部通過調(diào)用Windows CE平臺提供的API函數(shù)WaitCommEvent來等待通信事件的發(fā)生,當(dāng)串口上沒有數(shù)據(jù)到來時,WaitCommEvent的內(nèi)部操作會使該線程被操作系統(tǒng)掛起,從而不占用系統(tǒng)運行時間。當(dāng)串行通信上有數(shù)據(jù)到來時,該線程又會被系統(tǒng)調(diào)度,轉(zhuǎn)到運行模式接收串行的數(shù)據(jù)。這樣從而實現(xiàn)自動高效的接收串行數(shù)據(jù)。

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

          1.3 在Windows CE內(nèi)部全部使用Unicode 編碼,發(fā)送字符串時要進行編碼轉(zhuǎn)換

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

          2 Windows CE系統(tǒng)設(shè)備與組成的串口通信的實現(xiàn)

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

          2.1 PLC端的通信協(xié)議的分析

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

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

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

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

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

          RS

          D200

          D2

          D100

          D1

          通信指令

          發(fā)送數(shù)據(jù)地址

          發(fā)送個數(shù)

          接收數(shù)據(jù)地址

          接收個數(shù)

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



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();