在WINCC组态软件编程中调用CALLBACK类函数的过程
摘要:本文通过一个简单的例程,浅谈一点在wincc组态软件编程中调用CALLBACK类函数的过程,并通过对代码注释的方式,介绍一点CALLLBACK类函数的结构。
关 键 词:wincc;组态软件;CALLBACK函数
In WINCC configuration software programming in the process of function CALLBACK calls
Zhangwei
(Anhui BBCA Biochemical Co., Ltd.Bengbu Anhui China 233010)
Abstract: This article through a simple routine, discussed shallowly a spot transfers the CALLBACK class function in the wincc configuration software programming the process, and through to the code annotation’s way, introduces a CALLLBACK class function the structure.
Key Words:wincc; Configuration software;CALLBACK function
1概述
西门子公司的WinCC组态软件集成了SCADA、组态、脚本语言和OPC等先进技术。用户在其平台下进行组态、编程和数据管理,可便捷形成所需的监视、控制、报警画面和实时、历史曲线、打印报表等。WinCC组态软件的整体开放性,使它可以方便地与各种软件和用户程序组合在一起,建立友好的人机界面,满足实际需要。
本文通过一个仅具有选择用户登陆的wincc项目为例,介绍采用PWGEN_ENUM_USERS_CALLBACK功能函数枚举WINCC项目用户名的过程,浅谈一点CALLBACK类函数的调用过程。
图 1运行界面
Fig.1Operation interface
2项目函数
在项目函数中,用C脚本建立EnumUser()、MyPWGENEnumUsersCallBack()两个函数,其中MyPWGENEnumUsersCallBack()函数为CALLBCAK类型。
图 2C脚本界面
Fig.2C script interface
2.1 EnumUser()函数
EnumUser()函数由事件触发,在本例中打开页面时触发后,由其调用MyPWGENEnumUsersCallBack()函数,来完成对用户名的枚举,具体代码如下:
#pragmacode(“UseGen.DLL”)
#include”usegenap.h”
#pragmacode()
CMN_ERRORerr;
CMN_ERRORError;
LPCMN_ERRORerror;
DWORDcountname;
charusedata;
char*DSNNAME=NULL;
charproject[_MAX_PATH+1];
externBOOLMyPWGENEnumUsersCallBack(LPWGEN_USERINFOlpUserInfo,PVOIDlpUser); //CALLBACAK类型函数声明。
VOIDEnumUser() {
if(DMGetRuntimeProject(project,sizeof(project),&Error))
//运行项目路径及名称 {
DM_PROJECT_INFOProjectInfomation;
if(DMGetProjectInformation(project,&ProjectInfomation,&Error))
//运行项目的信息 {
DSNNAME=SysMalloc(strlen(ProjectInfomation.szDSNName)+1);
if(DSNNAME) {
strcpy(DSNNAME,ProjectInfomation.szDSNName);//数据管DSN信息
strcat(DSNNAME,”R”);
if(PWGENConnect(DSNNAME,&err))
//建立与数据库的连接 {
PWGENEnumUsers(&countname,MyPWGENEnumUsersCallBack,&usedata,error);
//调用CALLBACK类型的函数
SetTagSDWord(“NewTag”,countname); //项目中用户名个数
PWGENDisconnect(&err);
//断开与数据库的连接 } } } } }
2.2MyPWGENEnumUsersCallBack()函数
MyPWGENEnumUsersCallBack()函数有两个参数,其中LPWGEN_USERINFO类型的数据结构定义如下:
typedef struct {TCHAR login[MAX_LOGIN];//存储用户名。
TCHAR group[MAX_LOGIN];//用户名所属工作组的名称。int expiration_time;//自动注销时间。}PWGEN_USERINFO;
另一个PVOID指针类型的参数lpUser,提供提供回调功能,回调次数由项目中用户数量确定。
MyPWGENEnumUsersCallBack()函数的具体代码如下:
#pragmacode(“UseGen.DLL”)
#include”usegenap.h”
#pragmacode()
BOOLMyPWGENEnumUsersCallBack(LPWGEN_USERINFOlpUserInfo,PVOIDlpUser)
{
staticintn=0;
if(n==GetTagSDWord(“NewTag”))
//用以确定下拉框显示的用户名数量。 n=1; else
n=n+1;
switch(n) {
case9:SetTagChar(“username10”,lpUserInfo->login);
break;
case8:SetTagChar(“username9”,lpUserInfo->login);
break;
case7:SetTagChar(“username8”,lpUserInfo->login);
break;
case6:SetTagChar(“username7”,lpUserInfo->login);