我有一组内部变量tag0至tag100,想用wincc自带的 winnc function trend control来画线,每个点的横纵坐标均由用户编写脚本程序自行设定。通过调用SetPropDouble函数修改“DataX”、“DataY”属性,调用SetPropBOOL函数执行插入数据点命令,将实时数据或历史数据用描点,连线的方式在控件中显现出来。求教怎么编写,c脚本。我的图形显示理论上如下图
问题补充:
如果方便能帮我编一下吗,多谢
图片说明:
最佳答案
此回答已完善
参考
自定义 XY 轴的多功能曲线的实现方法:
https://support.industry.siemens.com/cs/cn/zh/view/77467629
建议你参考上面文档自己动手写,加深理解
有什么问题再提
提问者对于答案的评价:
好吧,那请大佬再帮我回答几个问题吧,帮我加深理解,先行多谢了。
1.我的情况是不是按文档里的第三种方式做?因为我是在plc300采集了正弦波信号的100个离散值,储存在DB中,传送给wincc,通过一系列的操作后最后显示如我所发的图一样的曲线,那我Y轴就应该是用我内部变量里的那100个值吧?那我X轴是不是就要用时间戳了?如果是,那按文档做X轴显示的是像2020.3.13怎样的日期时间,还是如我图中的那种时间?如果是日期时间,怎么实现我要求的那种时间?
2.PDLRTSetPropEx( PDLRT_AM_DEFAULT, lpszPictureName, "TrendYX1", "DataX", VT_VARIANT, (void*)&vtDataX, NULL, NULL, 0, NULL, NULL );这句起注解说是设置X轴的“DataX”属性,我想知道的是它的具体作用,像是对DataX起什么作用?
3.SetPropBOOL(lpszPictureName,"TrendYX1","AutorangeX",FALSE);像这句,如果FALSE改为TURE,是不是就不需要对BeginX,EndX这些定义了?
4.CcDateFromSt(&st[i], &dZeitwert);这句中的st[i]是不是就是文档前面说的赋值给SYSTEMTIME类型的结构体变量的那组时间戳?
5.SafeArrayUnaccessData( vtPair.u.parray );
pvtPair = NULL;
VariantCopy( &pvtDataXY[i], &vtPair );解释一下这三句的具体作用,看它的注解知道意思,但不懂为什么这样做。
6.文档说首先,将获得的一组时间戳分别赋值给SYSTEMTIME类型的结构体变量,那SafeArrayAccessData( vtPair.u.parray, &pvtPair );
if( pvtPair )
{
// X-value
vtDataX.vt = VT_DATE;
// Calculate time value via global function CcDateFromSt
CcDateFromSt(&st[i], &dZeitwert);
vtDataX.u.dblVal = dZeitwert;这里面是不是赋值过程?还是说没写出来。
问题有点多,但还是十分恳请和希望您能抽出点时间回答一下,万分感谢万分感谢。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc315333.html