WinCE系統是微軟操作系統在嵌入式領域的一朵奇葩。自打WinCE出來,就占領了消費量電子,PDA,手機,更在工業自動化行業占有很大的一片市場。與XP,WIN7乃至WIN8系統,同是微軟家族成員,所以,對于WinCE應用開發,跟普通的PC機應用開發,區別不大,所以支持很多開發工具和語言開發。最常用的莫過于 VS2005或者VS2008,里面集成了VC++,C#.net,VB.net等主流語言開發,方便應用編程人員輕松的開發程序。至此,誕生了國內一些做WinCE工業設備的廠家,并提供相應的開發包,例如SDK,函數庫文件等。國內做的比較大的,莫過于深圳揚創科技,軟硬件定制都非常方便,并提供一系列的技術支持,方便工程師快速開發應用程序。
下面介紹深圳揚創科技WinCE系統工業平板電腦,基于VC++編程開發,如何調用CPU的GPIO,輕松實現智能控制工業報警燈,繼電器,智能采集計算器數據等設備。
首先介紹硬件
 
DB25擴展口(此功能選配)
擴展了8路24V IO輸入,8路24V IO輸出(12V也可以);


管腳13的EXT_24V是外部電源24V;管腳21是外部地
輸入輸出電壓為24V
隔離電壓: 輸入端 2500Vrms(Min)
輸出端 2500Vrms(Min)
輸入輸出原理及連接方法
a) 輸入原理及接線
EXT_IN0—EXT-IN7 的輸入原理相同 ,下圖以 EXT_IN0的原理進行說明

圖中 EXT_IN0 為外部輸入,EXT_VDD為外部參考電壓, IN0通過光電隔離轉換后CPU的輸入信號。工作原理為:當EXT_IN0 輸入為高電平時,光耦內部發光二極管兩側無壓差,內部無電流,發光二級管不發光,無法使內部的三極管導通,則輸出信號IN0為高電平,CPU采集到輸入為高;當EXT_IN0 輸入為低電平時,光耦內部發光二極管兩側有壓差,內部有電流,發光二級管發光,使內部的三極管導通,則輸出信號IN0為低電平;CPU采集到輸入為低 。
EXT_IN0—EXT-IN7為8路開關量輸入信號,EXT_VDD為其公共外接電源,開關量地端與外部公共外接電源地端相連。電源可以采用5V-24V,當輸入開關量信號為5V時,可以采用5V供電;當輸入開關量信號為12V時,可以采用12V供電;當輸入開關量信號為24V時,可以采用24V供電。隨之光電隔離內部發光二級管的外接分壓電阻Rin做調整 根據不同的電壓作調整 ,以滿足光電隔離器工作要求,ePC系列工業平板電腦默認的分壓電阻式按照24V調節的。
開關量輸入的接線圖如下:

b) 輸出原理及接線
EXT_OUT0-EXT_OUT7的輸出原理相同,下圖以EXT_OUT0的原理圖進行說明:

圖中右側為對外的輸出信號(EXT_OUT0)及外接電源(EXT_VDD)。其工作原理:當用戶在軟件里面置位OUT0為低電平時,光耦內部發光二級管發光工作,使內部三極管導通,通過光隔后的輸出信號變低電平信號,,反之,OUT0置位為高電平時,光耦內部發光二極管不工作,內部三極管無法導通,通過光隔后的輸出信號EXT_OUT0(被Rout上拉到EXT_VDD)拉成高電平。
EXT_OUT0-EXT_OUT7 為8路開關量輸出信號, EXT_GND為公共地,EXT_VDD為外部外接電源正,Rout 為上拉電阻,工業平板電腦內部集成焊接的阻值是4.7k,開關量輸出可以為5V-24V,當輸入開關量信號為5V時,可以采用5V供電;當輸入開關量信號為12V時,可以采用12V供電;當輸入開關量信號為24V時,可以采用24V供電。
開關量輸出 低電平有效,小型繼電器、警示燈等現場開關設備接法:
接小型繼電器等設備的時候,輸入端請一端接外部電源EXT_VDD,另一端接EXT_OUT,默認上電啟動是EXT_OUT輸入口為高電平,設備兩端沒有壓差,不工作;
進入系統以后可以通過控制EXT_OUT輸出為高低電平來控制設備工作:
- 設置EXT_OUT為低電平時,設備兩端有壓差,電流通過,設備工作;
- 設置EXT_OUT為高電平時,設備兩端沒有壓差,沒有電流通過,設備不工作。

總共有16路IO口,默認配置為8路輸入和8路輸出。
(1)8路輸出
BOOL SetIO (byte level ,byte idNum);
參數說明:
byte level: 0:低電平 1:高電平
byte idNum: 0-7 (分別代表要輸出的IO口號:OUT0 ~ OUT7)
(2)8路輸入
BOOL SetIoMode(int ioNum,int ioMode ,int triggeredMode)
參數說明:
int ioNum: 0-7 (分別代表要設置的IO口號:IN0 ~ IN7)
int ioMode: IO_POLLING_MODE(查詢模式)
IO_INTR_MODE (中斷模式)
int triggeredMode: IO_INTR_LOW_LEVEL_TRIGGERED 低電平觸發
IO_INTR_HIGH_LEVEL_TRIGGERED 高電平觸發
IO_INTR_FALLING_EDGE_TRIGGERED 下降沿觸發
IO_INTR_RISING_EDGE_TRIGGERED 上升沿觸發
IO_INTR_BOTH_EDGE_TRIGGERED 雙沿觸發
函數說明:
SetIoMode是設置8路輸入口的接收方式,分為查詢方式和中斷方式,可以對每一個口單獨配置為查詢或者中斷。
在配置為查詢模式后此函數的第三個參數不起作用,可以設置為任意的整數。
在配置為中斷模式后此函數的第三個參數來設置中斷觸發的模式,總共分為以上5種。
注意:系統中默認使用的8路輸入IO口全是查詢模式,可以通過以上函數設置為中斷方式。
BOOL GetIO(byte& level, byte idNum);
參數說明:
byte& level: 0:得到低電平 1:得到高電平
byte idNum: 0-7 (分別代表要得到的IO口號:IN0 ~ IN7)
IO口模式使用介紹:
查詢模式:系統默認8路輸入IO全是查詢模式,所以如果用戶不需要中斷模式,則可以直接通過GetIO函數來得到相應輸入口的值為高電平還是低電平,不需要用到SetIoMode函數。
中斷模式:系統默認8路輸入IO全是查詢模式,所以如果用戶需要中斷模式,則需要通過SetIoMode函數來設置相應IO口為中斷模式,并且設置相應的中斷觸發方式。設置完成后,如果系統收到中斷,則向應用發送事件,來通知中斷觸發,用戶應用再做相應的處理。事件名稱如下:
IO0事件名稱:io number 0 Intr Event
IO1事件名稱:io number 1 Intr Event
IO2事件名稱:io number 2 Intr Event
IO3事件名稱:io number 3 Intr Event
IO4事件名稱:io number 4 Intr Event
IO5事件名稱:io number 5 Intr Event
IO6事件名稱:io number 6 Intr Event
IO7事件名稱:io number 7 Intr Event
用戶應用中需要建立對應的同名事件,來收到系統的中斷事件。
Note:函數的具體詳細的用法,請看光盤中的示例源碼,目錄:光盤/測試例程/ ParallelIo /
|