Windows CE設備與PLC串行通信的實(shí)現
1.2 使用多線(xiàn)程和通訊事件來(lái)的編程方法
對于桌面Windows來(lái)說(shuō),串行通信有查詢(xún)、重疊I/O、及事件驅動(dòng)的三種編程方法可供選擇,由于Windows CE不支持重疊I/O方式,并且考慮到對于接收串口數據來(lái)說(shuō),由于串行通信數據到來(lái)的時(shí)刻通常是隨機的,采用查詢(xún)方式來(lái)讀取串口的內容將非常浪費嵌入式系統寶貴的CPU時(shí)間和系統資源。所以需要采用多線(xiàn)程與通訊事件結合的方法,以提高程序的執行效率并減少系統的資源消耗。
當串行通信建立起來(lái)之后,創(chuàng )建一個(gè)線(xiàn)程專(zhuān)門(mén)進(jìn)行串口的讀操作。在該線(xiàn)程內部通過(guò)調用Windows CE平臺提供的API函數WaitCommEvent來(lái)等待通信事件的發(fā)生,當串口上沒(méi)有數據到來(lái)時(shí),WaitCommEvent的內部操作會(huì )使該線(xiàn)程被操作系統掛起,從而不占用系統運行時(shí)間。當串行通信上有數據到來(lái)時(shí),該線(xiàn)程又會(huì )被系統調度,轉到運行模式接收串行的數據。這樣從而實(shí)現自動(dòng)高效的接收串行數據。
對于發(fā)送串行數據來(lái)說(shuō),發(fā)送什么數據和什么時(shí)刻進(jìn)行發(fā)送都是根據使用的要求來(lái)設計,可以把串行通信設計成半雙工或者全雙工式。要在Windows CE下實(shí)現全雙工通信需要再建立一個(gè)發(fā)送線(xiàn)程直接進(jìn)行向串口發(fā)送數據即可,這就在桌面Windows平臺下實(shí)現全雙工通信的方式有所不同,在桌面 Windows下串行通信的全雙工通信不能直接使用兩個(gè)線(xiàn)程同時(shí)進(jìn)行接收,只能通過(guò)重疊I/O的方式進(jìn)行,否則會(huì )因為讀“線(xiàn)程”的對串口資源的等待而造成 “寫(xiě)線(xiàn)程”發(fā)生“死鎖”的現象。但在Windows CE下由于其線(xiàn)程調度機制的不同,不需要使用也不支持重疊I/O的方式,讀寫(xiě)兩個(gè)線(xiàn)程可以同時(shí)“并行”而并不會(huì )發(fā)生“死鎖”[5]。具體的分析可以參考文獻5的關(guān)于Windows CE線(xiàn)程調用的分析,在這里由于篇幅的關(guān)系就不做詳述。通過(guò)上面的分析可以看出在Windows CE下實(shí)現串行通信全雙工通信比桌面Windows 平臺下編程更為簡(jiǎn)單,通信的實(shí)時(shí)性、效率也更高。
1.3 在Windows CE內部全部使用Unicode 編碼,發(fā)送字符串時(shí)要進(jìn)行編碼轉換
由于Windows CE的內核全部是采用Unicode編碼來(lái)編寫(xiě)的,即不同于A(yíng)NSI的單個(gè)字節進(jìn)行編碼的方式,所以通過(guò)串行通信發(fā)送字符串時(shí),需要在兩種編碼之間進(jìn)行轉換。對于A(yíng)SCII字符可以把單個(gè)字節的字符通過(guò)在高字節補零直接擴展為兩個(gè)字節,對于非ASCII字符則可以通過(guò)調用Windows CE的API函數MultiByteToWideChar及WideCharToMultiByte來(lái)實(shí)現非Unicode字符向Unicode字符的轉換。
2 Windows CE系統設備與PLC組成的串口通信的實(shí)現
由上面的分析可知,Windows CE系統對串行通信提供了強有力的支持。通過(guò)在應用程序中使用多線(xiàn)程并結合其串行通信API就可以很方便的實(shí)現全雙工或半雙式形式的串行通信。針對PLC 提供的串行通信功能較簡(jiǎn)單,編程不方便的特點(diǎn),需要在Windows CE設備一端設計出更靈活并適合于PLC通信的通信方式來(lái)完成其的通信要求。具體到數控切紙中應用中,PC104是上位機即Windows CE設備,當與PLC進(jìn)行通信時(shí),由于操作命令和用戶(hù)輸入都由是上位機發(fā)起的,通過(guò)實(shí)現一種PC104發(fā)起PLC應答的半雙工的串行通信方式就可以滿(mǎn)足對數控切紙機的電氣和運動(dòng)控制的需要,并且較之全雙工的通信方式也更節約系統資源。下面就對PLC端的串行通信形式和特點(diǎn)做一下說(shuō)明。并對Windows CE設備與PLC結合進(jìn)行通信的程序流程和通信協(xié)議進(jìn)行詳細的分析。
2.1 PLC端的通信協(xié)議的分析
對于PLC來(lái)講,市場(chǎng)上主流PLC的都提供基本相近的通信功能,本文就舉三菱公司的FX2n系列PLC對其的串行通信進(jìn)行說(shuō)明。根據使用的通信模塊與協(xié)議不同FX2n系列PLC的串行通信可以有分為以下兩種通信模式[3][4]:
1)專(zhuān)有協(xié)議的串行通信方式
在這種通信方式下,無(wú)須使用梯形圖,通信發(fā)起端可以直接讀寫(xiě)操縱PLC內部的單元,但必須通過(guò)PLC指定的通信協(xié)議(dedicated protocol),通信的效率較低,實(shí)時(shí)性不夠,上下位機的獨立性不夠好。
2)無(wú)協(xié)議串行通信方式(RS指令方式)
這種通信方式使用專(zhuān)用通信模塊FX2N-232-DB與PLC連接,在PLC的梯形圖程序中采用RS指令方式來(lái)驅動(dòng)串行通信。RS指令舉例如下表所示:
RS | D200 | D2 | D100 | D1 |
通信指令 | 發(fā)送數據地址 | 發(fā)送個(gè)數 | 接收數據地址 | 接收個(gè)數 |
通過(guò)RS指令可自定義通信協(xié)議,通信過(guò)程簡(jiǎn)單,系統實(shí)時(shí)性高。對嵌入式系統來(lái)說(shuō)通常要采用在該協(xié)議下完成的串行通信。
評論