📄 cal_h_m.c
字号:
/****************************************************************
discrible:1个脉冲热量的计算主程序(数据/10000(1000)等,为了使数据小于65535)
author :Ye Yun Kai
date :05.04.15(yy.mm.dd)
****************************************************************/
#include "msp430x42x.h"
#include "Sys_data.h"
#include "Sys_fun.h"
void Cal_H_M(void)
{
unsigned char H_T,L_T; //入口,出口温度整位数,十进制数
unsigned int in_temp,out_temp; //入口,出口温度,十进制数
unsigned int in_sum,out_sum; //入口,出口焓值,十进制数
unsigned int sub_h; //入口,出口焓值差
unsigned int m_pluse; //一个脉冲的质量,十进制数
unsigned long int heat_pluse; //1个脉冲的热量,十进制数(单位KJ)
H_T = (In_Temp[1]/0x10)*10+(In_Temp[1]%0x10); //入口温度整位数
L_T = (Out_Temp[1]/0x10)*10+(Out_Temp[1]%0x10);//出口温度整位数
if(In_Temp[1]>0x15) //温度大于15度,用直接计算法求焓值
{
in_temp =(In_Temp[2]%0x10)*10000+(In_Temp[1]/0x10)*1000+(In_Temp[1]%0x10)*100+
(In_Temp[0]/0x10)*10+(In_Temp[0]%0x10); //入口温度十进制
MPY = Heat_H[H_T]; //入口焓值基数
OP2 = in_temp; //入口温度
in_sum = (RESHI*65536 + RESLO)/10000; //入口焓值(焓值/10000后,还是比实际值大100倍)
}
else //温度小于等于15度,用插值法求焓值
{
if(In_Temp[1] == 0x15) //入口温度为15度时,焓值求法: 15度焓值+(16度焓值-15度焓值)*温度小数位
in_sum = ( 63554 + ((67740-63554)/10)*((In_Temp[0]&0xF0)>>4) +
((67740-63554)/100)*(In_Temp[0]&0x0F) )/10;
//入口焓值(焓值/10后,还是比实际值大100)
else
in_sum = ( Heat_H[H_T]+((Heat_H[H_T+1]-Heat_H[H_T])/10)*((In_Temp[0]&0xF0)>>4)+
((Heat_H[H_T+1]-Heat_H[H_T])/100)*(In_Temp[0]&0x0F) )/10;
//入口焓值(焓值/10后,还是比实际值大100倍)
}
if(Out_Temp[1]>0x15) //温度大于15度,用直接计算法求焓值
{
out_temp =(Out_Temp[2]%0x10)*10000+(Out_Temp[1]/0x10)*1000+(Out_Temp[1]%0x10)*100+
(Out_Temp[0]/0x10)*10+(Out_Temp[0]%0x10); //出口温度十进制
MPY = Heat_H[L_T]; //出口焓值基数
OP2 = out_temp; //出口温度
out_sum = (RESHI*65536 + RESLO)/10000; //出口焓值(焓值/10000后,还是比实际值大100倍)
}
else //温度小于15度,用插值法求焓值
{
if(Out_Temp[1] == 0x15) //出口温度为15度时,焓值求法: 15度焓值+(16度焓值-15度焓值)*温度小数位
out_sum =( 63554 + ((67740-63554)/10)*((Out_Temp[0]&0xF0)>>4) +
((67740-63554)/100)*(Out_Temp[0]&0x0F) )/10;
//出口焓值(焓值/10后,还是比实际值大100倍)
else
out_sum =( Heat_H[L_T]+((Heat_H[L_T+1]-Heat_H[L_T])/10)*((Out_Temp[0]&0xF0)>>4)+
((Heat_H[L_T+1]-Heat_H[L_T])/100)*(Out_Temp[0]&0x0F) )/10;
//出口焓值(焓值/10后,还是比实际值大100倍)
}
if(in_sum>out_sum)//制热
{
Disp_symbol &= ~fcool_symbol;//清制冷标志
sub_h = in_sum-out_sum; //入口出口焓值差(比实际大100倍) (sub_h数据小于65535)
}
else//--------------制冷
{
Disp_symbol |=fcool_symbol;//置制冷标志
sub_h = out_sum-in_sum; //焓值差=出口-入口
}
if(Constant > 65535)//系数大于2个字节,先除10
{
MPY = (Constant/10); //1个脉冲的体积:0.033L/p
OP2 = Density[H_T];
}
else
{
MPY = Constant; //1个脉冲的体积:0.033L/p
OP2 = Density[H_T];
}
m_pluse = (RESHI*65536 + RESLO)/10000; //1个脉冲的质量(比实际大10的6次方倍) (/10000为了使m_pluse
//数据小于65535)
MPY = m_pluse; //比实际大10的6次方倍
OP2 = sub_h; //比实际大10的2次方倍
if(Constant > 65535)
heat_pluse = (RESHI*65536 + RESLO)/100; //因6711系数上面除10000,所以这时除100,保证数据统一
else
heat_pluse = (RESHI*65536 + RESLO)/1000; //1个脉冲的热量,除1000后还比实际值大10的5次方倍(单位为KJ)
//(10.37784KJ---->1037784KJ)
Heat_GJpluse =heat_pluse; //1个脉冲含热量(GJ)已算好(精度0.01%)比实际大10的5次方倍
MPY = (heat_pluse/100); //因数据超出16位
OP2 = 27778; //1KJ==0.277778WH
Heat_WHpluse =(RESHI*65536 + RESLO)/1000; //1个脉冲含热量(WH)已算好(精度0.2%)比实际大10的5次方倍
//10377*27778==288252306/1000==288252(2.88252)
// Power_test_WHpulse =(Heat_WHpluse/1000); //计算实时功率的每个脉冲热量,288(2.88)比实际大100的1次方倍
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -