利用DDE接口实现Kingview5.0组态软件环境下远程监测

 

利用DDE接口实现Kingview5.0组态软件环境下远程监测

 “组态王5. 0” ?穴以下简称“组态王”?雪是运行于 Microsoft Windows95/98/NT中文平台的全中文界面的组态软件。它集成近两百种驱动程序,支持大量的国内外流行的 PLC,智能仪表,板卡,变频器,使其能十分方便,快治的开发工控软件。

我们在使用“组态玉”来编制一个带有CAN总线监控节点的监控程序时遇到一个问题:“组态王”没有提供适合我们用的I/O设备的驱动程序。然而“组态王”提供了 DDE动态数据链接接口。我们可以编制一个起桥梁作用的程序来和硬件设备打交道,然后通过DDE与“组态王”进行数据交换。通过使用该法上述问题得到较好地解决。

系统概况:

在一项目中,我们有一项任务是对一较远距离的锅炉进行监控。主要是对锅炉生产中的

气鼓水位,蒸汽流量,蒸汽压力,给水流量,炉膛温度五个过程参数进行测量、记录、显示。由于距离较远,采用分布式控制系统,该部分结构图如下:

图1 下位机硬件结构图

对锅炉有关数据的数据采集是由一个以单片机 P80C592为核心的下位机完成的。P80C592是一种功能很强的8位微处理器,它以80C51为中央处理单元,芯片内集成CAN控制器,可为网络节点与PC机联网提供硬件支持,并且内部还有8路模拟量输入的 lO位ADC变换器,两个标准的16位定时/计数器等资源。从现场变送器送来的气鼓水位,蒸汽流量,蒸汽压力等经过处理变成5VDC信号接到P80C592的ADC输入引脚, P80C592对各信号进行定时采集、处理,并将处理好的值发送到上位机。上位机是一台工业控制机。其通过一块研华公司的C州接口卡PCL-841和下位机通信,通信介质为双绞线。 PCL-841提供两个通信端口,两个端口都可以收发数据,其中收发数据可以采用查询或中断方式; CAN控制器是82C200: CAN收发器是82C250:采用光隔离方式:提供4KB RAM作为通信缓冲区,操作时,用户通过软硬件设置将卡上的双端口RAM映射成 PC机的物理内存,这样用户收发数据就相当于直接向内存读写数据,从而极大地提高了通信卡和PC总线的数据交换速率。

图2 数据接收流程图

但是“组态王5. 0” 中板卡设备的配置一项中没有PCL-841,也就是说无法直接用组态软件来和我们自己开发的下位机交换数据。然而,研华公司为 PCL-841板卡提供了 DLL形式的驱动程序,它包括了初始化板卡,发送、接收帧数据等函数,我们采取的解决办法是编制一个接口程序来驱动PCL-841和下位机通信,然后通过DDE接口将数据传送给“组态王”。

接口程序和下位机的通信

P80C592对各信号进行定时采集、处理,并将处理好的值即5个十位二进制共50个比特放在连续的7个字节缓冲区中,待到上位机定时向其发送远程帧请求数据时,中断响应主机命令,从中抽出对应主机的 ID地址,填入帧头,发送时将7字节缓冲区内数据依次取出组成数据帧发送到上位机。如果采集来的数据经分析后发现有超越允许限度的时候,不等上位机向其发送远程帧请求数据直接向上位机发送用于报警的数据帧以下简称报警帧雪,向监控人员报警。正常数据帧,用于报警的数据帧用ID号区别开来。

上位机定时向下位机发送远程帧请求数据,接收数据采用查询的形式。为了及时收到下位机发送来的数据,查询程序采用的是多线程的方式实现。查询线程中的流程如下:

“组态王5. 0” 和接口程序动态数据交换

DDE动态数据交换是 WINDOWS平台上的一个完整通信协议,它使应用程序能彼此交换数据和发送指令。它的过程可以比喻成两个人的对话,一方向另一方提出问题,然后等待回答。提问的一方称为“客户”,回答的一方称为“服务器”。一个应用程序可以同时是“客户”和“服务器”,当它向其它程序请求数据的时候,它充当的是客户:若其它程序需要它提供数据,它又成了“服务器”。 DDE对话的内容是通过三个标识名来约定的,即:应用程序名,主题,项目。

在该项目中,“组态王”充当的是“客户”,接口程序充当的是“服务器”。

接口程序考虑到既要能方便地实现多线程的编程,又能方便地实现DDE通信,所以选用Delphi4.0作为编程语言。

Delphi把所有的DDE功能做到四个控件中,它们是:

TDDEClientConv  :用于客户程序建立和维护一个DDE会话

TDDEClientltem  :用于客户程序建立和维护数据交换通道

TDDEServerConv  :用于服务器程序响应DDE会话

TDDEServerItem  :用于服务器程序维护数据交换通道

前两个部件用于生成一个DDE客户程序,后两个部件用于生成一个DDE服务器程序。如果一个应用程序同时拥有这些控件,则这一程序既可以充当DDE客户,也可以充当DDE服务器。

本接口程序中目前只是将下位机的数据传送到组态软件,所以接口程序只作为“服务器”,如果以后需要将命令或数据由“组态软件”发向下位机,还可以添加“客户程序”,完成数据的双向传送。

在Delphi中创建一个DDE服务器程序,必须要把一个TDDEServerItem控件添加到窗体中。 TDDEServerItem控件的text或 Lines属性包含了要联接的数据。如果服务器是一个Delphi应用程序,缺省情况下主题是包含欲联接数据窗体的标题。如果服务器使用了TDDEServerConv控件,则要求使用控件TDDEServerConv的名称作为DDE主题。在下列情况下使用TDDEServerConv控件成为必要:

1.拥有 TDDEServerItem控件窗体的标题可能在运行时改变或可能有其它窗体拥有同样的标题。在这种情况下DDE联接可能无法建立:

2.DDE客户程序可能会向你的服务器程序发送一条宏命令。在这种情况下只有拥有一个TDDEServerConv控件才能响应OnMacroExecute事件并执行相应的动作。

本例的接口程序中使用了两条 DDE通道,一条用来传送五个过程变量的值,其使用一个TDDEServerConv控件和一个TDDServerItem控件分别命名为 DDEValueTopic和DDEValueItem。其中DDEValueTopic.ServerConv:=DDEValueItem另一条传送报警信息,也使用上述两控件分别名为DDEAlarmTopic和DDEAlrmItem,其中DDEAlarmTopic .ServerConv:=DDEAlarmItem。

在组态软件一边,“组态王”能够和其它支持动态数据交换?穴DDE?雪的应用程序方便的交换数据。“组态王”在和应用程序进行DDE连接时,需在数据字典里新建一个I/O实数变量,并登记服务器程序的三个标志名,即应用程序名为接口程序的文件名去掉.EXE,主题名为接口程序中TDDEServerConv控件的名称,项目名为接口程序中TDDEServerItem控件的名称。这样当建立起连接后,作为服务器的接口程序中的数据就会动态地传送到“组态软件”中进行记录、显示、报警等。

本项目中,下位机有五个不同参数需要传递给组态软件。因为所传送的参数随时间的变化不大,所以我采用类似通信中的“时分复用”的方法,通过一条DDE通道分时传送五个参数。当然,为了组态软件能够对传送的数据进行区分,还需对数据进行“调制”。使各参数的值之间不相互重叠。具体过程如下:

下位机将定时采集的数据即五个十位二进制数组成一个数据位为七个字节的数据帧向上位机传送,接口程序中的接收线程将下位机采集的数据接收上来,先还原成五个十位二进制数,再将五个十位二进制数转换成五个0?觸5之间的浮点数存入事先定义好的五个变量中。

在接口程序中使用一个定时器控件,定时时间为100ms。每隔100ms通过DDE方式传送一个参数的值,如第一个100ms传送气鼓水位的值,其值在0?觸5之间,第二个100ms先将蒸汽流量的值加10,使其值在10?觸15之间,再通过DDE方式传送,以此类推,直至第五个l00ms线将炉膛温度的值加40,使其值在40?觸45之间再以DDE方式传送。如此不停的循环传送,其程序如下:

procedure TForm1. Timer1Timer(Sender: T0bject);

var

 Tempvalue: real;

begin

flag:=flag+1;//flag为全局变量,初始值为O,

    if flag=6 then

    flag=1;

//Value数组中分别存放气鼓水位,蒸汽流量等五个参数的值

    TempValue:=value(flag)(flag-1)*l0;

    DDEValueItem.text:=floattostrf,TempValue,fffixed,5,3

end

在组态软件一边,通过DDE方式和接口程序相连的I/O实型变量的值随着接口程序不断发送的新值动态的改变。在“组态王”中有“数据改变命令语言”和变量相连。在变量的变化范围超出数据字典所定义的变化灵敏度时,它就执行一次。由于接口程序向“组态王”发送数据时进行了调制,各过程参数值至少相差数值5,可设和接口程序相连的 I/O实型变量的变化灵敏度为5。在组态软件中再定义五个内存实型变量分别对应气鼓水位,蒸汽流量等五个参数。每当接口程序发送一新的数据时,必将触发执行一次“数据改变命令语言”。在“数据改变命令语言”中编写如下程序:如果 I/O实数的值在0*5之间则必为气鼓水位的值,再将其按要求转换成实际的工程量赋给内部变量气鼓水位。如果值在10*15之间必为蒸汽流量的值,然后按要求转换成实际的工程量赋给内部I/O变量蒸汽流量。其它以此类推。

以上各步骤实现了将下位机中的数据传送到组态软件,这样“组态王”的其它组件可以对各数据进行显示,制作报表等操作。其中每个参数的发送间隔为 l00ms×5即500ms。对于该项目中的这些慢速信号是可以满足要求的。实践证明,该方法在有多个诸如温度,流量等工业中常见的慢速过程参数需要传递时是十分有效的。

如果,有些参数的更新速度较快,需要传送的频率更高,可采用如下办法:比如该项目中的气鼓水位需要以更快的速度传送,可第一个100ms发送气鼓水位,第二个100ms发送蒸汽流量,第三个100ms为给水流量,第四个又为气鼓水位,然后依次是炉膛温度和炉膛压力,如此往复循环。这样,对于气鼓水位的发送问隔加快为300ms。当然,这样最快也要两倍发送间隔对于上例为200ms。

若还要更快,可考虑再增加 DDE通道给其专用。对于接口程序来说这需再增加TDDEServerConv和TDDEServeritem控件,组态软件中也要增加一个和其相连的 I/O变量。在本实例中,下位机所发送的报警信号就是通过专用的DDE通道由接口程序发送到“组态王”。

结束语

在上述实例中由于对组态软件DDE接口的灵活应用,我们扩展了“组态王”的功能,也使我们的应用程序界面得到了大大的丰富。同时所提出的用一条DDE通道分的传输多个慢速数据的方法为以后系统扩展有更多数据需要传送提供了一种有效的解决办法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值