wincc中通过“规划变量”来提高组态“效率”
2013-03-02 13:21阅读:
Wincc不仅提供众多强大的功能,同时还为我们准备很多工具和方法来提高我们组态的效率。下面我们就从组态的第一件事:规划变量,开始了解这些方法。
1结构变量
首先我们要避免直接取DI、M等PLC区域的数据。这样的做法会导致,如果PLC方面信号有调整,组态变量的地址势必也要调整。使用一个DB(数据块)作为Wincc获取变量的中介就可以避免上
述情况。这样在较大的项目中可以保证组态开发人员和
PLC编程人员同时工作,不必考虑地址的问题,最后按照规划好标签和地址的关系,PLC程序只要将数据赋到DB或从DB取数据连接到自己的变量就可以了。这个数据块起到隔离的作用,也好比电气柜中的端子排。
其次也尽量不要建立单个的布尔型变量,应为Wincc和PLC通讯时,一个布尔变量也占用一个字节,不如把相关的布尔量组合在一个字节内,建立一个变量。例如对于设备的状态可以做一个Stat的字节变量:
Stat
|
Bit 0
|
电源合闸(具备启动条件)
|
|
Bit 1
|
启动(变频器使能)
|
|
Bit 2
|
|
|
bit 3
|
正向运行
|
|
bit 4
|
反向运行
|
|
bit 5
|
故障指示
|
|
bit 6
|
|
|
bit 7
|
|
在以上讨论的两点的基础上,就可以结合结构变量来大大提高建立标签的效率了。我们可以把某类设备相关的所有控制变量、过程变量定义在一个结构中。在定义结构变量的同时各个成员变量的相对地址就已经定义好了,因此在生成实际变量时只要指定首地址即可。一个好的结构定义,可以减少十几倍的工作量。定义成员变量时可以根据需要指定其为内部变量,还是外部变量,十分灵活。
下面是一个针对PI调节器的结构变量的例子:
结构名
|
成员变量
|
数据类型
|
偏移地址
|
注释
|
PID_C
|
MAN_ON
|
BIT
|
0.0
|
手动调节
|
|
RANGE
|
FLOAT
|
2
|
仪表量程
|
|
PI
|
FLOAT
|
6
|
放大倍数
|
|
TI
|
DWORD
|
10
|
积分时间
|
|
MAN
|
FLOAT
|
14
|
手动设定值
|
|
MV_IN
|
FLOAT
|
18
|
阀门开度反馈
|
|
SP_INT
|
FLOAT
|
22
|
过程设定值
|
|
PV_IN
|
FLOAT
|
26
|
过程实际值
|
需要指出的一点是,在规划结构变量时要考虑周全,一旦需要改变结构必须删除所有该结构变量的实例才可以修改。修改完毕,变量要重新建立。
2
变量替换
Wincc为一个画面元素的动态化提供了多种途径:变量、动态对话框、动作脚本。如果我们用变量和动态对话框来实现控制任务时,可以利用变量提换工具快速更改引用的变量,使相同的组态应用到不通的对象上。
对于脚本就不那么简单了。在Wincc
5.0之后的版本中,当我们编辑一个C动作的时候会发现脚本编辑器中会自动生成如下代码:
//
WINCC:TAGNAME_SECTION_START
// syntax: #define
TagNameInAction 'DMTagName'
// next TagID : 1
//
WINCC:TAGNAME_SECTION_END
//
WINCC:PICNAME_SECTION_START
// syntax: #define
PicNameInAction 'PictureName'
// next PicID : 1
//
WINCC:PICNAME_SECTION_END
其实这就是Wincc为我们提供的提提换变量而特意准备的。例如我们有四个活套。对于1号活套当检测到有钢时由“01L.Spare_1”变量触发变换颜色显示;当活套起套时由“01L.Stat”变量触发改变活套Y轴位置显示。其他活套仅仅是将“01L”用“02L”、“03L”、“04L”替换。通常的方法是先写好1号活套,复制成四个,再逐一修改脚本和触发条件中的变量。但如果我们在脚本中不直接使用变量,而采用下面的形式定义:
//
WINCC:TAGNAME_SECTION_START
#define GetStell '01L.Spare_1'
#define LoopUp '01L.Stat
'
//
WINCC:TAGNAME_SECTION_END
就可以顺利完成变量的提换了。应用时先选中需要编辑的对象,如2#活套,再选择菜单“编辑”—“链接”—“标签连接”进行变量替换。
3项目函数
有时编辑一些对象时会发现其脚本程序非常类似,这时最好将这些脚本程序写成项目函数,在需要时调用。例如,为用颜色来反映设备运行状态,就可以编写SetColorStatus函数:
#include 'apdefap.h'
long SetColorStatusMill(int status)
{
switch (status)
{
case 1:
//
ready
return(CO_OFF);
case 2:
//
On
case 3:
//
1+2 not reset ready
return(CO_ON);
//enable
case 8:
//
Run 1
case 16:
//
Run 2
case 9:
//
1+8
MCC
case 10:
//
2+8 Convert
reset ready
case 11:
//
1+2+8 Convert not reset
ready
case 17:
//
1+16
MCC
case 18:
//
2+16
Convert
reset ready
case 19:
//
1+2+16 Convert not reset
ready
return(CO_RUN);
case 32:
//Fault
case 34:
return(CO_ALARM);
default:
return(CO_NOT_READY);
}
}
这个函数在应用的时候要指定一个表示状态的标签(这个标签要按照表一所示的变量来规划),比如编辑对象颜色属性(background
color)的脚本:
return SetColorStatus(“Mill_Status”);
就可以根据设备当前的状态显示不通的颜色了。
工控老鬼技术Blog:http://blog.sina.com.cn/wincchome
启程培训中心
http://www.gongkong8.com/
E-mail:gongkong8@foxmail.com
QQ空间
:920500908
工控老鬼执着坚守,坚韧笃定,专注于工业自动化技术的传播和推广以及
PLC培训
深圳PLC培训
启程PLC培训
宝安PLC培训西门子PLC培训
S7-200培训
S7-300培训
系统集成培训
自动化培训
WINCC培训
EPLAN培训