开方问题真的那么难吗

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次方的值??

 请高手解惑… 都发了3遍了没人给个合适的方法
 

问题补充:
谢谢你的答案 至少能运行处来就可以了  
 不过不知道VB 函数怎么调出来  只能一个个按着写了

最佳答案

问题出在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/plc269570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日
下一篇 2019年6月11日

相关推荐