⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 realdata.c

📁 电能表源码
💻 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 + -