微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Windows CE设备与PLC串行通信的实现

Windows CE设备与PLC串行通信的实现

时间:03-26 来源:互联网 点击:

Windows CE操作系统是微软公司针对嵌入式系统的特点如内存容量小、运行速度低、实时性要求高等,而设计出的一种紧凑、高效、模块化的嵌入式实时操作系统。 Windows CE可以提供桌面Windows绝大多数系统服务与功能,同时又保持系统体积很小的特点并可以支持应用程序的实时应用。它还支持数据库、 COM(Component Object Model)、Internet等功能的开发,可以使用标准的Windows控件来完成界面设计。支持众多的标准设备接口,并能够移植到多种嵌入式CPU 架构中。选择Windows CE作为嵌入式产品的操作系统较之现有嵌入式系统中软件结构上多采用DOS系统或者无操作系统而言,可以极大的提升了产品的功能,增加用户界面的美观程度,并大大减少了程序开发的工作量。基于上述优点在数控切纸机控制系统设计中可以把Windows CE的设备与PLC相结合使用,构成上下位机系统。如图1所示,上位机由PC104构成,通过在PC104上移植Windows CE系统使其成为Windows CE设备,这样就可以充分利用Windows CE强大的系统功能来完成控制系统中的控制功能程序开发和用户界面设计。下位机通过使用PLC来完成的各种电气控制功能。上下位机之间通过通信的方式来实现控制信息和机器状态信息的交换。高速、实时、稳定的通信是保证系统稳定运行、工作可靠的关键,在结合PLC的特点基础之上,具有普遍性高、编程简单、实时性好等特点的串行通信是上下位机通信形式的一种理想选择方案。下面就Windows CE下如何与PLC实现串行通信的这一问题进行详细的分析。

图1 上下位机系统结构

1 WINDOWS CE下实现串行通信的特点

Windows CE的设计目标就是为了满足嵌入式系统和移动设备的使用需要,所以其系统本身的通信功能比较强大。市场上主流的Windows CE的5.0版本主要提供了三种主要的通信形式:串行通信、网络(其中包括WinSock和TCP/IP)、电话API (TAPI)[1]。在工业控制领域串行I/O和网络通信的使用较多,其中串行通信几乎在所有嵌入式的设备中提供物理器件的支持,硬件电路实现也比较简单。通过研究TCP /IP网络通信和串行通信在ISO通信模型中的描述,如图2所示,可以看出串行通信模型比网络通信模型的实现要简单的多。操作系统只需要实现Data- link layer中的驱动程序和Serial API函数的封装即可,不需要其它的协议支持,这样就使串行通信应用程序的开发要相对简单,系统调用也较少。对于嵌入式环境来说,意味着需要更少的软、硬件资源的开销,也就等于提高了系统的快速性和实时性。

图2 Windows CE通信的ISO模型

1.1 Windows CE提供了完善的串行通信API支持

在Windows CE平台下提供了与桌面Windows平台一致的串行通信操作API[2]。使用这些API可以用于打开、关闭和操作串口,传输和接收数据,以及管理串行连接等。掌握和使用好下面的API函数是串行通信程序设计成败的关键,其中主要使用有API函数及功能如下表所示:

函数名

功能

CreateFile

用于打开串口

SetCommState

按定义的DCB结构配置通信设备

SetCommTimeOuts

设置通信设备上所以读写操作的超时参数

ReadFile

向串口读数据

WriteFile

向串口写数据

SetCommMask

设置通讯设备的事件掩码值

WaitCommEvent

等待通信设备发生指定的事件

PurgeComm

清空通信缓存及通信错误

CloseHandle

关闭打开的串行口

表1 Serial Communication API

1.2 使用多线程和通讯事件来的编程方法

对于桌面Windows来说,串行通信有查询、重叠I/O、及事件驱动的三种编程方法可供选择,由于Windows CE不支持重叠I/O方式,并且考虑到对于接收串口数据来说,由于串行通信数据到来的时刻通常是随机的,采用查询方式来读取串口的内容将非常浪费嵌入式系统宝贵的CPU时间和系统资源。所以需要采用多线程与通讯事件结合的方法,以提高程序的执行效率并减少系统的资源消耗。

当串行通信建立起来之后,创建一个线程专门进行串口的读操作。在该线程内部通过调用Windows CE平台提供的API函数WaitCommEvent来等待通信事件的发生,当串口上没有数据到来时,WaitCommEvent的内部操作会使该线程被操作系统挂起,从而不占用系统运行时间。当串行通信上有数据到来时,该线程又会被系统调度,转到运行模式接收串行的数据。这样从而实现自动高效的接收串行数据。

对于发送串行数据来说,发送什么数据和什么时刻进行发送都是根据使用的要求来设计,可以把串行通信设计成半双工或者全双工式。要在Windows CE下实现全双工通信需要再建立一个发送线程直接进行向串口发送数据即可,这就在桌面Windows平台下实现全双工通信的方式有所不同,在桌面

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top