wincc学习技巧_第1页
wincc学习技巧_第2页
wincc学习技巧_第3页
wincc学习技巧_第4页
wincc学习技巧_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、、组态软件、C语言基础中的语言WinCC语言由C脚本(C-script )和B脚本(VB-script )组成。WINCC中C脚本:(1) C动作(在画布中编辑的程序代码)。(2)全局脚本编辑器:项目函数、标准函数和内部函数。项目函数: 自定义本项目(保护性)标准函数:编辑好供C动作调用内部函数:(微软)自定义编辑函数在项目函数中例如:#pragma ()(int a; in b)int NEW_Addint c;c=a+b; return c;中的(Tag)变量程序使用的变量(书上P3135 )变量:C变量、WINC (变量C变量:int (数值型)、char (字符型)、BOOL布尔型)-

2、也就是二进制(为常用)WINC (变量:word (数值型)、char (字符型)、Bit (布尔型)(为常用)常用变量如下:布 尔型:数值型:字符型:参数1 :举例1二进制变量“启动”控制电机启停BOOL a; SetTagBit (参数 1,参数 2) 、GetTagBit (参数)a=SetTagWord (参数 1,参数 2)、GetTagWord 参数)SetTagChar (参数1,参数2)、GetTagChar (参数)变量名。参数2:具体要求。例如参数1为液位,参数2为aGetTagBit ( “启动” );if (a=0) SetTagBit ( “启动”,1);举例2二进制

3、变量“启动”控制电机启停BOOL a;static int i=0;(类似 int i; i=0;) a= GetTagBit (“启动” );if (a=0) i+;两者区别:不加static启动一次i二l启动二次i=l 加static启动一次i二l启动二次i=2启动三次i二l 启动四次i二l 中的运算符启动三次i=3启动四次i=4中的常用语句三、变量组态WINCC中的变量分为: 内部变量、外部变量和C动作(函数中的变量)1 .利用变量进行增减计数步骤1:进行画面构建,需要两个按钮和一个输入输出域(属性调整-)(变量、有变化时、输出)。新建内 部变量,命名为“计数”,属性为无符16位。如下图

4、所示;步骤2:在名字为“启动增加”的按钮中属性事件鼠标左键C动作:unsigned short a;a=GetTagWord (计数); a+;SetTagWord (计数,a);步骤3:在名字为“启动减少”的按钮中 unsigned short a; a=GetTagWord (计数德性事件鼠标左键C动作:1 一; SetTagWord (计数,a);2 .利用变量进行增减计数(带有步长控制),可定义步长步骤1:进行画面构建,需要两个按钮和两个输入输出域(属性调整-)(变量为计数、有变化时、输出)步 长对应的输入输出域(属性调整-)(变量为步长、有变化时、输入)。新建2个内部变量, 命名为“

5、计数”和“步长”步骤2:在名字为“启动增加”的按钮中 属性 unsigned short a;unsigned short b; a=GetTagWord (计数1,;,属性为无符16位。如下图所示;b=GetTagWord (步长);止 事件鼠标左键C动作:a=a+b; SetTagWord (计数a);步步骤3:在名字为“启动减少”的按钮中unsigned short a;unsigned short b; a=GetTagWord (计数 1); b=GetTagWord (步长);a=a-b; SetTagWord (计数 a);步骤4:如果调整步长,可直接输入属性-一事件-一鼠标左键

6、C动作:3 .利用变量进行电机启动新建内部变量,命名为“起停”,属性为无符16位。在名字为“启停”的按钮中属性事件鼠标左键C动作:BOOL a; a=GetTagWord(起停);if (a=0)SetTagWord (起停,1);if (a=l)SetTagWord (起停,0);4 .利用变量进行windows窗口对象的修改四、画面组态 一5 .画面的切换方法1:利用直接连接切换单个画面,即为在下图中“单击鼠标改变画面”的部分点击链接到所要去的画面。组态完毕后,点击按钮即可达到。方法2:通过对象名称和画面名称的变量连接打开画面。在书上P101方法3:通过内部函数打开画面。在按钮属性中事件中

7、鼠标左键中C动作利用软件内部函数输入程序如下:OpenPrevPicture ( 画面名称);6 .利用画面窗口显示画面方法:SetVisible (画面名称,对象名称,1或0);SetVisible表示可见度;画面名称表示画面的名字,例如等;对象名称表示“画面窗口n”,“画面窗口 n”在智能对象中;1或0表示可见或不可见。步骤:第一步:新建三个画面,、。目的将、在中通过按钮的控制显示出来;第二步:分别在、中组态一个目标物;第三步:在中组态两个按钮和两个画面窗口控件(名称为画面窗口1、画面窗口 2),在智能对象中找到“画面窗口” ,更改画面窗口属性(属性几何 宽度为246,高度为129;属性-

8、其它-一边框改为是,显示改为否,画面名称添加或)第四步:将、画面的大小调整为和两个画面窗口一样大;C动作中编写程序如下:第五步:进行按钮组态,在按钮属性中事件中鼠标左键中画面窗口 1,1)画面窗口2,°)画面窗口 1,°)按钮 1: SetVisible (, SetVisible (,按钮 2: SetVisible(,SetVisible (,画面窗口2 , °7 .画面窗口属性这个技时控显示巧功能是对上一个的继承,最终结果就是将三个画面循环显示。步骤:第一步:新建四个画面,、。目的将、在中通过按钮的时间控制 显示出来;(这里并非按钮按下显示,系统运行自动显示

9、)第二步:分别在、中组态一个目标物;第三步:在中组态一个按钮和三个画面窗口控件(名称为画面窗口1、画面窗口 2、画面窗口 3),在智能对象中找到“画面窗口” ,更改画面窗口属性(属性 几何 宽度为246,高度为129; 属性 其它 边框改为是,显示改为否,画面名称添加或或);第四步:将、画面的大小调整为和三个 画面窗口一样大;第五步:进行按钮组态,在按钮属性中几何中宽度中(假如宽度为70) C动作中编写程序如下:static int a=0;a+;if (a=l)SetVisible (,画面窗口 3,1)SetVisible (,画面窗口4,°)画面窗口 5,0)SetVisibl

10、e (,> if (a=2)SetVisible (,SetVisible (,3,0) 画面窗口 ; 画面窗口°画面窗口5,0)SetVisible (,> if (a=3)SetVisible (,SetVisible (,SetVisible (, a= 0;3, 0) 画面窗口; 画面窗口 4,°)return 70;触发器调整为IS中,即为间隔IS闪烁显示。8 .动画旋转组态(例如风扇转动)这个技巧是为了组态一个旋转的动画,例如工业上的搅拌机等。举例如下:步9聚1:组态基本画面,可以在显示库中寻找,也可以自己绘制。显示库:从显示库中调用,若使用,首先将

11、元件导出(注意保存),然后将元件删掉,然后再导入(插入)这个元件,便可以进行调整(折开、组装、编组)注意,编组时必 须至少两个一组。自己绘制:例如矩形、圆等(注意属性的调整)全选编组。例如编为4个组:组1、组2、组3、组4步骤2:程序的编写 在画布属性几何宽度(如果此时宽度为800) C动作:static int a=0;a+;if (a=l)(SetVisible(, 组i n .SetVisible(,组、2 . 0):SetVisible (, 组Q 1 .SetVisible (,组4 . 0):if(a=2)(SetVisible (, 组SetVisible (, 组SetVisi

12、ble (,/且、5 . 0):SetVisible (, 组人 n .a= 0;return 800;步骤3:触发器的调整,标准周期,250MS9 .动态化颜色改变颜色改变是最基本的动态化的技巧,就是动态对话框的基本功能,利用颜色的变化来完成一个部件的动作或结束。例如,画布属性-一颜色动态对话框(事件名称也就是触发器的调整、表达式的填充或者变量、选择表达式结果的展现形式(布尔型或者其它调整颜色)。10 .动态化闪烁组态(元件闪烁)此技巧主要是针对于元件库中的元件来讲。例如,随便调出一个元件(属性控件属性-闪烁样式(4种选择,包括不闪烁-0、不可见-1、阴影-2、实心-3)。 点击后面的灯 泡

13、标志,选择动态对话框闪烁颜色布尔型等。此技巧元件可单独作用,亦可由按钮控制。11 .动态化动态填充组态动态填充组态就是控制元件的动态填充。例如,新建一个内部变量(命名为level、无符号16位、上限100、下限0、起始值0)、调出一个元件或绘制一个矩形(属性动态填充改为“是”、填充量改为“ 0”、点击填充量后面的灯泡标志,直接连接变量level )o在矩形一-几何一-宽度(假设宽度为100) C动作:(注意触发器调整250毫秒)1)填充增加static int a=0;if(a二100)a= 0;SetTagWord(''level77, a);a+;return 100;2)

14、填充减少static int a=100;if (a=100)a100;SetTagWord("level', a);return 100;3)填充增减结合(先增加、再减少)static int a=0;static int b=0;(方向控制)if(b=0)if (a>100) b=l;a+;if (b=l)if (a<=0) b=0;SetTagWord("level”, a);return 100;12 .动态化对象的移动对象的移动就是控制元件在画布上水平左右或者垂直上下的移动,亦或沿对角线移动,也可以综合性的各 方向的移动。以小车移动为例进行步骤

15、分析如下:步骤一:选中元件一一属性一一几何(选择位置X、位置 Y)灯泡标志(C动作):特别注意:计算移动的距离范围,选出一个起点和一个终点(如果双向起点和终点和互换的)。计 算两点之间的距离。如果水平移动,计算X之间的距离;如果垂直 移动,计算丫之间的距离。例 如,起点X的坐标为500,终点X的坐标为20,那么距离为480o (水平移动就是不断增加或者不 断减少X)步骤二:下面以水平移动为例,进行C动作分析:1)水平左移(不断减少X)static int a=500;if(a<=0) a=480;else a=a-4;(每次移动的距离,可以自动调整return 20+a;2)水平右移(不

16、断增加x)static int a=0;if (a>=500) a=0;else a=a+4;(每次移动的距离,可以自动调整return 20+a;3)水平左右移动(双向移动)static int a=500;static int b=0;( 方向控制)if (b=0) if(a<=0)b=l;(调整方向)a=a-4;(每次移动的距离,可以自动调整 if(b=l) if(a>=500) b=0;(调整方向)a=a+4;(每次移动的距离,可以自动调整)SetTagWord("level”,a);return 20+a;步骤三:触发器调整250毫秒注意:位置X水平(左右

17、)移动位置Y 垂直(上下)移动高度放大或者缩小(上下)宽度拉伸或缩短(左右)13.动态化复杂动画设计也是工业画面组态主要部分。本技巧的展现以混合plantElemer pipes 2270 (弯管道)、2206画出液体流动的三种状态,第一种状态为原始状复杂动画设计是动态化画面的主要特色,液的控制系统为例进行论述。1)管道中液体流动步骤一:在元件库中调用管道。管道在横放管道)、2180 (纵放管道)中寻找。态,就是没有任何液体流动;第二种和第三中为液体流动的两种不同状态。三种状态画好并 导出到桌面,画好一个就导出一个。分别命名(0、1、2) (3次)步骤二:新建一个变量,命名为“进水”,为无符号

18、16位。步骤三:在智能对象中状态显示组态对话框(变量为“进水”、有变化时、增加三页(0、1、2)将三个画面状态拖入0、1、2下面,相对应)。步骤四:在状态显示控件几何 宽度(假设宽度为100) -C动作:static int a=0; 11-16-20132013-11-16期与时间的设置两个时间求差值 此技巧是对上一个技巧的承接,用于实现在线时长显示的功能。注意:字符不能相加减;显示格式(字符显示):时间1: 09: 45: 30时间2 09 : 45: 45时长:00: 00: 15o画面布局如图所示;步骤一:新建内部变量:shijianl和shijian2和shijian3 (格式为文本

19、8位字符集),新 建对应的输入输出域(变量(shijianl和shijian2和shijian3 )、有变化时、输出)。注 意:输入/输出域 属性调整(输出格式:字符串)步骤二:程序时间1程序:在时间1对应的输入输出域中-属性一一事件-一鼠标左键-一c 动作:char a20;char*p;p二GetTagChar("time");strcpy (a, p);SetTagChar(shijianl, a);时间2程序:在时间2对应的输入输出域中-属性-事件- 鼠标左键-一C 动作: char a20;char*p;p二GetTagChar ("time"

20、);strcpy (a, p);SetTagChar(shijian2, a);时间差程序:在时间差对应的输入输出域中 属性事件 鼠标左键 C 动作: 第一部分:定义变量char a20, b20;char*p;char aa10, bb10, ccElO;int i;int vail, val2, val3;int val4,val5, val6;int val7, val8, val9;long suml, sum2, temp;第二部分:将shijianl由字符转换为数值p=GetTagChar (shi jianl");、采集时间strcpy (a, p);for(i=0;i

21、<2;i+)aai= ai;、小时bbi二 ai+31 ;ccai+6;aa2=,0bb2= 0cc2='0';, 、 vall=atoi(aa)val2=atoi(bb);、字符转数 值val3=atoi (cc);第三部分:将shijian2由字符转换为数值(同上)p=GetTagChar(shijian2);strcpy (a, p);for (i=0;i<2;i+)aai= ai;bbi= ai+3;cc i= ai+6;aa2='0'bb2='0'val4=atoi(aa);val5=atoi(bb);val6=atoi(c

22、c);第四部分:求差值suml=vall*3600+val2*60+val3;、计算时间1共多少秒sum2=val4*3600+val5*60+val6;、计算时间2共多少秒temp=sum2_suml> ;、秒值相减temp=abs(temp);、取绝对值第五部分:将得出数值temp转换为(时、分、秒)分为三(仍为数值)val7=temp/3600;、val8=(temp%3600)/60;、数值除3600取整为小时、余下数值除60取整为分钟val9=temp%60;> 、第六部分:将各数值转换为字符(b0=val7/10+48;、bl=val7%10+48;、b2=':

23、'b3=val8/10+48;bE4=val8%10+48;b5=Y ;b6=val9/10+48;b7=val9%10+48;b8='0'SetTagChar (z,shiJian3,z, b);、余下数值除60取余为秒值 0的ASCII码为48)、十位、个位、冒号、字符串结束标志、输出结果项目总图14 .全局脚本(了解)将事先编好的程序在全局脚本中编辑成函数形式(项目函数)在c动作中直接调用。以可以保护函数。举例说明:以上一技巧中的时间差函数为例;步骤:全局脚本一一C-Editor 项目函数新建在特定的形式中输入要编的程 序,如下所示:此为函数名字ttpragma

24、option(mbcs) void可以自己起名)输入要编写的程序最后的程序如卜:#pragma option(mbcs) void New_Function()char a20,b 20;char*p;char aa10, bb10,cc 10;int i;int vail, val2, val3;int val4, val5, val6;int val7, val8, val9;long suml, sum2, temp;p二GetTagChar(shijianl); strcpy (a, p);for (i=0;i<2;i+)aai= ai;bbi= ai+3;cc i= ai+6;

25、aa2(T ;bb2='0'cc 2='0;vall=atoi(aa);val2=atoi (bb);val3=atoi (cc);p二GetTagChar(shijian2);strcpy (a, p);for (i=0;i<2;i+)aai= ai;bbi= ai+3;cc i= ai+6;aa2=' 0'bb八0,;cc 2八0"val4=atoi(aa);val5=atoi(bb);val6=atoi(cc);suml=val1*3600+val2*60+val3;sum2=val4*3600+val5*60+val6;temp=

26、sum2-suml;temp=abs(temp);val7=temp/3600;val8=(temp%3600)/60;val9=temp%60;b0=val7/10+48:bl=val7%10+48;b2='b3=val8/10+48:b4=val8%10+48;b5='b6=val9/10+48:b7=val9%10+48:b8='0'SetTagChar (z,shi jian3z,, b);加密:菜单栏中 编辑 信息 (创建者:冯晨曦;口令:123456),以后每次输入都得登录正确的口令才可以登录;加密后,在C动作中只显示函数名,不显示函数内容15 .关

27、于文件的操作(对WINCC勺扩展)1)文件指针格式*txt*dat (打不开,存放登录过的密码)2)文件操作打开文件操作文件(复杂)关闭文件3)打开文件(首先定义文件指针)FILE*fp; fp=fopen( " ”,“r”);打开文件方式:r表示只读:如文件不存在或者路径错误,返回NULL (空指针)w- 表示写入:如文件不存在或者路径错误,则新建用于清空某个文件。表示写:为追加,写时不会删除原有文件。以r、a使用最多。4)关闭文件Fclose (fp) : f 表示 file ,中文为“文件”;5)操作文件写数据fputs (字符,文件指针);字符为常量或者数组举例:fputs

28、(china , fp);char a20;strcpy (a20, fp);读数据fgets (,数组名,n,文件指针);作用是从文件中读取n-1个字符放入数组中;16 .项目 班级数据录入借助本项目巩固文件操作技巧,本项目就是对一个班级信息的记录(姓名、班级、学号)步骤一:新建三个内部变量:分别命名为“ name”、“ class "、“number”,并建立相应的输入输出域,注意:输入/输出域属性调整(输出格式:字符串),如下图所示:步骤二:新建两个按钮,分别 命名为“写入一次信息”、“写入信息”。任务一:在按钮“写入一次信息”中一-属性事件一一鼠标左键- C动作:FILE*f

29、p; fp二fopen(E: ,a); fputs C 冯晨曦 ,fp) ; fputs (,z1001 自动化 ,fp);fputs(rn,fp);fclose (fp);任务二:在按钮“写入信息”中一一属性事件一-鼠标左键一一C动作:FILE*fp;、文件指针 char a 20; char b 20; char c 20; char*p;、字符指 针对文件的综合处理(未完)本项目是对文件处理的综合运用,是对组态系统人员登录的统计和记录。总体布局如下图所示;项目步骤如下:步骤一:完成下图图形的构建和脚本程序的编写,方法如上1)新建三个内部变量,分别命名“ name” “ class ” “

30、number”,分别连接相 应的输入输出域(组态对话框:该变量、有变化时、类型为I/O域)。注 意:输入/输出域属性调整(输出格式:字符串)。2)在名字为“写入文件”的按钮中-属性-事件 一-C动作:FILE*fp;char a20;char b 20;char c20;char*p;int i;p二GetTagChar(name);strcpy (a, p);p二GetTagChar("class");strcpy (b,p);p二GetTagChar("number");strcpy (c,p);/if(strlen(a)=4)、蓝色和红色部分功能一

31、致,选用一个即可/strcat (a, );/if (strlen(a) =6)/strcat (a, );/if(strlen(a)=8)/strcpy (a);for (i=strlen(a) ; i<8; i+);、蓝色和红色部分功能一致,选用一个即可strcat (a, );fp二fopen(E: , a);fputs(a, fp);fputs(b,fp);fputs(c,fp);fputs(rn,fp); fclose(fp);步骤二:完成下图图形的构建和属性的调整;1)智能对象控件(选择ListView control sp6 ) -拉大控件双击(显示属性)在General

32、(常规)中修改View (选择3-lvwreport )(报表输出); 在 Colum Header (列标题) (点击 insert Colum (增加一列)index 为列号(text:姓名;Width (列80;)二次点击insert Colum (增加一列)index为列号(text:班级;Width (列宽):801) 三次点击 insert Colum (增加一列)index为列号(text:学号;Width (列宽):80; 点击应用击确定。2)选中属性-一控制属性-GridLines- 改“是”为“否”。步骤三:完成下图图形的构建和脚本程序的编写;1)新建4个按钮和1个输入输出

33、域,注意:输入/输出域属性调整(输出格式:字符串)。如上图所示;新建内部变量:命名" search ”,文本8位字符集;2)在按钮名为“显示数据”属性-事件 一 鼠标左键 一-C动作:#define GetObject GetObjectobject*pdl=NULL;、,指向当前运行系统(NULL为空值、初始化)_object*pic=NULL;、指向当前系统激活画面object*obj=NULL;、指向画面中的某个对象_object*item=NULL;、对象中对行的操作int i; char aa10; char a 20, b20, c20; FILE*fp; fp=fope

34、n(E:,r); if(fp=二NULL)如果打不牖向下而判断路径是否正确HWND hwnd=NULL ;、指针hwnd=FindWindow(NULL, WinCC -运行系统- );、指针MessageBox (hwnd, zz 文件打开出错,警告,MB_0K|MBCONSTOP、系统函数弹出对话框(可能是XP系统中的。WIN7不弹出) return ;、返回空指针打开文件:pdl=_object_create(z/PDLRuntimez,);、指向当前运行系统中的激活画面pic=pdl->GetPicture (z,);ob j=pic->GetOb ject C 控件 1)

35、;/d=GetTagChar (z,sousuo,z) ;/strcpy (dd,d);/obj->ListItems->Clear ();、调用函数为对象清零obj->view=3;、对控件1操作所有的行rewind(fp); >、对文件操作,光标定位函数for(i-l; feof(fp)=0;)蓝色部分为文件尾判断函数(0:光标不到尾;1光 标到尾)、只要光标不到尾,此段程序始终循环fgets (a, 9, fp );a9='0'、读取8个字符放入a 、中、结束符if(feof(fp)!=0)、如果不等于0,说明光标到尾,执行跳出break;fget

36、s (b, 11, fp );fgets (c, 11, fp); bU= 0.cin八o*Tfgets (aa, 3, fp );、读取10个字符放入b中、读取10个字符放入c中、结束符、结束符,、八读取3个字符放入aa中,rn回车换行是两个字符;目的是跳过第一行,去读第二行item=:obj->ListItems->Add ()ob j->ListItems->Item(i) ->Text= a;、八将a写入控件第一行第一列obj->ListItems->Item(i) ->ListSubItems->Add(l,,zFirst,, ,

37、b);、增加一 列obj->ListItems->Item(i) ->ListSubItems->Add(2,,zSecondz,, c );、增加一 列i+;、进入下一行,光标定位到第二行fclose (fp、关闭文);件_object_delete(item);、最后四行为销毁指针,否则占用内存,从里往外销毁;object_delete (obj)object_delete (pic);object_delete (pdl) .3)在按钮名为“搜索”中属性一 事件-一 鼠标左键一-C动作:#define GetObject GetObject_object *pdl

38、=NULL;object *pic=NULL;object *obj=NULL;object *item=NULL;int i;char *d;char aa10;char 旦 20L220L£20Lddr20Leer20kF 一 LEfpHfopenvEWTXif (fpHHNULL)-XD EndHNUFhwndHFindwindow(NULLwince - ild; , ) AMessageBOX(hwncr 洱丰肯斗ffa二一二«申MBIOKMBCONSTOP) refump d - H - - objecflcpicHpd 丁 VGefpicfurecpobjHpevGefobjec 三 K 丰s三三三三三三三三三三三三三三三三三三一一zduGefr agcha (=seach=)<sf I cpy (dd J d=ldHGefragcha仁sousuo=)<Isf f cpy (dd9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论