PviDemo 示例程序展示了Visual Basic应用程序中变量数据的读写。
这些设置是在一个INI文件中管理的。
对于PVICOM 用户信息, 使用的是不带数据的回调 类型 。
该示例程序包含以下文件。
File |
描述 |
PviDemo.vbp, PviDemo.vbw |
Visual Basic项目工作区和Visual Basic 6.0的Visual Basic项目。 |
PviDemo.exe PviDemo.ini |
可执行的演示程序和PVI进程对象的初始化文件。 |
frmPviDemo.frm |
应用程序启动时显示的对话框。 |
frmPviObjects.frm |
用于配置PVI对象的对话框。 |
PviCom.bas |
用于Visual Basic应用程序的PVICOM功能描述模块。 |
fktMain.bas |
Visual Basic模块。声明PVI对象的结构。应用程序是在函数Public Sub main()中启动的。在这个函数中,INI文件的对象被读入,然后以frmPviDemo的形式显示。 |
fktObjectInit.bas |
Visual Basic模块。读取和写入INI文件以及初始化PVI对象结构的函数。 |
fktPVIobject.bas |
Visual Basic模块。调用PVI函数和PVICOM回调函数。 |
下面的功能作为例子
Function |
Description |
fktMain.bas module |
|
main |
项目启动的功能。从INI文件中读取样本程序的PVI连接配置后, frmPviDemo.frm表格 被打开。 |
fktObjectInit.bas module |
|
ReadINIFile |
从INI文件中读取PVI对象。 |
SetObjectStructure |
写入并初始化全局PVI对象结构 pPviObj()。 |
DisableObjectControls |
禁用表格 frmPviDemo.frm的输入字段 。 |
INIGET |
解析从API函数GetPrivateProfileString收到的缓冲区的功能。 |
INIWRITE |
写入INI文件的功能。 |
fktPVIobject.bas module |
|
这个消息传递功能被用作 全局事件的PVI 用户消息 。 事件 POBJ_EVENT_PVI_CONNECT 和 POBJ_EVENT_PVI_DISCONN 用来显示 PVI 连接状态。在事件 POBJ_EVENT_PVI_ARRANGE中,在 例子中使用的所有 PVI 对象都被创建(CreatePviObjects)。 在事件 POBJ_EVENT_PVI_CONNECT 中可能不会创建有或没有临时进程对象的链接对象。只有事件POBJ_EVENT_PVI_ARRANGE可以保证这个客户端实例的任何先前创建的链接对象和临时进程对象不再存在。 |
|
示例程序的 所有 链接对象 和临时 进程对象 都是使用异步函数 PviCreateRequest 创建的 。除了CPU对象,这个例子中的所有对象都被设置为状态 "非活动"。对于所有的变量对象, 定义了一个 类型变化 (cast)到一个双倍数据类型(VT=f64)。相应的数据格式在链接对象的描述中指定。 变量和CPU对象中的错误和数据在回调函数 OnPviDataEvent()中读取 ,创建的PVI对象的Link ID在回调函数 OnPviCreateResponse中 使用函数PviCreateResponse读取 。 |
|
这个消息传递函数被用作PVI 用户消息 ,用于响应请求函数 PviCreateRequest。 用户参数IParam对应于PVI对象结构pPviObj()中由ENUM函数 "PviObject "指定的偏移。与响应数据一起提供的PVI对象句柄(LinkID)被存储在这个对象结构中。对于所有的变量对象,状态被改变为激活,除非 已经按下了Idle 。响应数据中报告的错误意味着在PVI管理器中无法创建该对象(例如,无效的对象名称,对象描述中的语法错误,等等)。在这种情况下,错误会显示在各自变量的输入/输出文件中,或显示在一个消息框中。 |
|
这个消息传递功能作为PVI 的用户消息, 用于错误状态和所有变量对象的数据(在样本程序中最多4个)。 用户参数LPARAM与 PviCreateRequest 函数(见 CreatePviObjects) 指定的EventMessage编号的值 相对应。数据或报告的错误显示在相应的PLC变量的输入/输出区域。变量数据以Double格式提供(如在创建 链接对象时指定 )。 如果没有为链接对象指定数据格式(与本例不同),变量数据将以PLC变量的格式提供。如果PLC变量的格式发生变化,必须对应用程序进行相应调整。应用程序总是可以使用 POBJ_EVENT_DATAFORM 数据格式事件来获得关于当前数据格式的信息。 |
|
OnWriteResponse |
这个消息传递函数被用作PVI 用户消息 ,用于响应请求函数 PviWriteRequest。 用户参数IParam是一个指向内部结构变量T_PVIOBJ_CTRL的指针(见CPviDemoDlg::OnWrite)。响应数据中报告的错误意味着写入请求失败。在这种情况下,错误会显示在一个消息框中。 如果在一个应用程序中,多个变量对象应按一定顺序写入,那么在最后一个写入请求的响应之前,不能发送下一个写入请求。 |
DisplayconnectionState |
显示PVI <=>用户程序与CPU的连接状态。 |
Form_Load |
进行PVI初始化。当 PviInitialize 函数被调用时,客户端实例被注册,与PVI管理器建立连接。为了显示连接状态, PVI中的全局事件 被激活(OnResponseGlobalEvents)。 |
进行PVI去初始化。当 PviDeinitialize 函数被调用时,客户端实例被删除。与PVI管理器的连接被终止,所有 链接对象 和临时 进程对象 被启用。 |
|
cmdActive_Click |
当 按下Active时,这个信息传递功能就会运行 。 对于所有显示的 PLC 变量(在样本程序中最多 4 个),启用掩码(POBJ_ACC_EVMASK)为各自的链接对象改变状态为 "激活"。 由于改变使能掩码的请求是独立于过程对象状态的,这里没有响应数据或请求确认。具有较高安全标准的PVI应用(如服务器),应始终使用请求确认。 |
cmdIdle_Click |
当 按下"空闲"键时,这个消息传递功能就会运行 。 对于所有显示的PLC变量(在样本程序中最多4个),为各自的链接对象改变启用掩码(POBJ_ACC_EVMASK),将状态改为 "不活动"。 |
cmdObjects_Click |
打开 frmPviObjects 对话框,用于改变 PVI 对象参数。 |
cmdWrite_Click |
当 按下Write键时,这个消息传递函数就会运行 。 从 属函数 ReadAndCheckInputValue 被调用。 当 PviWriteRequest 函数被调用时,写指令被启动 。 |
txtVar_GotFocus |
当焦点放在一个输入/输出字段上时,这个消息传递函数被执行。 为了防止输入值被覆盖,分配的链接对象被设置为不活动。 |
txtVar_LostFocus |
当焦点从一个输入/输出字段上移开时,该消息传递函数被执行。 对于指定的链接对象,状态被改变为活动,除非 已经按下了闲置 。 |
该函数将输入的值(字符串)转换为双数据类型。如果发生错误(如输入 "ABC"),将输出错误信息。 用户应该实现一个适合应用的输入检查。 |
|
Form_Load |
文本字段用PVI对象结构pPviObj()中的对象名称进行初始化。 |
cmdTCPDefaults_Click |
为TCP/IP连接设置连接参数。 |
cmdARsimDefaults_Click |
为ARsim连接设置连接参数。 |
cmdCOMDefaults_Click |
设置串行连接的连接参数。 |
cmdCancel_Click() |
关闭该对话框。 |
cmdOK_CLick |
启用所有PVI对象。与 主对话框中的Form_Unload 函数不同,这里与PVI管理器的连接不会被终止。 所有的PVI对象及其连接描述被写入INI文件,并使用 CreatePviObjects 函数重新创建PVI对象 。 |