850 lines
30 KiB
C
850 lines
30 KiB
C
|
#include "UWater_frame_app.h"
|
|||
|
#include "UWater_rtcc_app.h"
|
|||
|
#include "UWater_lcd_app.h"
|
|||
|
#include "UWater_gp22_app.h"
|
|||
|
#include "UWater_pt_app.h"
|
|||
|
#include "UWater_frame_func_ReplyWT.h"
|
|||
|
#include "UWater_encryption_driver.h"
|
|||
|
#include "UWater_DataTools_App.h"
|
|||
|
#include "UWater_uart_driver.h"
|
|||
|
#include "UWater_eeprom_driver.h"
|
|||
|
|
|||
|
|
|||
|
static u8 broad_addr[7] = {0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
|
|||
|
static u8 task_complete_mbus = PTL_PACK_BUSY;
|
|||
|
static STRUCT_FLAG s_frame_flag_MBUS; //<2F><>Լ<EFBFBD><D4BC>־
|
|||
|
static STRUCT_FRAME_MBUS frame_struct_MBUS; //<2F><>Լ<EFBFBD><D4BC>Ϣ
|
|||
|
static u8 *new_message_data_rev_mbus;
|
|||
|
static u16 g_frame_temp_len_mbus;
|
|||
|
static u8 g_frame_temp_send_buf_mbus[UP_BUF_SIZE]; //<2F><><EFBFBD>ݲ<EFBFBD><DDB2>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static u8 s_eep_complete_mbus;
|
|||
|
static u8 up_deal_stat_mbus=UP_DEAL_S0;
|
|||
|
//static u8 frame_temp_data_buf[256];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>
|
|||
|
//<2F><>ͨѶ<CDA8><D1B6>ַ
|
|||
|
static void frame_func_reply_WT_ReadAddr(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
/*MBus<75><73>Լ <20><><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5>*/
|
|||
|
static void frame_func_reply_WT_ReadTemperatureCoefficient(void)
|
|||
|
{
|
|||
|
UNION_4U8TOU32 temp_4U8toU32_data;
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
temp_4U8toU32_data.datas = FrameCheckParaApp(FramePara_Tc0);
|
|||
|
for(int i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = temp_4U8toU32_data.data_buf[i];
|
|||
|
}
|
|||
|
temp_4U8toU32_data.datas = FrameCheckParaApp(FramePara_Tc1);
|
|||
|
for(int i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = temp_4U8toU32_data.data_buf[i];
|
|||
|
}
|
|||
|
g_frame_temp_len_mbus = 8;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ*/
|
|||
|
static void frame_func_reply_WT_ReadMac(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
for(int i=0;i<7;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x00;//<2F><><EFBFBD>ظ<EFBFBD>ˮ̨<CBAE>ӹ̶<D3B9>MAC<41><43>ַ0x00
|
|||
|
}
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
/*<2A><>Ϊ<EFBFBD>춨״̬*/
|
|||
|
static void frame_func_reply_WT_SetVerificationState(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
if (0 == Sys_data_object.P1.enable_verification_function)
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
FrameSetMsgApp(SetVerificationMsg);
|
|||
|
FrameClearMsgApp(MsgCaliberate);//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>УУ<D0A3><D7BC>־
|
|||
|
//Gp30TestFlowInit(); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>춨״̬<D7B4><CCAC>GP30Ӧ<30><D3A6><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>(<28><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ)
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
|
|||
|
static void frame_func_reply_WT_ReadSerialNum(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.last_key_num;
|
|||
|
for(int i=0;i<7;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x00;//<2F><><EFBFBD>ظ<EFBFBD>ˮ̨<CBAE>ӹ̶<D3B9><CCB6><EFBFBD><EFBFBD>к<EFBFBD>0x00
|
|||
|
}
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x5A;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>˳<EFBFBD><CBB3>춨״̬
|
|||
|
static void frame_func_reply_WT_OutVerificationState(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
if(01 == LcdCheckStateApp())
|
|||
|
{
|
|||
|
FrameSetMsgApp(OutVerificationMsg);//s_struct_msg.MsgStruct.out_verification_msg = 1;
|
|||
|
}
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
static void frame_func_reply_WT_ReadFlowCoefficient(void)
|
|||
|
{
|
|||
|
int i;
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_small.data_buf[i];
|
|||
|
}
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_middle0.data_buf[i];
|
|||
|
}
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_middle1.data_buf[i];
|
|||
|
}
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_middle2.data_buf[i];
|
|||
|
}
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_middle3.data_buf[i];
|
|||
|
}
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = Sys_data_object.P1.flow_coefficient_large.data_buf[i];
|
|||
|
}
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
//<2F><><EFBFBD>춨<EFBFBD><ECB6A8><EFBFBD><EFBFBD>
|
|||
|
static void frame_func_reply_WT_ReadVerificationData(void)
|
|||
|
{
|
|||
|
int i;
|
|||
|
DateTime tmp_time_buf;
|
|||
|
UNION_4U8TOU32 tmp_datas_buf;
|
|||
|
UNION_FLOAT_STORAGE tmp_float_datas_buf;
|
|||
|
float tempTempratureFlag;
|
|||
|
MET_STATE temp_met_state;
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
|
|||
|
if(01 != LcdCheckStateApp()) //<2F>Ǽ춨״̬
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
//<2F>¶<EFBFBD>
|
|||
|
if(TRUE==Check_Start_STOP_Filter_Flag())
|
|||
|
{
|
|||
|
Clear_Start_STOP_Filter_Flag();
|
|||
|
tempTempratureFlag = Check_Temperature_Parameter();//<2F><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tempTempratureFlag = TempCheckValueApp();
|
|||
|
}
|
|||
|
|
|||
|
if(tempTempratureFlag < 0)
|
|||
|
{
|
|||
|
tempTempratureFlag = -tempTempratureFlag;
|
|||
|
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
|||
|
tmp_datas_buf.datas|= 0x800000;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
|||
|
tmp_datas_buf.datas &= 0x7FFFFF;
|
|||
|
}
|
|||
|
for(i=0;i<3;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
//<2F>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
tmp_float_datas_buf.float_storage_format.datas = Gp30CheckTestDataApp(GP30_APP_TOTAL_FLOW); //<2F>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>//BCD
|
|||
|
tmp_datas_buf.datas = (u32) (tmp_float_datas_buf.float_datas);
|
|||
|
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x2C; //m?
|
|||
|
//˲ʱ<CBB2><CAB1><EFBFBD><EFBFBD>
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_INS_FLOW); //˲ʱ<CBB2><CAB1><EFBFBD><EFBFBD>(<28><>λС<CEBB><D0A1><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>100000<30><30>)//BCD
|
|||
|
tmp_datas_buf.datas = Gp30DataToBcd(tmp_datas_buf.datas, 100);//<2F><>NB<4E><42><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x35; //m?/h
|
|||
|
//up<75><70><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_TOF);//
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
//Magnify 100000 times<65><73>m3/h<><68><EFBFBD><EFBFBD>Real-time instantaneous flow
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_INS_FLOW_LCD);
|
|||
|
tmp_datas_buf.datas = Gp30DataToBcd(tmp_datas_buf.datas, 100);
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
//tof
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_DIFF); //ʱ<><CAB1><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<4;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
//<2F>ۼƹ<DBBC><C6B9><EFBFBD>ʱ<EFBFBD><CAB1>//BCD
|
|||
|
tmp_datas_buf.datas = RtccGetWorkHourApp();
|
|||
|
tmp_datas_buf.datas = HexToBcd32(tmp_datas_buf.datas);
|
|||
|
for(i=0;i<3;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
//ʵʱʱ<CAB1><CAB1>
|
|||
|
RtccGetDateTime(&tmp_time_buf);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0x20;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.year;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.month;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.day;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.hour;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.minute;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_time_buf.s.second;
|
|||
|
//״̬<D7B4><CCAC>
|
|||
|
temp_met_state = FrameGetByte();
|
|||
|
/**<2A><><EFBFBD>ӹ<EFBFBD>Լ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ̨<CBAE>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>**/
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = temp_met_state.stat1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = temp_met_state.stat3;
|
|||
|
//************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:15<31>ֽ<EFBFBD>***********************/
|
|||
|
//<2F>¶<EFBFBD>T0-T2<54><32>T2<54><32>:3<>ֽ<EFBFBD>
|
|||
|
#if WENDU_FANSUAN_OPEN
|
|||
|
tempTempratureFlag= TempCheckValueApp();//<2F><><EFBFBD><EFBFBD>ʵʱ<CAB5>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(tempTempratureFlag < 0)
|
|||
|
{
|
|||
|
tempTempratureFlag = -tempTempratureFlag;
|
|||
|
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
|||
|
tmp_datas_buf.datas|= 0x800000;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tmp_datas_buf.datas = HexToBcd32((u32)(tempTempratureFlag*100));
|
|||
|
tmp_datas_buf.datas &= 0x7FFFFF;
|
|||
|
}
|
|||
|
for(i=0;i<3;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.data_buf[i];
|
|||
|
}
|
|||
|
tmp_datas_buf.datas = Gp30CheckDataApp(11); //TOF_UP<55><50><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data2;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data3;
|
|||
|
|
|||
|
tmp_datas_buf.datas = Gp30CheckDataApp(12);//TOF_DOWN<57><4E><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data2;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data3;
|
|||
|
#else//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>Ĭ<EFBFBD><C4AC>д0
|
|||
|
for(i=0;i<3;i++)
|
|||
|
{
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
}
|
|||
|
//up amplitude(V1):4<>ֽ<EFBFBD>
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_UP);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data2;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data3;
|
|||
|
//down amplitude(V2):4<>ֽ<EFBFBD>
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_PEAK_DOWN);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data2;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data3;
|
|||
|
#endif
|
|||
|
//down <20>ĵ<EFBFBD><C4B5><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
tmp_datas_buf.datas = Gp30CheckTestDataApp(GP30_APP_DOWN);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data1;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data2;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = tmp_datas_buf.datas_map.data3;
|
|||
|
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>\ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
static void frame_func_reply_WT_StartOrStopTest(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
if(01 != LcdCheckStateApp())
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
if(0x01 == *(new_message_data_rev_mbus)) //start
|
|||
|
{
|
|||
|
Gp30StartMeasureApp(1);
|
|||
|
}
|
|||
|
else if(0x00 == *(new_message_data_rev_mbus)) //stop
|
|||
|
{
|
|||
|
Gp30StartMeasureApp(0);
|
|||
|
}
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = *(new_message_data_rev_mbus);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
|
|||
|
//ģ<><C4A3>/ˮ̨<CBAE>ӹ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5>
|
|||
|
static void frame_func_reply_WT_ReadPolyNomialcoefficient(void)
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus=0;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = FM_METER_TYPE;
|
|||
|
memcpy(&g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus], &(cal_coefficient[0].value[0]),sizeof (cal_coefficient));
|
|||
|
g_frame_temp_len_mbus = (sizeof (cal_coefficient)+1);
|
|||
|
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
//д<>¶<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
static void frame_func_s3_WT_SetTempratureConefficient(void)
|
|||
|
{
|
|||
|
switch(up_deal_stat_mbus)
|
|||
|
{
|
|||
|
case UP_DEAL_S0:
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())//<2F>洢<EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus=0;
|
|||
|
if (0x01 == Sys_data_object.P1.start_using_flg) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
fram_tools_writeU32ByBuf(Sys_data_object.P1.temperature_coefficient0.data_buf, new_message_data_rev_mbus, 0);
|
|||
|
fram_tools_writeU32ByBuf(Sys_data_object.P1.temperature_coefficient1.data_buf, (new_message_data_rev_mbus + 4), 0);
|
|||
|
|
|||
|
#if WENDU_FANSUAN_OPEN
|
|||
|
UNION_2U8TOU16 temp_caliber_value;
|
|||
|
temp_caliber_value.datas_map.data0 =*(new_message_data_rev_mbus + 8);//<2F><>ȡ<EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ֽ<EFBFBD>
|
|||
|
temp_caliber_value.datas_map.data1 =*(new_message_data_rev_mbus + 9);//<2F><>ȡ<EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>ֽ<EFBFBD>
|
|||
|
|
|||
|
SetCaliberateTemperature(temp_caliber_value.datas);//<2F><>ǰ<EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(Get_Temperature_Caliberate()!=0)/*1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уʱ<D7BC>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD>ӻ<EFBFBD><D3BB>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>У<D0A3>¶<EFBFBD>ֵ 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уʱ<D7BC>·<EFBFBD>д<EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>·<EFBFBD><C2B7><EFBFBD>У<D0A3>¶<EFBFBD>ֵΪ0*/
|
|||
|
{
|
|||
|
FrameSetMsgApp(MsgCaliberate); //<2F><>1 <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>УУMSG----ֻ<><D6BB><EFBFBD><EFBFBD>У<D0A3>¶Ȳ<C2B6><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
RtccSetTimer(RTCC_TOF_CALIBERATE_TIME, RTCC_TOF_CALIBERATE_TIME_OUT);//<2F><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>----ʵ<>ʲ<EFBFBD><CAB2><EFBFBD>
|
|||
|
}
|
|||
|
#endif
|
|||
|
EepWrite(&Sys_data_object.P1.temperature_coefficient0.datas_map.data0, EEP_FRAME_TEMPERATURE_COEFFICIENT_ADDR, 8, &s_eep_complete_mbus);
|
|||
|
Frame_Para_Init();
|
|||
|
|
|||
|
if((0==Sys_data_object.P1.temperature_coefficient0.datas)&&(0==Sys_data_object.P1.temperature_coefficient1.datas))
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S1; //<2F><>ˮ̨<CBAE><CCA8><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>дΪ1
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S2;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case UP_DEAL_S1:
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())//<2F>洢<EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>EEPROM
|
|||
|
{
|
|||
|
memcpy(&(cal_flow_coefficient[0].datas_map.data0), default_flow_coefficient, sizeof (default_flow_coefficient));
|
|||
|
EepWrite(&(cal_flow_coefficient[0].datas_map.data0), FRAME_FLOW_LOW_COEFFICIENT_ADDR, 72, &s_eep_complete_mbus);
|
|||
|
up_deal_stat_mbus = UP_DEAL_S2;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case UP_DEAL_S2:
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())//<2F>洢<EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
Frame_Para_Init();
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
//д<><D0B4><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5> **<2A><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>0.5-1.5<EFBFBD><EFBFBD>2019<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>5<EFBFBD><EFBFBD>
|
|||
|
static void frame_func_s3_WT_SetFowcoefficient(void)
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus =0;
|
|||
|
if (0x01 == Sys_data_object.P1.start_using_flg) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
UNION_4U8TOU32 flow_small;
|
|||
|
UNION_4U8TOU32 flow_medium0;
|
|||
|
UNION_4U8TOU32 flow_medium1;
|
|||
|
UNION_4U8TOU32 flow_medium2;
|
|||
|
UNION_4U8TOU32 flow_medium3;
|
|||
|
UNION_4U8TOU32 flow_large;
|
|||
|
fram_tools_writeU32ByBuf(flow_small.data_buf, (new_message_data_rev_mbus), 0);
|
|||
|
fram_tools_writeU32ByBuf(flow_medium0.data_buf, (new_message_data_rev_mbus + 4), 0);
|
|||
|
fram_tools_writeU32ByBuf(flow_medium1.data_buf, (new_message_data_rev_mbus + 8), 0);
|
|||
|
fram_tools_writeU32ByBuf(flow_medium2.data_buf, (new_message_data_rev_mbus + 12), 0);
|
|||
|
fram_tools_writeU32ByBuf(flow_medium3.data_buf, (new_message_data_rev_mbus + 16), 0);
|
|||
|
fram_tools_writeU32ByBuf(flow_large.data_buf, (new_message_data_rev_mbus + 20), 0);
|
|||
|
if(( (FLOW_COEFFICIENT_MIN < flow_small.datas) && (flow_small.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_medium0.datas) && (flow_medium0.datas < FLOW_COEFFICIENT_MAX) )
|
|||
|
&& ( (FLOW_COEFFICIENT_MIN < flow_medium1.datas) && (flow_medium1.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_medium2.datas) && (flow_medium2.datas < FLOW_COEFFICIENT_MAX) )
|
|||
|
&& ( (FLOW_COEFFICIENT_MIN < flow_medium3.datas) && (flow_medium3.datas < FLOW_COEFFICIENT_MAX) ) && ( (FLOW_COEFFICIENT_MIN < flow_large.datas) && (flow_large.datas < FLOW_COEFFICIENT_MAX) ))
|
|||
|
{
|
|||
|
if(LOW_TYPE==*(new_message_data_rev_mbus + 24))
|
|||
|
{
|
|||
|
memcpy(&(cal_flow_coefficient[0].datas_map.data0), new_message_data_rev_mbus, 24);
|
|||
|
EepWrite(&(cal_flow_coefficient[0].datas_map.data0), FRAME_FLOW_LOW_COEFFICIENT_ADDR, 24, &s_eep_complete_mbus);
|
|||
|
}
|
|||
|
else if(MIDDLE_TYPE==*(new_message_data_rev_mbus + 24))
|
|||
|
{
|
|||
|
memcpy(&(cal_flow_coefficient[6].datas_map.data0), new_message_data_rev_mbus, 24);
|
|||
|
EepWrite(&(cal_flow_coefficient[6].datas_map.data0), FRAME_FLOW_MIDDLE_COEFFICIENT_ADDR, 24, &s_eep_complete_mbus);
|
|||
|
}
|
|||
|
else if(LARGE_TYPE==*(new_message_data_rev_mbus + 24))
|
|||
|
{
|
|||
|
memcpy(&(cal_flow_coefficient[12].datas_map.data0), new_message_data_rev_mbus, 24);
|
|||
|
EepWrite(&(cal_flow_coefficient[12].datas_map.data0), FRAME_FLOW_HIGH_COEFFICIENT_ADDR, 24, &s_eep_complete_mbus);
|
|||
|
}
|
|||
|
else if(ALL_TYPE==*(new_message_data_rev_mbus + 24))
|
|||
|
{
|
|||
|
memcpy(&(cal_flow_coefficient[0].datas_map.data0), default_flow_coefficient, sizeof (default_flow_coefficient));
|
|||
|
EepWrite(&(cal_flow_coefficient[0].datas_map.data0), FRAME_FLOW_LOW_COEFFICIENT_ADDR, 72, &s_eep_complete_mbus);
|
|||
|
}
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//(<28><>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
static void frame_func_s3_WT_StartOrClearUsing(void)
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())
|
|||
|
{
|
|||
|
g_frame_temp_len_mbus =0;
|
|||
|
if (0x01 == *(new_message_data_rev_mbus))
|
|||
|
{
|
|||
|
Sys_data_object.P1.start_using_flg = 0x01;
|
|||
|
}
|
|||
|
else if (0x00 == *(new_message_data_rev_mbus))
|
|||
|
{
|
|||
|
Sys_data_object.P1.start_using_flg = 0x00;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
EepWrite(&Sys_data_object.P1.start_using_flg, EEP_FRAME_STARTUSING_ADDR, 1, &s_eep_complete_mbus);
|
|||
|
Frame_Para_Init();
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = *new_message_data_rev_mbus;
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//д<><D0B4><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5>
|
|||
|
static void frame_func_s3_WT_SetPolyNomialcoefficient(void)
|
|||
|
{
|
|||
|
if(TASK_IDLE == EepIfIdle())
|
|||
|
{
|
|||
|
TYP_FLOW_COEFFICIENT coefficient_buffer[MULT_COEFFICIENT_BUF_NUM]= {0};//<2F><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
g_frame_temp_len_mbus = 0;
|
|||
|
if (0x01 == Sys_data_object.P1.start_using_flg) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
if(FM_METER_TYPE != *(new_message_data_rev_mbus))
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
memcpy(&(coefficient_buffer[0].value[0]), (new_message_data_rev_mbus +1), sizeof (cal_coefficient));
|
|||
|
if((0 ==coefficient_buffer[1].flt) && (0 ==coefficient_buffer[2].flt) && (0 ==coefficient_buffer[12].flt)&& (0 ==coefficient_buffer[13].flt)
|
|||
|
&&(0 ==coefficient_buffer[23].flt)&& (0 ==coefficient_buffer[24].flt)&& (0 ==coefficient_buffer[34].flt)&& (0 ==coefficient_buffer[35].flt)
|
|||
|
&& (0 ==coefficient_buffer[45].flt)&& (0 ==coefficient_buffer[46].flt))
|
|||
|
{
|
|||
|
memcpy(&cal_coefficient[0].flt, default_coefficient,sizeof(default_coefficient));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for(u8 i=0;i<MULT_COEFFICIENT_BUF_NUM;i++)
|
|||
|
{
|
|||
|
if((COEFFICIENT_MAX< coefficient_buffer[i].flt)||(coefficient_buffer[i].flt <COEFFICIENT_MIN))//<2F>жϷ<D0B6>Χ<EFBFBD>д<EFBFBD>ȷ<EFBFBD><C8B7>-20191112
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
memcpy(&(cal_coefficient[0].value[0]), (new_message_data_rev_mbus +1), sizeof (cal_coefficient));
|
|||
|
}
|
|||
|
EepWrite(&cal_coefficient[0].value[0], FRAME_FLOW_COEFFICIENT_ADDR, sizeof (cal_coefficient), &s_eep_complete_mbus);
|
|||
|
g_frame_temp_send_buf_mbus[g_frame_temp_len_mbus++] = 0;
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_SUCCESS;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MBUS<55><53>Լ
|
|||
|
u8 crack_frame_MBUS(u16 frame_lenth,u8 *frame_buffer)//
|
|||
|
{
|
|||
|
u16 tmp_i = 0;
|
|||
|
u16 tmp_j = 0;
|
|||
|
u8 tmp_check = 0;
|
|||
|
u8 enc_tmp_addr[7];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵĵ<DCB5>ַ
|
|||
|
for (tmp_i = 0; tmp_i < frame_lenth; tmp_i++)
|
|||
|
{
|
|||
|
if (FM_HEAD_MARK == *(frame_buffer + tmp_i))
|
|||
|
{
|
|||
|
if (MET_TYPE == *(frame_buffer + tmp_i + 1))
|
|||
|
{
|
|||
|
//<2F>ж<EFBFBD><D0B6>DZ<EFBFBD><C7B1>ƹ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>/ˮ̨<CBAE>ӹ<EFBFBD>Լ,<2C><>10<31><30><EFBFBD>ֽ<EFBFBD>>2,˵<><CBB5><EFBFBD><EFBFBD>ˮ̨<CBAE><CCA8>/ģ<><C4A3><EFBFBD>Ĺ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1>Ƶ<EFBFBD>sta
|
|||
|
frame_struct_MBUS.head_site = tmp_i; //<2F><>¼֡ͷ
|
|||
|
frame_struct_MBUS.len = *(frame_buffer + tmp_i + 10);//<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
frame_struct_MBUS.end_site = frame_struct_MBUS.head_site + frame_struct_MBUS.len + 12;
|
|||
|
frame_struct_MBUS.check_len = frame_struct_MBUS.end_site - frame_struct_MBUS.head_site - 1;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
if ((frame_struct_MBUS.end_site < frame_lenth))
|
|||
|
{
|
|||
|
if(FM_END_MARK == *(frame_buffer + frame_struct_MBUS.end_site))
|
|||
|
{
|
|||
|
s_frame_flag_MBUS.enc_reply_flg = 0;
|
|||
|
frame_struct_MBUS.ctrl = *(frame_buffer + frame_struct_MBUS.head_site + 9);
|
|||
|
frame_struct_MBUS.DI0 = *(frame_buffer + frame_struct_MBUS.head_site + 11);
|
|||
|
frame_struct_MBUS.DI1 = *(frame_buffer + frame_struct_MBUS.head_site + 12);
|
|||
|
frame_struct_MBUS.serial_num0 = *(frame_buffer + frame_struct_MBUS.head_site + 13);
|
|||
|
new_message_data_rev_mbus = (frame_buffer + frame_struct_MBUS.head_site + 15);
|
|||
|
switch(frame_struct_MBUS.ctrl)
|
|||
|
{
|
|||
|
//<2F><>ַ<EFBFBD><D6B7><EFBFBD>ܵĹ<DCB5>Լ
|
|||
|
case MFM_READ_MAC_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
case MFM_SET_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL://д<>¶<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
case MFM_SET_FLOWCOEFFICIENT_ARGUMENT_CTRL://д<><D0B4><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
case MFM_SET_VERIFICATIONSTATE_ARGUMENT_CTRL://<2F><>Ϊ<EFBFBD>춨
|
|||
|
case MFM_START_OR_STOP_TEST_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
case MFM_START_OR_CLEAR_USING_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
case FM_SET_POLYNOMIALCOEFFICIENT_ARGUMENT_CTRL://д<><D0B4><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5>
|
|||
|
{
|
|||
|
frame_struct_MBUS.key_num = *(frame_buffer + frame_struct_MBUS.head_site + 14);
|
|||
|
tmp_check = SA_crc((frame_buffer + frame_struct_MBUS.head_site), frame_struct_MBUS.check_len, frame_struct_MBUS.key_num);
|
|||
|
if (tmp_check == *(frame_buffer + frame_struct_MBUS.end_site - 1))
|
|||
|
{
|
|||
|
if (MFM_READ_MAC_ARGUMENT_CTRL == frame_struct_MBUS.ctrl)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>key_num
|
|||
|
{
|
|||
|
if (SUCCESS == check_apply_addr(frame_buffer + frame_struct_MBUS.head_site + 2, Sys_data_object.P1.met_addr))
|
|||
|
{
|
|||
|
s_frame_flag_MBUS.rev_key_num = *(frame_buffer + frame_struct_MBUS.head_site + 14);
|
|||
|
return SUCCESS_IES;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (tmp_j = 0; tmp_j < 7; tmp_j++)
|
|||
|
{
|
|||
|
enc_tmp_addr[tmp_j] = *(frame_buffer + frame_struct_MBUS.head_site + 2 + tmp_j);
|
|||
|
}
|
|||
|
Address_Encrypt((frame_buffer + frame_struct_MBUS.head_site + 2), frame_struct_MBUS.key_num); //<2F><><EFBFBD>ܵ<EFBFBD>ַ
|
|||
|
if (Num_Check(frame_struct_MBUS.key_num, Sys_data_object.P1.last_key_num)) //num ok
|
|||
|
{
|
|||
|
for (tmp_j = 0; tmp_j < 7; tmp_j++)
|
|||
|
{
|
|||
|
s_frame_flag_MBUS.enc_tmp_addr[tmp_j] = enc_tmp_addr[tmp_j];
|
|||
|
}
|
|||
|
s_frame_flag_MBUS.enc_reply_flg = TRUE;
|
|||
|
return SUCCESS_IES;
|
|||
|
}
|
|||
|
Sys_data_object.P1.last_key_num = Num_Change(frame_struct_MBUS.key_num, Sys_data_object.P1.enable_bak_key); //<2F><><EFBFBD><EFBFBD>NUM
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
//ʹ<>ù㲥<C3B9><E3B2A5>ַ<EFBFBD>Ĺ<EFBFBD>Լ
|
|||
|
case MFM_READ_ADDR_ARGUMENT_CTRL:
|
|||
|
case MFM_SET_ADDR_ARGUMENT_CTRL:
|
|||
|
{
|
|||
|
for (tmp_j = frame_struct_MBUS.head_site; tmp_j < (frame_struct_MBUS.end_site - 1); tmp_j++)
|
|||
|
{
|
|||
|
tmp_check += *(frame_buffer + tmp_j);
|
|||
|
}
|
|||
|
if (tmp_check != *(frame_buffer + frame_struct_MBUS.end_site - 1))//CSУ<53><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
return ERROR_IES;
|
|||
|
}
|
|||
|
if (SUCCESS == check_apply_addr(frame_buffer + frame_struct_MBUS.head_site + 2, broad_addr))
|
|||
|
{
|
|||
|
return SUCCESS_IES;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC>ܹ<EFBFBD>Լ
|
|||
|
default:
|
|||
|
{
|
|||
|
for (tmp_j = frame_struct_MBUS.head_site; tmp_j < (frame_struct_MBUS.end_site - 1); tmp_j++)
|
|||
|
{
|
|||
|
tmp_check += *(frame_buffer + tmp_j);
|
|||
|
}
|
|||
|
if (tmp_check != *(frame_buffer + frame_struct_MBUS.end_site - 1))//CSУ<53><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
return ERROR_IES;
|
|||
|
}
|
|||
|
if (SUCCESS == check_apply_addr(frame_buffer + frame_struct_MBUS.head_site + 2, Sys_data_object.P1.met_addr))
|
|||
|
{
|
|||
|
return SUCCESS_IES;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return ERROR_IES;
|
|||
|
}
|
|||
|
//MBUS/ˮ̨<CBAE>ӹ<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>
|
|||
|
u8 up_deal_code_mbus(void)
|
|||
|
{
|
|||
|
task_complete_mbus = PTL_PACK_BUSY;
|
|||
|
switch(frame_struct_MBUS.ctrl)
|
|||
|
{
|
|||
|
case MFM_READ_ADDR_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD>ַ
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadAddr();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_ADDR_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_READ_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL://<2F><><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadTemperatureCoefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_TEMPERATURECOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_READ_MAC_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadMac();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_MAC_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_SET_VERIFICATIONSTATE_ARGUMENT_CTRL://<2F><><EFBFBD>춨
|
|||
|
{
|
|||
|
frame_func_reply_WT_SetVerificationState();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_SET_VERIFICATIONSTATE_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_READ_SERIALNUM_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadSerialNum();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_SERIALNUM_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_OUT_VERIFICATIONSTATE_ARGUMENT_CTRL://<2F>˼춨
|
|||
|
{
|
|||
|
frame_func_reply_WT_OutVerificationState();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_OUT_VERIFICATIONSTATE_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_READ_FLOWCOEFFICIENT_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadFlowCoefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_FLOWCOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_READ_VERIFICATIONDATA_ARGUMENT_CTRL://<2F><><EFBFBD>춨<EFBFBD><ECB6A8><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadVerificationData();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_READ_VERIFICATIONDATA_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_START_OR_STOP_TEST_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
frame_func_reply_WT_StartOrStopTest();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_START_OR_STOP_TEST_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case FM_READ_POLYNOMIALCOEFFICIENT_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5>
|
|||
|
{
|
|||
|
frame_func_reply_WT_ReadPolyNomialcoefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = FM_READ_POLYNOMIALCOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_SET_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL://д<>¶<EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
{
|
|||
|
frame_func_s3_WT_SetTempratureConefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_SET_TEMPERATURECOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_SET_FLOWCOEFFICIENT_ARGUMENT_CTRL://д<><D0B4><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
{
|
|||
|
frame_func_s3_WT_SetFowcoefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_SET_FLOWCOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case MFM_START_OR_CLEAR_USING_ARGUMENT_CTRL://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
frame_func_s3_WT_StartOrClearUsing();
|
|||
|
frame_struct_MBUS.ack_ctrl = MFM_START_OR_CLEAR_USING_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
case FM_SET_POLYNOMIALCOEFFICIENT_ARGUMENT_CTRL://д<><D0B4><EFBFBD><EFBFBD>ʽϵ<CABD><CFB5>
|
|||
|
{
|
|||
|
frame_func_s3_WT_SetPolyNomialcoefficient();
|
|||
|
frame_struct_MBUS.ack_ctrl = FM_SET_POLYNOMIALCOEFFICIENT_REPLY_CTRL;
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
task_complete_mbus = PTL_PACK_FAIL;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
return task_complete_mbus;
|
|||
|
}
|
|||
|
|
|||
|
void Frame_ResetDealState_Mbus(void)
|
|||
|
{
|
|||
|
up_deal_stat_mbus = UP_DEAL_S0;
|
|||
|
}
|
|||
|
/*******************************************************************************
|
|||
|
* @fun_name: Frame_CreatCrcCs_Ack
|
|||
|
* @brief : <EFBFBD><EFBFBD>cs<EFBFBD><EFBFBD>CRCУ<EFBFBD><EFBFBD>֡
|
|||
|
* @param[in] : *p;len
|
|||
|
* @param[out]: None
|
|||
|
* @retval : None
|
|||
|
* @other :
|
|||
|
******************************************************************************/
|
|||
|
void Frame_CreatCrcCs_Ack(u8* p_send_buf, u16* p_send_len)
|
|||
|
{
|
|||
|
int tmp_i=0;
|
|||
|
//<2F><>Ӧ<EFBFBD><D3A6>֡ͷ
|
|||
|
p_send_buf[0] = 0xFE;
|
|||
|
p_send_buf[1] = 0xFE;
|
|||
|
p_send_buf[2] = FM_HEAD_MARK;
|
|||
|
p_send_buf[3] = MET_TYPE;
|
|||
|
if (MFM_SOLIDIFY_MAC_ARGUMENT_CTRL == frame_struct_MBUS.ctrl)
|
|||
|
{
|
|||
|
for (tmp_i = 0; tmp_i < 7; tmp_i++)
|
|||
|
{
|
|||
|
p_send_buf[4 + tmp_i] = Sys_data_object.P1.mac_addr[tmp_i];
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (1 == s_frame_flag_MBUS.enc_reply_flg)
|
|||
|
{
|
|||
|
s_frame_flag_MBUS.enc_reply_flg = 0;
|
|||
|
for (tmp_i = 0; tmp_i < 7; tmp_i++)
|
|||
|
{
|
|||
|
p_send_buf[4 + tmp_i] = s_frame_flag_MBUS.enc_tmp_addr[tmp_i];
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for (tmp_i = 0; tmp_i < 7; tmp_i++)
|
|||
|
{
|
|||
|
p_send_buf[4 + tmp_i] = Sys_data_object.P1.met_addr[tmp_i];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (MFM_READ_MAC_ARGUMENT_CTRL == frame_struct_MBUS.ctrl)
|
|||
|
{
|
|||
|
Address_Encrypt(&p_send_buf[4], s_frame_flag_MBUS.rev_key_num);
|
|||
|
}
|
|||
|
}
|
|||
|
switch(frame_struct_MBUS.ctrl)
|
|||
|
{
|
|||
|
//CRCУ<43><D0A3><EFBFBD>Ĺ<EFBFBD>Լ
|
|||
|
case MFM_READ_MAC_ARGUMENT_CTRL:
|
|||
|
case MFM_SET_TEMPERATURECOEFFICIENT_ARGUMENT_CTRL:
|
|||
|
case MFM_SET_FLOWCOEFFICIENT_ARGUMENT_CTRL:
|
|||
|
case MFM_SET_VERIFICATIONSTATE_ARGUMENT_CTRL:
|
|||
|
case MFM_START_OR_STOP_TEST_ARGUMENT_CTRL:
|
|||
|
case MFM_START_OR_CLEAR_USING_ARGUMENT_CTRL:
|
|||
|
case FM_SET_POLYNOMIALCOEFFICIENT_ARGUMENT_CTRL:
|
|||
|
{
|
|||
|
p_send_buf[11] = frame_struct_MBUS.ack_ctrl;
|
|||
|
p_send_buf[12] = (4+g_frame_temp_len_mbus);
|
|||
|
p_send_buf[13] = frame_struct_MBUS.DI0;
|
|||
|
p_send_buf[14] = frame_struct_MBUS.DI1;
|
|||
|
p_send_buf[15] = frame_struct_MBUS.serial_num0;
|
|||
|
p_send_buf[16] = frame_struct_MBUS.key_num;
|
|||
|
for(tmp_i =0;tmp_i<g_frame_temp_len_mbus;tmp_i++)
|
|||
|
{
|
|||
|
p_send_buf[17+tmp_i] = g_frame_temp_send_buf_mbus[tmp_i];
|
|||
|
}
|
|||
|
if(frame_struct_MBUS.ctrl == MFM_READ_MAC_REPLY_CTRL)
|
|||
|
{
|
|||
|
Address_Encrypt(&p_send_buf[17], frame_struct_MBUS.key_num);
|
|||
|
}
|
|||
|
p_send_buf[17+g_frame_temp_len_mbus] = SA_crc(&p_send_buf[2], (p_send_buf[12] + 11), frame_struct_MBUS.key_num);
|
|||
|
p_send_buf[18+g_frame_temp_len_mbus] = FM_END_MARK;
|
|||
|
*p_send_len = (19+g_frame_temp_len_mbus);
|
|||
|
}
|
|||
|
break;
|
|||
|
//CSУ<53><D0A3><EFBFBD>Ĺ<EFBFBD>Լ
|
|||
|
default:
|
|||
|
{
|
|||
|
p_send_buf[11] = frame_struct_MBUS.ack_ctrl;
|
|||
|
p_send_buf[12] = (3+g_frame_temp_len_mbus);
|
|||
|
p_send_buf[13] = frame_struct_MBUS.DI0;
|
|||
|
p_send_buf[14] = frame_struct_MBUS.DI1;
|
|||
|
p_send_buf[15] = frame_struct_MBUS.serial_num0;
|
|||
|
for(tmp_i=0; tmp_i<g_frame_temp_len_mbus; tmp_i++)
|
|||
|
{
|
|||
|
p_send_buf[16+tmp_i] = g_frame_temp_send_buf_mbus[tmp_i];
|
|||
|
}
|
|||
|
p_send_buf[16+g_frame_temp_len_mbus] = check_cs(&p_send_buf[2], (p_send_buf[12] + 11));
|
|||
|
p_send_buf[17+g_frame_temp_len_mbus] = FM_END_MARK;
|
|||
|
*p_send_len = (18+g_frame_temp_len_mbus);
|
|||
|
}
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|