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

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

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

Windows下串行通信的全双工通信不能直接使用两个线程同时进行接收,只能通过重叠I/O的方式进行,否则会因为读“线程”的对串口资源的等待而造成 “写线程”发生“死锁”的现象。但在Windows CE下由于其线程调度机制的不同,不需要使用也不支持重叠I/O的方式,读写两个线程可以同时“并行”而并不会发生“死锁”[5]。具体的分析可以参考文献5的关于Windows CE线程调用的分析,在这里由于篇幅的关系就不做详述。通过上面的分析可以看出在Windows CE下实现串行通信全双工通信比桌面Windows 平台下编程更为简单,通信的实时性、效率也更高。

1.3 在Windows CE内部全部使用Unicode 编码,发送字符串时要进行编码转换

由于Windows CE的内核全部是采用Unicode编码来编写的,即不同于ANSI的单个字节进行编码的方式,所以通过串行通信发送字符串时,需要在两种编码之间进行转换。对于ASCII字符可以把单个字节的字符通过在高字节补零直接扩展为两个字节,对于非ASCII字符则可以通过调用Windows CE的API函数MultiByteToWideChar及WideCharToMultiByte来实现非Unicode字符向Unicode字符的转换。

2 Windows CE系统设备与PLC组成的串口通信的实现

由上面的分析可知,Windows CE系统对串行通信提供了强有力的支持。通过在应用程序中使用多线程并结合其串行通信API就可以很方便的实现全双工或半双式形式的串行通信。针对PLC 提供的串行通信功能较简单,编程不方便的特点,需要在Windows CE设备一端设计出更灵活并适合于PLC通信的通信方式来完成其的通信要求。具体到数控切纸中应用中,PC104是上位机即Windows CE设备,当与PLC进行通信时,由于操作命令和用户输入都由是上位机发起的,通过实现一种PC104发起PLC应答的半双工的串行通信方式就可以满足对数控切纸机的电气和运动控制的需要,并且较之全双工的通信方式也更节约系统资源。下面就对PLC端的串行通信形式和特点做一下说明。并对Windows CE设备与PLC结合进行通信的程序流程和通信协议进行详细的分析。

2.1 PLC端的通信协议的分析

对于PLC来讲,市场上主流PLC的都提供基本相近的通信功能,本文就举三菱公司的FX2n系列PLC对其的串行通信进行说明。根据使用的通信模块与协议不同FX2n系列PLC的串行通信可以有分为以下两种通信模式[3][4]:

1)专有协议的串行通信方式

在这种通信方式下,无须使用梯形图,通信发起端可以直接读写操纵PLC内部的单元,但必须通过PLC指定的通信协议(dedicated protocol),通信的效率较低,实时性不够,上下位机的独立性不够好。

2)无协议串行通信方式(RS指令方式)

这种通信方式使用专用通信模块FX2N-232-DB与PLC连接,在PLC的梯形图程序中采用RS指令方式来驱动串行通信。RS指令举例如下表所示:

RS

D200

D2

D100

D1

通信指令

发送数据地址

发送个数

接收数据地址

接收个数

通过RS指令可自定义通信协议,通信过程简单,系统实时性高。对嵌入式系统来说通常要采用在该协议下完成的串行通信。

2.2 双方通信程序的设计

根据对数控切纸机控制系统的机械、电气、开关量等控制要求,上下位机之间要就多种不同的数据、指令进行交互。并且这些数据、指令的数据位的长度不同。举其中的机器状态、机器参数、控制命令三种常见的指令为例。机器状态要求下位机不间断发送的机器的实时状态,一般包含数据量不大。机器参数往往是在开机发送或者重新设置了机器的参数时发送,机器参数的数据个数较多,但发送的次数较少。控制命令,只有操作者通过控制面板上的操作时才会发送,它发送的内容也不多,发送频率也较低。但由于使用Fx2n PLC的RS数据通信时,在每次进行通信时,必须知道本次要接收内容的个数。如果把不同类型的数据采用定长结构的发送方式,程序设计起来较为简单,但是其中包含了大量的无用数据,发送的效率较低。所以在进行PLC通信时,定义了下面的通信的协议形式:

本次通信标志

下次发送的个数

本次发送内容

结束标志

其中协议中具体含义如下表所示:

协议内容

含义

本次通信标志

AA:机器状态

AF:机器参数

AC:控制命令

下次发送的个数

用于PLC确定下次接收的个数

本次发送内容

DATA

结束标志

FF

表2 通信协议的格式

这样,通过在本次通信中加入下次通信的个数,在PLC端可以通过程序判定确定下次发送内容的个数,进行处理。这样可以提高发送的效率,保证数据的实时性。具体的发送流程如下图所示。

图3 通信流程图

2.3 对数据接收缓冲区的处理

通过研究Windows CE提供的驱动程序代码可以看出,驱动程序通过维护内部的软件缓冲区来保障当应用程序不能及时

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

网站地图

Top