有关WINCC项目函数的参数传递!

已锁定

【三.三】

  • 帖子

    96
  • 精华

    1
  • 被关注

    5

论坛等级:游民

注册时间:2009-05-27

普通 普通 如何晋级?

有关WINCC项目函数的参数传递!

1683

2

2012-03-21 11:33:26

最近小弟编了一段控制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"运行正常。现在不知道怎么弄了!
有关WINCC项目函数的参数传递! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32566条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。