永发信息网

高分悬赏,请知道的高手帮忙,感激不尽!如何在wincc中根据设定的几个点绘制曲线,然后plc跟随这条曲线运

答案:2  悬赏:0  手机版
解决时间 2021-12-04 04:42
高分悬赏,请知道的高手帮忙,感激不尽!如何在wincc中根据设定的几个点绘制曲线,然后plc跟随这条曲线运
最佳答案
一、定义一个原始数据变量;

二、用Wincc function trend control控件画线,使用SetProp...函数设置该控件的BeginX,EndX,DataX,DataY等属性,用InsertData插入点

三、必须注意PLC中浮点数的字节顺序和C语言中的不同,可以在PLC程序中使用CAD命令调换字节顺序,也可以在C语言中用循环调换字节顺序

在网上查到了一篇文章,里面的程序说的是WebNavigator下实现趋势曲线显示的问题,很有参考价值。根据这个修改一下,应该可以实现你所要实现的功能。

WinCC Trend in WebNavigator

Nov 30, 2003 1:17 pm, by R.K.

Subject : HMI

from the Automation List dept.

Text :

Hello,

I would like to plot an array in WinCC coming from a PLC. I am trying to create this graph using the Trend Control supplied by WinCC. I've got a loop that adds the points to the graph and then displays them and it works beautifully in WinCC Runtime, but does not in web Navigator. Does anyone know if there is a special initialization process needed to have it run properly on web navigator? Attached below is my code:

// WINCC:TAGNAME_SECTION_START

// syntax: #define TagNameInAction "DMTagName"

// next TagID : 1

// WINCC:TAGNAME_SECTION_END

#define TAG_M12_0312_Det2_Curve_Force_Live "M12_0312_Det2_Curve_Force_Test" // Force is an INT (2 Bytes)

#define TAG_M12_0312_Det2_Curve_Pos_Live "M12_0312_Det2_Curve_Pos_Test" // Position is an INT (2 Bytes)

//-------- Not Neccessary------------------

//#define nbByte_for_INT sizeof(int) //BYTE (default format for a raw tag ...)

#define nbByte_for_DINT sizeof(float) //BYTE (default format for a raw tag ...)

#define nbByte_for_REAL sizeof(long) //BYTE (default format for a raw tag ...)

#define nbSamples_Array 100 // Size of the arrays that contains Force and Position data curve analysis

#define szData_Force nbSamples_Array*nbByte_for_REAL // Force Values are REAL (4 Bytes)

#define szData_Position nbSamples_Array*nbByte_for_DINT // Position Values are DINT (4 Bytes)

//#define szData_Time nbSamples_Array*nbByte_for_DINT // TimeValues are DINT (4 Bytes)

//Declaration of Force and Position input arrays

float *Force_2;

long *Position_2;

double Force_Detail2[100];

double Position_Detail2[100];

unsigned int j;

unsigned int i;

unsigned int Null_Count_Force_2=0;

unsigned int Null_Count_Position_2=0;

static double ForceMax_Detail2;

static double PositionMax_Detail2;

// Creation of the BYTE array in which the values of the raw data tag are stored

BYTE byData_Force[szData_Force];

BYTE byData_Position[szData_Position];

GetTagRaw(TAG_M12_0312_Det2_Curve_Force_Live,byData_Force,szData_Force);

GetTagRaw(TAG_M12_0312_Det2_Curve_Pos_Live,byData_Position,szData_Position);

// Pointer to Raw Data Array

Force_2=&byData_Force[0];

Position_2=&byData_Position[0];

//Verification of actual values

ForceMax_Detail2==0;

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

{

Force_Detail2[i]=Force_2[i];

Position_Detail2[i]=Position_2[i];

//printf("%e , %e \r\n", Position_2[i],Force_Detail2[i]);

/* if (Force_Detail2[ i ] > ForceMax_Detail2)

{

ForceMax_Detail2 = Force_Detail2[ i ];

}

else

{

ForceMax_Detail2 = ForceMax_Detail2;

}

if (Position_Detail2[ i ] > PositionMax_Detail2)

{

PositionMax_Detail2=Position_Detail2[ i ];

}

else

{

PositionMax_Detail2=PositionMax_Detail2;

}

if (Force_Detail2[i]==0)

{

Null_Count_Force_2++;

}

if (Position_Detail2[i]==0)

{

Null_Count_Position_2++;

}

}

printf("\r\n Force Values are =\r\n");

for (j=0;j<100;j++)

{

printf("%e \r\n", Force_Detail2[j]);

}

printf("\r\n Position Values are =\r\n");

for (j=0;j<100;j++)

{

printf("%e \r\n", Position_Detail2[j]);

}

//Plot Graph

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","DeleteData",1);

SetPropWord(lpszPictureName,"BushingDet2CurveGraph","Index",0);

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","Online",FALSE); //

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","Activate",FALSE); //

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","ItemVisible",1);

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","AutoRangeX",0);

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","AutoRangeY",1);

SetPropDouble(lpszPictureName,"BushingDet2CurveGraph","BeginX",(Position_Detail2[0]/10000));//10000);

SetPropDouble(lpszPictureName,"BushingDet2CurveGraph","EndX",(PositionMax_Detail2/10000));//10000);

i=0;

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

{

if (Force_Detail2[ i]!= ForceMax_Detail2)

{

SetPropDouble(lpszPictureName,"BushingDet2CurveGraph","DataX",Position_Detail2[i]/10000);

SetPropDouble(lpszPictureName,"BushingDet2CurveGraph","DataY",Force_Detail2[i]);

//Return-Type:BOOL

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","InsertData",1);

}

else

{

break;

}

}

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","Online",TRUE);

SetPropBOOL(lpszPictureName,"BushingDet2CurveGraph","Activate",TRUE); //

}

}追问谢谢你的回答。不过你的回答和我提的问题有点偏差,我说的是让wincc根据我设定的曲线周期的采集曲线上的数据,然后把这些点当成给定值,控制plc的运行,而不是由plc采集的点来绘制曲线。我不知道这个代码怎么写。。。
全部回答

WINCC曲线中断情况

历史曲线修改成功图片

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
墙面镜子价格一般多少
楼下是饭店整排烟天天响应该怎么办
合肥保利丰广场有哪些缺点
谁有学而思刘飞飞老师1600词的视频或讲义让我
涨知识:等额本息是如何计算月还款额的?
2017年福州生育津贴怎么算多少钱,福州生育津
做美发 如何做高劳动业绩
美集品同样作为电商,它的模式与京东、天猫有
谁知道青州新希望彩印有限公司怎么样靠谱吗,
C#中属性是否一定要有个字段对应?
可分动词abholen的表达正确吗?
活的世俗点 不要太清新脱俗 。这句话什么意思
请教一下各位大神,ddr4 32g内存按双通道好还
佛山市丹邱村到广州市增城中心镇大田公业区有
请问湖南有多少个道观?都在哪些地方?貌似很
推荐资讯
格力空调每小时用多少电
你让我动了心动了情这是什么歌
大专属于高等教育吗?
为啥考完试没啥感觉?
羊山派出所在什么地方啊,我要处理点事
桑落墅派出所办公地址在什么地方?我要处理点
请问在5173买城堡争霸微信号安全吗有什么要知
言宜慢,心宜善感悟阅读主要内容
永登县人民监察院反渎职侵权局位置在什么地方
神秘人都是什么时候直播?
荷兰猪要处多久才和主人熟呢?
如图,△ABC是等边三角形,DE∥AC,交AB、BC
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?