269 lines
9.8 KiB
C
269 lines
9.8 KiB
C
|
#include "check.h"
|
|||
|
#include "includes.h"
|
|||
|
/******************************************************************************
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> ushort cmCRC_16(uchar *PuchMsg,ushort usDataLen)
|
|||
|
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD> 16λCRCУ<EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
******************************************************************************/
|
|||
|
static u_int8_t auchCRCHi[]={
|
|||
|
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81, //DESCRIPTION:RTU CRCУ<43><D0A3><EFBFBD>ĸ<EFBFBD>λ<EFBFBD>ֽڱ<D6BD>
|
|||
|
0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
|
|||
|
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,
|
|||
|
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
|
|||
|
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,
|
|||
|
0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
|
|||
|
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,
|
|||
|
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
|
|||
|
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
|
|||
|
0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
|
|||
|
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,
|
|||
|
0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
|
|||
|
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,
|
|||
|
0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
|
|||
|
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,
|
|||
|
0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
|
|||
|
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40};
|
|||
|
|
|||
|
static u_int8_t auchCRCLo[]={
|
|||
|
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4, //DESCRIPTION:RTU CRCУ<43><D0A3><EFBFBD>ĵ<EFBFBD>λ<EFBFBD>ֽڱ<D6BD>
|
|||
|
0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
|
|||
|
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,
|
|||
|
0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
|
|||
|
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,
|
|||
|
0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
|
|||
|
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,
|
|||
|
0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
|
|||
|
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,
|
|||
|
0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
|
|||
|
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,
|
|||
|
0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
|
|||
|
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,
|
|||
|
0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
|
|||
|
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,
|
|||
|
0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
|
|||
|
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40};
|
|||
|
|
|||
|
u_int16_t CRC16( u_int8_t *PuchMsg,u_int16_t usDataLen)
|
|||
|
{
|
|||
|
u_int8_t uchCRCHi; //high byte of CRC initialized
|
|||
|
u_int8_t uchCRCLo; //low byte of CRC initialized
|
|||
|
u_int8_t uIndex; //will index into CRC lookup table
|
|||
|
|
|||
|
uchCRCHi=0xFF;
|
|||
|
uchCRCLo=0xFF;
|
|||
|
|
|||
|
while(usDataLen--)
|
|||
|
{
|
|||
|
//calculate the CRC
|
|||
|
uIndex = uchCRCHi^(u_int8_t)(*PuchMsg++);
|
|||
|
uchCRCHi = uchCRCLo^auchCRCHi[uIndex];
|
|||
|
uchCRCLo = auchCRCLo[uIndex];
|
|||
|
}
|
|||
|
return(uchCRCHi <<8|uchCRCLo);
|
|||
|
}
|
|||
|
|
|||
|
void CRC16_init(u_int16_t *crc16)
|
|||
|
{
|
|||
|
*crc16 = 0xFFFF;
|
|||
|
}
|
|||
|
|
|||
|
void CRC16_update(u_int16_t *crc16, u_int8_t *PuchMsg,u_int32_t usDataLen)
|
|||
|
{
|
|||
|
u_int8_t uchCRCHi; //high byte of CRC initialized
|
|||
|
u_int8_t uchCRCLo; //low byte of CRC initialized
|
|||
|
u_int16_t uIndex; //will index into CRC lookup table
|
|||
|
|
|||
|
uchCRCHi = (*crc16) >> 8;
|
|||
|
uchCRCLo = (*crc16) & 0xFF;
|
|||
|
|
|||
|
while(usDataLen--)
|
|||
|
{
|
|||
|
//calculate the CRC
|
|||
|
uIndex = uchCRCHi^(u_int8_t)(*PuchMsg++);
|
|||
|
uchCRCHi = uchCRCLo^auchCRCHi[uIndex];
|
|||
|
uchCRCLo = auchCRCLo[uIndex];
|
|||
|
}
|
|||
|
|
|||
|
*crc16 = (uchCRCHi <<8|uchCRCLo);
|
|||
|
}
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>check_sum(u_int8_t *pdata,u_int16_t length)
|
|||
|
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>ۼӺ<EFBFBD>ȡ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
******************************************************************************/
|
|||
|
u_int8_t checksum(u_int8_t *pdata,u_int16_t length)
|
|||
|
{
|
|||
|
u_int8_t cs = 0;
|
|||
|
u_int16_t i = 0;
|
|||
|
|
|||
|
for(i = 0; i < length; i++)
|
|||
|
{
|
|||
|
cs += *(pdata + i);
|
|||
|
}
|
|||
|
return ~(u_int8_t)cs;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>xor_check
|
|||
|
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
|
|||
|
******************************************************************************/
|
|||
|
u_int8_t check_xor(u_int8_t *pdata,u_int16_t length)
|
|||
|
{
|
|||
|
u_int8_t cs = 0;
|
|||
|
u_int16_t i = 0;
|
|||
|
|
|||
|
for(i = 0; i < length; i++)
|
|||
|
{
|
|||
|
cs ^= *(pdata + i);
|
|||
|
}
|
|||
|
return cs;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#define NUM 5
|
|||
|
float f_Middle(float *ArrDataBuffer)
|
|||
|
{
|
|||
|
u_int8_t j = 0;
|
|||
|
u_int8_t k = 0;
|
|||
|
u_int8_t i = 0;
|
|||
|
float temp = 0;
|
|||
|
float Sum = 0;
|
|||
|
float Value = 0;
|
|||
|
|
|||
|
for(j = 0; j < NUM-1; j++)//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
for(k = 0; k < NUM-j-1; k++)
|
|||
|
{
|
|||
|
if(ArrDataBuffer[k] > ArrDataBuffer[k+1])
|
|||
|
{
|
|||
|
temp = ArrDataBuffer[k];
|
|||
|
ArrDataBuffer[k] = ArrDataBuffer[k+1];
|
|||
|
ArrDataBuffer[k+1] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for(i = 1; i < NUM-1 ; i++)
|
|||
|
{
|
|||
|
Sum += ArrDataBuffer[i];
|
|||
|
}
|
|||
|
Value = Sum / (NUM - 2);
|
|||
|
return(Value);
|
|||
|
}
|
|||
|
|
|||
|
#if CFG_MODULE_CURRENT
|
|||
|
/// <20><>ֵƽ<D6B5><C6BD><EFBFBD>˲<EFBFBD>
|
|||
|
///
|
|||
|
///
|
|||
|
/// @param none
|
|||
|
/// @param none
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// jjj<6A><6A>2017-06-02
|
|||
|
float Middle1(float *ArrDataBuffer)
|
|||
|
{
|
|||
|
uint8_t j = 0;
|
|||
|
uint8_t k = 0;
|
|||
|
uint8_t l = 0;
|
|||
|
float temp = 0;
|
|||
|
float Sum = 0;
|
|||
|
float Value = 0;
|
|||
|
for(j = 0; j < CURRENT_SAMPLE_NUM-1; j++) //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
for(k = 0; k < CURRENT_SAMPLE_NUM-j-1; k++)
|
|||
|
{
|
|||
|
if(ArrDataBuffer[k] > ArrDataBuffer[k+1])
|
|||
|
{
|
|||
|
temp = ArrDataBuffer[k];
|
|||
|
ArrDataBuffer[k] = ArrDataBuffer[k+1];
|
|||
|
ArrDataBuffer[k+1] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for(l = 2; l < CURRENT_SAMPLE_NUM-2 ; l++)
|
|||
|
{
|
|||
|
Sum += ArrDataBuffer[l];
|
|||
|
}
|
|||
|
Value = Sum / (CURRENT_SAMPLE_NUM - 4);
|
|||
|
return(Value);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
///
|
|||
|
///
|
|||
|
/// @param none
|
|||
|
/// @param none
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// jjj<6A><6A>2017-06-02
|
|||
|
float RMS_Val(uint16_t (*data)[RMS_NUM])
|
|||
|
{
|
|||
|
uint8_t i = 0;
|
|||
|
uint8_t j = 0;
|
|||
|
float sum[CURRENT_SAMPLE_NUM] = {0.0};
|
|||
|
float sum_vol = 0.0;
|
|||
|
float voltage = 0.0;
|
|||
|
for(j = 0;j < CURRENT_SAMPLE_NUM; j++)
|
|||
|
{
|
|||
|
for(i = 0;i < RMS_NUM; i++)
|
|||
|
{
|
|||
|
voltage = data[j][i] * 0.0032258; // 3.3/1023<32><33>10λADC<44><43> = 0.0032258 //<2F>ο<EFBFBD><CEBF><EFBFBD>ѹ3.3V / 2^12 = 3.3 /4095 = 0.0008058
|
|||
|
voltage = (voltage-2.5) / 20 / 0.15 * 2000; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2000 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.15ŷ
|
|||
|
//voltage = (voltage-2.5) / 20 / 0.15 * System_Cfg.curr_rat; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2000
|
|||
|
sum[j] += pow(voltage,2);
|
|||
|
}
|
|||
|
sum[j] = sum[j] / RMS_NUM;
|
|||
|
sum[j] = sqrt(sum[j]); //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD><E3B7A8>ֱ<EFBFBD>ӵõ<D3B5><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
}
|
|||
|
sum_vol = Middle1(sum);
|
|||
|
// sum_vol = Curve_fitting(sum_vol); //<2F><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У
|
|||
|
if(sum_vol < 0) sum_vol = 0;
|
|||
|
return sum_vol;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
#if CFG_MODULE_TEMPHUMI
|
|||
|
/// <20><>ֵƽ<D6B5><C6BD><EFBFBD>˲<EFBFBD>
|
|||
|
///
|
|||
|
///
|
|||
|
/// @param none
|
|||
|
/// @param none
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// jjj<6A><6A>2017-06-02
|
|||
|
u_int16_t Middle2(u_int16_t *ArrDataBuffer)
|
|||
|
{
|
|||
|
uint8_t j = 0;
|
|||
|
uint8_t k = 0;
|
|||
|
uint8_t l = 0;
|
|||
|
u_int16_t temp = 0;
|
|||
|
u_int32_t Sum = 0;
|
|||
|
u_int16_t Value = 0;
|
|||
|
for(j = 0; j < TEMPHUMI_SAMPLE_NUM-1; j++) //<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
for(k = 0; k < TEMPHUMI_SAMPLE_NUM-j-1; k++)
|
|||
|
{
|
|||
|
if(ArrDataBuffer[k] > ArrDataBuffer[k+1])
|
|||
|
{
|
|||
|
temp = ArrDataBuffer[k];
|
|||
|
ArrDataBuffer[k] = ArrDataBuffer[k+1];
|
|||
|
ArrDataBuffer[k+1] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
for(l = 2; l < TEMPHUMI_SAMPLE_NUM-2 ; l++)
|
|||
|
{
|
|||
|
Sum += ArrDataBuffer[l];
|
|||
|
}
|
|||
|
Value = Sum / (TEMPHUMI_SAMPLE_NUM - 4);
|
|||
|
return(Value);
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
|