文档库 最新最全的文档下载
当前位置:文档库 › WINCC动画脚本动态实例

WINCC动画脚本动态实例

WINCC动画脚本动态实例
WINCC动画脚本动态实例

WINCC动画脚本

电机风扇旋转(几何---起始角度):

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static DWORD f=20;

if (GetTagBit("DI电机运行信号")) {

f= f+30;

if (f==360) (f=0);

}

return f;

}

电机风扇旋转(几何---结束角度):

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static DWORD i=80;

if (GetTagBit("DI电机运行信号")) {

i = i+30;

if (i==360) (i=0);

}

return i;

}

**物料水平右移动(几何---位置X)(停车后,物料回到原点)**

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static int a=350;

if (GetTagBit("DI电机运行信号") && (a<=730)) {

a+=20;

if (a>=720) (a=350);

}

if (!GetTagBit("DI电机运行信号")) (a=350);

return a;

}

物料水平右移动(几何---位置X)(停车后,物料停在该点)

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static int a=350;

if (GetTagBit("DI电机运行信号") && (a<=730)) {

a+=20;

if (a>=720) (a=350);

}

return a;

}

物料向上移动(几何---位置Y)(停车后,物料停在该点)

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

static int b=450;

if (GetTagBit("DI电机运行信号") && (b>=290)) {

b-=10;

if (b<=280) (b=450);

}

return b;

}

年月日(静态文本)

#include "apdefap.h"

char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

time_t timer ;

struct tm *ptm;

char *p;

time(&timer);

ptm =localtime(&timer);

p =SysMalloc(9);

sprintf(p,"d/d/d",ptm->tm_year-100+2000,ptm->tm_mon+1,ptm->tm_mday);

return(p);

}

时分秒(静态文本)

#include "apdefap.h"

char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

time_t timer ;

struct tm *ptm;

char *p;

time(&timer);

ptm =localtime(&timer);

p =SysMalloc(9);

sprintf(p,"d:d:d",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);

return(p);

}

登陆到指定的用户名无须手动输入(按钮操作)

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {

#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()

PWRTSilentLogin("用户名", "口令");

}

**显示登陆对话框无须热键(按钮操作)**

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {

#pragma code ("useadmin.dll")

#include "PWRT_api.h"

#pragma code( )

PWRTLogin('c');

}

退出WINCC运行(按钮操作)

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {

{

DeactivateRTProject ();

}

}

单位递增按钮(到上限不提示出错)

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

DWORD value;

value=GetTagDWord("AI标签");

if (value>90) (value=上限);

else value=value+10;

SetTagDWord("AI标签",value);

}

单位递减按钮(到下限不提示出错)

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

DWORD value;

value=GetTagDWord("AI标签");

if (value<10) (value=下限);

else value=value-10;

SetTagDWord("AI标签",value);

}

**单位递增按钮(到上限提示出错)**

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

DWORD value;

HWND hWnd=NULL ;

hWnd=FindWindow(NULL,"Wincc-运行系统- ");

value=GetTagDWord("AI标签");

if (value<=90) (value=value+10);

else MessageBox(hWnd,"已到达上限值!","错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL); SetTagDWord("AI标签",value);

}

**单位递减按钮(到下限提示出错)**

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

DWORD value;

HWND hWnd=NULL ;

hWnd=FindWindow(NULL,"Wincc-运行系统- ");

value=GetTagDWord("AI标签");

if (value>0) (value=value-10);

else MessageBox(hWnd," 已到达下限值!"," 错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL); SetTagDWord("AI标签",value);

}

**自动登陆到指定的用户(画面属性--其它—**)**

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()

PWRTSilentLogin("用户名", "口令");

return(0X0);

}

**询问框(最好用于单机启动,组启也可,2个按钮,NO不操作)**

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {

HWND hWnd=NULL;

int 上位启动信号;

hWnd=FindWindow(NULL,"WinCC C-Course");

if (GetTagBit("DI备妥"))

{

上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!",

MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);

printf("\r\nExample 3\r\n");

if (上位启动信号==IDNO) (printf("User selected NO button \r\n"));

else (SetTagByte("上位启动信号",1));

}

else

MessageBox(hWnd,"电源未备妥,请查证后重试!","启动!",

MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

**询问框(最好用于单机启动,组启也可,3个按钮,NO复位)**

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) {

HWND hWnd=NULL;

int上位启动信号;

hWnd=FindWindow(NULL,"WinCC C-Course");

if (GetTagBit("DI备妥"))

{

上位启动信号=MessageBox(hWnd," 电源已备妥,您现在确定要启动吗?","启动!",

MB_YESNOCANCEL|MB_ICONQUESTION|MB_APPLMODAL);

if (上位启动信号==IDCANCEL) (printf("User selected NO button \r\n"));

else

{

if (上位启动信号==IDYES) (SetTagByte("上位启动信号",1));

else (SetTagByte("上位启动信号",0));

}

}

else

MessageBox(hWnd," 电源未备妥,请查证后重试!","启动!",

MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

**搅拌器左侧扇页(几何—宽度)**

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

static int h=50;

static int u=0;

if (GetTagBit("DI电机运行信号"))

{

if ((h>0)&&(h<=50))

{

(h-=2);

return h;

}

if ((u>=0)&&(u<50))

(u+=2);

return u;

}

u=0;

h=50;

return h;

return u;

}

if (!GetTagBit("DI电机运行信号")){

h=50;

u=0;

return h;

return u;

}

}

**搅拌器左侧扇页(几何—位置X,右侧扇页没有位置变化)**

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static int h=75;

static int u=125;

if (GetTagBit("DI电机运行信号"))

{

if ((h>=75)&&(h<125))

{

(h+=2);

return h;

}

if ((u<=125)&&(u>75))

{

(u-=2);

return u;

}

u=125;

h=75;

return h;

return u;

}

if (!GetTagBit("DI电机运行信号")){

h=75;

u=125;

return h;

return u;

}

**显示层按钮**

Sub X6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X6309X94AE2X0000X653E_OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y) Dim objScreen

Dim CountLayer

Set objScreen = HMIRuntime.Screens("layer")

For CountLayer=1 To 32 Step 1

https://www.wendangku.net/doc/816877149.html,yers(CountLayer).Visible = vbFalse

Next

https://www.wendangku.net/doc/816877149.html,yers(n).Visible = vbTrue

End Sub

n=层数+1

初始画面程序(画面空地--属性--事件--其它--打开画面--动作)

**打印按钮**

#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)

{

WinExec("PRTSCR.EXE -hardcopy",SW_SHOWNORMAL);

}

**一个圈代表电机两种状态**

#include "apdefap.h"

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

{

char* opentag="DI1电机运行信号";

char* closetag="DI2电机运行信号";

BOOL open,close;

open = GetTagBit(opentag);

close = GetTagBit(closetag);

if (open)

return CO_GREEN;

if (close)

return CO_BLUE;

}

wincc 常用脚本

DeactivateRTProject ();//退出系统 #pragma code("useadmin.dll") #include"PWRT_api.h" #pragma code() char* CUser=NULL; CUser=GetTagChar("@CurrentUser"); if (strlen(CUser)==0) { PWRTSilentLogin("operator","123456");//用户“operator",密码"123456”登录} OpenPicture("@MAIN.pdl"); } 在画面中结合不同按钮来组态下面 C 操作 Login Action for login (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); Logout Action for logout (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); PWRTLogin 参数必须是CHAR 字符。它指定了显示对话框的监视器。如果只使用一个监视器,那么保留默认参数“c”或者指定“1”。 注意 可以使用PASSLoginDialog 函数来代替PWRTLogin 或者PWRTLogout 函数。这个函数需要和函数PWRTLogin 相同的参数。PWRTLogin 和PASSLoginDialog 函数可以调用登录界面,在上面可以登录或者注销。函数PWRTLogout 被正确执行并且不调用登录界面。 正确执行后这两个函数都返回“1”。然而,登录不会等到显示对话框之后。 注意 如果使用多个显示器,为了能使登录对话框显示在合适的显示器上,需要WinCC Basic Process Control (OS项目编辑器)。 不使用WinCC Basic Process Control 时,可以指定显示器编号,但登录对话框始终显示在第一个显示器上。 #include"apdefap.h"//调用函数代码 void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

WINCC中制作管道流体流动动画的一种方法

WINCC中制作管道流体流动动画的一种方法 采用自定义对象的方法制作,不需要使用全局变量及外部量。 以制作横向向右流动流动块为例: 1、画两个高度相等的矩形,分为是rec1和rec2,rec1的宽度小于rec2,rec2属性中的“显示”为否,将rec1和rec2放在一起,左对齐,rec1居前。rec1为实际要显示的流动块,rec2在实际运行中不显示,但需要其属性参数作为定值,以供程序使用,rec2-rec1的值即为流动块每次向右移的距离。 2、将rec1和rec2组合成自定义对象,需要加入属性rec1.Left、rec1.Width、rec1.Visible、rec2.Width 这几个属性到自定义对象中去,其它属性可以根据需要添加。 3、在自定义块中的属性“位置X1”加入C脚本,触发器选“250ms”标准周期,代码如下: long Left,Left1,Width1,Width2; BOOL Visible1; long i,k; Visible1 = GetPropBOOL(lpszPictureName,lpszObjectName,"Visible1"); //Return-Type: BOOL Left1 = GetPropWord(lpszPictureName,lpszObjectName,lpszPropertyName); //Return-Type: long int if (Visible1) { Left = GetLeft(lpszPictureName,lpszObjectName); Width1 = GetPropWord(lpszPictureName,lpszObjectName,"Width1"); Width2 = GetPropWord(lpszPictureName,lpszObjectName,"Width2"); k = Width2 - Width1; i = Left + Width1; Left1 = Left1 + k; if (Left1 >= i) Left1 = Left; } return Left1; 4、将此自定义对象加入全局库中,以后可以在其它项目中直接使用。 5、在画面中使用直接拷贝,一个接一个连起来,可以形成管道流体动画效果。 其它方向的流动块按此方法一样可以,还可以制作起始流动块和结束流动块,实际使用中这两个块不要也行,用其它的东西把头尾盖起来就可以了。

wincc功能使用总结

1、Wincc online trend控件实现多条曲线查询 项目要求,查询任意时段内的两条曲线的历史数据 1、首先在变量记录中设置需要记录的变量,如果需要在一个控件内显示两条曲线,做数据 归档时,归档属性最好是一致的,归档属性不一样是否会出现问题,这个没测试,有兴趣的可以测试一下。 2、数据记录设置OK后,新建画面插入online trend控件,我的项目需要把趋势打印出来, 所以把控件的工具栏全部隐藏。 3、双击online trend控件,添加需要显示的归档变量。选择公共X,Y轴等参数。坐标显示 根据自己使用选择,基本上不用设置太多参数。 4、添加需要显示的历史归档变量后,就需要写脚本了,西门子工控网论坛有实例,实例提 示针对于一条曲线时使用,咨询西门子技术支持,如果需要同时显示两条曲线时,需要对两条曲线分别进行设置属性“控件.index=0,1”,但是测试其实只设置index=0的起始及结束时间就OK,就是论坛给的实例不是只针对于一条曲线,两条曲线时同样适用,再多的曲线就没测试了。 5、西门子默认的时间格式为“MM-DD-YYYY HH-MM-SS”格式,所以在设置趋势起始及 结束时间时需要注意。 6、注:导入归档数据需要一定的时间,建议按钮触发。尝试在画面打开时触发脚本,有的 时候会出现历史数据加载不上来。 7、脚本如下,仅供参考 Dim objConnection Dim strConnectionString Dim strSQL Dim objrs Dim chaxun '定义曲线控件 Dim TREND Dim strval_1

Dim strval_2 Dim strval_t1 Dim strval_t2 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 chaxun=HMIRuntime.Tags("管号查询输入").Read strConnectionString = "Provider=MSDASQL;DSN=REPORT;UID=;PWD=;" strSQL = "select * from report where guanhao='"&chaxun&"';" Set objConnection = CreateObject("ADODB.Connection") objConnection.ConnectionString = strConnectionString objConnection.Open Set objrs = CreateObject("ADODB.RecordSet") objrs.open strSQL,objConnection /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ objrs.close Set objrs = Nothing objConnection.Close Set objConnection = Nothing '趋势时间设定 Set trend = ScreenItems("控件1") strval_r=HMIRuntime.Tags("测试日期_read").Read strval_t1=HMIRuntime.Tags("开始时间_read").Read strval_t2=HMIRuntime.Tags("测试时间_read").Read

WINCC脚本个人经验总结

语音报警的组态 在工业现场安全是极其重要的,无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候,应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形,语音地同时处理。所以我们可以利用计算机的声卡和音箱在有故障发生的时候产生语言报警,但是问题是WinCC本身并不能产生语音的功能,而且其内部的上千个函数也没有提供处理声音的函数。解决这个问题的方法归功于微软开发的WinCC与操作系统地完美结合,因为在WinCC中可以直接调用Windows的API函数。实现的具体C脚本代码如下: long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma code(\"Winmm.dll\") void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay); #pragma code() if(GetTagBit(\"112排泥备泵故障\")) PlaySoundA(\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft sound.wav\",NULL,8); return 1020; }重新启动后,不使用登录窗口如何以一个缺省用户的身份自动登录?怎样确保运行期间有个缺省用户始终处于登入状态?即使另外一个用户已经预先退出。 解答: 重新启动以及在运行期间,您希望HMI系统达到最小的实用性而不使用登录窗口。然而,对于高级操作,登录功能应当保留。此外,如果没有用户登录,则有一个缺省的用户自动登录。缺省用户的权限可以在用户管理器中根据需要设定。 可使用下面的C脚本执行此项功能,请按照下列步骤进行: 将附件中的函数“Silentlogin.pas”复制到项目中的“PAS”子文件夹中。 在项目中选择Global Script > C Editor > Actions > Global Actions并打开全局动作(Global Action)“Silentlogin.pas”。 在“PWRTSilentLogin (“Login”,“Password”);”一行中,用缺省的用户名替换用户“Login”,用缺省用户的口令代替“Password”。 无限循环命令 static int a=0, b=0; if(GetTagBit("BINi_pictu_dyn_09")) { if(b==0) a++; else a--; if(a==7) b=1; if(a==0) b=0; }

WinCC脚本案例保留

WinCC脚本案例保留 2010-09-16 16:44 最近做一个WinCC跟ERP通讯的一个小项目,将脚本语言保留下来,以备不时之需! 仅仅是保留,各位看官如发现不妥之处请加以指教. 1.通过扫描枪扫描到ID号传给PLC,WinCC读取到ID号从ERP数据库中查找相关数据,写回到PLC,并给PLC一个写完成确认信号.(数据库是SqlServer2000) Dim DB240trigger,db241trigger db240trigger=HMIRuntime.Tags("db240itrigger").Read db241trigger=HMIRuntime.Tags("DB241itrigger").Read Dim ss,str str=HMIRuntime.Tags("DB240szcoil_ID").Read ss=CStr(str) If (db240trigger=1 And db241trigger=0 ) Then Dim sPro,sDsn,sSer,sCon,sSql Dim oRsMaterial,conn,oCom,oItem,oRsSCHEMA Dim database,server,uid,pwd sCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=pasword" Set conn = CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.Open Set oRsMaterial = CreateObject("ADODB.Recordset") sSql= "SELECT * FROM dbo.BRGS_GP_Material where MkNo='" & CStr(ss) & "'" oRsMaterial.open ssql,conn,1,1 Dim m,n m=oRsMaterial.recordcount If m<>1 Then MsgBox "这个ID号找不到唯一的一条参数信息,请手动输入信息!" Exit Function End If Dim sCon2,sSql2

VB操作wincc脚本心得

Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename 2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub 3.设置文本 Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符 4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。 获取下标

wincc动画命令

WINCC动画脚本 默认分类2008-01-21 15:19:23 阅读310 评论0 字号:大中小订阅 电机风扇旋转(几何---起始角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD f=20; if (GetTagBit("DI电机运行信号")) { f= f+30; '起始角度变化量' if (f==360) (f=0); } return f; } 电机风扇旋转(几何---结束角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD i=80; '大于起始角度60' if (GetTagBit("DI电机运行信号")) { i = i+30; '等于起始角度变化量' if (i==360) (i=0); } return i; } **物料水平右移动(几何---位置X)(停车后,物料回到原点)** #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } if (!GetTagBit("DI电机运行信号")) (a=350); return a; } 物料水平右移动(几何---位置X)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } return a; } 物料向上移动(几何---位置Y)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int b=450; if (GetTagBit("DI电机运行信号") && (b>=290)) { b-=10; if (b<=280) (b=450); } return b;

WINCC动画脚本

WINCC动画脚本 电机风扇旋转(几何---起始角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD f=20; if (GetTagBit("DI电机运行信号")) { f= f+30; if (f==360) (f=0); } return f; } 电机风扇旋转(几何---结束角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD i=80; if (GetTagBit("DI电机运行信号")) { i = i+30; if (i==360) (i=0); } return i;

**物料水平右移动(几何---位置X)(停车后,物料回到原点)** #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } if (!GetTagBit("DI电机运行信号")) (a=350); return a; } 物料水平右移动(几何---位置X)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } return a;

WinCC实例教程

WinCC 视频教程知识点总结 第一讲组态软件基础 一、WinCC简介 1、WinCC 西门子视窗控制中心SIMATIC WinCC(Windows Control Center)是在计算机上对PLC 控制的运行设备进行状态监控的软件,是PC上的监控软件。 运行该软件,可以动画监视现场设备的运行状况,监视相应的运行参数,以及更改、设置系统的运行数据。 2、WinCC的特点 (1)开放性 WinCC对用户所添加的任何形式的扩充是绝对开放,该绝对开放性是通过WinCC的模块结构及其强大的编程接口来获取的。 (2)将应用软件集成到WinCC中 WinCC提供了一些方法将其他应用程序和应用程序块统一地集成到用于过程控制的用户界面中。OLE应用程序窗口和OLE自定义控制或Active控制可以集成到WinCC应用软件中。 (3)WinCC中的数据管理 WinCC的数据库为Windows SQL,从属于WinCC,该数据库用于存储所有面向列表的组态数据(如变量列表和消息文本),以及当前过程数据(如消息,测量值和用户数据记录等)该数据库具有服务器功能。

(4)在项目开始之前规定组态分类 a、文件夹名称 除一些特殊字符(例如\)之外,文件夹名称允许使用所有的字符。还允许使用数字0~9. b、变量名称 变量名称可以多于8个字符。但应尽量避免太长的名称。WinCC项目的变量名称必须是唯一的。如果变量名称还包含了其他信息,这对用户将非常有用。 c、画面名称 确定画面名称时应注意其长度的影响,太长的名称(文件名)不容易识别(列表框中的选择,脚本中的调用等)。根据经验表明,长度最好不超过28个字符,画面名称应遵守以下限制条件:①最大长度为255个字符;②不使用某些特殊字符(例如\);③画面名称中的字母不区分大小写。 二、WinCC软件的安装 1、安装S7-300/400PLC编程软件STEP7及PLCSIM; 2、安装数据库软件SQL Server 2000; 3、安装消息列队(软件操作); 4、安装WinCC(建议不选典型安装,选择全部安装)。 三、WinCC管理器 1、WinCC项目管理器的结构 WinCC项目管理器的用户界面由以下元素组成:标题栏、菜单栏、工具栏、状态栏、浏览窗口和数据窗口:

组态软件教案

工控组态软件 教案 教师:

机械电子与建筑工程学院教案

第1章概述 1.1组态软件的产生与发展 1.1.1工业过程控制系统的发展 20世纪40年代,多数工业生产过程处于手工操作状态,人们主要凭经验、用手工方式去控制生产过程。如生产过程中的关键参数靠人工观察,生产过程中的操作也靠人工去执行,劳动生产率是很低的。 50年代前后,一些工厂企业的生产过程实现了仪表化和局部自动化。此时,生产过程中的关键参数普遍采用基地式仪表和部分单元组合仪表(多数为气动仪表)等进行显示;进入60年代,随着工业生产和电子技术的不断发展,开始大量采用气动、电动单元组合仪表甚至组装仪表对关键参数进行指示,计算机控制系统开始应用于过程控制,实现直接数字控制和设定值控制等。 70年代,随着计算机的开发、应用和普及,对全厂或整个工艺流程的集中控制成为可能。 集散控制系统是把自动化技术、计算机技术、通信技术、故障诊断技术、冗余技术和图形显示技术融为一体的装置 1.1.2组态软件的产生及发展 在组态软件出现之前,大部分用户是通过第三方软件(如VB、VC、DELPHI、PB甚至C等)编写人机交互界面(Human Machine Interface,HMI),这样做存在着开发周期长、工作量大、维护困难、容易出错、扩展性差等缺点。 世界上第一款组态软件InTouch在20世纪80年代中期由美国的Wonderware公司开发。 组态软件类似于“自动化应用软件生成器”,根据其提供的各种软件模块可以积木式搭建人机监控界面,不仅提高了自动化系统的开发速度,也保证了自动化应用的成熟性和可靠性。 1.1.3组态软件的定义 组态软件是一种面向工业自动化的通用数据采集和监控软件,即SCADA(Supervisory Control And Data Acquisition)软件,亦称人机界面或HMI/MMI(Human Machine Interface/Man Machine Interface)软件,在国内通常称为“组态软件”。 组态软件从总体结构上看一般都是由系统开发环境(或称组态环境)与系统运行环境两大部分组成。系统开发环境和系统运行环境之间的联系纽带是实时数据库。

VB操作wincc脚本心得精选文档

V B操作w i n c c脚本心 得精选文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-

Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如 Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename

2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub 3.设置文本 Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符 4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符; Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。 获取下标 VB中的InStr()函数与InStrRev()函数: 都是在主字符串当中搜寻寻找子字符串,返回找到的子字符串在主字符串中出现的位置; 不同在于; InStr()函数,从左开始向右寻找,InStrRev()函数,从右开始向左寻找。 截取 right 和left 获取长度 Len

WINCC中制作管道流体流动动画的一种方法

. WINCC中制作管道流体流动动画的一种方法 采用自定义对象的方法制作,不需要使用全局变量及外部量。 以制作横向向右流动流动块为例: 1、画两个高度相等的矩形,分为是rec1和rec2,rec1的宽度小于rec2,rec2属性中的“显示”为否,将rec1和rec2放在一起,左对齐,rec1居前。rec1为实际要显示的流动块,rec2在实际运行中不显示,但需要其属性参数作为定值,以供程序使用,rec2-rec1的值即为流动块每次向右移的距离。 2、将rec1和rec2组合成自定义对象,需要加入属性rec1.Left、rec1.Width、rec1.Visible、rec2.Width 这几个属性到自定义对象中去,其它属性可以根据需要添加。 3、在自定义块中的属性“位置X1”加入C脚本,触发器选“250ms”标准周期,代码如下: long Left,Left1,Width1,Width2; BOOL Visible1; long i,k; Visible1 = GetPropBOOL(lpszPictureName,lpszObjectName,"Visible1"); //Return-Type: BOOL Left1 = GetPropWord(lpszPictureName,lpszObjectName,lpszPropertyName); //Return-Type: long int if (Visible1) { Left = GetLeft(lpszPictureName,lpszObjectName); Width1 = GetPropWord(lpszPictureName,lpszObjectName,"Width1"); Width2 = GetPropWord(lpszPictureName,lpszObjectName,"Width2"); k = Width2 - Width1; i = Left + Width1; Left1 = Left1 + k; if (Left1 >= i) Left1 = Left; } return Left1; 4、将此自定义对象加入全局库中,以后可以在其它项目中直接使用。 5、在画面中使用直接拷贝,一个接一个连起来,可以形成管道流体动画效果。 其它方向的流动块按此方法一样可以,还可以制作起始流动块和结束流动块,实际使用中这两个块不要也行,用其它的东西把头尾盖起来就可以了。 '.

WinCC V7 控件功能变化

WinCC V7 控件功能变化 在WinCC V7中,为所有新控件提供了全新的组态选项,这使得用户界面的设计更加方便和直观,此外还包含了更多人性化的功能,使WinCC的应用更加灵活。 具有以下特点: ?统一的报表功能,使数据可以方便导出 ?统一的组态对话框 ?全新的外观/主题 ?在控件中即可实现连接/断开数据归档文件,方便实现长期数据的查询?用户自定义的工具栏图标,可实现自定义的功能 ?工具栏位置的自由定义,不再仅局限于顶部 ?可自由组态的状态栏 1.报警控件 1.1 新工具栏图标: 1) 在长期归档列表视图中导航,连续查询历史报警 2) 复制行,像操作Excel表格一样进行单行/多行/隔行复制 3) 导出报警消息数据到CSV文件 4) 连接历史归档数据文件 5) 断开连接的历史归档数据文件 6) 用户自定义功能按钮 1.2 图标式的显示方式: 1) 状态图标 2) 现有注释图标 3) 现有信息文本图标 4) 报警回路图标

1.3 功能更新: 1) 矩阵式的报警过滤器 新的报警过滤器更为直观,类似于Excel的文本过滤器,可预制多个查询条件并可随时进行调整,实现查询条件的合并,操作灵活而简便。 2) 操作员输入消息 在对报警控件进行如下操作时可设置产生操作员输入消息: ?锁定消息 ?释放消息 ?确认消息 ?隐藏消息 ?取消消息隐藏

2.趋势控件 2.1 新功能: 1) 在一个趋势控件中显示多个窗口,每个窗口又可显示多条曲线 2) 趋势控件的背景网格 3) 右键点击曲线,可显示相关位置数值 2.2 新工具栏图标: 1) 移动趋势曲线区域 2) 移动坐标轴区域范围 3) 连接历史归档数据文件

wincc中常用C脚本

查看文章 wincc常用C动作 2010-06-27 10:31 1.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 5.结束监控并关闭计算机(会弹出确认对话框) HWND hWnd = NULL;//Author:Smartsys int iRet; hWnd = FindWindow(NULL,"WinCC-运行系统 - "); iRet=MessageBox(hWnd,"结束监控并关闭计算机", "关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL); if(iRet==IDYES) DMExitWinCCEx (DM_SDMODE_POWEROFF); 6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消: int r; r=MessageBox(NULL, "YES为开,NO为关", "确定开命令:", MB_YESNO |MB_SYSTEMMODAL); if (r==IDYES) SetTagBit("TAGNAME",TRUE); else SetTagBit("TAGNAME",FALSE); 7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT) // Funktion: Bit in Doppelwort setzen; if (GetTagBitWait("COLSE_DISPLAY")==1 )

WINCC动画脚本集萃

WINCC 电机风扇旋转(几何---起始角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD f=20; if (GetTagBit("DI电机运行信号")) { f= f+30; if (f==360) (f=0); } return f; } 电机风扇旋转(几何---结束角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD i=80; if (GetTagBit("DI电机运行信号")) { i = i+30; if (i==360) (i=0); } return i; }

**物料水平右移动(几何---位置X)(停车后,物料回到原点)** #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } if (!GetTagBit("DI电机运行信号")) (a=350); return a; } 物料水平右移动(几何---位置X)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } return a; } 物料向上移动(几何---位置Y)(停车后,物料停在该点) #include "apdefap.h"

WINCC脚本整理

切换按钮 001SetTagBit("TE_BOOL",!GetTagBit("TE_BOOL")); 002BOOL A A=GetTagBit("TE_BOOL"); if(A)SetTagBit("TE_BOOL",0); ElseSetTagBit("TE_BOOL",1); 003SetTagBit("TE_BOOL ",1-GetTagBit("TE_BOOL ")); I O域处的xx输入输出 在I/O域的输出值事件处的动作 Float F_TAG; F_TAG =GetTagFloat("TE_FLOAT"); return(F_TAG /100); WINCC运行画面最小化 HWND WinCCHwnd; WinCCHwnd=FindWindow("PDLRTisAliveAndWaitsForYou",NULL); CloseWindow(WinCCHwnd); WINDOWSxx提供的标准对话框 {BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-运行系统- ");

if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"确认合闸","确认对话框 ",MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEM MODAL); switch (iRet){case IDYES: printf("user do YES\r\n"); SetTagBit("TE_QUEST",1); break; case IDNO: printf("user do NO\r\n"); SetTagBit("TE_QUEST",0); break; case IDCANCEL: printf("user do CANCEL\r\n"); break;}} 本画框的功能是点击按钮的时候弹出windows询问对话框其中“确认合闸”为对话内容,对话框的名称为“确认对话框” 用户不同显示不同的按钮 你可以在用户管理器给每个用户不同的权限,使他们对按钮有不同的操作权,这是最简便的。但是如果一定要根据用户不同显示不同的按钮就要用C脚本了

Wincc常用C脚本及常用功能

打开用户管理器 ProgramExecute("Passcs.exe"); 取消激活 #include "apdefap.h" void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { #pragma option(mbcs) HWND hwnd=NULL; int iRet; hwnd=FindWindow(NULL,"WinCC-运行系统- "); //获得句柄 iRet=MessageBox(hwnd,"是否取消激活?","Deactivate",MB_OKCANCEL|MB_ICONW ARNING|MB_APPLMODAL); if(iRet==1) DeactivateRTProject (); //Return-Type: BOOL 关闭计算机 #include "apdefap.h" void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { #pragma option(mbcs) HWND hwnd=NULL; int iRet; hwnd=FindWindow(NULL,"WinCC-运行系统- "); iRet=MessageBox(hwnd,"是否关闭计算机?","ShutDown",MB_OKCANCEL|MB_ICONW ARNING|MB_APPLMODAL); if(iRet==1) DMExitWinCCEx(DM_SDMODE_SYSTEM); } ====================================================================== 登陆代码: #pragma code(“useadmin.dll”) #include #pragma code() PWRTLogin (…e?); ==================================== 取消激活(Deactivate) DeactivateRTProject(); ====================================== Wincc变量操作 GetTagDWord(“变量名称”); 获取Wincc变量值 SetTagDWord(“变量“,设定值);设置Wincc变量 对文本读写操作

wincc-全套脚本总结

——————1、wincc全局脚本动作-------隐藏控件—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value; value=GetTagBit("IM_in");//"IM_in"为触发的变量。 if(value==1) { SetVisible("lianxi.pdl","按钮8",TRUE);//lianxi.pdl为控制对象所在画面名,“按钮8”为对象名称 } else { SetVisible("lianxi.pdl","按钮8",FALSE);//lianxi.pdl } // WINCC:PICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID : 1 // WINCC:PICNAME_SECTION_END return 0; } ===================================================== 说明:在触发器里选择变量IM_in ——————2、wincc全局脚本动作----提示框—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value;

相关文档