最近小弟编了一段控制WINCC画面的脚本,但是自己觉得太过繁琐,经“城外之人”帮忙简化后,我想封装成项目函数,以更方便调用。但是出现了些问题!
++++++++++++++++++++++++++++++++++
原程序
#include "apdefap.h"
void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, long value)
{
//PIC_Name 画面窗口所在主画面名称
//PIC_Wind 画面窗口名称
#define PIC_Name "S0.PDL"
#define PIC_Wind1 "状态画面1"
#define PIC_Wind2 "状态画面2"
#define PIC_Wind3 "状态画面3"
#define PIC_Wind4 "状态画面4"
#define PIC_Wind5 "状态画面5"
#define PIC_Wind6 "状态画面6"
#define PIC_Wind7 "状态画面7"
#define PIC_Wind8 "状态画面8"
#define PIC_Wind9 "状态画面9"
#define PIC_Wind10 "状态画面10"
#define PIC_Wind11 "状态画面11"
#define PIC_Wind12 "状态画面12"
int Value=0;
Value=GetTagWord("工作工位选择");
if (Value==1)//++++1#炉++++++++
{
SetVisible(PIC_Name,PIC_Wind1 ,1);
SetVisible(PIC_Name,PIC_Wind2 ,0);
SetVisible(PIC_Name,PIC_Wind3 ,0);
SetVisible(PIC_Name,PIC_Wind4 ,0);
SetVisible(PIC_Name,PIC_Wind5 ,0);
SetVisible(PIC_Name,PIC_Wind6 ,0);
SetVisible(PIC_Name,PIC_Wind7 ,0);
SetVisible(PIC_Name,PIC_Wind8 ,0);
SetVisible(PIC_Name,PIC_Wind9 ,0);
SetVisible(PIC_Name,PIC_Wind10 ,0);
SetVisible(PIC_Name,PIC_Wind11 ,0);
SetVisible(PIC_Name,PIC_Wind12 ,0);
}
else if (Value==2)//++++2#炉++++++++
{
SetVisible(PIC_Name,PIC_Wind1 ,0);
SetVisible(PIC_Name,PIC_Wind2 ,1);
SetVisible(PIC_Name,PIC_Wind3 ,0);
SetVisible(PIC_Name,PIC_Wind4 ,0);
SetVisible(PIC_Name,PIC_Wind5 ,0);
SetVisible(PIC_Name,PIC_Wind6 ,0);
SetVisible(PIC_Name,PIC_Wind7 ,0);
SetVisible(PIC_Name,PIC_Wind8 ,0);
SetVisible(PIC_Name,PIC_Wind9 ,0);
SetVisible(PIC_Name,PIC_Wind10 ,0);
SetVisible(PIC_Name,PIC_Wind11 ,0);
SetVisible(PIC_Name,PIC_Wind12 ,0);
}
else if (Value==3)//++++3#炉++++++++
.
.
.
.
.
.
else if (Value==12)//++++12#炉++++++++
{
SetVisible(PIC_Name,PIC_Wind1 ,0);
SetVisible(PIC_Name,PIC_Wind2 ,0);
SetVisible(PIC_Name,PIC_Wind3 ,0);
SetVisible(PIC_Name,PIC_Wind4 ,0);
SetVisible(PIC_Name,PIC_Wind5 ,0);
SetVisible(PIC_Name,PIC_Wind6 ,0);
SetVisible(PIC_Name,PIC_Wind7 ,0);
SetVisible(PIC_Name,PIC_Wind8 ,0);
SetVisible(PIC_Name,PIC_Wind9 ,0);
SetVisible(PIC_Name,PIC_Wind10 ,0);
SetVisible(PIC_Name,PIC_Wind11 ,0);
SetVisible(PIC_Name,PIC_Wind12 ,1);
}
//+++++++++++++++++屏蔽显示+++++++++++++++
else
{
SetVisible(PIC_Name,PIC_Wind1 ,0);
SetVisible(PIC_Name,PIC_Wind2 ,0);
SetVisible(PIC_Name,PIC_Wind3 ,0);
SetVisible(PIC_Name,PIC_Wind4 ,0);
SetVisible(PIC_Name,PIC_Wind5 ,0);
SetVisible(PIC_Name,PIC_Wind6 ,0);
SetVisible(PIC_Name,PIC_Wind7 ,0);
SetVisible(PIC_Name,PIC_Wind8 ,0);
SetVisible(PIC_Name,PIC_Wind9 ,0);
SetVisible(PIC_Name,PIC_Wind10 ,0);
SetVisible(PIC_Name,PIC_Wind11 ,0);
SetVisible(PIC_Name,PIC_Wind12 ,0);
}
}
++++++++++++++++++++++++++++++++++++
简化程序
#define PIC_Name "S0.PDL" //PIC_Name 画面窗口所在主画面名称
int Value=GetTagWord("工作工位选择"); //Control_TAG 控制画面变量
char sWndName[50];
short int i;
//先隐藏所有画面窗口(12个画面窗口)
for (i=1;i<=12;i++)
{
sprintf(sWndName,"状态画面%i",i); //PIC_sWnd 画面窗口的对像名称前缀
SetVisible(PIC_Name,sWndName ,0);
}
//再显示某个画面窗口
if (Value>0)
{
sprintf(sWndName,"状态画面%i",Value);
SetVisible(PIC_Name,sWndName ,1);
}
++++++++++++++++++++++++++++++++++
封装成项目函数
void PIC(char *PIC_Name,char * sWnd,char *TAG)
{
//PIC_Name 画面窗口所在主画面名称
//sWnd 画面窗口对像名称前缀
//TAG 控制变量
int Value=GetTagWord(TAG); //Control_TAG 控制画面变量
char sWndName[50];
short int i;
//先隐藏所有画面窗口(12个画面窗口)
for (i=1;i<=12;i++)
{
sprintf(sWndName,"sWnd%i",i); //PIC_sWnd 画面窗口的对像名称前缀
SetVisible(PIC_Name,sWndName ,0);
}
//再显示某个画面窗口
if (Value>0)
{
sprintf(sWndName,"sWnd%i",Value);
SetVisible(PIC_Name,sWndName ,1);
}
}
++++++++++++++++++++++++++++++++
调用项目函数
PIC("S0.PDL","状态画面","工作工位选择"); //Return-Type: void
编译成功,运行状态不对,怀疑st传递有错!经测试直接将"状态画面"替换项目函数的"sWnd"运行正常。现在不知道怎么弄了!