西门子给的例子
1.在使用wincc6.2 SP3遇到如下问题:
我想在一个界面上做两个按钮,两个按钮连接一个wincc中定义好的内部变量a。a为内部变量是有符号16位数,
当a等于1时,我输入输出域显示内容为1个变量;
当a等于1时,我输入输出域显示内容为另一个变量;
我想用VB做脚本,不知道怎么编辑是对的,已经试过可是编译总是遇到问题,您能给指导一下吗?
在画面中新建一个输入/输出域,打开属性对话框。选择
属性, 输出/输入, 域类型:输出
属性, 输出/输入, 输出值,右键,VBS动作。
以下VBS脚本仅供参考:
Dim a,x,y,temp
Settemp=HMIRuntime.ActiveScreen.ScreenItems("输入输出域1")
Set a = HMIRuntime.Tags("a")
a.Read
Set x = HMIRuntime.Tags("x")
x.Read
Set y = HMIRuntime.Tags("y")
y.Read
If a.value=1 Then
temp.OutputValue = x.Value
End If
If a.value<>1 Then
temp.OutputValue = y.Value
End If
2.我把用户在界面上输入的数值a,给内部变量b,
根据一个内部变量C的值:
c=1,把b给外部变量k1
c=2,把b给外部变量k2
If HMIRuntime.Tags("c").Read=1Then
HMIRuntime.Tags("K1").WriteHMIRuntime.Tags("b").Read
End If
If HMIRuntime.Tags("c").Read=2Then
HMIRuntime.Tags("K2").WriteHMIRuntime.Tags("b").Read
End If
1.输出值显示
根据DP号不同的值判断输出域显示不同的频率反馈。
在属性/输入输出域/域类型中编辑VB脚本
Dim a,temp
Set a =HMIRuntime.Tags("DP号")
a.Read
Settemp=HMIRuntime.ActiveScreen.ScreenItems("输入输出域3")
If a.Value=1 Then
Dim b
Set b =HMIRuntime.Tags("频率反馈_1")
b.Read
temp.OutputValue=b.Value
End If
If a.Value =3 Then
Dim c
Set c =HMIRuntime.Tags("频率反馈_2")
c.Read
temp.OutputValue=c.Value
End If
2.圆颜色变化(运行状态)
根据不同的DP号,圆显示不同的变量,
根据变量的值是0还是1,圆显示棕色还是绿色
属性/圆/背景色中编辑VB脚本
Dim a,b,c, temp
Settemp=HMIRuntime.ActiveScreen.ScreenItems("圆1")
Set a =HMIRuntime.Tags("DP号")
a.Read
If a.Value=1 Then
Set b =HMIRuntime.Tags("启停状态_1")
b.Read
If b.Value=1 Then
temp.BackColor=RGB(0,255,0)
Else
temp.BackColor=RGB(128,128,128)
End If
End If
If a.Value=3 Then
Set c =HMIRuntime.Tags("启停状态_2")
c.Read
If c.Value=1 Then
temp.BackColor=RGB(0,255,0)
Else
temp.BackColor=RGB(128,128,128)
End If
End If
3.按钮颜色变化
每次按按钮给变频器号赋值
事件/鼠标/鼠标动作中编辑VB脚本
Dim c
Set c=HMIRuntime.Tags ("变频器号")
c.write 1
根据变频器号不同的值,相应的按钮显示不同的颜色
属性/圆/背景色中编辑VB脚本
Dim a
Set a=HMIRuntime.Tags ("变频器号")
a.read
Dim b,b1
Setb=HMIRuntime.ActiveScreen.ScreenItems("按钮21")
Setb1=HMIRuntime.ActiveScreen.ScreenItems("按钮13")
If a.value=1 Then
b.BackColor=RGB(0,202,202)
Else
b.BackColor=RGB(0,94,187)
End If
If a.value=2 Then
b1.BackColor=RGB(0,202,202)
Else
b1.BackColor=RGB(0,94,187)
End If
4.手动输入不同的参数
根据DP号不同的值,把中间变量(频率给定)的值写给不同的参数(频率给定_1、频率给定_2)
在事件/对象/键盘/释放中编辑VB脚本
Dim a,b,c,d
Set a=HMIRuntime.Tags ("DP号")
Set b=HMIRuntime.Tags ("频率给定")
a.read
b.read
Set c=HMIRuntime.Tags ("频率给定_1")
Set d=HMIRuntime.Tags ("频率给定_2")
If a.value=1 Then
c.write b.value
End If
If a.value=3 Then
d.write b.value
End If
5.赋值(定值)
选井启动界面,给频率赋值的快捷键C脚本,有提示文本
DP号为不同的值,给不同的频率给定赋值
事件/鼠标/鼠标动作中编辑C脚本
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
HWND hWnd=NULL;
int iRet;
hWnd=FindWindow(NULL,"");
iRet=MessageBox(hWnd,"是否将频率改为50HZ ?","提示",MB_YESNO|MB_APPLMODAL);
if (iRet==IDYES)
{SetTagWord("频率给定",50);
if (GetTagByte("DP号")==1)
SetTagWord("频率给定_1",50);
if (GetTagByte("DP号")==3)
SetTagWord("频率给定_2",50);
}
历史曲线中的思路:
1.点击按钮,给变频器号赋值
Dim a
Set a=HMIRuntime.Tags ("变频器号")
a.write 1
2. 根据变频器号的不同值,界面上方的井号显示不同的变量。
Dim a,temp
Settemp=HMIRuntime.ActiveScreen.ScreenItems("输入输出域16")
Set a =HMIRuntime.Tags("变频器号")
a.Read
If a.Value=1 Then
Dim b
Set b =HMIRuntime.Tags("1#变频器对应井号内部变量地址")
b.Read
temp.OutputValue=b.Value
End If
If a.Value =2 Then
Dim c
Set c =HMIRuntime.Tags("2#变频器对应井号内部变量地址")
c.Read
temp.OutputValue=c.Value
End If
3. 1号变频器的按钮颜色中根据DP号的不同值,相应的按钮显示不同的颜色。
4.根据相应变频器号的DP号的不同,调用不同的界面(C脚本做做的)
if (GetTagByte("1#变频器对应DP号")==1)
OpenPicture("1#历史曲线.PDL");
if (GetTagByte("1#变频器对应DP号")==3)
OpenPicture("2#历史曲线.PDL");
事件记录:
有故障或动作出现时只在事件记录中出现一次,没有故障或动作时,就不再报。
1. 记录中打开系统块,将状态添加。只选择进入。
2. 记录界面,报警控件属性中/消息块/
3. 态选中/在消息列表中将现有的消息块中的状态添加到选中的消息块中、确定。
4. 可以实现。
常用的C脚本
1.登陆用户
#pragma code("useadmin.dll")
#include "PWRT_api.h"
#pragma code()
PWRTLogin('c');
2.注销用户
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
HWND hWnd=NULL;
int iRet;
hWnd=FindWindow(NULL,"");
iRet=MessageBox(hWnd, "是否注销 ?","提示",MB_YESNO|MB_APPLMODAL);
if (iRet==IDYES)
PWRTLogout();
3.退出组态
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
HWND hWnd=NULL;
int iRet;
hWnd=FindWindow(NULL,"");
iRet=MessageBox(hWnd,"是否退出组态?","提示",MB_YESNO|MB_APPLMODAL);
if (iRet==IDYES)
DeactivateRTProject ();
4.切换本机为主机
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
HWND hWnd=NULL;
int iRet;
hWnd=FindWindow(NULL,"");
iRet=MessageBox(hWnd,"是否将本机切换为主机 ?","提示",MB_YESNO|MB_APPLMODAL);
if (iRet==IDYES)
SetTagWord("主从选择",1);
密码登陆界面
1.密码正确执行以下语句
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
HWND hWnd=NULL;
int iRet;
hWnd=FindWindow(NULL,"");
iRet=MessageBox(hWnd,"密码正确,请设置DP号和井号!","提示",MB_YESNO|MB_APPLMODAL);
if (iRet==IDYES)
if (GetTagByte("密码")==123)
OpenPicture("进入系统设置(1-10).PDL");
SetTagWord("密码",0);
2.如果密码不正确。执行以下语句
Dim a
Set a=HMIRuntime.Tags ("密码")
a.read
If a.value<>123Then
MsgBox"密码不正确,请重新输入"
End If
按钮颜色:
RGB(0,202,202)按钮选中颜色
RGB(0,94,187)按钮未选中颜色
RGB(0,255,0) 变频器运行时状态灯颜色
RGB(128,128,128) 变频器待机模式下运行状态灯颜色
RGB(255,0,0)变频器停机时状态灯颜色
RGB(255,255,0)变频器故障灯颜色
密码:
参数设置页面密码为:123
用户权限登陆账户:操作员1,密码:123456
操作员2,密码:654321
权限设置:
按钮属性/其他/授权/用户管理,设置后需要登陆用户账号才能操作,否则提示没有许可权
按钮属性/允许操作员控制/否:按钮将显示为灰色状态或者提示更不了
输入输出域/允许操作员控制/否:输入输出域更不了数值,没有任何提示。
根据选择输入输出域的不同,给temp赋不同的值,根据不同的temp值,把数字键盘的值temp1赋给相应的输入输出域
Dim a,b,c,d,e
Set a=HMIRuntime.Tags ("temp")
Set b=HMIRuntime.Tags ("temp1")
a.read
b.read
Set c=HMIRuntime.Tags ("1")
Set d=HMIRuntime.Tags ("2")
Set e=HMIRuntime.Tags ("3")
If a.value=1 Then
c.write b.value
Elseif a.value=2 Then
d.write b.value
Elseif a.value=3 Then
e.write b.value
End if