想要将内部变量中的数据在wincc function trend control中显示为一条曲线,wincc图形编辑器结构如下图,function trend control用于显示曲线,通过在按钮的鼠标事件中编写c脚本,实现单击按钮start就开始显示曲线,具体程序如下
char Tag_Name[101]={NULL};
short int a[101];
int b[101];
int i;
int c=0;
for(i=0;i<101;i++)
{
sprintf(Tag_Name,"%s%d","DB_VAR",i);
a[i]=GetTagSWord("Tag_Name");
printf("%d\n",a[i]);
b[i]=c;
c=c+10;
}
SetPropBOOL(lpszPictureName,"trend1","DeleteData",1);
SetPropWord(lpszPictureName,"trend1","Index",0);
SetPropBOOL(lpszPictureName,"trend1","Online",FALSE);
SetPropBOOL(lpszPictureName,"trend1","Activate",FALSE);
SetPropBOOL(lpszPictureName,"trend1","ItemVisible",1);
SetPropBOOL(lpszPictureName,"trend1","AutoRangeY",0);
SetPropBOOL(lpszPictureName,"trend1","AutoRangeX",1);
SetPropDouble(lpszPictureName,"trend1","BeginY",-1.0);
SetPropDouble(lpszPictureName,"trend1","EndY",1.0);
for(i=0;i<101;i++)
{
SetPropDouble(lpszPictureName,"trend1","DataX",b[i]/100);
SetPropDouble(lpszPictureName,"trend1","DataY",a[i]/100);
SetPropBOOL(lpszPictureName,"trend1","InsertData",1);
}
SetPropBOOL(lpszPictureName,"trend1","Online",1);
SetPropBOOL(lpszPictureName,"trend1","Activate",1);
全局脚本诊断窗口用于诊断脚本错误,激活wincc,单击按钮后出现的情况就是图形编辑器图片的情况。没有显示曲线,错误提示找不到变量Tag_Name。Tag_Name的作用体现在程序for(i=0;i<101;i++)
{
sprintf(Tag_Name,"%s%d","DB_VAR",i);
a[i]=GetTagSWord("Tag_Name");
通过sprintf将wincc中内部变量的名称指定,然后将内部变量的数据放入对应a[i]中。我查的资料表明我应该可以实现内部变量放入c脚本变量功能。
为什么会出现这种情况?怎么修改?
请各位大佬帮忙解决一下问题,非常感谢。
问题补充:
非常感谢两位大佬,将双引号去掉后原来的问题是解决了,但出现了新的问题,全局脚本-诊断先是因为程序printf("%d\n",a[i]);显示出放入a[i]数据,但for循环结束后出现如下图的情况,是什么情况?解决方式?麻烦各位大佬再回答一下,非常感谢。
图片说明:
最佳答案
1、a[i]=GetTagSWord("Tag_Name");改成:a[i]=GetTagSWord(Tag_Name);当里面加了引号之后,就是固定的变量了,相当于WINCC里面Tag_Name的变量,你这相当于间接寻址,引用的是C脚本的变量,不能加引号
2、把前面正常的printf先注释掉,然后在下面加printf,看看程序是那一句出现的问题
可以先隔上几行加一个,先缩小范围再一行一个这样就能找到哪一句的问题了
看诊断问题是有个属性你写错了
如果连续出了很多,那就在for循环里面
提问者对于答案的评价:
非常感谢三位大佬,特别是ISIEMENSID大佬和RENHQ大佬,回答得很详细了,但怪我愚笨,可能是理解错了RENHQ大佬的寻错方法,不知如何改错,我会再发一次问答,希望大佬们还能来帮忙解答问题。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc354627.html