应用程序DDE读组态王的数据

简介: 应用程序DDE读组态王的数据

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与应用程序通信。

afb48d44113f4ffca6a7ecbf0f2f7423.png

 液位变量定义串口

在VB的应用程序中,在frmViewToVB_LOAD中添加如下代码:

9361cdfc4abe45a8b0ddf60cbaf205ba.png


通过上述设置,分别运行组态王与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通信也不成功。

4b098b2436cb4934af636c91ce58f206.png

DDE设备定义好后,就可以在数据词典中定义变量了。变量定义窗口如图所示。这里连接设备就是建立的名为vbdde的设备,而项目名要填写VB工程窗体中的文本框的名字“StuName”。

0e07d97eb01e4f548367064a4213964c.png

通过上述扩展,可以把在组态王中较难实现的功能在独立的应用程序中来实现,而相关的变量通过DDE通信实现。这样做的好处是可以充分发挥组态王开发监控系统的优点,又可以发挥高级语言编程的优点,实现更加复杂的控制、管理功能。

除了可以采用DDE外,组态王还支持OPC规范,因此,还可以采用OPC技术,来扩展组态王的功能

相关文章
|
4月前
|
存储 C语言
【文件操作:解锁高效读写与管理技巧】(下)
【文件操作:解锁高效读写与管理技巧】
|
30天前
|
SQL Java 数据管理
|
4月前
|
存储 中间件 API
中间件应用程序发起读取数据的请求
【5月更文挑战第12天】中间件应用程序发起读取数据的请求
34 4
|
4月前
|
缓存 监控 中间件
中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
【5月更文挑战第8天】中间件Cache-Aside策略应用程序直接与缓存和数据库进行交互
57 4
|
4月前
|
移动开发 监控 Android开发
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
91 0
|
SQL 开发框架 .NET
一个超级大的文件如何更快读
# 一个超级大的文件如何更快读 问题起因 ![](https://img2023.cnblogs.com/blog/2415052/202306/2415052-20230608110517159-989018809.png) 一个有千万的数据的txt文件如何发挥IO的全部性能更快的读和写。 ## 方案一 使用ChatGPT4的方案 在C#中,我们可以使用多线程来处理大量的数据并将其写入数据库。在处理大数据时,我们需要将任务分解为多个子任务,这样我们可以在不同的线程中并行执行它们以提高性能。 这里是一种可能的解决方案,使用了`Task Parallel Library (TPL
77 0
一个超级大的文件如何更快读
|
4月前
|
存储 编译器 C语言
【文件操作:解锁高效读写与管理技巧】(上)
【文件操作:解锁高效读写与管理技巧】
|
4月前
|
存储 安全
【文件操作:解锁高效读写与管理技巧】(中)
【文件操作:解锁高效读写与管理技巧】
|
消息中间件 存储 缓存
计算机操作系统学习笔记(3)——CPU缓存一致性
计算机操作系统学习笔记(3)——CPU缓存一致性
212 0
|
缓存
CPU缓存一致性协议动态表示
CPU缓存一致性协议动态表示
76 0