DDE是英文Dynamic Data Exchange的缩写,即动态数据交换。它最早是随Windows3.1而被提出的。目前的操作系统中仍然支持DDE技术,但微软已经停止发展该技术,只是保持对DDE技术的继续兼容和支持。
两个同时运行的程序之间通过DDE方式交换数据时是Client/Server关系。一旦Client和Server建立了连接关系,则当Server中的数据发生变化后,就马上通知Client。通过DDE方式建立的数据连接通道是双向的,即Client不但能够读取Server中的数据,而且可以对其进行修改。
Windows操作系统中有一个专门协调DDE通信的程序DDEML(DDE管理库)。实际上,Client和Server之间的多数会话并不是直达对方的,而是经由DDEML中转。一个程序可以同时是Client和Server。
DDE的方式有冷连接(Cool Link)、温连接(Warm Link)和热连接(Hot Link)3种。在冷连接方式下,当Server中的数据发生变化后不通知Client,但Client可以随时从Server读/写数据。在温连接方式下,当Server中的数据发生变化后马上通知Client,Client得到通知后将数据取回。在热连接方式下,当Server中的数据发生变化后马上通知Client,同时将变化的数据直接送给Client。
1.应用程序通过DDE读组态王的数据
新建一个VB工程,添加一个窗体,该窗体命名为“frmViewToVB”。在窗体中添加文本框,如TEXT1表示上水箱液位。而上水箱液位在组态王的数据词典中是“T1LEVEL”,其定义如图所示。
这里要注意,要在“允许DDE”选项前打钩。而且,只有I/O类型的变量才能通过DDE与应用程序通信,内存变量不能通过DDE与应用程序通信。
液位变量定义串口
在VB的应用程序中,在frmViewToVB_LOAD中添加如下代码:
通过上述设置,分别运行组态王与VB应用程序后,VB应用程序就可以读取组态王中的“T1LEVEL”实时数据了。
2.组态王通过DDE读应用程序的数据
这里要实现组态王读取应用程序中的文本框txtName,该变量表示向组态王中传递当前要进行实验的学生的名字。这是一个字符串变量。
在VB项目中添加窗体“frmVBToView”
,设置该窗体的LinkMode属性为“1”,LinkTopic为“formVBtoView”。在该窗体中建立文本框“StuName”。把该工程保存为VBToViewDDE.vbp,然后选择“工程→属性窗口”,设置工程的应用程序标题为“vbtoview”。然后可以生成可执行文件VBToViewDDE.exe。
在工程浏览器中,从左边的工程目录显示区中选择“设备\DDE”,然后在右边的内容显示区中双击“新建”图标,则弹出“设备配置向导”,添加一个名为VBDDE的DDE设备,该设备配置如图所示。这里要特别注意的是,图5.12中的服务程序名是在VB工程中所设置的应用程序名字,而非生成的可执行程序的名字。如本例所示,这里应该填入“vbtoview”,而非“vbtoviewdde”。否则组态王运行系统会提示找不到DDE设备。话题名就是VB窗体“frmVBToView”的LinkTopic属性中设置的“formVBtoView”。另外,数据交换方式要选择“标准的Windows项目交换”而不是“高速块交换”,否则DDE通信也不成功。
DDE设备定义好后,就可以在数据词典中定义变量了。变量定义窗口如图所示。这里连接设备就是建立的名为vbdde的设备,而项目名要填写VB工程窗体中的文本框的名字“StuName”。
通过上述扩展,可以把在组态王中较难实现的功能在独立的应用程序中来实现,而相关的变量通过DDE通信实现。这样做的好处是可以充分发挥组态王开发监控系统的优点,又可以发挥高级语言编程的优点,实现更加复杂的控制、管理功能。
除了可以采用DDE外,组态王还支持OPC规范,因此,还可以采用OPC技术,来扩展组态王的功能