大家好!
我想让程序对一个小时单位的变量求和,通过每3分钟读取一个小时平均值再除以20来表达3分钟的数,但是因为变量数值比较大,每次都会到超过65535的时候返回到0。程序周期2S,gas_col_A_1与gas_sum_1为32位浮点内部变量,局部程序如下:
static unsigned float gas_sum_31=0;
static unsigned int gas_cnt_31=0;
int open_value;
gas_cnt_31++;//3minTimer
if(gas_cnt_31>89)
{
gas_cnt_31=0;
SetTagWord("gas_col_A_1",(unsigned int)(rand()/32767.0*6000.0+22000.0));//随机数
open_value=GetTagWord("gas_col_A_1");
gas_sum_31+=(float)open_value/20.0;
SetTagWord("gas_sum_1",(unsigned int)gas_sum_31);
open_value=GetTagWord("gas_sum_1");
printf("3-2SUM=%u\r\n",open_value);
}
输出结果3-2SUM总是小于65535,不明白怎么回事。希望哪位老师能抽空帮忙看下,先谢谢了。
问题补充:
与open_value这个变量的int型无关,我把open_value换成过long,结果还是一样。
最佳答案
你可以让你的数值的单位增大呀!比如你的当前是32000m3/h,那么用单位是万M3/h,那么当前值就是3.2了。你的程序只要把当前值除以10000后再进行处理就好了。
提问者对于答案的评价:
谢谢老师,您这也确实是好个办法,但是我们给客户看的数还是要大一点的才好,因为我们做的是节约量统计,因为他们不是太专业的人,数位太少了不好看。原因自己已经找到了是存入内部变量的表达式SetTagWord类型错了Word没超过65535,改成SetTagDWord就解决了。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc267497.html