📄 realdata.c
字号:
/*************************************************************************************
文件类型:读取各瞬时值
文件作用:
修改权限:
文件相关:
创 建 人:chenbo
创建日期:2007.06.21
当前版本:Ver0.1
版本信息:Ver0.1 GeminiKQ
**************************************************************************************/
#include "Tiger.h"
#include "typemeter.h"
struct real_dim
{ unsigned char meteraddr; //计量模块中的地址
unsigned int ID_data; //数据ID号
unsigned int fenzi; //分子
unsigned long fenmu;
unsigned int levle; //计量门限
};
const struct real_dim code real_table[]=
{{4,ID_RMSCURNTA,1877,dim_Aamprms,type_Ib*100}, // Ia 1877 A通道电流有效值
{5,ID_RMSCURNTB,1877,dim_Bamprms,type_Ib*100}, // Ib A通道电流有效值
{8,ID_RMSVOLT,54325,dim_voltagerms,type_volit}, // V 51738 电压通道有效值
{3,ID_POWER,849,dim_kw,1000} // kw 功率有效值
};
//=================================================================
//函数功能:初始化瞬时值模块,清零瞬时值
//
//=================================================================
void init_realdate(void)
{uint8 i;
flag_realdatarefresh=1;
type_refreshdata=0;
for(i=0;i<40;i++)
wr_buff[i]=0;
Write_datafromID(0xc200);
Write_datafromID(0xc210);
Write_datafromID(0xc230);
Write_datafromID(0xc240);
}
//==============================================================
//函数功能:计算各种有效值并保存
//入口参数:计算类型
//返回参数:有效值
//==============================================================
unsigned long jisuan_youxiaozhi(unsigned char type)
{ Word32 temp_data;
uint32 value;
uint8 i;
temp_data.lword=ReadMeterPara(real_table[type].meteraddr);
if(type==3)
{if(temp_data.lword>0x7fffffff)
{
temp_data.lword=(~temp_data.lword)+1; // 取补码
Flg_kwhfangxiang=1; // 能量反方向
}
else
Flg_kwhfangxiang=0;
}
temp_data.lword=(temp_data.lword*real_table[type].fenzi)/real_table[type].fenmu;
// if(temp_data.lword<real_table[type].levle)
// temp_data.lword=0;
value=temp_data.lword;
temp_data.lword=long_to_4bcd(temp_data.lword); //转BCD码
for(i=0;i<4;i++)
wr_buff[i]=temp_data.byte[i];
addr_baseonIDandtype(RAM,real_table[type].ID_data); //根据ID号获取地址
data_addr.lword=(*ID_coretalbpoint[0]).dataaddr;
Write_data((*ID_coretalbpoint[0]).stortype,(*ID_coretalbpoint[0]).datalong); // 数据保存
return value;
}
//=====================================================================
//函数功能:刷新各瞬时值
//备注:1秒中刷新一次
//=====================================================================
void realdata_mode(void)
{
if(flag_realdatarefresh==true)
{ if(type_refreshdata>4)
type_refreshdata=0;
else
type_refreshdata++;
switch(type_refreshdata)
{ case 0: //Ia
jisuan_youxiaozhi(0);
break;
case 1: //Ib
jisuan_youxiaozhi(1);
break;
case 2: //V
jisuan_youxiaozhi(2);
break;
case 3:
// if(jisuan_youxiaozhi(3)<550) //kw
jisuan_youxiaozhi(3);
// Flg_kwhfangxiang=0;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -