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 /
|