技术论坛

 回复:Wincc怎么做设定曲线?

返回主题列表
作者 主题
seanyifei
新手

经验值:48
发帖数:13
精华帖:0
楼主    2010-04-29 15:23:41
主题:Wincc怎么做设定曲线?
wincc中的在线趋势曲线控件和功能趋势曲线都没有设定曲线的功能啊?
我要设定一个曲线,然后和下位机PLC送过来的数据进行比较,怎么实现啊?
刚刚入门,请多多帮忙!谢谢!
yhgcqzd
侠士

经验值:1210
发帖数:341
精华帖:3
13楼    2010-05-12 09:56:34
精华帖  主题:回复:Wincc怎么做设定曲线?
一.功能块的输入:
⒈PV信号,就是我们需要控制的参数,Real。
⒉x1,x2,x3...x10输入信号,代表时间间隔的参数,real。
⒊y1,y2,y3...y10输入信号,代表输出这值的参数,real。
由(x1,y1),(x2,y2)......(x10,y10)共计10点,组成折线表。
⒋Start输入信号,控制SSP运行的信号,off:停止,on:运行。bool。
二.功能块的输出信号
⒈SSP输出,当Start=off时,SSP=PV。当Start=on时,SSP以当前的PV为初始值,由(x(n),y(n))和(x(n+1),y(n+1))组成的直线来决定SSP的值。real。
⒉ElapseTime,代表SSP运行的时间,real。
三.主要功能说明
⒈Start=off,SSP=PV,ElapseTime=0。
⒉Start从off→on的正跳变时,功能块要根据此时的PV值(计作y0),反向计算出对应的X值(计作xo)。主要是考虑无扰动切换。
⒊Start=on,从x0开始,计算x值,并通过直线方程得到SSP值。
⒋Start=on,ElapseTime=ElapseTime+OB35的时间。
yhgcqzd
侠士

经验值:1210
发帖数:341
精华帖:3
16楼    2010-05-13 17:18:52
精华帖  主题:回复:Wincc怎么做设定曲线?
按照万泉河斑竹的指示,今天把相关文档汇总整理一下,修改了一些错字,并将WinCC的UserArchive和Step7的SSP功能块连接起来,在Windows XP SP3 (English)+Step7 V5.4 SP5+WinCC V7.0 SP1平台下测试通过。

1. 在Step7中
在Step7中建立一个SSP功能块,其定义如下:
1.1. 功能块的输入:
1.1.1. PV信号,就是我们需要控制的参数,Real。
1.1.2. x1,x2,x3...x10输入信号,代表时间间隔的参数,real。
1.1.3. y1,y2,y3...y10输入信号,代表输出值的参数,real。
由(x1,y1),(x2,y2)......(x10,y10)共计10点,组成折线表。
1.1.4. Start输入信号,控制SSP运行的信号,off:停止,on:运行。bool。
1.2. 功能块的输出信号
1.2.1. SSP输出,当Start=off时,SSP=PV。当Start=on时,SSP以当前的PV为初始值,由(x(n),y(n))和(x(n+1),y(n+1))组成的直线来决定SSP的值。real。
1.2.2. ElapseTime,代表SSP运行的时间,real。
1.3. 主要功能说明
1.3.1. Start=off,SSP=PV,ElapseTime=0。
1.3.2. Start从off→on的正跳变时,功能块要根据此时的PV值(计作y0),反向计算出对应的X值(计作xo)。主要是考虑无扰动切换。
1.3.3. Start=on,从x0开始,计算x值,并通过直线方程得到SSP值。
1.3.4. Start=on,ElapseTime=ElapseTime+OB35的时间。

2. 在WinCC中
2.1. 在WinCC中建立一个User Archive(名称为yhg),并建立X、Y两个字段(Field)。
2.2. 在TagLogging中,为Step7中的SSP功能块的输出SSP信号(也可以选择实际需要控制的参数作为归档信号)和ElapseTime信号建立归档记录。
2.3. 在图形中建立一个UserArchive 控件,在控件组态中指定UserArchive名称为yhg。
2.4. 在图形中建立一个FunctionTrend控件,在控件组态中建立2个变量:UserArchiveSSP和SSP。
a) UserArchiveSSP的数据源选择UserArchive/yhg,其X轴选择UserArchive中的yhg文件的x字段,Y轴选择UserArchive中的yhg的y字段。
b) SSP的数据源选择ArchiveTags,其X轴选择TagLogging中的ElapseTime,Y轴选择TagLogging中的SSP。
2.5. 在图形中增加一个按钮对象,名称为“Download to PLC”,并在鼠标事件中定义如下s cript:
#include "apdefap.h"
void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#include "apdefap.h"
void UAReadFromArchive();
UAHCONNECT hConnect;
UAHARCHIVE hArchive;

LONG lField = 1;
LONG NumberOfFields;

int ID;
int FieldIndex;
int plCount;

float x_Axis[15];
float y_Axis[15];
float pfValue;
//******* Connect to Componente User Archive **********************
if(uaConnect(&hConnect)==FALSE)
{
printf("uaConnect error: %d\r\n",uaGetLastError());
return;
}

if(hConnect==NULL)
{
printf("Handle UAHCONNECT equals NULL\r\n");
return;
}

//******* Connect to Archive via Name ******************************
if(uaQueryArchiveByName(hConnect,"yhg",&hArchive)==FALSE)
{
printf("uaQueryArchive Error: %d\r\n",uaGetLastError());
uaDisconnect(hConnect);
return;
}

//********* Sort on the ID ******************************************
uaArchiveSetSort( hArchive, "ID" );

//******* Opens Archivs ********************************************
if(uaArchiveOpen(hArchive)==FALSE)
{
printf("uaArchive Open Error\r\n",uaGetLastError());
uaReleaseArchive(hArchive);
uaDisconnect(hConnect);
return;
}

//******* Get Number of *********************************************
NumberOfFields = uaArchiveGetFields( hArchive );
printf( "Number of Fields = %u\n", NumberOfFields );
//*******************************************************************
UAArchiveGetCount(hArchive,&plCount);
printf( "Number of data records: %d\r\n" , plCount);
uaArchiveMoveFirst(hArchive); //Return-Type: BOOL

for (FieldIndex = 1; FieldIndex < NumberOfFields; FieldIndex++)
{
uaArchiveMoveFirst(hArchive); //Return-Type: BOOL
for (ID=1; ID <= plCount; ID++)
{
if (uaArchiveGetFieldValueFloat(hArchive,lField,&pfValue)) //Return-Type: BOOL
{
if (lField==1)
{
x_Axis[ID] = pfValue;
printf( " x Value: %f\r\n" , x_Axis[ID]);
}
else
{
y_Axis[ID] = pfValue;
printf( " y Value: %f\r\n" , y_Axis[ID]);
}

uaArchiveMoveNext(hArchive); //Return-Type: BOOL
}
else
{
printf("Error:%d\n", uaGetLastError() );
break;
}
printf( " ID: %d\r\n" , ID);
}
lField++;
}
//******* Close Archive ********************************************
if(uaArchiveClose(hArchive)==FALSE)
{
printf("error on closing archive\r\n",uaGetLastError());
}

if(uaReleaseArchive(hArchive)==FALSE)
{
printf("error release archive\r\n",uaGetLastError());
}

//******* Disconnect Component User Archive ************************

if(uaDisconnect(hConnect)==FALSE)
{
printf("error on disconnection\n",uaGetLastError());
}
//******* Write to PLC **************************************

SetTagFloatWait("S7$Program(1)/CFC(1)/SSP.x1",x_Axis[1]); //Return-Type: BOOL

//......

SetTagFloatWait("S7$Program(1)/CFC(1)/SSP.x10",x_Axis[10]); //Return-Type: BOOL

SetTagFloatWait("S7$Program(1)/CFC(1)/SSP.y1",y_Axis[1]); //Return-Type: BOOL
//......

SetTagFloatWait("S7$Program(1)/CFC(1)/SSP.y10",y_Axis[10]); //Return-Type: BOOL


}
2.6. 在图形中增加一个按钮对象,名称为“Start”,并在鼠标事件中定义如下s cript:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
if (GetTagBit("S7$Program(1)/CFC(1)/SSP.Start")) //Return-Type: BOOL
(SetTagBitWait("S7$Program(1)/CFC(1)/SSP.Start",FALSE)); //Return-Type: BOOL
else
(SetTagBitWait("S7$Program(1)/CFC(1)/SSP.Start",TRUE)); //Return-Type: BOOL
}

2.7. 测试
2.7.1. 在PLC或PLCSIM中运行Step7程序。
2.7.2. 运行WinCC,在UserArchive 控件输入相应的X、Y值,检查无误后,按“Download to PLC”按钮,将输入的X、Y值下载到PLC的SSP功能块的相应输入端子。
2.7.3. 在WinCC中按“Start”按钮,启动Step7中的SSP功能块。
2.7.4. 可以看到在WinCC中的FunctionTrend有2条曲线:
a) 一条是UserArchive的曲线,这是我们希望得到的曲线,该曲线不随时间变化
b) 另一条是实际的曲线,该曲线是随时间变化的。
其他的功能可以根据需要增加。

附效果图:

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。