资源描述
1.切换画面按钮 2
2.设定BIT变量当前值 2
3.取当前登陆用户 2
4.取硬盘剩余容量 3
5.以图像模式显示(灯、钮)等 5
6.自定义对象 6
7.OK返回值 19
8.小键盘 19
9.PID传递页面C脚本 23
10.将变量B的值赋给变量A(无符号16位) 25
11.乒乓键 26
12.C脚本、脉冲延时 27
13.CONFIGURATION TOOOL 28
14.用“笔组”实现一张页面做趋势 28
15.滑竿,SLIDER CONTROL的使用 34
16.切换语言 35
1.切换画面按钮
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
SetPictureName(lpszPictureName,"PictureWindow1","HS_MODE.Pdl"); //设定PictureWindow1填充为页面HS_MODE.Pdl
SetTagChar("TT","操作模式"); //Return-Type: BOOL //设定字符串变量TT当前值为“操作模式”以显示页眉
}
2.设定BIT变量当前值
SetTagBit("N3_VALVE_RESET",0);
3.取当前登陆用户 @CurrentUser
4.取硬盘剩余容量
5.以图像模式显示(灯、钮)等
智能对象\状态显示
选透明颜色
6.自定义对象
C动作
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
Valve(lpszPictureName,lpszObjectName); //Return-Type: void
}
全局脚本\项目函数
void Valve(char *lpszPictureName, char *lpszObjectName)
{
char* Tagname = GetPropChar(lpszPictureName, lpszObjectName, "ObjectName");//设TAGNAME当前值为N3_HS_A
char* TitleName = GetPropChar(lpszPictureName, lpszObjectName, "TITLE");//设TITLENAME当前值为热风炉自动
char* Name = GetPropChar(lpszPictureName, lpszObjectName, "PICNAME");//设NAME当前值为QD_BUTTON
char* DIS = GetPropChar(lpszPictureName, lpszObjectName, "DIS");//设DIS是否显示,本变量空用于下面的阀函数
static BOOL visble; //声明BOOL量VISBLE
long lLeft ; //声明常整数1LEFT,用于弹出框的左上角
long lTop;
BOOL Bool=TRUE; //声明BOOL量BOO1为真
LINKINFO linkinfo; //Structure definition结构定义
visble=TRUE; //设VISBLE当前值为真
//lLeft =599;
//lTop=327;
lLeft =GetLeft(lpszPictureName,lpszObjectName)+50; //1LEFT当前值为当前页面的当前对象的左坐标+50,注意不是VALUE的值而是当前对象按钮“热风炉自动”
lTop=GetTop(lpszPictureName,lpszObjectName); //1TOP当前值为当前页面的当前对象的上坐标
if (lLeft <20) //限制坐标范围
{
lLeft =20;
}
if (lLeft >1240)
{
lLeft =1240;
}
if (lTop>200)
{
lTop=200;
}
if (lTop<20)
{
lTop=20;
}
SetLeft(lpszPictureName,"value",lLeft); //设定当前页面中画面窗口VALUE的左上角坐标
SetTop(lpszPictureName,"value",lTop);
SetPictureName(lpszPictureName,"value",".PDL"); //设定当前页面中画面窗口VALUE填充页面为.PDL
PDLRTSetPropEx(0,lpszPictureName,"value","Visible",VT_BOOL,&visble,NULL,NULL,0,NULL,NULL); //设定 VALUE的一些属性,帮助里未查到,待查
SetPropChar(lpszPictureName,"value","CaptionText",TitleName); //设定VALUE的CAPTION TEXT为热风炉自动
SetPropChar(lpszPictureName,"value","TagPrefix",Tagname); //为VALUE中所有变量增加前缀N3_HS_A
SetPropChar(lpszPictureName,"value","PictureName",Name); //为VALUE填充页面为QD_BUTTON
SetPropChar(Name,"text","Text",Tagname);//为当前页面名字叫TEXT的TEXT属性设定为TAGNAME的当前值,本项目用于阀函数
SetPropChar(Name,"Button4","Visible",DIS); //为当前页面名字叫BUTTON4的VISIBLE属性设定为DIS的当前值,本项目用于阀函数,下同
SetPropChar(Name,"Button5","Visible",DIS);
SetPropChar(Name,"Button10","Visible",DIS);
SetPropChar(Name,"Button11","Visible",DIS);
}
画面窗口定义如下:
QD_BOTTON页面定义如下:
其中确定按钮定义如下:
动作按下置1,抬起置0
取下按钮为关闭当前窗口
阀门
自定义对象
C脚本
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
Valve(lpszPictureName,lpszObjectName); //Return-Type: void
}
页面VALVE_FUNCTION_STAME如下
其中设备名称定义为TEXT,取的即为OBJECTNAME,本例中为N3_SV101
其中远程等状态灯显示为结构变量后缀 .XXX
其中打开、关闭等按钮(未知是否需要确定取消),本例中是这样实现的,以打开按钮为例:
实际上本例中打开按钮有2个重叠在一起
下面的打开按钮(黑色边框)控制实际的IO后缀:
上面的打开按钮的可见性由DIS变量的当前值确定,若DIS为真,则蓝色边框打开按钮可见,蓝打开按钮(BOTTON4)控制PIC1可见
8
PIC1填充为OPEN页面
OPEN页面如下:
其中确定按钮为BOTTON8,因所有变量前缀已赋值,则确定按钮仍连接实际IO后缀,同黑色打开按钮。
7.OK返回值
本例中如此操作有些繁琐,对于需要确认的按钮可以用OK返回值实现,则简便许多,代码如下:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
int ret_val;
ret_val=MessageBox(NULL,"你确定要顺启流程吗?","请确认此动作",MB_OKCANCEL|MB_SETFOREGROUND|MB_SYSTEMMODAL);
if(ret_val==1)SetTagBit("FLOW.STR_FM",1);
}
8.小键盘
,有时候操作人员不希望用键盘操作而是希望用鼠标操作,如图:
其中绿色为输出值:
1、2、3~.按钮的C脚本一样就是对象名称不同,对象名称为当前按钮:
C脚本如下:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
char*A=GetPropChar(lpszPictureName, "TAG", "TEXT");
char*B=GetPropChar(lpszPictureName, lpszObjectName, "ObjectName");
strcat(A,B);
SetPropChar(lpszPictureName, "TAG", "TEXT",A);
}
空白域定义为TAG,无脚本
确定按钮将TAG赋给SP,C脚本如下:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
char*A=GetPropChar(lpszPictureName, "TAG", "TEXT");
SetTagChar(".SP",A);
SetPropChar(lpszPictureName, "DIS", "OutputValue","1");
}
取消按钮清空TAG,代码如下:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetPropChar(lpszPictureName, "TAG", "TEXT","");
}
9.PID传递页面C脚本
附录 PID传递页面C脚本:
void PID(char *lpszPictureName, char *lpszObjectName)
{
char* Tagname = GetPropChar(lpszPictureName, lpszObjectName, "ObjectName");
char* TitleName = GetPropChar(lpszPictureName, lpszObjectName, "TITLE");
char* Name = GetPropChar(lpszPictureName, lpszObjectName, "PICNAME");
char* MAX = GetPropChar(lpszPictureName, lpszObjectName, "MAX");
char* MIX = GetPropChar(lpszPictureName, lpszObjectName, "MIX");
char* UNIT = GetPropChar(lpszPictureName, lpszObjectName, "UNIT");
char* PV = GetPropChar(lpszPictureName, lpszObjectName, "PV");
char* SP = GetPropChar(lpszPictureName, lpszObjectName, "SP");
char* Out = GetPropChar(lpszPictureName, lpszObjectName, "OUT");
char* In = GetPropChar(lpszPictureName, lpszObjectName, "IN");
char* MANUAL_SP= GetPropChar(lpszPictureName, lpszObjectName, "MANUAL_SP");
//char* PID = GetPropChar(lpszPictureName, lpszObjectName, "PID");
static BOOL visble;
long lLeft ;
long lTop;
BOOL Bool=TRUE;
LINKINFO linkinfo;
visble=TRUE;
lLeft =50;
lTop=50;
//lLeft =GetLeft(lpszPictureName,lpszObjectName)+50;
//lTop=GetTop(lpszPictureName,lpszObjectName);
//if (lLeft <20)
//{
//lLeft =20;
//}
//if (lLeft >840)
//{
//lLeft =840;
//}
//if (lTop>500)
//{
//lTop=500;
//}
//if (lTop<20)
//{
//lTop=20;
//}
SetLeft(lpszPictureName,"value",lLeft);
SetTop(lpszPictureName,"value",lTop);
SetPictureName(lpszPictureName,"value",Name);
PDLRTSetPropEx(0,lpszPictureName,"value","Visible",VT_BOOL,&visble,NULL,NULL,0,NULL,NULL);
SetPropChar(lpszPictureName,"value","CaptionText",TitleName);
SetPropChar(lpszPictureName,"value","TagPrefix",Tagname);
SetPropChar(lpszPictureName,"value","PictureName",Name);
SetPropChar(Name,"text","Text",Tagname);
SetPropChar(Name,"IO1","OutputValue",MAX);
SetPropChar(Name,"IO2","OutputValue",MIX);
SetPropChar(Name,"IO3","OutputValue",UNIT);
SetPropChar(Name,"IO4","OutputValue",PV);
SetPropChar(Name,"IO5","OutputValue",SP);
SetPropChar(Name,"IO6","OutputValue",Out);
SetPropChar(Name,"IO7","OutputValue",In);
SetPropChar(Name,"IO8","OutputValue",MANUAL_SP);
}
10.将变量B的值赋给变量A(无符号16位)
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
SetTagWord("A", GetTagWord("B"));
SetTagWord("TOPP2_E_TOP_SYS_STOP", 0);
SetTagWord("TOPP2_E_TOP_SYS_RUN", 1);
}
11.乒乓键
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
//Return-Type: BOOL
BOOL bstate;
//Get the current state of the tag
bstate = GetTagBit("TOPP2_E_r_SEL");
if(bstate)
{
SetTagBit("TOPP2_E_r_SEL",0);
}
else
{
SetTagBit("TOPP2_E_r_SEL",1);
}
}
另一种:SetTagBit("DEN_20",1-GetTagBit("DEN_20"));
12.C脚本、脉冲延时
在wincc 实现延时,比较浪费资源,不建议这么做。
按钮按下输出个3秒的脉冲
void delay(int tm)
{
time_t t1,t2;
double tt;
time(&t1);
for(;;)
{
time(&t2);
tt=difftime(t2,t1);
if (tt>=tm)
break;
}
}
在C脚本调用
SetTagBit("变量",1);
delay(60);//60为时间 自己设定
SetTagBit("变量",0);
13.CONFIGURATION TOOOL
功能:修改结构变量、EXCEL导入报警、趋势标签,WINCC安装盘自带。
14.用“笔组”实现一张页面做趋势
增加内部标签(支持多项目复制、粘贴)
TagTrendType:用于替换笔组当前值
CurrentPage、PreviousPage:用于显示当前页面及后退到上幅页面,和本例关系不大
复制全局脚本VBS Global.bmo,支持多项目复制粘贴
查找字符串“mainscreen”,替换为自己项目的主页面名
在自己项目的主页面增加页面窗体PictureWindow4\PictureWindow5,填充页面为空,将主窗体页面重命名为PictureWindow3
拷贝趋势页面S_Trend.PDL到当前工程。
定义笔组,如:
If ObjTag.Value = "Speed_Strand1" Then
AddTrend TrendObj, "1. Strand4 Actual Casting Speed", "WD_Act_Speed_4", RGB(0, 0, 0), 0, 5
AddTrend TrendObj, "2. Strand4 5#Withdrawal Actual Pressure", "WD5_Pressure_Actual_4", RGB(255, 0, 0), 0, 20
AddTrend TrendObj, "3. Strand4 5#Withdrawal Actual Gap", "WD5_Gap_Actual_4", RGB(0, 128, 0), 200, 450
AddTrend TrendObj, "4. Strand4 5#Withdrawal Set Gap", "WD5_Gap_Set_4", RGB(0, 0, 255), 200, 450
End If
上例中, 笔组名称为"Speed_Strand1",其中包括4只笔,以第一只为例,其中
"1. Strand4 Actual Casting Speed" 为WINCC显示的描述项,支持中文。
"WD_Act_Speed_4":为变量标签。
RGB(0, 0, 0):为笔颜色,三原色
0, 5:为WINCC显示时Y轴量程,X时间轴不需要定义,在S_TREND中已有。笔组最少一只笔,最多9只笔。
在画面增加按钮调用笔组"Speed_Strand1":
Sub OnClick(ByVal Item)
MyShowTrend("Speed_Strand1")
End Sub
另:VBS中多段代码取当前登陆用户名,若为空则MESSAGEBOX,故使用时需用个用户名登陆。
因使用了全局脚本,故测试时只运行当前页面则无法实现趋势功能,必须整个项目运行且勾选“全局脚本运行系统”才能看到效果
15.滑竿,SLIDER CONTROL的使用
1、在控件里调用WINCC SLIDER CONTROL,界面比较友好,但不能直接关联TAG变量,需要脚本如下:
Dim Slider
Set Slider=ScreenItems("SliderCtrl")
HMIRuntime.Tags("tag").Write Slider.Position
把代码写在控件的“事件”下的“对象事件”下的“change”事件里便可以改变了!
其中SliderCtrl是OCX控件WINCC SLIDER CONTROL的名称,tag是wincc变量
2、使用标准\窗口对象\滚动条对象,可直接关联变量标签
16.切换语言
SETLANGUE(0X0404);中文
SETLANGUE(0X0409);英文
展开阅读全文