求大神帮助,如何用C语言编程计算有功功率,已知瞬时电压和瞬时电流值,在T时间内计算有功功率 5
您说的是对的,瞬时电压和瞬时电流时关于t的表达式,是要先积分,在求平均。只是瞬时电压和瞬时电流的表达式不是已知的,只是通过C语言软件采集到瞬时电压和电流,进而按您说的计算。具体用C语言怎么实现?
呵呵,楼主太客气了,我还是个学生,你用这个"您"感觉怪不好意思的。我不知道你的那个c语言采集软件是怎么工作的,我猜想软件是不是每隔一段固定的时间△t(可能是几毫秒或者是几微秒)就采集一次数据,估计你的那个系统应该是个实时采集系统,不断的采集回数据然后求到目前为止的实时功率。我写了个程序,看能不能给你做个参考,它只是用来演示用的,你要结合你的实际情况改动,我不清楚你的目的呀。你作个参考吧
#include "stdlib.h"
#include "stdio.h"
// 这个函数的作用是计算瞬时功,instant是瞬时的意思,capacity有功的意思用金
// 山词霸查了下,不知道物理学中的功是不是这个英文单词,姑且就用它来表示吧
double GetInstantCapacity(double u, double i, double time) {
// w = u * i * t; 功=电压*电流*时间 这个公式大概没记错吧。假设单位都是
// 国际标准单位吧
double capacity = u * i * time;
return capacity;
}
// 求平均功率的函数 time是瞬时时间,就是每隔一个周期采集数据的那个时间
double GetAvgPower(double instantCapacity, double time) {
double static sumCapacity = 0; // 静态变量用于保存总功
double static sumTime = 0; // 静态变量用于保存总的时间
double avgPower = 0; // 平均功率
// 新的总功 = 原来的总功+瞬时功
sumCapacity = sumCapacity + instantCapacity;
// 新的总时间 = 原来的总时间+瞬时时间
sumTime = sumTime + time;
// 总功除以总时间=平均功率
avgPower = sumCapacity / sumTime;
return avgPower;
}
void main() {
double u = 0, i = 0, time = 0; // 分别代表电压,电流,采集数据的周期
double instantCapacity = 0; // 瞬时功
double avgPower= 0; // 平均功率
// 这是一个死循环,可以二十四小时采集数据
while (1) {
// 在这里你可能有什么办法把实时采集回来的数据赋给三个变量,然后就
// 可以计算出瞬时功
instantCapacity = GetInstantCapacity(u, i, time);
avgPower = (float)GetAvgPower(instantCapacity, time);
// 实时打印出平均功率
printf("平均功率是:%f\n", avgPower);
}
}