服务热线:
您当前的位置:首页 > 知识库 > DDE 技术

PC与PLC的动态数据交换(DDE)研究

2011/9/8 13:50:00

 

摘要:阐述了PC与PLC进行DDE通信的基本方法,说明了PLC进行DDE通信的软硬件实现方法。给出VC6.0与DDE Server进行DDE通信的编程方法,通过实例说明该方法的灵活性。

关键词:PLC 动态数据交换 服务器

 

  随着PLC性价比的不断提高,其应用范围不断扩大,特别是近年来,PLC向着大型网络化方向发展,已经迅速渗透到钢铁、化工、电力、制造、运输等各个行业中。针对PLC编程、计算能力有限及PC大量应用的情况,PC与PLC的结合使用就成为一个必然趋势。这就给用户带来一个新的问题:如何管理系统中大量的过程数据。PC在这一方面的功能是强大而完善的,主要的数据通信方式有DDE,OLE,ActiveX等等。而PLC在这方面能力较弱,目前主要使用DDE和DLL两种方法。

  动态数据交换(DDE)是Windows操作系统一直保持兼容的一种应用程序间的数据通信方式。虽然随着OLE,ActiveX技术的发展,这种通信方式已经很少有人使用,但是,对于很多直接和硬件打交道的应用程序,尤其是PLC编程软件,是一种较为可靠的通信方式,所以这种通信方式始终没有被Windows淘汰。本文主要介绍使用VC6.0软件在Windows下实现PC与西门子PLC的DDE通信方法。

 

1 DDE概述


  DDE基于用户/服务器原则,通过建立应用程序间的对话连接,根据不同的主题和项目进行数据通信。为了从服务器获取数据,用户使用一种固定的3级特殊访问方式,这3级访问分别为:服务(Service)、主题(Topic)和数据项(Item)。Service表示服务器名称,Topic用来限制用户访问数据的范围,Item则表示访问数据的项目。用户程序根据这3级访问与服务器建立DDE对话连接,在程序执行过程中进行实时数据交换。

  对于PLC而言,它不但要求具有能够实现数据通信方式的服务器软件,还要提供模块数据通信的硬件支持,所以其数据通信要求高于一般的高级应用程序。完整的西门子PLC的DDE数据通信过程为:首先安装、测试DDE Server(DDE服务器名称)的软硬件,然后在Windows下使用DDE Server软件进行服务器组态。用户程序同时进行DDE初始化、DDE对话连接,设置通信工作流程等,直至取消DDE对话连接等编程工作。最后同时运行用户程序和DDE Server就可实现DDE通信。

 

2 DDE Server软硬件安装方法

  
  不同的PLC硬件平台所使用的DDE数据通信硬件设备也不同,本文介绍的数据通信方法是针对S7 300系列PLC而言的。将PC的串口与PLC的MPI口对接即可,从软盘上安装数据通信的软件应用程序Simatic DDE Server,在安装过程中设置PC与PLC的硬件连接。DDE Server程序同时提供一个测试驱动器((Test Driver),利用这个驱动器可以测试PLC的DDE服务器是否安装成功。

 

3 DDE Server组态方法


  不同的操作系统下数据通信的设置方法也不一样。对于Windows95或以上版本,安装并测试Simatic DDE Server后,按照以下方法设置DDE通信:选择Options-Configuration菜单起动组态对话框,选择mpi.drv驱动器,确认后PLC即可与具有DDE通信能力的PC用户程序进行数据通信。在组态过程中,还可以对PLC数据通信协议、循环时间等参数进行设置。

 

4 DDE对话编程方法


  在完成了PLC的DDE数据通信安装与设置后,就要在用户程序中进行编程,建立DDE对话,控制数据通信流程。不同的用户应用程序可以采用不同的软件和函数实现DDE通信,本文介绍VC6.0的DDE通信方式。事实上,VC6.0并不直接与DDE Server进行DDE对话,它是通过Windows操作系统提供的DDEML(DDE通信管理库)来管理DDE通信具体工作的。该管理库的使用方法如下。

 

首先要进行DDEML的初始化工作:
#include‘ddeml.h,//连结头文件
UINTDdeEnabled=Ddelnillalize
(&idInst,//实例标识句柄
(PFNCALLBACK)
MakeProclnstance(FARPROC)
ClientDdeCallback,
AfxGetlnstanceHandle()),
//DDE用户回调程序
APPCMD_CLIENTONLY,O);
if(DdeEnabledl=
DMLERR_NO ERROR)//创建失败
returnFALSE;

 

  然后按照DDE Server提供的3级访问方式建立VC与DDEServer的对话。此时Service为ddeplc;Topic有两种:default和system,使用de-fault可以访问PLC系统过程数据、使用system可以获得DDE Server的相关信息,实际当中Topic多采用default;Item根据Topic的不同而不同。通过选择不同的Item及相应DDE函数可以完成接收过程数据、发送控制命令、获取系统状态等工作。建立对话连接的方法如下。

ghszService=
DdeCreateStringHandle
(idInst,"ddeplc",CP_WINANSI);
ghszTopic=DdeCreateStringHandle
(idlnst,default",CP_WlNANSI)
ghConV=DdeConnect(idlnst,
ghszService,ghszTopic,NULL);

  经过以上两个步骤后就可以进行正式的,DDE对话,PC与PLC开始实际的数据通信过程。PLC能够接受的交互信息可以分为两类:一是系统设置命令;二是数据读写请求。下面给出用VC6.0实现的两种数据通过DDE通信例子。

4.1 设置命令的DDE传输
  设置循环时间(polling cycle time)为100ms,为达到这个目的,选择Item为poll,编程语句如下,注意在传递系统设置命令时要采用XTYP_EXECUTE这一参数:
HSZhand=DdeCreateStrinflHandle
(idlnst,"poll=100",CP_WlNANSI);
if(hhand!=0L)
DdeClientTransaction
(NULL,0,ghConv,hand,CF_TEXT,
XTYP_EXECUTE,1000,NULL);

4.2 数据读写请求命令的DDE传输
  假设现在需要获取数据块10的前8个字节信息,传输使用的函数与上一种方法相同,但是注意此时必须使用XTYP_REQUEST参数。另外,PC与PLC进行过程数据交互有两种方法:一是通过符号文件访问;二是绝对访问。符号文件是过程变量符号访问方式的ASCn码文件,以sig为文件后缀。用户首先将该文件装入DDE Server,DDE Server开始运行后读取该符号文件,用户就可以使用文件中的符号名作为Item进行数据通,信。该文件的每一项包括3个内容:变量名、数据类型和相应PLC系统地址。符号文件格式如下。

Byte dataname[8]=db[10][8]
数据读取过程如下(dataname为当前的Item):
HSZ hand=DdeCreateStringHandle
(idInst"load(c:\*.sig)",CP_WINANSI);
if(hand!=OL){
HSZ hand=DdeCreateStringHandle
(idInst,"dataname",CP_WINANSI);
if(hand!=0L){
real=DdeClientTransaction
(NULL,0.ghConv.hand,CF_TEXT,
XTYP_REQUEST,1000,NULL);

  如果使用绝对访问方式,则使用以下Item,其中0表示起始地址,8表示数据长度,KY表示数据类型。

s5addr(1,db,10,0,8,KY)

  如果PLC通过了PC发来的数据读写请求,那么下一步PC就要从PLC得到具体数据进行处理,具体格式如下。

if(real!=0){
DWORD cb=DdeGetData(real,NULL,0.0);
……//数据处理过程

  西门子PLC能实现的通信任务种类很多,针对不同的数据通信任务,PC和PLC有不同的Item与之对应,可在相应的参考资料或在线帮助中查询并按以上方法编程使用。

 

5 结论


从以上的实例可以看出,由于DDE通信方式中各项通信任务完全由用户主动控制,所以通信内容安全可靠,控制流程灵活,而且调试较为简便,错误信息明确,是一种非常适合PC与PLC进行数据通信的方式。

 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |