wincc学习技巧2图文.docx
《wincc学习技巧2图文.docx》由会员分享,可在线阅读,更多相关《wincc学习技巧2图文.docx(17页珍藏版)》请在冰豆网上搜索。
wincc学习技巧2图文
wincc学习技巧2-图文
一、组态软件二、C语言基础
1.WINCC中的语言
Wincc语言由C脚本(C-cript)和B脚本(VB-cript)组成。
WINCC中C脚本:
(1)C动作(在画布中编辑的程序代码)。
(2)全局脚本编辑器:
项目函数、标准函数和内部函数。
项目函数:
自定义本项目(保护性)标准函数:
编辑好供C动作调用内部函数:
(微软)自定义编辑函数在项目函数中例如:
#pragma()
intNEW_Add(inta;inb){
intc;c=a+b;returnc;
}
2.WINCC中的(Tag)变量------程序使用的变量(书上P31--35)变量:
C变量、WINCC变量
C变量:
int(数值型)、char(字符型)、BOOL(布尔型)---也就是二进制(为常用)WINCC变量:
word(数值型)、char(字符型)、Bit(布尔型)(为常用)常用变量如下:
布尔型:
SetTagBit(参数1,参数2)、GetTagBit(参数)数值型:
SetTagWord(参数1,参数2)、GetTagWord(参数)字符型:
SetTagChar(参数1,参数2)、GetTagChar(参数)
参数1:
变量名。
参数2:
具体要求。
例如参数1为液位,参数2为a举例1二进制变量“启动”控制电机启停BOOLa;
a=GetTagBit(“启动”);if(a==0)
SetTagBit(“启动”,1);
举例2二进制变量“启动”控制电机启停BOOLa;
taticinti=0;(类似inti;i=0;)a=GetTagBit(“启动”);if(a==0)i++;
两者区别:
不加tatic加tatic
启动一次i=1启动一次i=1启动二次i=1启动二次i=2
启动三次i=1启动三次i=3启动四次i=1启动四次i=4
3.WINCC中的运算符
3.WINCC中的常用语句
2
3
三、变量组态
WINCC中的变量分为:
内部变量、外部变量和C动作(函数中的变量)
1.利用变量进行增减计数
步骤1:
进行画面构建,需要两个按钮和一个输入输出域(属性调整-)(变量、有变化时、输出)。
新建内部变量,命名为“计数”,属性为无符16位。
如下图所示;
步骤2:
在名字为“启动增加”的按钮中-----属性----事件---鼠标左键C动作:
unignedhorta;a=GetTagWord(\计数\a++;
SetTagWord(\计数\
步骤3:
在名字为“启动减少”的按钮中-----属性----事件---鼠标左键C动作:
unignedhorta;a=GetTagWord(\计数\a--;
SetTagWord(\计数\
2.利用变量进行增减计数(带有步长控制),可定义步长
步骤1:
进行画面构建,需要两个按钮和两个输入输出域(属性调整-)(变量为计数、有变
化时、输出)步长对应的输入输出域(属性调整-)(变量为步长、有变化时、输入)。
新建2个内部变量,命名为“计数”和“步长”,属性为无符16位。
如下图所示;
4
步骤2:
在名字为“启动增加”的按钮中-----属性----事件---鼠标左键C动作:
unignedhorta;
unignedhortb;
a=GetTagWord(\计数1\b=GetTagWord(\步长\a=a+b;
SetTagWord(\计数1\
步骤3:
在名字为“启动减少”的按钮中-----属性----事件---鼠标左键C动作:
unignedhorta;unignedhortb;
a=GetTagWord(\计数1\b=GetTagWord(\步长\a=a-b;
SetTagWord(\计数1\
步骤4:
如果调整步长,可直接输入
3.利用变量进行电机启动
新建内部变量,命名为“起停”,属性为无符16位。
在名字为“启停”的按钮中-----属性----事件---鼠标左键C动作:
BOOLa;
a=GetTagWord(\起停\if(a==0)
SetTagWord(\起停\if(a==1)
SetTagWord(\起停\
4.利用变量进行window窗口对象的修改
5
四、画面组态
5.画面的切换
方法1:
利用直接连接切换单个画面,即为在下图中“单击鼠标改变画面”的部分点击链接到所要去的画面。
组态完毕后,点击按钮即可达到。
6
方法2:
通过对象名称和画面名称的变量连接打开画面。
在书上P101方法3:
通过内部函数打开画面。
在按钮属性中事件中鼠标左键中C动作利用软件内部函数输入程序如下:
OpenPrevPicture(\画面名称\
6.利用画面窗口显示画面
方法:
SetViible(\画面名称\对象名称\或0);
SetViible表示可见度;画面名称表示画面的名字,例如1.pdl等;对象名称表示“画面窗口n”,“画面窗口n”在智能对象中;1或0表示可见或不可见。
步骤:
第一步:
新建三个画面,1.pdl、2.pdl、3.pdl。
目的将2.pdl、3.pdl在1.pdl中通过按钮的控制显示出来;
第二步:
分别在2.pdl、3.pdl中组态一个目标物;
第三步:
在1.pdl中组态两个按钮和两个画面窗口控件(名称为画面窗口1、画面窗口2),在智能对象中找到“画面窗口”,更改画面窗口属性(属性----几何----宽度为246,高度为129;属性---其它---边框改为是,显示改为否,画面名称添加2.pdl或3.pdl);
7
第四步:
将2.pdl、3.pdl画面的大小调整为和两个画面窗口一样大;
第五步:
进行按钮组态,在按钮属性中事件中鼠标左键中C动作中编写程序如下:
按钮1:
SetViible(\画面窗口1\
SetViible(\画面窗口2\
按钮2:
SetViible(\画面窗口1\
SetViible(\画面窗口2\
7.画面窗口属性-----时控显示
这个技巧功能是对上一个的继承,最终结果就是将三个画面循环显示。
步骤:
第一步:
新建四个画面,1.pdl、2.pdl、3.pdl、4.pdl。
目的将2.pdl、3.pdl、4.pdl在1.pdl中通过按钮的时间控制显示出来;(这里并非按钮按下显示,系统运行自动显示)第二步:
分别在2.pdl、3.pdl、4.pdl中组态一个目标物;
第三步:
在1.pdl中组态一个按钮和三个画面窗口控件(名称为画面窗口1、画面窗口2、画面窗口3),在智能对象中找到“画面窗口”,更改画面窗口属性(属性----几何----宽度为246,高度为129;属性----其它----边框改为是,显示改为否,画面名称添加2.pdl或3.pdl或4.pdl);第四步:
将2.pdl、3.pdl、4.pdl画面的大小调整为和三个画面窗口一样大;
第五步:
进行按钮组态,在按钮属性中几何中宽度中(假如宽度为70)C动作中编写程序如下:
taticinta=0;a++;if(a==1){
SetViible(\画面窗口3\SetViible(\画面窗口4\SetViible(\画面窗口5\}if(a==2){
SetViible(\画面窗口3\SetViible(\画面窗口4\
8
SetViible(\画面窗口5\}if(a==3){
SetViible(\画面窗口3\SetViible(\画面窗口4\SetViible(\画面窗口5\a=0;}
return70;
触发器调整为1S中,即为间隔1S闪烁显示。
8.动画旋转组态(例如风扇转动)
这个技巧是为了组态一个旋转的动画,例如工业上的搅拌机等。
举例如下:
步骤1:
组态基本画面,可以在显示库中寻找,也可以自己绘制。
显示库:
从显示库中调用,若使用,首先将元件导出(注意保存),然后将元件删掉,然后再导入(插入)这个元件,便可以进行调整(折开、组装、编组)注意,编组时必须至少两个一组。
自己绘制:
例如矩形、圆等(注意属性的调整)全选编组。
例如编为4个组:
组1、组2、组3、组4
步骤2:
程序的编写-------在画布属性---几何---宽度(如果此时宽度为800)---C动作:
taticinta=0;a++;if(a==1){
SetViible(\组1\SetViible(\组2\SetViible(\组3\SetViible(\组4\}
9
if(a==2){
SetViible(\组1\SetViible(\组2\SetViible(\组3\SetViible(\组4\a=0;}
return800;
步骤3:
触发器的调整,标准周期,250MS9.动态化------------颜色改变
颜色改变是最基本的动态化的技巧,就是动态对话框的基本功能,利用颜色的变化来完成一个部件的动作或结束。
例如,画布属性---颜色-----动态对话框(事件名称也就是触发器的调整、表达式的填充或者变量、选择表达式结果的展现形式(布尔型或者其它调整颜色))。
10.动态化------------闪烁组态(元件闪烁)
此技巧主要是针对于元件库中的元件来讲。
例如,随便调出一个元件(属性----控件属性-----闪烁样式(4种选择,包括不闪烁-0、不可见-1、阴影-2、实心-3))。
点击后面的灯泡标志,选择动态对话框-----闪烁颜色------布尔型等。
此技巧元件可单独作用,亦可由按钮控制。
11.动态化------------动态填充组态
动态填充组态就是控制元件的动态填充。
例如,新建一个内部变量(命名为level、无符号16位、上限100、下限0、起始值0)、调出一个元件或绘制一个矩形(属性----动态填充改为“是”、填充量改为“0”、点击填充量后面的灯泡标志,直接连接变量level)。
在矩形---几何---宽度(假设宽度为100)----C动作:
(注意触发器调整250毫秒)
(1)填充增加taticinta=0;if(a>=100)a=0;
10
SetTagWord(\a++;return100;
(2)填充减少taticinta=100;if(a==100)a=100;
SetTagWord(\a——;return100;
(3)填充增减结合(先增加、再减少)taticinta=0;
taticintb=0;(方向控制)if(b==0){
if(a>=100){b=1;}a++;}if(b==1){if(a<=0){b=0;}a——;}
SetTagWord(\
11
return100;
12.动态化------------对象的移动
对象的移动就是控制元件在画布上水平左右或者垂直上下的移动,亦或沿对角线移动,也可以综合性的各方向的移动。
以小车移动为例进行步骤分析如下:
步骤一:
选中元件----属性----几何(选择位置某、位置Y)----灯泡标志(C动作):
特别注意:
计算移动的距离范围,选出一个起点和一个终点(如果双向起点和终点
和互换的)。
计算两点之间的距离。
如果水平移动,计算某之间的距离;如果垂直移动,计算Y之间的距离。
例如,起点某的坐标为500,终点某的坐标为20,那么距离为480。
(水平移动就是不断增加或者不断减少某)
步骤二:
下面以水平移动为例,进行C动作分析:
(1)水平左移(不断减少某)
taticinta=500;if(a<=0)a=480;ele
a=a-4;(每次移动的距离,可以自动调整)return20+a;
(2)水平右移(不断增加某)taticinta=0;if(a>=500)a=0;ele
a=a+4;(每次移动的距离,可以自动调整)return20+a;
(3)水平左右移动(双向移动)taticinta=500;taticintb=0;(方向控制)if(b==0){
12
if(a<=0){
b=1;(调整方向)}
a=a-4;(每次移动的距离,可以自动调整)}if(b==1){if(a>=500){
b=0;(调整方向)}
a=a+4;(每次移动的距离,可以自动调整)}
SetTagWord(\return20+a;
步骤三:
触发器调整250毫秒注意:
位置某------水平(左右)移动
位置Y------垂直(上下)移动高度---------放大或者缩小(上下)宽度--------拉伸或缩短(左右)
13.动态化------------复杂动画设计
复杂动画设计是动态化画面的主要特色,也是工业画面组态主要部分。
本技巧的展现以混合液的控制系统为例进行论述。
(1)管道中液体流动
步骤一:
在元件库中调用管道。
管道在plantElemer-----pipe-----2270(弯管道)、2206(横放管道)、2180(纵放管道)中寻找。
画出液体流动的三种状态,第一种状态为原始状态,就是没有任何液体流动;第二种和第三中为液体流动的两种不同状态。
三种状态画好并导出到桌面,画好一个就导出一个。
分别命名(0、1、2)(3次)
13
步骤二:
新建一个变量,命名为“进水”,为无符号16位。
步骤三:
在智能对象中-----状态显示------组态对话框(变量为“进水”、有变化时、增加三页(0、1、2)将三个画面状态拖入0、1、2下面,相对应)。
步骤四:
在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
taticinta=0;//////或者taticunignedhorta=0;//三种画面的第0张画面if(a>2)当循环超过第二张画面,强制回到第一张画面。
a=1;三种画面的第1张画面
SetTagWord(\进水\变量状态转移,将a变化给“进水”C变量转WINCC变量a++;return100;
步骤五:
触发器为标准周期,250或500MS,保存---运行
(2)进水阀控制的管道中液体流动
此技巧和
(1)的区别主要是增加阀门的控制。
即由阀门控制水流的通和断。
对于进水阀门:
步骤一:
在元件库中----plantElemer----valve(阀门)。
(注意导入和导出)步骤二:
新建一个变量,命名为“进水阀”,为二进制变量。
新建一个变量,命名为“进水”,为无符号16位。
步骤三:
阀门------属性-----背景颜色-----动态对话框(事件名称为变量和触发器的调整为有变化时、表达式为“进水阀”、选择布尔型变量(真----1-----绿、假-----0-----红))。
步骤四:
阀门-----属性-----事件中-----鼠标左键-----C动作:
BOOLa;
a=GetTagBit(“进水阀”);if(a==1)
SetTagBit(“进水阀”,0);ele
SetTagBit(“进水阀”,1);对于进水状态显示控件:
在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
taticinta=0;//////或者taticunignedhorta=0;/////////a表示水量
BOOLb;
14
b=GetTagBit(“进水阀”);
if(b==0)//////////////////如果没有按键按下,无液体流动。
{
SetTagWord(\进水\return100;}
if(a>2)////////////////////////如果有按键按下,有液体流动。
a=1;
SetTagWord(\进水\a++;return100;
触发器为标准周期,250或500MS,保存---运行
(3)进水阀和出水阀共同控制的管道中液体流动以及液位的状态显示进水阀控制如上
(2)对于出水阀门:
步骤一:
在元件库中----plantElemer----valve(阀门)。
(注意导入和导出)步骤二:
新建一个变量,命名为“出水阀”,为二进制变量。
新建一个变量,命名为“出水”,为无符号16位。
步骤三:
阀门------属性-----背景颜色-----动态对话框(事件名称为变量和触发器的调整为有变化时、表达式为“出水阀”、选择布尔型变量(真----1-----绿、假-----0-----红))。
步骤四:
阀门-----属性-----事件中-----鼠标左键-----C动作:
BOOLa;
a=GetTagBit(“出水阀”);if(a==1)
SetTagBit(“出水阀”,0);ele
SetTagBit(“出水阀”,1);对于出水状态显示控件:
在状态显示控件-----几何-----宽度(假设宽度为100)---C动作:
taticinta=0;//////或者taticunignedhorta=0;
15
BOOLb;
b=GetTagBit(“出水阀”);if(b==0){
SetTagWord(\出水\return100;}
if(a>2)a=1;
SetTagWord(\出水\a++;return100;
触发器为标准周期,250或500MS,保存---运行
对于液位的设定:
步骤一:
在标准对象中-----矩形(或者其它)进行属性调整(大小、颜色和管道液体同色)。
步骤二:
新建一个变量,命名为“液位”,为无符号16位。
上限100,下限0,起始值0。
步骤三:
矩形------属性------填充(动态填充改为“是”、填充量改为0其后面的灯泡标志-----直接连接变量“液位”(有变化时))。
步骤四:
矩形----属性-----几何-----宽度(假设为100)-----C动作如下:
taticinta=0;//////或者taticunignedhorta=0;
BOOLb;BOOLc;
a=GetTagWord(“液位”);b=GetTagBit(“进水阀”);c=GetTagBit(“出水阀”);if(b==1)a++;if(c==1)a--;
SetTagWord(\液位\
16
return100;
步骤五:
触发器为250MS。
(标准周期)(4)增加设定值的控制
本技巧是对(3)中液位部分的调整。
增加设定值。
使水位恒定在设定值所定在的位置。
对于液位的调整:
步骤一:
新建变量,命名“设定值”,无符号16位。
连接输入输出域输入设定值(变量为设定值、类型为输入、有变化时)。
步骤二:
程序修改------矩形----属性-----几何-----宽度(假设为100)-----C动作如下:
taticunignedhorta;
taticunignedhortd;BOOLb;BOOLc;
a=GetTagWord(“液位”);d=GetTagWord(“设定值”);b=GetTagBit(“进水阀”);c=GetTagBit(“出水阀”);if(a>d){
SetTagBit(\出水阀\a--;}if(a
SetTagBit(\进水阀\a++;}if(a==d){
SetTagBit(\进水阀\SetTagBit(\出水阀\
17
}
SetTagWord(\液位\return100;
步骤三:
触发器为250MS。
(标准周期)(5)增加急停方式的控制(了解)步骤一:
新建变量“急停”,二进制变量。
按钮------事件-------鼠标-------C动作(按下,两个地方同时停下)
14.操作控制权限(保护权限)
15.字符串的应用
18
16.日期与时间的设置--------正确的提取日期和时间
方法1:
利用控件显示(直接显示),如图所示;
方法2:
利用程序显示
步骤一:
提取系统日期和时间;
变量管理-----添加新的驱动连接,如下图所示;
19
分别建立对应的输入/输出域(在“组态对话框”中:
对应变量、有变化时,
输出)如下图所示。
注意:
输入/输出域属性调整(输出格式:
字符串)
步骤二:
建立内部变量,命名“hijian”,建立相应的输入/输出域(在“组态对话框”中:
对应变量(hijian)、有变化时,输出)如下图所示。
注意:
输入/输出域属性调整(输出格式:
字符串)
步骤三:
将日期和时间相连;
20
步骤:
全局脚本-----C-Editor----项目函数------新建-----在特定的形式中输入要编的程序,如下所示:
#pragmaoption(mbc)
voidNew_Function()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\此为函数名字(可以自己起名){
输入要编写的程序}
最后的程序如下:
#pragmaoption(mbc)voidNew_Function(){
chara[20],b[20];char某p;
charaa[10],bb[10],cc[10];inti;
intval1,val2,val3;intval4,val5,val6;intval7,val8,val9;longum1,um2,temp;
p=GetTagChar(\trcpy(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';
26
bb[2]='\\0';cc[2]='\\0';val1=atoi(aa);val2=atoi(bb);val3=atoi(cc);
p=GetTagChar(\trcpy(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);
um1=val1某3600+val2某60+val3;um2=val4某3600+val5某60+val6;temp=um2-um1;temp=ab(temp);
val7=temp/3600;val8=(temp600)/60;val9=temp`;
27
b[0]=val7/10+48;b[1]=val7+48;b[2]=':
';b[3]=val8/10+48;b[4]=val8+48;b[5]=':
';b[6]=val9/10+48;b[7]=val9+48;b[8]='\\0';
SetTagChar(\}
加密:
菜单栏中----编辑----信息----(创建者:
冯晨曦;口令:
123456),以后每次输入都得登录正确的口令才可以登录;
加密后,在C动作中只显示函数名,不显示函数内容;
15.关于文件的操作(对WINCC的扩展)
(1)文件指针格式某t某t
某dat(打不开,存放登录过的密码)
(2)文件操作①打开文件②操作文件(复杂)③关闭文件
(3)打开文件(首先定义文件指针)
FILE某fp;
fp=fopen(“C:
\\\\Tet.t某t”,“r”);
28
打开文件方式:
r-----表示只读:
如文件不存在或者路径错误,返回NULL(空指针)w----表示写入:
如文件不存在或者路径错误,则新建用于清空某个文
件。
a------表示写:
为追加,写时不会删除原有文件。
以r、a使用最多(4)关闭文件
Fcloe(fp);\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\f表示file,中文为“文件”;(5)操作文件
①写数据fput(字符,文件指针);字符为常量或者数组举例:
fput(china,fp);chara[20];trcpy(a[20],fp);
②读数据fget(,数组名,n,文件指针);作用是从文件中读取n-1个字符放入数组中;
16.项目-----班级数据录入
借助本项目巩固文件操作技巧,本项目就是对一个班级信息的记录(姓名、班级、学号)。
步骤一:
新建三