📄 dataprotask.c
字号:
/**********************************************
公司名称:
文 件 名:CS5460A.c
版 本 号:
程序设计:
说 明:
完成日期:
修改日期:
功能摘要:
***********************************************/
#define _DealData
#include "includes.h"
uint8 fAdRunning_A; //AD是否运行良好
uint8 fAdRunning_B; //AD是否运行良好
uint8 V_sign_A;
uint8 I_sign_A;
uint8 V_sign_B;
uint8 I_sign_B;
uint16 Detect_A1 =0 ; //测试时用。A状态寄存器的最高位是1
uint16 Detect_A0 =0; //A状态寄存器的最高位是0
uint16 Detect_B1 =0; //B状态寄存器的最高位是1
uint16 Detect_B0 =0; //B状态寄存器的最高位是0
uint16 Detect_T0 =0; //不用加载校验值
uint16 Detect_T1 =0; //加载校验值
uint32 Ps; //三相总功率
uint8 Ps_Neg = 0; //功率为负标志
WAIT_TIME_STRUCT ReadAD = {0,_1S};
void DealDataMainLoop (void);
void Date_cs5460(void);
//---------------------------
/*void DealDataMainLoop (void)
{
uint8 AD_Buf[4];
if(ReadAD.fGetTime)
{
ReadAD.fGetTime = 0;
ReadAD.WaitTime = _1S;
if (Rest5460A_Time != 0x00)
{
Rest5460A_Time--; //屏蔽前两次AD转换
fAdRunning_A = 1;
}
else
{
CS_AD_A = 0;
Rd5460A(AD_Buf,0x1e);
CS_AD_A = 1;
if ((AD_Buf[0] & 0x80) == 0x80)
{
CS_AD_B = 0;
Rd5460A(AD_Buf,0x1e);
CS_AD_B = 1;
if ((AD_Buf[0] & 0x80) == 0x80)
{
fAdRunning_A = 1;
Date_cs5460() ;
}
}
}
}
}
//==================================================
void Date_cs5460(void)
{
uint16 temp1 = 0;
uint16 temp2 = 0;
uint8 AD_Buf[4];
Sync_5460A();
Clear5460A();
CS_AD_A = 0;
Rd5460A(AD_Buf,0x14);
CS_AD_A = 1;
temp1 = AD_Buf[0] << 8;
temp1 += AD_Buf[1];
CS_AD_B = 0;
Rd5460A(AD_Buf,0x14);
CS_AD_B = 1;
temp2 = AD_Buf[0] << 8;
temp2 += AD_Buf[1];
//--------------------------------------------
CS_AD_A = 0;
Rd5460A(AD_Buf,0x10);
CS_AD_A = 1;
V_sign_A = AD_Buf[0];
V_sign_A >>=7;
CS_AD_A = 0;
Rd5460A(AD_Buf,0x0e);
CS_AD_A = 1;
I_sign_A = AD_Buf[0];
I_sign_A >>=7;
CS_AD_B = 0;
Rd5460A(AD_Buf,0x10);
CS_AD_B = 1;
V_sign_B = AD_Buf[0];
V_sign_B >>=7;
CS_AD_B = 0;
Rd5460A(AD_Buf,0x0e);
CS_AD_B = 1;
I_sign_B = AD_Buf[0];
I_sign_B >>=7;
//--------------------------------------------
temp1 += temp2;
Ps_Neg = 0;
if (temp1 > 0x8000)
{
temp1 = 0 - temp1; // 功率为负
Ps_Neg = 1;
}
AD_Buf[0] = temp1 >> 8;
AD_Buf[1] = (uint8)temp1;
temp2 = DealRms(AD_Buf,0x6f20);
Ps =(uint32)temp2* PtVal * CtVal; //计算一次值功率
}
//================================================================= */
void DealDataMainLoop (void)
{
uint8 AD_Buf[4];
uint16 temp1 = 0;
uint16 temp2 = 0;
static uint8 Step = 0;
if (ReadAD.fGetTime) {
switch (Step) {
case 0:
if (Rest5460A_Time == 0x00)
{
CS_AD_A = 0;
Rd5460A(AD_Buf,0x1e);
CS_AD_A = 1;
//fAdRunning_A = 0;
if((AD_Buf[0] & 0x80) == 0x80)
{ fAdRunning_A = 1;Detect_A1++;}
else
{Detect_A0++;}
CS_AD_B = 0;
Rd5460A(AD_Buf,0x1e);
CS_AD_B = 1;
if ((AD_Buf[0] & 0x80) && fAdRunning_A)
{ Step++;
Detect_B1++;
}
else
{
Detect_B0++;
fAdRunning_A = 0;
Clear5460A();
ReadAD.fGetTime = 0;
ReadAD.WaitTime = _1S;
}
} else {
Rest5460A_Time--; //屏蔽前两次AD转换
fAdRunning_A = 1;
Clear5460A();
ReadAD.fGetTime = 0;
ReadAD.WaitTime = _1S;
}
break;
case 1:
Sync_5460A(); /*同步命令*/
Clear5460A();
CS_AD_A = 0;
Rd5460A(AD_Buf,0x14); //读A相功率值
CS_AD_A = 1;
temp1 = AD_Buf[0] << 8;
temp1 += AD_Buf[1];
CS_AD_B = 0;
Rd5460A(AD_Buf,0x14);
CS_AD_B = 1;
temp2 = AD_Buf[0] << 8;
temp2 += AD_Buf[1];
temp1 += temp2;
Ps_Neg = 0;
if (temp1 > 0x8000){
temp1 = 0 - temp1; //功率为负
Ps_Neg = 1;
}
AD_Buf[0] = temp1 >> 8;
AD_Buf[1] = (uint8)temp1;
temp2 = DealRms(AD_Buf,0x6F20);
Ps = (uint32)temp2 * PtVal * CtVal; //计算一次值功率
Step = 0;
ReadAD.fGetTime = 0;
ReadAD.WaitTime = _1S;
break;
default:
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -