在plc300的数据块中定义了int数组array[0..100],然后通信发送给wincc定义的原始数据类型变量Raw,怎么通过GetTagRaw函数对原始数据变量进行操作,其返还值得到数据包中依次存放的单个采集数据,将GetTagRaw函数的返回值依次赋给建立好的变量数组中的各元素。以实现数据包的解包操作。
付两个小问题:1.用GetTagRaw时一定要把不是字节数组的数组变量转成字节数组吗,是的话,为什么?
2.plc给原始数据类型变量int数组,那原始数据类型变量的数据类型是int还是我建立定义时选择的数据类型,比如字节
本人初学,不太了解,希望答案能尽量详细和易懂点,不然有些难理解。感谢各位大佬。
最佳答案
此回答已完善
1.用GetTagRaw时一定要把不是字节数组的数组变量转成字节数组吗,是的话,为什么?
GetTagRaw返回的是一组原始字节数据,第2个参数必须对应BYTE数组
2.plc给原始数据类型变量int数组,那原始数据类型变量的数据类型是int还是我建立定义时选择的数据类型
wincc存储解析数据的变量类型要与plc原来相同,如plc是int,那内部变量选择int
建立“有符号 16 位数”内部变量如tag0~tag100(变量名称要便于在for循环操作),用于存放解析的数据
c脚本示例:
char Tag_Name[20]={NULL};
BYTE a[202]; //原始字节数据,202个字节
int b[101]; //int数据,101个
int i;
GetTagRaw("原始数据变量",a,202); //读取原始数据,放入a字节数组
for(i=0;i<101;i++)
{
((BYTE*)&b[i])[0]=a[i*2+1];
((BYTE*)&b[i])[1]=a[i*2];
sprintf(Tag_Name,"%s%d","tag",i); //组合变量名称tag+i
SetTagSWord(Tag_Name,b[i]);
}
提问者对于答案的评价:
多谢大佬,只是还有点小疑问,就是c脚本的第一句,Char Tag_Name[20]={NULL}为什么改成这样,不是建立了tag0到tag100的内部变量吗,这个应该是对应它们的吧,那为什么还要用[20]呢,麻烦大佬最后再解答一下。
最佳答案作者回复:
过奖了
Char Tag_Name[20]:定义一存放变量名的字符串变量
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc315184.html