#include "master_slave_recv_api.h"
|
#include "uart.h"
|
#include "string.h"
|
#include "mbcrc.h"
|
|
#include "administrator.h"
|
#include "sundry.h"
|
#include "billing.h"
|
#include "check_out.h"
|
|
INTER_RECV_PARA_T __attribute__ ((aligned (4))) inter_recv_para_g = {.inter_recv_flag = RESET};
|
// SLAVE_FLOW_DATA_T slave_flow_data_g = {0};
|
|
double temp_data_g = 0.0f,cal_display_exit_data_g = 0.0f;
|
|
/*¶Á´Ó»úÃüÁîµÄ·µ»Ø±í*/
|
static const SLAVE_RECV_TABLE_DRIVE_T read_recv_tab_func[] = {
|
{SC_RO_RESULT, Slave_FlowDataRecv},
|
{SC_RO_CAL_RESULT, Slave_CalFlowData_Recv},
|
{SC_RO_TP, Slave_TempPressRecv},
|
{SC_RO_ALARM, Slave_AlarmBytesRecv},
|
{SC_RW_HARDWARE, Slave_HardwareRecv},
|
{PIPE_RW_PARA, Slave_PipeParaRecv},
|
{UT_RW_PARA, Slave_UtParaRecv},
|
{CORR_RW_SET, Slave_CorrSetReal_Recv},
|
{CORR_RO_REAL, Slave_CorrSetReal_Recv},
|
{RAW_RO_DATA, Slave_RawDataRecv},
|
{DATA_RO_REAL_TIME, Slave_MeasureRealTimeData_Recv},
|
{SC_RO_STATUS, Slave_StateBytesRecv},
|
{UT_RO_REAL_PARA_1,Slave_UtRealPara_1_Recv},
|
{UT_RW_REAL_PARA_2,Slave_UtRealPara_2_Recv},
|
{SC_RES_PARA,Slave_ResPara_Recv},
|
{DATA_RO_TEMP_TIME_DIFF,Slave_Temp_TimeDiff_Recv},
|
{CAL_DATA_PARA,Slave_CalData_Recv},
|
{CORR_RW_FIXED,Slave_CorrFixed_Recv},
|
};
|
|
/*½»»¥½ÓÊÕÖØÐ¼ÓÔØ*/
|
void Measure_DMA_CH1_Reload(void)
|
{
|
inter_recv_para_g.inter_recv_flag = RESET;
|
//½ÓÊÕRAMµØÖ·ÖØÔØ
|
DMA_ISR_DMACHFT_Clr(DMA_CH1);
|
DMA_CHxCR_ChxEN_Setable(DMA_CH1, DISABLE); //ͨµÀʧÄÜ
|
|
DMA_CHxMAR_Write(DMA_CH1, (uint32)inter_recv_para_g.inter_recv_union.inter_recv_buf);
|
|
DMA_CHxCR_ChxEN_Setable(DMA_CH1, ENABLE); //ͨµÀʹÄÜ
|
}
|
/*½»»¥½ÓÊպ˲é*/
|
ErrorStatus_STM32 Measure_Uart3_Rx_DMA_CH1_Check(uint8_t timeout_max)
|
{
|
uint8_t timeout_cnt = 0;
|
uint16_t dma_recv_cnt;
|
uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH1);
|
|
if(dma_mar_reg_read != (uint32)inter_recv_para_g.inter_recv_union.inter_recv_buf)
|
{
|
delay_ms(1);
|
while(dma_mar_reg_read != DMA_CHxMAR_Read(DMA_CH1))
|
{
|
dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH1);
|
delay_ms(1);
|
if(timeout_cnt++ > timeout_max)
|
break;
|
}
|
}
|
else
|
return ERROR_1;
|
|
dma_recv_cnt = dma_mar_reg_read - (uint32)inter_recv_para_g.inter_recv_union.inter_recv_buf;
|
if(dma_recv_cnt)
|
{
|
inter_recv_para_g.inter_recv_length = dma_recv_cnt;
|
inter_recv_para_g.inter_recv_flag = SET;//½ÓÊÕÍê³É
|
return SUCCESS_0;
|
}
|
return ERROR_1;
|
}
|
|
/*´Ó»ú½á¹û´¦Àí*/
|
INTER_STATUS Slave_Result_Handler(INTER_RW_STATUS data_state, INTER_RECV_PARA_T *inter_recv_para_p)
|
{
|
INTER_STATUS status_code = INTER_UNKNOWN;
|
uint16_t ex_crc_len = 0;
|
uint16_t recv_crc_check = 0;
|
if (inter_recv_para_p->inter_recv_flag)
|
{
|
inter_recv_para_p->inter_recv_flag = RESET;
|
ex_crc_len = inter_recv_para_p->inter_recv_length - 2;
|
recv_crc_check = inter_recv_para_p->inter_recv_union.inter_recv_buf[ex_crc_len + 1] << 8 | inter_recv_para_p->inter_recv_union.inter_recv_buf[ex_crc_len];
|
|
// ½ÓÊÕÊý¾ÝcrcÑéÖ¤£¨ÑéÖ¤Êý¾ÝÊÇ·ñÍêÕû£©
|
if (recv_crc_check == usMBCRC16(0xFFFF,inter_recv_para_p->inter_recv_union.inter_recv_buf, ex_crc_len))
|
{
|
if (inter_recv_para_p->inter_recv_union.inter_recv_buf[0] == SC_DATA_RD && data_state == INTER_DATA_READ) // ¶ÁÃüÁî½ÓÊÕ
|
{
|
// ÅжϱíÇý¶¯
|
for (uint8_t i = 0; i < RECV_TABLE_NUM; i++)
|
{
|
if ((read_recv_tab_func[i].data_table == inter_recv_para_p->inter_recv_union.inter_recv_buf[1]) && (read_recv_tab_func[i].RecvFuncHandler != NULL))
|
{
|
status_code = read_recv_tab_func[i].RecvFuncHandler(&inter_recv_para_p->inter_recv_union.inter_recv_buf[2], inter_recv_para_p->inter_recv_length - 4);
|
break;
|
}
|
}
|
}
|
else if (inter_recv_para_p->inter_recv_union.inter_recv_buf[0] == SC_DATA_WR && data_state == INTER_DATA_WRITE) // дÃüÁî½ÓÊÕ
|
status_code = (INTER_STATUS)inter_recv_para_p->inter_recv_union.inter_recv_buf[1];
|
else // ·µ»ØÒì³£Ö¡»òÕßдÃüÁîµÄ·µ»ØÖ¡
|
status_code = (INTER_STATUS)inter_recv_para_p->inter_recv_union.inter_recv_buf[1];
|
}
|
else
|
{
|
status_code = MASTER_RECVDATA_CRC_ERR;
|
}
|
}
|
else
|
status_code = MASTER_TIMEOUT; // ³¬Ê±
|
// Flow_SysͨѶ
|
// printf("inter_state = %d,ex_crc_len = %d,recv_crc_chcek = 0x%04X\r\n",status_code,ex_crc_len,recv_crc_check);
|
// printf("receive_data = ");
|
// for (uint8_t i = 0; i < inter_recv_para_p->inter_recv_length; i++)
|
// printf("%02X ", inter_recv_para_p->inter_recv_union.inter_recv_buf[i]);
|
// printf("\r\n");
|
memset(inter_recv_para_p->inter_recv_union.inter_recv_buf, 0, inter_recv_para_p->inter_recv_length);
|
return status_code;
|
}
|
|
/*´Ó»úÎÂѹ½ÓÊÕ´¦Àí*/
|
INTER_STATUS Slave_TempPressRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SIZEOF_OF(struct measure_para, temperature) * 2 > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&sys_realtime_data_g.measure_para_s.temperature, pData, 4);
|
memcpy(&sys_realtime_data_g.measure_para_s.pressure, &pData[4], 4);
|
slave_para_union_g.temp_press_s.temp = sys_realtime_data_g.measure_para_s.temperature;
|
slave_para_union_g.temp_press_s.press = sys_realtime_data_g.measure_para_s.pressure;
|
return status_code;
|
}
|
|
/*´Ó»úÓ²¼þÐÅÏ¢½ÓÊÕ´¦Àí*/
|
INTER_STATUS Slave_HardwareRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_SOFT_HARD_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.slave_soft_hard_s, pData, SLAVE_SOFT_HARD_PARA_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_PipeParaRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_PIPE_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.pipe_para_s, pData, SLAVE_PIPE_PARA_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_UtParaRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_UT_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.ut_para_s, pData, SLAVE_UT_PARA_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_CorrSetReal_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_CORR_SET_REAL_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.corr_set_real_s, pData, SLAVE_CORR_SET_REAL_PARA_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_RawDataRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
// if(SLAVE_RAW_DATA_LENGTH > data_len) //½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
// status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.raw_data_s, pData, data_len);
|
return status_code;
|
}
|
INTER_STATUS Slave_MeasureRealTimeData_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_REAL_TIME_DATA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.real_time_data_s, pData, SLAVE_REAL_TIME_DATA_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_StateBytesRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SYS_STATUS_BYTES_TYPE_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
// memcpy(&sys_admin_g.admin_union[4], pData, 2);
|
memcpy(slave_para_union_g.raw_data_s.ut_ad_a,pData,2);
|
return status_code;
|
}
|
INTER_STATUS Slave_AlarmBytesRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SYS_ALARM_BYTES_TYPE_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
// memcpy(&sys_admin_g.admin_union[10], pData, 2);
|
memcpy(slave_para_union_g.raw_data_s.ut_ad_a,pData,2);
|
return status_code;
|
}
|
INTER_STATUS Slave_UtRealPara_1_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_UT_REAL_PARA_1_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.ut_real_para_1_s, pData, SLAVE_UT_REAL_PARA_1_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_UtRealPara_2_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_UT_REAL_PARA_2_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.ut_real_para_2_s, pData, SLAVE_UT_REAL_PARA_2_LENGTH);
|
return status_code;
|
}
|
INTER_STATUS Slave_ResPara_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_RES_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.res_para_s,pData,SLAVE_RES_PARA_LENGTH);
|
return status_code;
|
}
|
|
INTER_STATUS Slave_Temp_TimeDiff_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_TEMP_TIMEDIFF_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g.temp_timediff_para_s,pData,SLAVE_TEMP_TIMEDIFF_PARA_LENGTH);
|
return status_code;
|
}
|
|
INTER_STATUS Slave_CalData_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (2 > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g,pData,2);
|
return status_code;
|
}
|
|
INTER_STATUS Slave_CorrFixed_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
if (SLAVE_CORR_FIXED_PARA_LENGTH > data_len) // ½ÓÊÕ³¤¶ÈСÓڹ̶¨³¤¶È
|
status_code = MASTER_DATA_LOSE_ERR;
|
memcpy(&slave_para_union_g,pData,SLAVE_CORR_FIXED_PARA_LENGTH);
|
return status_code;
|
}
|
|
/*¼ì¶¨Ä£Ê½Ï´ӻúÁ÷Á¿Êý¾Ý½ÓÊÕ´¦Àí*/
|
INTER_STATUS Slave_CalFlowData_Recv(uint8_t *pData, uint16_t data_len)
|
{
|
struct measure_para *sys_realtime_data_p = &sys_realtime_data_g.measure_para_s;
|
//temp_data_gΪ0.25ÃëµÄ˲ʱÁ¿£¬flow_data * 4 Ϊ1ÃëµÄ˲ʱÁ¿£¬ËùÒÔ¾¹ý¡°¶þ´ÎÐÞÕý¡±ÐèÒª * 4 ÐÞÕý ÔÙ / 4 Êä³ö
|
if(inter_recv_para_g.inter_recv_union.slave_cal_data_s.flow_data >= 0)
|
temp_data_g = (Slave_RawFlowDataSecondHandler(inter_recv_para_g.inter_recv_union.slave_cal_data_s.flow_data * 4,
|
&sec_order_corr_real_g) / 4);
|
else
|
temp_data_g = 0;
|
sys_realtime_data_p->cal_cumulate_reserve[1] += temp_data_g;
|
return INTER_OK;
|
}
|
|
/*´Ó»úÁ÷Á¿Êý¾Ý½ÓÊÕ´¦Àí*/
|
INTER_STATUS Slave_FlowDataRecv(uint8_t *pData, uint16_t data_len)
|
{
|
INTER_STATUS status_code = INTER_OK;
|
float __attribute__ ((aligned (4))) flow_temp_f[20] = {0}; //û°ì·¨ÇúÏ߾ȹú
|
// struct slave_flow_data *slave_flow_data_p = &inter_recv_para_g.inter_recv_union.slave_flow_data_s;
|
struct slave_flow_data *slave_flow_data_p = (struct slave_flow_data *)(pData - 2);
|
struct measure_para *sys_realtime_data_p = &sys_realtime_data_g.measure_para_s;
|
struct state_para *sys_realtime_state_p = &sys_realtime_data_g.state_para_s;
|
/*¸ù¾Ý¼ÆÁ¿°å״̬×Ö1_2×öÏàÓ¦´¦Àí£¬¾ßÌåÄÚÈÝÏê¼û¡¶XXXX¡·*/
|
// memcpy(&sys_admin_g.admin_union[4], &slave_flow_data_p->status_byte, 2);
|
// memcpy(&sys_admin_g.admin_union[10], &slave_flow_data_p->alarm_byte, 2);
|
Slave_Status_AlarmBytesHandler(slave_flow_data_p->status_alarmbytes);
|
/*Á÷Á¿´¦Àí*/
|
sys_realtime_data_p->temperature = slave_flow_data_p->temperature; // ÔʼζÈÖµ
|
sys_realtime_data_p->pressure = slave_flow_data_p->pressure; // ÔʼѹÁ¦Öµ
|
/*²ÎÊý´¦Àí*/
|
sys_realtime_state_p->tof_up = slave_flow_data_p->tof_up;
|
sys_realtime_state_p->tof_down = slave_flow_data_p->tof_down;
|
sys_realtime_state_p->tof_diff = slave_flow_data_p->tof_diff;
|
sys_realtime_state_p->signal_intensity_up = slave_flow_data_p->signal_intensity_up;
|
sys_realtime_state_p->signal_intensity_down = slave_flow_data_p->signal_intensity_down;
|
sys_realtime_state_p->signal_gain_up = slave_flow_data_p->signal_gain_up;
|
sys_realtime_state_p->signal_gain_down = slave_flow_data_p->signal_gain_down;
|
sys_realtime_state_p->snr_up = slave_flow_data_p->snr_up;
|
sys_realtime_state_p->snr_down = slave_flow_data_p->snr_down;
|
sys_realtime_state_p->real_line_a = slave_flow_data_p->real_line_a;
|
sys_realtime_state_p->real_line_b = slave_flow_data_p->real_line_b;
|
sys_realtime_state_p->sound_vel = slave_flow_data_p->sound_vel;
|
sys_realtime_state_p->flow_vel = slave_flow_data_p->flow_vel;
|
|
/*ÓÉÓÚnum_wc»á³¬¹ý×î´óÏÞÖÆµÄ20£¬ËùÒÔÔÝʱ×ö³öÏÞÖÆ*/
|
if(slave_flow_data_p->num_wc > 20)
|
slave_flow_data_p->num_wc = 20;
|
for (uint8_t i = 0; i < slave_flow_data_p->num_wc; i++)
|
{
|
if(__SYS_FUNC_CFG_BYTES_GET(small_flow_excision) == RESET) //û¿ªÐ¡Á÷Á¿Çгý
|
{}
|
else
|
{
|
/*¶þ¼¶ÐÞÕý*/
|
slave_flow_data_p->instant_wc[i] = Slave_RawFlowDataSecondHandler(slave_flow_data_p->instant_wc[i],&sec_order_corr_real_g);
|
if ((slave_flow_data_p->instant_wc[i] * 3600) >= sys_flow_alarm_cfg_g.small_flow_excision_value) // ˲ʱÁ÷Á¿Òª´óÓÚ×îСÁ÷Á¿£¨Ð¡Á÷Á¿Çгý£©
|
{}
|
else if (slave_flow_data_p->instant_wc[i] > 0.0f) // 0 < flow < ×îСÁ÷Á¿
|
slave_flow_data_p->instant_wc[i] = 0; // ½o0ÊÇΪÁË·½±ãºóÃæËãÆ½¾ùÖµ
|
}
|
}
|
/*°Ñ˲ʱ¹¤¿öÌí¼Óµ½»·ÐζÓÁÐÖÐ*/
|
for(uint8_t i = 0;i < slave_flow_data_p->num_wc;i++)
|
flow_temp_f[i] = slave_flow_data_p->instant_wc[i];
|
ring_write_array(&instant_wc_ring, &flow_temp_f[0], slave_flow_data_p->num_wc/*GET_FLOW_DATA_PERIOD_TIME*/, INSTANT_WC_RING_BUFFER_SIZE);
|
return status_code;
|
}
|
|
/*Ïê¼ûÖ÷´ÓͨѶÕý³£Êý¾Ý±í״̬/±¨¾¯×ÖÄÚÈÝ*/
|
void Slave_Status_AlarmBytesHandler(SLAVE_STATUS_ALARMBYTES_UNION_T state_alarmbytes)
|
{
|
static uint8_t media_normal_flag = 0;
|
static uint8_t dismantle_flag = 0;
|
/*ÅжϽéÖÊ*/
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_media_status == 1)
|
__SYS_STATUS_BYTES_STATUS(media_status, GAS, AV_NORMAL);
|
else
|
__SYS_STATUS_BYTES_STATUS(media_status, AIR, AV_NORMAL);
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_press_err)
|
__SYS_STATUS_ALARM_BYTES_SET(press_err);
|
else
|
__SYS_STATUS_BYTES_STATUS(press_err, RESET, AV_PRESS_ERR);
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_temp_err)
|
__SYS_STATUS_ALARM_BYTES_SET(temp_err);
|
else
|
__SYS_STATUS_BYTES_STATUS(temp_err, RESET, AV_TEMP_ERR);
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_input_water)
|
{
|
__SYS_STATUS_ALARM_BYTES_SET(input_water);
|
// __SYS_STATUS_BYTES_STATUS(media_status, WATER, AV_NORMAL);
|
}
|
else
|
__SYS_STATUS_BYTES_STATUS(input_water, RESET, AV_INPUT_WATER_ERR);
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_media_other)
|
{
|
if(media_normal_flag == 0)
|
{
|
media_normal_flag = 1;
|
__SYS_ALARM_BYTES_SET(media_other,SET);
|
}
|
__SYS_STATUS_BYTES_STATUS(media_status, MEDIA_UNKNOWN, AV_NORMAL);
|
}else if(media_normal_flag && (__SYS_STATUS_BYTES_GET(media_status) == GAS || __SYS_STATUS_BYTES_GET(media_status) == AIR))
|
{
|
media_normal_flag = 0;
|
Alarm_List_Node_Deleted(&pList_head,AV_MEDIA_ERR);
|
}
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_dismantle)
|
{
|
if(dismantle_flag == 0)
|
{
|
dismantle_flag = 1;
|
__SYS_ALARM_BYTES_SET(dismantle,SET);
|
}
|
}else if(dismantle_flag && __SYS_STATUS_BYTES_GET(media_status) == GAS)
|
{
|
dismantle_flag = 0;
|
Alarm_List_Node_Deleted(&pList_head,AV_DISMANTLE);
|
}
|
|
if(state_alarmbytes.slave_status_alarmbytes_s.slave_measure_err)
|
__SYS_STATUS_ALARM_BYTES_SET(measure_err);
|
else
|
__SYS_STATUS_BYTES_STATUS(measure_err, RESET, AV_MEASURE_ERR);
|
}
|
|
|
/*ÔʼÊý¾Ý¶þ´ÎÐÞÕý´¦Àí*/
|
float Slave_RawFlowDataSecondHandler(float Q2,SECOND_ORDER_CORR_T * real_corr_data_p)
|
{
|
float Q3 = Q2 *= 3600,k = 1.0f; //¶þ´ÎÐÞÕýµÄÊýÖµµ¥Î»ÒªÎª ¡°M^3 / h¡±
|
|
//ÐÞÕýÁ÷Á¿Öµ£¬ Q2Ϊһ¼¶ÐÞÕýÖ®ºóµÄ¹¤¿ö˲ʱÁ÷Á¿£¬Q3Ϊ¶þ¼¶ÐÞÕýÖ®ºóµÄ¹¤¿ö˲ʱÁ÷Á¿¡£
|
//ÔÚUFG220ģʽÏ£¬»ñÈ¡¼ÆÁ¿°å¹¤¿ö˲ʱÁ¿Ö®ºó£¬Ã¿¸ö˲ʱÁ÷Á¿Öµ¶¼ÐèÒª¾¹ý´ËÐÞÕý£¬ÔÙ¼ÌÐøºóÐøµÄ³¬Á÷Á¿µÈÂß¼ÅжÏ
|
if( Q2 >= real_corr_data_p->second_flow_data_point[0] )
|
{
|
Q3 = Q2 * real_corr_data_p->second_corr_factor[0];
|
}
|
else if(Q2 >= real_corr_data_p->second_flow_data_point[1] )
|
{
|
k = (Q2 - real_corr_data_p->second_flow_data_point[1]) *
|
(real_corr_data_p->second_corr_factor[0] - real_corr_data_p->second_corr_factor[1]) /
|
(real_corr_data_p->second_flow_data_point[0] - real_corr_data_p->second_flow_data_point[1] ) +
|
real_corr_data_p->second_corr_factor[1];
|
Q3 = Q2 * k;
|
}
|
else if(Q2 >= real_corr_data_p->second_flow_data_point[2] )
|
{
|
k = (Q2 - real_corr_data_p->second_flow_data_point[2]) *
|
(real_corr_data_p->second_corr_factor[1] - real_corr_data_p->second_corr_factor[2]) /
|
(real_corr_data_p->second_flow_data_point[1] - real_corr_data_p->second_flow_data_point[2] ) +
|
real_corr_data_p->second_corr_factor[2];
|
Q3 = Q2 * k;
|
}
|
else if(Q2 >= real_corr_data_p->second_flow_data_point[3] )
|
{
|
k=(Q2 - real_corr_data_p->second_flow_data_point[3]) *
|
(real_corr_data_p->second_corr_factor[2]- real_corr_data_p->second_corr_factor[3]) /
|
(real_corr_data_p->second_flow_data_point[2] - real_corr_data_p->second_flow_data_point[3]) +
|
real_corr_data_p->second_corr_factor[3];
|
Q3 = Q2 * k;
|
}
|
else if(Q2 >= real_corr_data_p->second_flow_data_point[4] )
|
{
|
k=(Q2 - real_corr_data_p->second_flow_data_point[4]) *
|
(real_corr_data_p->second_corr_factor[3] - real_corr_data_p->second_corr_factor[4]) /
|
(real_corr_data_p->second_flow_data_point[3] - real_corr_data_p->second_flow_data_point[4] ) +
|
real_corr_data_p->second_corr_factor[4];
|
Q3 = Q2 * k;
|
}
|
else
|
Q3 = Q2 * real_corr_data_p->second_corr_factor[4];
|
return (Q3 / 3600);
|
}
|