wincc学习技巧.docx

上传人:b****3 文档编号:26765941 上传时间:2023-06-22 格式:DOCX 页数:28 大小:358.08KB
下载 相关 举报
wincc学习技巧.docx_第1页
第1页 / 共28页
wincc学习技巧.docx_第2页
第2页 / 共28页
wincc学习技巧.docx_第3页
第3页 / 共28页
wincc学习技巧.docx_第4页
第4页 / 共28页
wincc学习技巧.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

wincc学习技巧.docx

《wincc学习技巧.docx》由会员分享,可在线阅读,更多相关《wincc学习技巧.docx(28页珍藏版)》请在冰豆网上搜索。

wincc学习技巧.docx

wincc学习技巧

一、组态软件

、C语言基础

中的语言

WinCC语言由C脚本(C-script)和B脚本(VB-script)组成。

WINCC中C脚本:

(1)C动作(在画布中编辑的程序代码)。

intNEW_Add{intc;c=a+b;returnc;

(2)全局脚本编辑器:

项目函数、标准函数和内部函数。

项目函数:

自定义本项目(保护性)标准函数:

编辑好供C动作调用内部函数:

(微软)自定义编辑函数在项目函数中例如:

#pragma()

(inta;inb)

程序使用的变量(书上P31--35)

中的(Tag)变量------

变量:

C变量、WINC(变量

SetTagBit(参数1,参数2)、GetTagBit(参数)

SetTagWord(参数1,参数2)、GetTagWord参数)

SetTagChar(参数1,参数2)、GetTagChar(参数)变量名。

参数2:

具体要求。

例如参数1为液位,参数2为a

C变量:

int(数值型)、char(字符型)、BOOL布尔型)---也就是二进制(为常用)WINC(变量:

word(数值型)、char(字符型)、Bit(布尔型)(为常用)常用变量如下:

布尔型:

数值型:

字符型:

参数1:

举例1二进制变量“启动”控制电机启停

BOOLa;

a=GetTagBit(“启动”);if(a==0)SetTagBit(“启动”,1);

举例2二进制变量“启动”控制电机启停

BOOLa;

staticinti=0;(类似inti;i=0;)a=GetTagBit(“启动”);if(a==0)i++;

加static启动一次i=1启动二次i=2

两者区别:

不加static启动一次i=1启动二次i=1

启动三次i=1启动四次i=1中的运算符

启动三次i=3

启动四次i=4

中的常用语句

三、变量组态

WINCC中的变量分为:

内部变量、外部变量和C动作(函数中的变量)

1.利用变量进行增减计数

步骤1:

进行画面构建,需要两个按钮和一个输入输出域(属性调整-)(变量、有变化时、输出)。

新建内部变量,命名为“计数”,属性为无符16位。

如下图所示;步骤2:

在名字为“启动增加”的按钮中-----属性----事件---鼠标左键C动作:

unsignedshorta;

a=GetTagWord("计数");

a++;

SetTagWord("计数",a);

步骤3:

在名字为“启动减少”的按钮中

unsignedshorta;a=GetTagWord("计数");

a--;SetTagWord("计数",a);

2.利用变量进行增减计数(带有步长控制),可定义步长

步骤1:

进行画面构建,需要两个按钮和两个输入输出域(属性调整-)(变量为计数、有变化时、输出)步长对应的输入输出域(属性调整-)(变量为步长、有变化时、输入)。

新建2个内部变量,命名为“计数”和“步长”

步骤2:

在名字为“启动增加”的按钮中属性

unsignedshorta;

unsignedshortb;a=GetTagWord("计数1");

b=GetTagWord("步长");

a=a+b;SetTagWord("计数1",a);

步骤3:

在名字为“启动减少”的按钮中

unsignedshorta;

unsignedshortb;a=GetTagWord("计数1");b=GetTagWord("步长");a=a-b;

SetTagWord("计数1",a);

步骤4:

如果调整步长,可直接输入

属性----事件---鼠标左键C动作:

“止

属性

3.利用变量进行电机启动

新建内部变量,命名为“起停”,属性为无符16位。

,属性为无符16位。

如下图所示;

事件---鼠标左键C动作:

事件---鼠标左键C动作:

 

在名字为“启停”的按钮中

BOOLa;a=GetTagWord("起停");

if(a==0)

SetTagWord("起停",1);

if(a==1)

SetTagWord("起停",0);

4.利用变量进行windows窗口对象的修改

属性----事件---鼠标左键C动作:

四、画面组态

5.画面的切换

方法1:

利用直接连接切换单个画面,即为在下图中“单击鼠标改变画面”的部分点击链接

到所要去的画面。

组态完毕后,点击按钮即可达到。

方法2:

通过对象名称和画面名称的变量连接打开画面。

在书上P101

方法3:

通过内部函数打开画面。

在按钮属性中事件中鼠标左键中C动作利用软件内部函数输入程序如下:

OpenPrevPicture("画面名称");

6.利用画面窗口显示画面

方法:

SetVisible("画面名称","对象名称",1或0);

SetVisible表示可见度;画面名称表示画面的名字,例如等;对象名称表示“画面窗口

“画面窗口n”在智能对象中;1或0表示可见或不可见。

n”,

步骤:

第一步:

新建三个画面,、、。

目的将、在中通过按钮的控制显示出来;第二步:

分别在、中组态一个目标物;

第三步:

在中组态两个按钮和两个画面窗口控件(名称为画面窗口1、画面窗口2),在智能

几何宽度为246,高度为129;

对象中找到“画面窗口”,更改画面窗口属性(属性

属性---其它---边框改为是,显示改为否,画面名称添加或)

第四步:

将、画面的大小调整为和两个画面窗口一样大;

第五步:

进行按钮组态,在按钮属性中事件中鼠标左键中C动作中编写程序如下:

按钮1:

SetVisible("","

画面窗口

1",1);

SetVisible("","

画面窗口

2",0);

按钮2:

SetVisible("","

画面窗口

1",0);

SetVisible("","

画面窗口

2",1);

 

7.

时控显示

画面窗口属性这个技巧功能是对上一个的继承,最终结果就是将三个画面循环显示。

步骤:

第一步:

新建四个画面,、、、。

目的将、、在中通过按钮的时间控制显示出来;(这里并非按钮按下显示,系统运行自动显示)第二步:

分别在、、中组态一个目标物;

第三步:

在中组态一个按钮和三个画面窗口控件(名称为画面窗口1、画面窗口2、画面窗

口3),在智能对象中找到“画面窗口”,更改画面窗口属性(属性几何宽度为246,高度为129;属性其它边框改为是,显示改为否,画面名称添加或或);第四步:

将、、画面的大小调整为和三个画面窗口一样大;

第五步:

进行按钮组态,在按钮属性中几何中宽度中(假如宽度为70)C动作中编写程序如

下:

staticinta=0;

a++;

if(a==1)

{

SetVisible("","

画面窗口

3",1);

SetVisible("","

画面窗口

4",0);

SetVisible("","

}if(a==2)

{

SetVisible("","

画面窗口

5",0);

画面窗口

3",0);

SetVisible("","

画面窗口

4",1);

SetVisible("","

}if(a==3)

{

SetVisible("","

画面窗口

5",0);

画面窗口

3",0);

SetVisible("","

画面窗口

4",0);

SetVisible("","

画面窗口

5",1);

a=0;

return70;

触发器调整为1S中,即为间隔1S闪烁显示。

8.动画旋转组态(例如风扇转动)

这个技巧是为了组态一个旋转的动画,例如工业上的搅拌机等。

举例如下:

步骤1:

组态基本画面,可以在显示库中寻找,也可以自己绘制。

显示库:

从显示库中调用,若使用,首先将元件导出(注意保存),然后将元件删

掉,然后再导入(插入)这个元件,便可以进行调整(折开、组装、编组)注意,编组时必须至少两个一组。

自己绘制:

例如矩形、圆等(注意属性的调整)全选编组。

例如编为4个组:

组1、组2、组3、组4

步骤3:

触发器的调整,标准周期,250MS

 

颜色改变是最基本的动态化的技巧,就是动态对话框的基本功能,利用颜色的变化来完

成一个部件的动作或结束。

例如,画布属性---颜色动态对话框(事件名称也就是触发器的调整、表达式的填充或者变量、选择表达式结果的展现形式(布尔型或者其它调整颜

色))。

此技巧元件可单独作用,亦可由按钮控制。

在矩形---几何---宽度(假设宽度为100)C动作:

(注意触发器调整250毫秒)

1)填充增加

staticinta=0;

if(a>=100)

a=0;

SetTagWord("level",a);

a++;

return100;

2)填充减少

staticinta=100;

if(a==100)

a=100;

SetTagWord("level",a);

return100;

3)填充增减结合(先增加、再减少)

staticinta=0;

staticintb=0;(方向控制)

if(b==0)

if(a>=100)b=1;

a++;

if(b==1)

if(a<=0)b=0;

SetTagWord("level",a);

return100;

对象的移动就是控制元件在画布上水平左右或者垂直上下的移动,亦或沿对角线移动,也可以综合性的各方向的移动。

以小车移动为例进行步骤分析如下:

步骤一:

选中元件----属性----几何(选择位置X、位置Y)----灯泡标志(C动作):

特别注意:

计算移动的距离范围,选出一个起点和一个终点(如果双向起点和终点和互换的)。

计算两点之间的距离。

如果水平移动,计算X之间的距离;如果垂直移动,计算丫之间的距离。

例如,起点X的坐标为500,终点X的坐标为20,那么距离为480。

(水平移动就是不断增加或者不断减少x)

步骤二:

下面以水平移动为例,进行C动作分析:

1)水平左移(不断减少x)

staticinta=500;

if(a<=0)a=480;

elsea=a-4;(每次移动的距离,可以自动调整

return20+a;

2)水平右移(不断增加x)

staticinta=0;

if(a>=500)a=0;

elsea=a+4;(每次移动的距离,可以自动调整

return20+a;

3)水平左右移动(双向移动)

staticinta=500;

if(b==0)if(a<=0)

{

b=1;(调整方向)a=a-4;(每次移动的距离,可以自动调整

if(b==1)if(a>=500)b=0;(调整方向)

a=a+4;(每次移动的距离,可以自动调整)

SetTagWord("level",a);

return20+a;

步骤三:

触发器调整250毫秒

 

液的控制系统为例进行论述。

1)管道中液体流动

态,就是没有任何液体流动;第二种和第三中为液体流动的两种不同状态。

三种状态画好并

导出到桌面,画好一个就导出一个。

分别命名(0、1、2)(3次)

步骤二:

新建一个变量,命名为“进水”,为无符号16位。

 

三页(0、1、2)将三个画面状态拖入0、1、2下面,相对应)。

步骤四:

在状态显示控件

几何宽度(假设宽度为100)---C动作:

间求差值

此技巧是对上一个技巧的承接,用于实现在线时长显示的功能。

注意:

字符不能相加减;显示格式(字符显示):

时间1:

09:

45:

30时间209:

45:

45时长:

00:

00:

15。

画面布局如图所示;

步骤一:

新建内部变量:

shijian1和shijian2和shijian3(格式为文本8位字符集),新建对应的输入输出域(变量(shijian1和shijian2和shijian3)、有变化时、输出)。

注意:

输入/输出域属性调整(输出格式:

字符串)

步骤二:

程序时间1程序:

 

在时间1对应的输入输出域中---属性---事件---

鼠标左键C

动作:

 

chara[20];

char*p;

p=GetTagChar("time");

strcpy(a,p);

SetTagChar("shijian1",a);

时间2程序:

 

chara[20];

char*p;

p=GetTagChar("time");

strcpy(a,p);

SetTagChar("shijian2",a);

时间差程序:

 

第一部分:

定义变量

chara[20],b[20];

char*p;

charaa[10],bb[10],cc[10];

inti;

intval1,val2,val3;

intval4,val5,val6;

intval7,val8,val9;

longsum1,sum2,temp;

、、、、采集时间

第二部分:

将shijian1由字符转换为数值

p=GetTagChar("shijian1");

strcpy(a,p);

for(i=0;i<2;i++)

 

bb[i]=a[i+3];

cc[i]=a[i+6];

aa[2]='\0';

bb[2]='\0';

cc[2]='\0';

val1=atoi(aa);

、、、、分钟

、、、、秒

、、、、字符转数值

 

val2=atoi(bb);

val3=atoi(cc);

第三部分:

将shijian2由字符转换为数值(同上)

p=GetTagChar("shijian2");

strcpy(a,p);

for(i=0;i<2;i++)

aa[i]=a[i];

bb[i]=a[i+3];

cc[i]=a[i+6];

aa[2]='\0';

bb[2]='\0';

cc[2]='\0';

val4=atoi(aa);

val5=atoi(bb);

val6=atoi(cc);

第四部分:

求差值

、、、、计算时间1共多少秒

sum1=val1*3600+val2*60+val3;、

sum2=val4*3600+val5*60+val6;

temp=sum2-sum1、;、、、

 

分为三(仍为数值)

第五部分:

将得出数值temp转换为(时、分、秒)

val8=(temp%3600)/60;、、、

、、、、余下数值除60取整为分钟

 

val9=temp%60;、、、、

、、、、余下数值除60取余为秒值

 

第六部分:

将各数值转换为字符(0的ASCII码为48)

b[3]=val8/10+48;

b[4]=val8%10+48;

b[5]=':

';

b[6]=val9/10+48;

b[7]=val9%10+48;

项目总图

14.全局脚本(了解)

以可以保护函数。

举例说明:

以上一技巧中的时间差函数为例;

 

序,如下所示:

#pragmaoption(mbcs)

 

void

此为函数名字

可以自己起名)

输入要编写的程序

最后的程序如下:

#pragmaoption(mbcs)

voidNew_Function()

 

chara[20],b[20];

char*p;

charaa[10],bb[10],cc[10];

inti;

intval1,val2,val3;

intval4,val5,val6;

intval7,val8,val9;

longsum1,sum2,temp;

p=GetTagChar("shijian1");

strcpy(a,p);

for(i=0;i<2;i++)

aa[i]=a[i];

bb[i]=a[i+3];

cc[i]=a[i+6];

aa[2]='\0';

bb[2]='\0';

cc[2]='\0';

val1=atoi(aa);

val2=atoi(bb);

val3=atoi(cc);

p=GetTagChar("shijian2");

strcpy(a,p);

for(i=0;i<2;i++)

aa[i]=a[i];

bb[i]=a[i+3];

cc[i]=a[i+6];

aa[2]='\0';

bb[2]='\0';

cc[2]='\0';

val4=atoi(aa);

val5=atoi(bb);

val6=atoi(cc);

sum1=val1*3600+val2*60+val3;

sum2=val4*3600+val5*60+val6;

temp=sum2-sum1;

temp=abs(temp);

val7=temp/3600;

val8=(temp%3600)/60;

val9=temp%60;

b[0]=val7/10+48;

b[1]=val7%10+48;

b[2]=':

';

b[3]=val8/10+48;

b[4]=val8%10+48;

b[5]=':

';

b[6]=val9/10+48;

b[7]=val9%10+48;

b[8]='\0';

SetTagChar("shijian3",b);

加密:

菜单栏中编辑信息(创建者:

冯晨曦;口令:

123456),以后每次输入

都得登录正确的口令才可以登录;加密后,在C动作中只显示函数名,不显示函数内容

15.关于文件的操作(对WINCC勺扩展)

1)文件指针格式*txt

*dat(打不开,存放登录过的密码)

2)文件操作

1打开文件

2操作文件(复杂)

3关闭文件

3)打开文件(首先定义文件指针)

FILE*fp;fp=fopen(“”,“r”);

w

打开文件方式:

r——表示只读:

如文件不存在或者路径错误,返回NULL(空指针)

表示写入:

如文件不存在或者路径错误,则新建用于清空某个文

件。

表示写:

为追加,写时不会删除原有文件。

以r、a使用最多。

4)关闭文件

 

5)操作文件

①写数据fputs(字符,文件指针);字符为常量或者数组举例:

fputs(china,fp);

chara[20];

strcpy(a[20],fp);

②读数据fgets(,数组名,n,文件指针);

作用是从文件中读取n-1个字符放入数组中;

 

借助本项目巩固文件操作技巧,本项目就是对一个班级信息的记录(姓名、班级、学号)

 

输出域,注意:

输入/输出域属性调整(输出格式:

字符串),如下图所示:

步骤二:

新建两个按钮,分别命名为“写入一次信息”、“写入信息”。

任务一:

在按钮“写入一次信息”中---属性事件鼠标左键C动作:

FILE*fp;fp=fopen("E:

\\","a");fputs("冯晨曦",fp);fputs("1001自动化",fp);fputs("\r\n",fp);

fclose(fp);

任务二:

在按钮“写入信息”中---属性事件鼠标左键C动作:

FILE*fp;、、、、、、、、、、、、、、、、、、、、、、、、、文件指针chara[20];charb[20];charc[20];char*p;、、、

、、、、字符指针

对文件的综合处理(未完)

本项目是对文件处理的综合运用,是对组态系统人员登录的统计和记录。

总体布局如下图所

示;

项目步骤如下:

步骤一:

完成下图图形的构建和脚本程序的编写,方法如上

1)新建三个内部变量,分别命名“name”“class”“number”,分别连接相

应的输入输出域(组态对话框:

该变量、有变化时、类型为I/O域)。

意:

输入/输出域属性调整(输出格式:

字符串)。

2)在名字为“写入文件”的按钮中---属性---事件C动作:

FILE*fp;

chara[20];

charb[20];

charc[20];

char*p;

inti;

p=GetTagChar("name");strcpy(a,p);p=GetTagChar("class");strcpy(b,p);p=GetTagChar("number");strcpy(c,p);

//if(strlen(a)==4)、、、、可

//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("\r\n",fp);fclose(fp);

步骤二:

完成下图图形的构建和属性的调整;

击insertColum(增加一列)index为列号(text:

姓名;Width(列宽):

级;Width(列宽):

80;)----三次点击insertColum(增加一列)index

击确定。

2)选中属性---控制属性GridLines改“是”为“否”。

步骤三:

完成下图图形的构建和脚本程序的编写;

1)新建4个按钮和1个输入输出域,注意:

输入/输出域属性调整(输出

格式:

字符串)。

如上图所示;

新建内部变量:

命名“search”,文本8位字符集;

动作:

#defineGetObjectGetObject

inti;

charaa[10];

chara[20],b[20],c[20];

FILE*fp;

fp=fopen("E:

\\","r");

弹出对话框(可能是XP系统中的。

WIN7不弹出)

打开文件:

pdl=__object_create("PDLRuntime");、、、、、指向当前运行系统中的激活画面

pic=pdl->GetPicture("");

obj=pic->GetObject("控件1");

for(i=1;feof(fp)==0;)、、、、、蓝色部

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1