Visual C++ 6.0/2008 (MFC)

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI实例 > PVICOM > PviDemo >

Visual C++ 6.0/2008 (MFC)

PviDemo 编程实例显示了在MFC(微软基础类)应用程序中对变量数据的读写。

源代码是为Unicode(2字节的字符)准备的。包含的项目文件被预设为1字节字符(除了用于Windows CE的版本)。

还有一个为Windows CE的Unicode版本提供的该编程实例的版本。代替INI文件的是将设置保存在Windows注册表中。

对于PVICOM 用户信息 使用的是窗口信息 类型  。

该编程范例包含以下文件。

File

描述

PviDemo.dsp,

PviDemo.dsw

Visual C++ 6.0的工作区和项目文件。(32位PVI)。

PviDemo.vcproj, PviDemo.sln

Visual C++ 2008的解决方案和项目文件。(32和64位PVI)。

PviDemo.cpp,

PviDemo.h

类CPviDemoApp(Windows应用程序对象)和帮助类CExString。

PviDemoDlg.cpp,

PviDemoDlg.h

类CPviDemoDlg。

样本程序中的主对话框对象。所有的PVI通信都是通过这个对象进行的。

PviConnectDlg.cpp,

PviConnectDlg.h

类CPviConnectDlg。

对话框对象,用于设置PVI连接配置以及从INI文件中读/写PVI连接参数。

PviObjectsDlg.cpp,

PviObjectsDlg.h

Class PviObjectsDlg.

对话对象,用于设置PVI对象的配置,以及从INI文件中读/写PVI对象的参数。

PviDemoCE.vcproj,

PviDemoCE.sln

Visual C++ 2008的解决方案和项目文件,Windows CE版本。

使用Windows CE版本的一个要求是,你必须安装相应的Windows CE平台的SDK。

Profile.cpp,

Profile.h

这些文件包含模拟Windows Profile API功能的函数。取代INI文件,设置从Windows注册表中读取或写入。

这些文件只有在Windows CE版本的编程范例中才需要。

附加文件用于保存程序资源或作为AFX接口,并由Visual Studio管理。

如果用Visual C++ 2008打开示例项目(解决方案文件PviDemo.sln),并对其进行修改和再次保存,那么以后你可能无法用Visual C++ 6.0打开它(工作区文件PviDemo.dsw)或生成它。这也适用于Windows CE版本(解决方案文件PviDemoCE.sln),因为Windows CE可能不支持更改或添加。因此,建议在开始之前备份原始文件。

对于某些PVICOM函数或访问类型,参数或名称是以1字节字符的ANSI字符串形式输入或返回。在Unicode应用程序中(具有2字节字符的字符串),因此必须对这些字符串进行转换。MFC的CString类可以将1字节的字符串(ANSI)转换成Unicode字符串,但不能反过来。从 CString 派生的 CExString 帮助类已被扩展为做这个。

下面的成员函数作为例子。

Function

说明

CPviDemoDlg::CreateConnection

进行PVI初始化。当 PviInitialize 函数被调用时,客户端实例被注册,与PVI管理器建立连接。为了显示连接状态,  PVI中的全局事件 被激活(CPviDDlg::OnPviGlobalEvent)。

CPviDemoDlg::FreeConnection

进行PVI去初始化。当 PviDeinitialize 函数被调用时,客户端实例被删除。与PVI管理器的连接被终止,所有 链接对象 和临时 进程对象 被启用。

CPviDemoDlg::CreateDemoObjects

示例程序的 所有 链接对象 和临时 进程对象 都是使用异步函数 PviCreateRequest 创建的 。除了CPU对象,这个例子中的所有对象都被设置为状态 "非活动"。对于所有的变量对象,  定义了一个 类型变化 (cast)为1或2字节的字符串。相应的数据格式在链接对象的描述中被指定。

对于处理对象,编程实例中为每个PVI链接对象包含一个类型为T_PVIOBJ_CTRL的内部结构变量。这个内部结构变量的指针包含在PVI 用户信息的用户参数 。当然,也可以用一个C++对象来代替结构。

CPviDemoDlg::FreeDemoObjects

启用所有的PVI对象。与CPviDemoDlg::FreeConnection不同,这里与PVI管理器的连接不会被终止。

CPviDemoDlg::OnPviCreateResp

这个消息传递函数被用作PVI 用户消息 ,用于响应请求函数 PviCreateRequest

用户参数IParam是一个指向内部结构变量T_PVIOBJ_CTRL的指针(见CPviDemoDlg::CreateDemoObjects)。与响应数据一起提供的PVI结构变量(LinkID)被存储在这个对象结构中。对于所有的变量对象,除非  已经按下了Idle,否则状态会被改变为active  。响应数据中报告的错误意味着在PVI管理器中无法创建该对象(例如,无效的对象名称,对象描述中的语法错误,等等)。在这种情况下,错误会显示在各自变量的输入/输出文件中,或显示在一个消息框中。

CPviDemoDlg::OnConnect

按下 "连接"键时,这个消息传递功能就会运行  。

显示用于设置PVI连接配置的对话框。点击  对话框中的"确定"进行确认后  ,参数被写入INI文件中。然后,客户端实例被删除(CPviDDlg::FreeConnection),并用更新的参数重新注册(CPviDDlg::CreateConnection)。

CPviDemoDlg::OnObjects

Objects 被按下时,这个消息传递函数就会被运行  。

显示用于设置PVI对象配置的对话框。通过点击  对话框中的"确定"进行确认后  ,参数被写入INI文件中。然后所有的PVI对象被释放(CPviDDlg::FreeDemoObjects),并以更新的对象配置重新创建(CPviDDlg::CreateDemoObjects)。

CPviDemoDlg::OnInitDialog

当主对话框被初始化时,这个消息传递函数被运行。

从INI文件中读取PVI连接配置并初始化PVI(CPviDemoDlg::CreateConnection)。

CPviDemoDlg::OnDestroy

当主对话框关闭时,这个消息传递函数会被运行。

进行PVI去初始化。客户端实例被删除,与PVI管理器的连接被终止。

CPviDemoDlg::OnActive

按下 "激活"键时,这个消息传递功能就会运行  。

对于所有显示的PLC变量(在编程实例中最多为4个),为各自的链接对象改变启用掩码(POBJ_ACC_EVMASK),将状态改为 "激活"。

由于改变使能掩码的请求是独立于过程对象状态的,这里没有响应数据或请求确认。具有较高安全标准的PVI应用(如服务器),应始终使用请求确认。

CPviDemoDlg::OnIdle

按下"空闲"键时,这个消息传递功能就会运行  。

对于所有显示的 PLC 变量(在编程示例中最多为 4 个),启用掩码(POBJ_ACC_EVMASK)对各自的链接对象进行更改,将状态改为 "非活动"。

CPviDemoDlg::OnKillfocusPvarX

当焦点从一个输入/输出字段移开时,这个消息传递功能就会执行。

对于指定的链接对象,状态被改变为活动,除非  已经按闲置

CPviDemoDlg::OnSetfocusPvarX

当焦点放在一个输入/输出字段上时,该消息传递功能将被执行。

为防止输入值被覆盖,分配的链接对象被设置为非活动。

CPviDemoDlg::OnPviGlobalEvent

这个消息传递功能被用作 全局事件的PVI 用户消息

事件 POBJ_EVENT_PVI_CONNECTPOBJ_EVENT_PVI_DISCONN用于 显示PVI连接状态。在事件 POBJ_EVENT_PVI_ARRANGE 示例中使用的所有PVI对象都被创建(CPviDemoDlg::CreateDemoObjects)。

在事件POBJ_EVENT_PVI_CONNECT中,有或没有临时进程对象的链接对象可能不会被创建。只有事件POBJ_EVENT_PVI_ARRANGE才保证这个客户实例的任何先前创建的链接对象和临时进程对象不再存在。

CPviDemoDlg::OnPviCpuEvent

这个消息传递功能是作为 CPU对象的错误状态PVI 用户消息

该事件仅用于显示CPU连接状态。

CPviDemoDlg::OnPviPvarEvent

这个消息传递函数作为PVI 用户消息 用于错误状态和所有变量对象的数据(在编程例子中最多4个)。

用户参数IParam是一个指向内部结构变量T_PVIOBJ_CTRL的指针(见CPviDemoDlg::CreateDemoObjects)。数据或报告的错误会显示在相应的PLC变量的输入/输出字段中。变量数据以字符串格式(1或2个字节的字符)提供(如在创建 链接对象时指定 )。

如果没有为链接对象指定数据格式(与本例不同),变量数据将以PLC变量的格式提供。如果PLC变量的格式发生变化,必须对应用程序进行相应调整。应用程序总是可以使用 POBJ_EVENT_DATAFORM 数据格式事件来获得关于当前数据格式的信息。

CPviDemoDlg::OnWrite

当写指令 被按时,这个消息传递功能会被运行  。

PviWriteRequest 函数被调用 时,写指令就开始了 。这个内部结构变量的指针(类型:T_PVIOBJ_CTRL)包含在PVI 用户消息 的用户参数

CPviDemoDlg::OnPviWriteResp

这个消息传递函数被用作PVI 用户消息 ,用于响应请求函数 PviWriteRequest

用户参数IParam是一个指向内部结构变量T_PVIOBJ_CTRL的指针(见CPviDemoDlg::OnWrite)。响应数据中报告的错误意味着写入请求失败。在这种情况下,错误会显示在一个消息框中。

如果在一个应用程序中,多个变量对象应按一定顺序写入,那么在最后一个写入请求的响应之前,不能发送下一个写入请求。

CPviConnectDlg::LoadParam

从INI文件中读取编程实例的PVI连接配置。

CPviConnectDlg::SaveParam

将编程实例的PVI连接配置写到INI文件中。

CPviObjectsDlg::LoadParam

从INI文件中读取编程示例的PVI对象配置。

CPviObjectsDlg::SaveParam

将编程实例的PVI对象配置写到INI文件中。