nbhkdz.com冰点文库

上位机系统中VC

时间:2011-11-23


计算机技术                   Control and Instruments in Chemical Industry     

化工自动化及仪表 , 2003 , 30 ( 6) :39~42  

上位机系统中 VC 、 MatLab 和 LabVIEW 程序间的串行通讯
罗建国 ,刘尚明 ,张   电
( 清华大学 热能工程系 ,北京 100084)

1    引 言

形界面 ,但是难以实现复杂的控制算法 ; MatLab 程

序则拥有强大的控制算法包 , 但在界面方面稍逊一 筹 。因此要充分利用各种软件的优势 , 就必须解决 各程序间的实时通讯问题 。本文结合国家 973 计划 系统中通过 DDE 协议解决各程序间的通讯问题 。

资助搭建的一个控制系统仿真平台 , 来阐述上位机

台计算机 ( 上位机和数字仿真计算机) 为核心设备 ,

测量软件利用了开放的 OPC 技术 , 在 DCS 上成 功地实现了软测量 ,该方案结构清楚合理 ,具有优 越的开放性 、 可维护性 。

性的生产过程 , 提出并实现了相适应的软测量技 术和实施技术 , 在实际生产过程中获得了成功的 应用 。

Abstract :In t his paper ,a kind of soft sensor for penicillin fermentation processes based on wavelet neural network is introduced. The implementation scheme of t he soft sensor using OPC technology in J X2300X DCS is also presented. Key words :penicillin fermentation ;soft sensor ;wavelet neural network ;OPC

   为了在 J X2300X DCS 上实施软测量技术 ,软

   摘要 :   由于各种编程语言特点各异 ,因此 ,在一个控制系统中经常出现几种编程语言共存的情况 ,它们之间 的通讯就显得尤为重要 。结合 973” “ 项目为背景 ,阐述 VC 、 MatLab 、 LabV IEW 之间通过 DDE 实现数据交换 。    关键词 :   动态数据交换 ; 上位机 ; 串行通讯    中图分类号 : TP311   文献标识码 : B   文章编号 : 100023932 ( 2003) ( 06) 20039204

兼以其它辅助部件组成 。数字仿真计算机用来模拟 热力系统对象 ,通过 D/ A 实时地向上位机系统提供 系统运行数据 ; 上位机系统通过数据采集卡接受来 自数字仿真计算机的数据 , 对数据综合处理并采用 控制算法对仿真对象执行实时控制 , 将控制信号传 回下位机系统 ,从而形成闭合的控制回路 。同时 , 上 位机中的监控系统监控仿真对象的运行状况 。
   收稿日期 :2003205216
1999 ,28 :1072112.

VC 、 LabV IEW 开发的程序可以提供良好的图

该仿真平台的原理框图如图 1 所示 。系统以两

   基金项目 : 国家 973” “ 计划项目 ( G1999022304)

[ 参 考 文 献 ]

[1 ]   王宇红 ,黄德先 , 等 . 基于小波神经网络的软测量技术在发

酵过程的应用 [ A ] . 过程控制科学技术与应用 [ C ] . 华南理 工大学出版社 ,2002. 4542458.

[2 ]  Thompson M L , Kramer M A. Modeling Chemical Processes Using Prior Knowledge and Neural Networks [ J ] . AICh E Journal ,1994 ,40 (8) :132821340.

本文针对补料 - 批式发酵这种具有严重非线

[3 ]   黄德先 ,金以慧 ,Zhang J ,Martin E ,Morris A J . 基于小波神

经网络的多变量非线性约束预测控制 [ J ] . 信息与控制 ,

Soft Sensor for Penicillin Fermentation Process and Its Implementation in JX 300 X DCS 2
( 1 . Instit ute of A utom ation , Chi nese A cademy of Science , Beiji ng 100080 , Chi na ;

2 . Depart ment of A utom ation , Tsi nghua U niversity , Beiji ng 100084 , Chi na)

WAN G Yu2hong1 , HUAN G De2xian2 , GAO Dong2jie1 ,J IN Yi2hui2

?40 ?
2  上位机系统

化 工 自 动 化 及 仪 表                30 卷   第

控制策略的组态软件 , 并编译生成高效的可执行文 件 ,动态地得到仿真对象的过程参数 , 进行热力计 算、 实时控制等综合分析整理 , 作为 DDE 的客户机 进行数据交换 。
( 4) LabV IEW 程序生成实时监控系统 , 主要作

上位机系统主要完成实时的控制及监控 。具体 来说 ,该系统有以下几个特点 :
( 1) 使用 Windows 2000 作为上位机操作系统 。 ( 2) Visual C + + 应用程序作为系统的主控程序

工作于后台 ,实时地完成对数据采集卡各通道数据 寄存器的数据读写 ,并经过滤波处理 ,将采集数据存 放在相应位置 ,作为 DDE ( 动态数据交换) 服务器与 其它进程进行数据交换 。
( 3) 在 MatLab 加 Simulink 平台上开发实现高级

为人机界面 。包括实时数据显示 、 系统图 、 流程图 、 趋势图等 , 以此进行操作指导 , 并具有参数越限报 警、 故障报警 、 故障前期预报等功能 。它作为 DDE 的客户机进行数据交换 。
3  DDE

图1  仿真平台原理框图

   以往程序员必须通过一组 Windows 消息来实 现 DDE 协议 ,编程工作量非常大 。现在引入了动态 数据交换管理库 ( DEM) 应用程序编程接口 ( API) , 这在很大程度上向程序员隐藏了 DDE 协议的复杂 性 ,它以函数调用来代替消息发送 ,实现程序间的动 态数据交换 。客户端和服务器均必须提供一个回调 函数 ,服务器和客户端调用 DDEML , 而 DDEML 将 调用回调函数实现信息交换 。 客户端程序在需要某些数据时 , 要指明它所需 要的数据类型和格式以便寻找到一个合适服务器为 其提供数据 。当客户端为交换数据或者请求执行一 条命令而与服务器链接时 , 我们称这种联系为 “会 晤” 。而客户端与服务器之间进行了一次信息交换 , 则称为一次 “事务” 。一旦会晤建立 , 将始终保持有 效 ,此期间中如果数据发生变化 ,服务器负责把数据 传递给客户端 , 直到会晤被中断 。客户端程序在要 求服务器程序为其提供数据时 ,应指明服务名 、 话题 名和项目名 。如果服务器提供了该项服务 , 而且话 题名也对应 ,那么服务器和客户端会晤就可以建立 , 并将为客户端提供项目名对应的数据 。 客户端程序和服务器程序之间的数据传递有三

种方式 : ① 冷链接 , 是指在建立会晤后 , 客户端向服 务器作了一次数据请求 ,数据交换之后就结束会晤 ; ② 温和链接和冷链接类似 , 也是服务器程序收到请 求后才将数据传递给客户端程序 。但如果服务器程 序中该数据发生了变化 , 服务器将把这一信息通知 给客户端程序 , 但不向客户端程序发送改变后的数 据; ③ 热链接比温和链接又进了一步 ,在会晤建立以 后 ,如果服务器中客户所要求的数据发生了变化 , 并 不需要客户请求 ,服务器程序将自动重新发送数据 。 这充分体现了 DDE 的优点 , 保证了数据实时更新 , 是仿真系统中常用方式 。
4  数据服务器

服务器程序用来提供从 A/ D 端口采集来的数 据 ,它一般处于被动地位 , 满足客户程序的请求数 据、 修改数据 、 热链接等要求 。除了服务器程序初始 化以外 ,回调函数的编写最为重要 。
4 . 1   DDEDlg. h 中声明方法和变量名 在

声明一个服务器程序实例标识符 idInst , 以便以 后调 用 DDEML 函 数 。定 义 服 务 名 字 符 串 句 柄
hszService ,定义一个服务名字符串 AppName 。

声明一个回调函数和对话框类的析构函数 。由

 第 6 期        罗建国等 . 上位机系统中 VC 、 MatLab 和 LabV IEW 程序间的串行通讯

?41 ?

于回调函数必须是静态成员函数 , 是类函数而不是 对象函数 ,没有 t his 指针的概念 , 所以不能对非静态 数据成员进行访问 。为了解决这个问题 , 我们可以 定义一个静态伪 t his 指针 , 在构造时初始化指向真 正的 t his 指针 ,并作为全局变量使用 。
4. 2   类方法的实现

表 1 为服务器程序中需要处理的事务 。
表 1  VC 数据服务器需要处理的事务 事  务
XT YPCONN ECT XT YPREQU EST

解      释

在利用 DDEML 函数前调用 DdeInitialize 进行 初始化 ,并指定该主服务器的服务名 。如果初始化 成功 ,服务器程序应向 DDEML 注册服务名 , 以便客 户端 能 根 据 服 务 名 建 立 会 晤 , 同 时 可 以 防 止
DDEML 把和服务名不相配的 XT YP- CONN ECT 事

务发送到它的回调函数中 。 在类对象消亡前将自动调用该函数 , 我们应该 将该类对象占用的资源释放 。由于本程序是个数据 服务器 ,在消亡前一刻 ,DDEML 中始终保持有服务 名的注册 , hszService 句柄也一直占用资源 , 所以在 析构函数中应该对它们进行释放处理 。 前面已经介绍了服务器程序与客户端间建立会 晤、 完成事务 、 实现数据交换与传递 , 这一切具体工 作将由回调函数来实现 。回调函数的函数名和参数 名可以自己定 , 但参数个数和类型必须按上式定义 格式 ,通常回调函数结构也有一个典型格式 :
HDDEDA TA CALLBACK EXPOR T CDDEDlg

常用事务作了相应处理 , 它将支持客户端程序的会 晤请求 、 数据请求 、 数据传送 、 温式和热式链接 。
5  软实时控制器

应用程序的 DDE 服务器模块进行通信 。

话 ,将返回一个标识通道的值 ,利用这个通道标识即 可调用 ddeadv 与服务器建立一个热链接 , 并指定一 个回调函数 。如果链接成功 ,VC 数据服务器更新数

∷DdeCallback ( U IN T i Type , U IN T iFmt , HCONV
hConv , HSZ hsz1 , HSZ hsz2 , HDDEDA TA hData , DWORD dwData1 ,

据后 ,将主动告诉 MatLab 客户端 , 客户端调用回调 目名 ,并 建 立 热 链 接 , 在 VC 程 序 得 到 新 数 据 后 ,
MatLab 程序将自动执行一次 。

函数 。只要指定 VC 主程序的服务名 、 话题名和项

     DWORD dwData2)
{ 

  char szBuffer[ 60 ] ;
switch ( i Type)

过它返回到现场 , 达到控制目的 。返回控制结果有 两种方式 : VC 仍充当服务器 , MatLab 充当客户端 , 客户端程序可调用 ddepoke 来改变服务器数据 ; 另 一种 ,MatLab 来充当服务器 ,VC 充当客户端 ,VC 主 分别为 : MatLab 、 Engine 、 变量名 。
6  数据监控系统

  {    case XT YP- REGISTER :     ……      break ;    case XT YP- CONN ECT :     ……      return ( HDDEDA TA) TRU E ;    case XT YP- ADVDA TA :     ……      return ( HDDEDA TA) DDE- FACK;    default :      return ( HDDEDA TA) FAL SE ;    }
}

动读取 MatLab 控制结果 , 服务名 、 话题名和项目名

这就要求有良好的图形 化 界 面 , 本 次 开 发 采 用 了 较有代表性的通用性支撑软件之一 , 在国内外的仿

LabV IEW 环境 。LabV IEW 是可视化仿真领域中比

真开发中使用广泛 。它具有良好的技术支持和高度 的稳定性 ,同时版本升级速度较快 ,因此可以促使自

己研制的系统具有越来越强大的功能和更高的稳定 性 。与其它可视化软件相比 ,LabV IEW 将最新的操 作系统技术和面向对象的编程技术结合在一起 , 给

当客户端调用 DdeConnect 函数时 ,DDEML 将此 事务传递给服务器回调函数 。 客户端向服务器请求数据时 , 服务器程序将在该 事务处理中给予答复 。 一旦客户端和服务器之间建立了热式或温式链 XT YP接 ,当数据发生变化时 , 服务器程序应调用 Dde2 ADVREQ PostAdvise 函数 , 这将使 DDEML 向服务器回调 函数发送该事务 。 XT YP客户 端 要 和 服 务 器 建 立 热 式 或 温 式 链 接 时 , ADVSTART DDEML 向服务器发送 XT YP- ADVSTART 事务 。 XT YP当客户端程序向服务器发送数据时 , 服务器程序 PO KE 将接收此事务 。

   以上是服务器程序结构简述 , 它分别针对几个

MatLab 通过自身的 DDE 客户端模块与服务器

首先通过 ddeinit 建立与 VC 数据服务器的对

控制结果同样通过 DDE 返回到 VC 主程序 , 通

数据监控系统如同仪表 ,用来显示各基本参数 。

?42 ?

化 工 自 动 化 及 仪 表                30 卷   第

cal 等常规开发语言的灵活性 。 6. 1   生成 DDE 服务器程序

for poke 项为真值时 ,一旦客户端修改某项目数据 ,该 VI 立刻返回新的数据并报告服务器数据被改变 。

6. 2   生成 DDE 客户端程序

DDE 信息就可以通过全局内存进行交换 。

Abstract :Because each program language has each own advantage ,so the situation that several programs are exist in one control system is often occurred. The communication between them appears especially important . Use the 973 Project for example ,this article shows the DDE to the communication between VC ,LabV IEW and MatLab programs. Key words :DDE ;host computer ;serial communication

用户提供了可视化编程工具的易用性以及 C 和 Pas2 建立 DDE 服务器的首要任务就是用 DDE Srv
Register Service V I 告诉 Windows 你所要建立服务器

值得注意的是 ,在会话过程中 ,必须将会话句柄 传递给所有参与该会话的 DDE V I 。Windows 使用 会话句柄来区别各个会话 ,如果该数值被改变 , 或者 没有将该句柄连接到 DDE V I ,该 V I 将运行失败 。
LabV IEW 支持的 DDE 协议都是基于 ASCII 码

支持的服务名和话题名 ,这样 ,其它应用程序才可能 次调用 DDE Srv Register Service V I 建立多个服务器 务器建立多个话题名 。

的 ,数据传递在遇到 NULL 时就结束 。如果二进制 数据中有个空字节 ( 00 ) , 在空字节前所有字节传送 完后数据传递自动结束 。 如果要向另一个应用程序发送一个数值 , 必须 先将该数值转换成一个字符串 。在接收数值的程序 中 ,应该按照同样的转换方式将字符串转化回数值 , 所有这些可以调用转换 V I ( Functions > > String) 。 要终止 链 接 并 关 闭 所 有 会 话 , 可 以 调 用 DDE
Advise Stop V I 和 DDE Close Conversation V I 。这样 ,

通过 DDE 会话接收服务 。可以以不同的服务名多 程序 ,也可以以同一服务名多次调用该 V I 为同一服

当服务名和话题名确定以后 , 接下来就可以调

用 DDE Srv Register Item V I 来建立各项目名了 。其 它运用程序就可以针对某项目名建立会话 , 来请求 或者修改数据 。

需要 修 改 某 项 目 数 据 时 , 可 以 调 用 DDE Srv

所有被利用全局内存和系统资源都将被释放 。 监控系统主要是得到 VC 服务器的数据并显 示 ,所以该监控系统是 DDE 的客户端 。指定 VC 数 据服 务 器 的 服 务 名 、 题 名 和 项 目 名 , 调 用 DDE 话
Open Conversation V I 建立与 VC 主程序的会话 , 又

Item V I 。该 V I 可以修改数据并通知所有请求该数

据的客户端程序 。

要调查客户端程序是否使用 POKE 事务将服务

器某项目数据修改 , 可调用 DDE Srv Check Item VI 。 该 VI 可以立刻返回当前数据 , 也可在客户端修改数 据后返回数据 。如果 DDE Srv Check Item VI 的 wait

由 DDE Advise Start V I 建立与项目名的链接 。通过
DDE Advise Check V I ,如果服务器数据发生变化 ,立

刻将新数据显示出来 。最后的 DDE Advise Stop V I 和 DDE Close Conversation V I 则是结束会话 ,释放资 源 ,如果链接失败 ,将显示出错信息 。该程序可始终 循环运行 ,通过 STOP” “ 则可以终止该程序 。
表2  LabVIEW 提供的 DDE 客户端常用 VI 事    件 向服务器发送数据 向服务器发送命令 向服务器请求数据 初始化热链接 调用 LabVIEW VI
DDE Poke VI DDE Execute VI DDE Request VI DDE Advise Start VI

当服务 器 任 务 完 成 以 后 , 可 以 顺 序 调 用 DDE

Srv Unregister Item V I 和 DDE Srv Unregister Service

V I 来关闭 DDE 服务器 ,LabV IEW 将自动中断所有

与之相连的客户端会话 。

LabV IEW 具有所有 DDE 客户端的功能 ( 表 2 ) 。

要使用 DDE , 首先必须调用 DDE Open Conversation 名 。如果有适当的服务器提供该服务和话题 , 那么

V I 建立会话 ,在调用的时候必须指定服务名和会话

7  结束语 VC 和 MatLab 、 LabV IEW 这种结构的高效 、 易

DDE Advise Start V I 创建客户端所要求的数据

的备份 ,当调用 DDE Advise Check V I 后 ,该 V I 立刻

扩充的突出优点 ,在长时间内将仍是控制系统软件 、 仿真软件中的主流结构 。同时由于 Microsoft 技术 的更新 ,在 DDE 技术基础上推出了 COM 技术 ,未来
COM 将成为解决上位机系统串行通讯的主要方法 。

将备份数据返回 。同时 ,当该数据发生改变时 , 服务 最新数据 。

器程序将向客户端发送当前数据 , 使得客户端得到

Serial Communication bet ween VC,LabVIEW and MatLab Programs in Host Computer L UO Jian2guo ,L IU Shang2ming ,ZHAN G Dian ( Dept . of Heat Energy and Engi neeri ng , Tsi nghua U niversity , Beiji ng 100084 , Chi na)


VC++编写简单串口上位机程序.doc

用自己相当蹩脚的 C++写出了一个简单的串口上位机程序,分享 一下,体验一下...编译环境:VC++6.0 操作系统:VMWare 虚拟出来的 Windows XP 程序实现功能: 1、...

VC环境下数控系统与上位机的通讯实现.pdf

VC环境下数控系统上位机的通讯实现 - 在给出上位机与数控系统进行通信的一般原理的基础上,以台湾亿图公司的HUST数控系统(HUST CNC)为例,介绍了通过利用微软的...

用VC++写上位机软件实现与单片机通信.doc

我们选用的用 VC++类实现的上位机和下位机的串行通信 方法具有使用简单、编写程序方便的 特点。经过半年多应用于 EBM 灭火系统的情况来看,该方法实现的系统运行...

利用VC++6.0 实现上位机与 PLC 的串行通信.pdf

介绍了西门子 S7200 系列 PLC 的自由口通信模式及在 Windows 环境下应用 VC++6.0 实现 PC 机与 PLC 串行通信的编程方法,开发了玻璃器皿冲压机上位机监控系统...

基于VC++和MFC的上位机与PLC的通讯系统.doc

“Z”,则停止延时发送 VB302, 'Z' 10 SM0.0 VB200, 0//发送数据 10//关定时中断 系统中上位机的软件部分利用 VC++提供的通讯控件 MSComm,以 MFC 为...

基于VC的上位机与PLC间的OPC通讯.pdf

(2) 系统下位机采用的是西门子 S317 的带 DP 及 PN 扩展 的 PLC。通过 PN 及 DP 口分别实现与上位机及从站的通信 连接。 (3) 上位机装有 VC6.0 及 ...

VC上位机编程.doc

VC上位机编程_计算机软件及应用_IT/计算机_专业资料。1 口,使用 n81

VC _串口上位机编程实例.pdf

VC _串口上位机编程实例 - VC++串口上位机简单例程(源码及详细步骤) VC++串口上位机简单例程.rar (4.33 MB) VC++编写简单串口上位机程序 2010年4月13日10....

基于VC++和MFC的上位机与PLC的通讯系统_图文.pdf

吵.:匕iP /L XMTDTCH VB200,洲发送数据10//关定时中断 3.3上位机软件设计 系统中上位机的软件部分利用vc++提供的通讯控件 MSCmmm.以MFC为基础编制通讯程序...

VC++编写简单串口上位机程序.doc

VC++编写简单串口上位机程序 - VC++编写简单串口上位机程序 串口通信,MCU 跟 PC 通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、 编译环境等不...

VC上位机MFC利用串口控件发送接收数据.doc

VC上位机MFC利用串口控件发送接收数据 - 1.建立项目: 打开 VC++6.

VC++_串口上位机编程实例_图文.doc

VC++_串口上位机编程实例 - VC++串口上位机简单例程(源码及详细步骤) VC++串口上位机简单例程.rar (4.33 MB) VC++编写简单串口上位机程序 2010年4月13日10...

手把手教你VC上位机MFC利用串口控件发送接收数据.doc

手把手教你VC上位机MFC利用串口控件发送接收数据_计算机软件及应用_IT/计算

VC++创建上位机接收界面.doc

VC++创建上位机接收界面 - 编程任务: 编写一个基于对话框的应用程序,用 M

vc上位机一个例子.doc

vc上位机一个例子 - Modbus 通讯协议编程 本人最近为了实现电脑与 De

上位机与下位机之间通信编程_图文.doc

上位机位机之间通信编程 - 摘要 本文主要描述了利用 PC 机与 AT89C51 单片机之间的通信程序设计实现温 度显示。并详述了在 VC6.0 环境,上位机利用 ...

VC上位机MFC利用串口控件发送接收数据程序代码.doc

VC上位机MFC利用串口控件发送接收数据程序代码 - 打开 VC++6.0,建立

利用VC_6_0实现上位机与PLC的串行通信.pdf

,Hongzhong摘要: 介绍了西门子S7-200系列PLC的自由口通信模式及在Windows环境下应用VC++6.0实现PC机与PLC串行通信的编程方法,开发了玻璃器皿冲压机上位机监控系统 。...

用VC实现上位机与PLC之间通信_图文.pdf

VC实现上位机与PLC之间通信 - 机电工程 !, 年第 !- 卷第 ! 期

基于VC++6.0的上位机与欧姆龙PLC通信系统研究.pdf

基于VC++6.0的上位机与欧姆龙PLC通信系统研究 - 介绍了可编程控制器与计