A,B为PLC中两个设定值变量,在WINCC里给的数据类型为32浮点型。新建按钮,按钮按下时想让A的值开11次方然后赋给B。作C脚本如下:SetTagFloat("B",pow(GetTagFloat("A"),1/11)); 提示警告:..may losses....
运行, 发现A值从1变化到3但B值一直为1.
问题一: 为什么会提示警告,而且B值并没有得到A值的开11次方的值.难道数据类型不对吗?
问题二:如果A,B不是PLC中的值,想自己新建一个内部的变量A,B 怎么设置变量属性和C脚本才能让B的值为A开11次方的值??
请高手解惑...
问题补充:
我用的就是pow(x,y) 可惜不行 不知道你们谁实验过 开方公式 适用于浮点型吗
最佳答案
问题出在1/11之上,这样得到的是整数。
应该改为1/11.0即可,或者使用强制转换函数(float)1/11;
--------------------------------------------------
另外一个解决办法:
A = B ^ N
LOG(A) = LOG(B^N)=N*LOG(B)
B=E^(LOG(A)/N)
所以有C代码:
float A,B;
int N = 11;
A = GetTagFloat("A");
B = exp(log(A)/N );
SetTagFloat("B",B);
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc269536.html