This commit is contained in:
2026-03-20 21:19:53 +08:00
parent 9d3b4b836f
commit 6a749331db
125 changed files with 29972 additions and 23051 deletions

View File

@@ -0,0 +1,93 @@
#include "../main/SystemInclude.h"
/* File start *****************************************************************/
#if ENABLE_USE_AVANT_PROTOCOL
/******************************************************************************/
static u16 Index;
/******************************************************************************/
void LoadFlowrateData(void)
{
//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ
tempL.DWord = flowRate;
comState.TxdData[Index++] = tempL.Byte[2];
comState.TxdData[Index++] = tempL.Byte[1];
comState.TxdData[Index++] = tempL.Byte[0];
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
}
/******************************************************************************/
void LoadTemperatureData(void)
{
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
}
/******************************************************************************/
void LoadGainData(void)
{
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
}
/******************************************************************************/
void LoadPressData(void)
{
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
comState.TxdData[Index++] = 0;
}
/******************************************************************************/
void AvantGardeAutoUploadData(void)
{
comState.ReceivedData = 0;
comState.TxdData[0] = MODULE_UPLOAD_FRAME_HEADER;
LoadFlowrateData();
switch(avantMode &)
{
case AVANT_USER_NORMAL_MODE:
LoadFlowrateData();
break;
case AVANT_USER_GAIN_MODE:
LoadFlowrateData();
LoadGainData();
break;
case AVANT_USER_TEMP_MODE:
LoadFlowrateData();
LoadTemperatureData();
LoadGainData();
break;
case AVANT_USER_TEMP_PRESS_MODE:
LoadFlowrateData();
LoadTemperatureData();
LoadGainData();
LoadPressData();
break;
}
comState.TxdData[Index] = MODULE_UPLOAD_FRAME_END;
comState.TxLenth += 4;
ComputeCRCForTransmitData();
MBBuf.TxPointer = comState.TxdData;
StartDMAForTxdMainUartData();
}
/* File end *****************************************************************/
#endif
/****************************************************************************/

View File

@@ -0,0 +1,35 @@
#ifndef __AvantGardeProtocol_h__
#define __AvantGardeProtocol_h__
/* File start *****************************************************************/
#if ENABLE_USE_AVANT_PROTOCOL
/******************************************************************************/
#define MODULE_UPLOAD_FRAME_HEADER 0x02
#define MODULE_UPLOAD_FRAME_END 0x03
#define AVANT_CALID_MODE 0x20
#define AVANT_USER_NORMAL_MODE 0x4E
#define AVANT_USER_GAIN_MODE 0x47
#define AVANT_USER_TEMP_MODE 0x54
#define AVANT_USER_TEMP_PRESS_MODE 0x4B
#define AVANT_CALIB_NORMAL_MODE ( AVANT_USER_NORMAL_MODE | AVANT_CALID_MODE )
#define AVANT_CALIB_GAIN_MODE ( AVANT_USER_GAIN_MODE | AVANT_CALID_MODE )
#define AVANT_CALIB_TEMP_MODE ( AVANT_USER_TEMP_MODE | AVANT_CALID_MODE )
#define AVANT_CALIB_TEMP_PRESS_MODE ( AVANT_USER_TEMP_PRESS_MODE | AVANT_CALID_MODE )
#define AVANT_UPLOAD_FRAME_HEADER 0x00
#define AVANT_UPLOAD_QUSM1 0x01
#define AVANT_UPLOAD_QUSM2 0x02
#define AVANT_UPLOAD_QUSM3 0x03
#define AVANT_UPLOAD_TUP 0x04
void StartDMATXDDataForNBIOT(void);
void AutoTransmitDataForNBIOT(void);
/* File end *****************************************************************/
#endif
/****************************************************************************/
/* .h end *******************************************************************/
#endif
/****************************************************************************/

View File

@@ -84,16 +84,16 @@ void ReceivedDataProcessing(void)
Get_UART_Rx_ActualLength();//<2F><><EFBFBD>½<EFBFBD><C2BD>ճ<EFBFBD><D5B3><EFBFBD>
MBBuf.RxdLen = comState.RxLenth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
MBBuf.RxPointer = comState.RxdData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MBBuf.TxPointer = comState.TxdData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ModBusProtocolDetection()) //<2F><><EFBFBD>⵽ModbusЭ<73><D0AD>
MBBuf.TxPointer = comState.TxdData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ModBusProtocolDetection()) //<2F><><EFBFBD>⵽ModbusЭ<73><D0AD>
{
ModBusDataProcessing(); //Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MBBuf.RxPointer<65><72>
// MBBuf.TxPointer = MBBuf.RxPointer ;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StartDMAForTxdMainUartData(); //<2F>ظ<EFBFBD>֡
ModBusDataProcessing(); //Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MBBuf.RxPointer<65><72>move<EFBFBD><EFBFBD>MBBuf.TxPointer<65><72>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>comState.TxdData<74><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
StartDMAForTxdMainUartData();//<2F>ظ<EFBFBD>֡
}
else RestartDMAForRxdMainUartData();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>(<28>ܹ<EFBFBD>ʹͨ<CAB9><CDA8>ʧ<EFBFBD><CAA7>ʱ<EFBFBD><CAB1><EFBFBD>¸<EFBFBD>λ)
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +1,46 @@
#ifndef __InternalModbus_h__
#define __InternalModbus_h__
extern const u16 ReadCode[];
extern u16 WordReg[], voltageDetected[];
extern const u16 WordDefault[][3];
extern u32 DWordReg[];
extern const u32 DWordDefault[][3];
//
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
#define GET_WORD_IDX(var) ((u32)(&(var) - WordReg))
// <20><><EFBFBD><EFBFBD> <20><> <20><>ַ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
#define GET_WORD_ADDR(var) (MEM_ADDR_WORD_REG_START + GET_WORD_IDX(var)*REG_WORD_WIDTH)
// <20><>ַ <20><> <20><><EFBFBD><EFBFBD> <20>ڴ<EFBFBD><DAB4><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ADR_WORD_IDX(adr) (((u32)(adr) - MEM_ADDR_WORD_REG_START) / REG_WORD_WIDTH)
#define GET_DWORD_IDX(var) ((u32)(&(var) - DWordReg))
#define GET_DWOR_ADDR(var) (MEM_ADDR_DWORD_REG_START+GET_DWORD_IDX(var)*REG_DWORD_WIDTH)
#define ADR_DWORD_IDX(adr) ((((u32)(adr) - MEM_ADDR_DWORD_REG_START) / REG_DWORD_WIDTH))
//<2F><><EFBFBD><EFBFBD> VHHHigh = ReadShortParameterFromMemory(GET_WORD_ADR(VHHHigh),WordDefault[GET_WORD_IDX(VHHHigh)][DEFAULT]);
// staticHighTemperature = WriteShortParameterToMemory(GET_WORD_ADR(staticHighTemperature));
//==============================================================================
void InternalShortParameterInit(void);
void InternalLongParameterInit(void);
//==============================================================================
void ReadMeterSystemData(void);
void ReadMeterInfo(void);
void ReadMeterSamplingData(void);
void ReadMeterOperateResult(void);
void ReadMeterParameter(void);
void ReadMeterDWordParameter(void);
void ReadMeterBasicData(void);
void ReadMeterParameter(void);
void CheckWritingLegality(void);
void MeterOperate(void);
void WriteMeterParameter(void);
void WriteMeterDwordParameter(void);
void InternalReadParameterProtocol(void);
void InternalWriteParameterProtocol(void);
void InternalWriteParameterProtocolToFlash(void);
void InternalReadParameterProtocolInFlash(void);
/************************/
#endif

View File

@@ -0,0 +1,575 @@
#ifndef __InternalModbusDefine_h__
#define __InternalModbusDefine_h__
/******************************************************************************/
#define INT_METER_INFO 0x8000
#define INT_METER_CODE 0x8300
#define INT_METER_PARA 0x8200
#define INT_METER_SYS 0x8400
#define INT_METER_BASIC 0x8500
#define INT_METER_BASIC_MASK 0xff00
#define INT_METER_BASIC_MAX (INT_METER_BASIC + BASIC_DATA_MAX)
#define INT_METER_9000 0x9000
#define INT_METER_A000 0xA000
#define INT_METER_D000 0xD000
#define INT_METER_E000 0xE000
#define INT_METER_F000 0xF000
#define INT_MASK 0xFF00
/******************************************************************************/
#define INT_METER_INFO_MAX (INT_METER_INFO+0x00ff)
#define INT_METER_PARA_MAX (INT_METER_PARA+0x00ff)
#define INT_METER_CODE_MAX (INT_METER_CODE+0x00ff)
#define INT_METER_SYS_MAX (INT_METER_SYS+0x00ff)
//#define INT_METER_85FF +0x00ff)
//#define INT_METER_86FF +0x00ff)
/******************************************************************************/
// for factory control
// define start
#define INT_PARAMETER_PROTOCOL 0x8000
// Fixed Address for product series
#define INT_SERIES_BASE 0x8000 // [Enable Read And Write]
#define INT_SERIES_BASE1 INT_SERIES_BASE
#define INT_SERIES_BASE2 (INT_SERIES_BASE+1)
#define INT_SERIES_BASE3 (INT_SERIES_BASE+2)
#define INT_SERIES_BASE4 (INT_SERIES_BASE+3)
#define INT_SERIES_BASE5 (INT_SERIES_BASE+4)
#define INT_SERIES_BASE6 (INT_SERIES_BASE+5)
#define INT_TIME_BASE (INT_SERIES_BASE+6) // [Enable Read And Write]
// Fixed Address for dcoef num
#define INT_CURVE_NUM 0x8009 // [Enable Read And Write] // max:20
#define INT_CURVE_BASE 0x800A // [Enable Read And Write]
#define INT_CURVE_WIDTH 3
#define CURVE_DATA_WIDTH 6
#define INT_CURVE_NODE1 0x800A
#define INT_CURVE_NODE2 (INT_CURVE_BASE+3)
#define INT_CURVE_NODE3 (INT_CURVE_BASE+6)
#define INT_CURVE_NODE4 (INT_CURVE_BASE+9)
#define INT_CURVE_NODE5 (INT_CURVE_BASE+12)
#define INT_CURVE_NODE6 (INT_CURVE_BASE+15)
#define INT_CURVE_NODE7 (INT_CURVE_BASE+18)
#define INT_CURVE_NODE8 (INT_CURVE_BASE+21)
#define INT_CURVE_NODE9 (INT_CURVE_BASE+24)
#define INT_CURVE_NODE10 (INT_CURVE_BASE+27)
#define INT_CURVE_NODE11 (INT_CURVE_BASE+30)
#define INT_CURVE_NODE12 (INT_CURVE_BASE+33)
#define INT_CURVE_NODE13 (INT_CURVE_BASE+36)
#define INT_CURVE_NODE14 (INT_CURVE_BASE+39)
#define INT_CURVE_NODE15 (INT_CURVE_BASE+42)
#define INT_CURVE_NODE16 (INT_CURVE_BASE+45)
#define INT_CURVE_NODE17 (INT_CURVE_BASE+48)
#define INT_CURVE_NODE18 (INT_CURVE_BASE+51)
#define INT_CURVE_NODE19 (INT_CURVE_BASE+54)
#define INT_CURVE_NODE20 (INT_CURVE_BASE+57)
#define INT_CURVE_NODE21 (INT_CURVE_BASE+60)
#define INT_CURVE_NODE22 (INT_CURVE_BASE+63)
#define INT_CURVE_NODE23 (INT_CURVE_BASE+66)
#define INT_CURVE_NODE24 (INT_CURVE_BASE+69)
#define INT_CURVE_NODE25 (INT_CURVE_BASE+72)
#define INT_CURVE_NODE26 (INT_CURVE_BASE+75)
#define INT_CURVE_NODE27 (INT_CURVE_BASE+78)
#define INT_CURVE_NODE28 (INT_CURVE_BASE+81)
#define INT_CURVE_NODE29 (INT_CURVE_BASE+84)
#define INT_CURVE_NODE30 (INT_CURVE_BASE+87)
#define INT_CURVE_NODE31 (INT_CURVE_BASE+90)
#define INT_CURVE_NODE32 (INT_CURVE_BASE+93)
#define INT_CURVE_NODE33 (INT_CURVE_BASE+96)
#define INT_CURVE_NODE34 (INT_CURVE_BASE+99)
#define INT_CURVE_NODE35 (INT_CURVE_BASE+102)
#define INT_CURVE_NODE36 (INT_CURVE_BASE+105)
#define INT_CURVE_MAX (INT_CURVE_NODE1 + CURVE_DATA_MAX*3)
#define INT_FIX_INFO_MAX 0x8200
#define INT_REG_BASE 0x8200
// fixed Read Address
#define INT_KEY_ID 0x8200 // Fixed Address write parameter ID Key 0x9600 [Disable Read]
#define INT_KEY_ID_L 0x8201
#define INT_CURVE_TYPE 0x8202 // select curve type
#define INT_RTC_SECOND 0x8203 // 0x8203
//#define INT_SOFT_BUILD_DATE2 0x8204 // 0x8203,4,5,6,7,8
//#define INT_SOFT_BUILD_DATE3 0x8205 // 0x8203,4,5,6,7,8
//#define INT_SOFT_BUILD_DATE4 0x8206 // 0x8203,4,5,6,7,8
//#define INT_SOFT_BUILD_DATE5 0x8207 // 0x8203,4,5,6,7,8
//#define INT_SOFT_BUILD_DATE6 0x8208 // 0x8203,4,5,6,7,8
#define INT_CALIB_FAC 0x820A // 2Byte [Disable Write]
#define INT_CALIB_DEPTH 0x820B // 2Byte [Disable Write]
#define INT_CALIB_WIDTH 0x820C // 2Byte [Disable Write]
// Variable Address
#define INT_COMMAND 0x820D //internal control start address [Disable Read]
#define INT_CONTROL 0x820D // mode control:9d 45, 9D 00, 55 [Disable Read]
#define INT_CLEAR_RECORD 0x820E // clear data record: [Disable Read]
#define INT_TEST_OFFSET 0x820F // [Disable Read]
// parameter Address
#define INT_PARAMETER 0x8210 // internal parameter write and read address start
#define INT_PROTOCOL 0x8210 // MODBUS Slaver Addr
#define INT_SLAVER_ADDR 0x8211 // MODBUS Slaver Addr
#define INT_METER_FACTOR 0x8212
#define INT_GDCF 0x8213
#define INT_MAX_FLOW 0x8214
#define INT_OFFSET_GAS 0x8216
#define INT_OFFSET_AIR 0x8217
#define INT_SAMPLE_PERIOD 0x8218
#define INT_HISTORY_PERIOD 0x8219
#define INT_PULSE_UNIT 0x821A
//#define INT_MAX_LOOP_FR 0x821B
#define INT_SENSOR_SN 0x821D // 0x821D/0x821E/0x821F
#define INT_TOTAL_ACC 0x8220 // 0x8220-0x8225
#define INT_CALIB_TA 0x8226 // 0x8226
#define INT_OFFSET_A_GAS 0x8227
#define INT_OFFSET_A_AIR 0x8228
#define INT_ATYPE_INDEX_GAIN 0x8229
#define INT_GDCF_ATYPE 0x822A
#define INT_GDCF_CTYPE 0x822B
#define INT_CALIB_PIPE 0x822C
#define INT_WORK_PIPE 0x822D
#define INT_WORK_UNIT 0x822E
#define INT_DIS_LANGUAGE 0x822F
#define INT_ACC_OUT_BIT 0x8230
#define INT_REVERSE_SCALE 0x8231
#define INT_VHH_HIGH 0x8232
#define INT_VHH_ROOM 0x8233
#define INT_VHH_LOW 0x8234
#define INT_NRH_HIGH 0x8235
#define INT_NRH_ROOM 0x8236
#define INT_NRH_LOW 0x8237
#define INT_NRR_HIGH 0x8238
#define INT_NRR_ROOM 0x8239
#define INT_NRR_LOW 0x823A
#define INT_GCF_A 0x823B
#define INT_GCF_B 0x823D
#define INT_GCF_C 0x823E
#define INT_RH_GAINRES 0x8240
#define INT_ZERO_SUPPRESSION 0x8244
#define INT_STATIC_LOW_TA 0x8245
#define INT_STATIC_HIGH_TA 0x8246
#define INT_PULSE_COUNTER 0x8247 // byte = 4
#define INT_ATYPE_RC 0x8249 //
#define INT_ATYPE_WIPER 0x824A //
#define INT_CTYPE_WIPER 0x824B //
#define INT_CTYPE_ADC 0x824C //
#define INT_OFFSET_HIGH 0x824D //
#define INT_OFFSET_LOW 0x824E //
#define INT_TRH_HIGH 0x824F //
#define INT_TRH_LOW 0x8250 //
#define INT_MEMS_RATIO 0x8251 //
#define INT_SYS_LCD 0x8252 //
#define INT_SYS_CHIP 0x8253 //
#define INT_TEMP_CORR 0x8254 //
#define INT_OFFSET_VDUGX_GAS 0x8255
#define INT_OFFSET_VDUGX_AIR 0x8256
#define INT_OFFSET_RGINX 0x8257
#define INT_NRH_P50 0x8258
#define INT_NRH_P0 0x8259
#define INT_ADC_GAIN 0x825A
#define INT_RES_FACTOR 0x825B
#define INT_BATTEST_PERIOD 0x825C
#define INT_FR_SWITCH_POINT 0x825D
#define INT_CALIB_FR_GAIN 0x825F // У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
#define INT_AUTO_CALIB_ATYPE 0x8260
#define INT_USER_INIT_INDEX 0x8261
#define INT_DIVHX_HIGH 0x8262
#define INT_DIVHX_ROOM 0x8263
#define INT_DIVHX_LOW 0x8264
#define INT_VDUGX_HIGH 0x8265
#define INT_VDUGX_ROOM 0x8266
#define INT_VDUGX_LOW 0x8267
//==============================================================================
// Variable Address(read:MAX 8 Line)
#define INT_READ_CODE1 0x8300 // flowrate
#define INT_READ_CODE_MASK 0xfff0
#define INT_READ_CODE_BASE INT_READ_CODE1
#define INT_READ_CODE2 (INT_READ_CODE1 + 1) //
#define INT_READ_CODE3 (INT_READ_CODE2 + 1) //
#define INT_READ_CODE4 (INT_READ_CODE3 + 1) //
#define INT_READ_CODE5 (INT_READ_CODE4 + 1) //
#define INT_READ_CODE6 (INT_READ_CODE5 + 1) //
#define INT_READ_CODE7 (INT_READ_CODE6 + 1) //
#define INT_READ_CODE8 (INT_READ_CODE7 + 1) //
#define INT_READ_CODE9 (INT_READ_CODE8 + 1) //
#define INT_READ_CODE10 (INT_READ_CODE9 + 1) //
#define INT_READ_CODE11 (INT_READ_CODE10 + 1) //
#define INT_READ_CODE12 (INT_READ_CODE11 + 1) //
#define INT_READ_CODE13 (INT_READ_CODE12 + 1) //
#define INT_READ_CODE14 (INT_READ_CODE13 + 1) //
#define INT_READ_CODE15 (INT_READ_CODE14 + 1)
#define INT_READ_CODE16 (INT_READ_CODE15 + 1)
#define INT_SAMPLING_BASE1 (INT_READ_CODE16 + 1 ) // 0x8310
#define INT_SAMPLING_BASE2 (INT_SAMPLING_BASE1 + 0x10)
#define INT_SAMPLING_DATA1 INT_SAMPLING_BASE1
#define INT_SAMPLING_DATA2 (INT_SAMPLING_DATA1+1)
#define INT_SAMPLING_DATA3 (INT_SAMPLING_DATA1+2)
#define INT_SAMPLING_DATA4 (INT_SAMPLING_DATA1+3)
#define INT_SAMPLING_DATA5 (INT_SAMPLING_DATA1+4)
#define INT_SAMPLING_DATA6 (INT_SAMPLING_DATA1+5)
#define INT_SAMPLING_DATA7 (INT_SAMPLING_DATA1+6)
#define INT_SAMPLING_DATA8 (INT_SAMPLING_DATA1+7)
#define INT_SAMPLING_DATA9 (INT_SAMPLING_DATA1+8)
#define INT_SAMPLING_DATA10 (INT_SAMPLING_DATA1+9)
#define INT_SAMPLING_DATA11 (INT_SAMPLING_DATA1+10)
#define INT_SAMPLING_DATA12 (INT_SAMPLING_DATA1+11)
#define INT_SAMPLING_DATA13 (INT_SAMPLING_DATA1+12)
#define INT_SAMPLING_DATA14 (INT_SAMPLING_DATA1+13)
#define INT_SAMPLING_DATA15 (INT_SAMPLING_DATA1+14)
#define INT_SAMPLING_DATA16 (INT_SAMPLING_DATA1+15)
#define INT_SAMPLING_DATA17 (INT_SAMPLING_DATA1+16)
#define INT_SAMPLING_DATA18 (INT_SAMPLING_DATA1+17)
#define INT_SAMPLING_DATA19 (INT_SAMPLING_DATA1+18)
#define INT_SAMPLING_DATA20 (INT_SAMPLING_DATA1+19)
#define INT_SAMPLING_DATA21 (INT_SAMPLING_DATA1+20)
#define INT_SAMPLING_DATA22 (INT_SAMPLING_DATA1+21)
#define INT_SAMPLING_DATA23 (INT_SAMPLING_DATA1+22)
#define INT_SAMPLING_DATA24 (INT_SAMPLING_DATA1+23)
#define INT_SAMPLING_DATA25 (INT_SAMPLING_DATA1+24)
#define INT_SAMPLING_DATA26 (INT_SAMPLING_DATA1+25)
#define INT_SAMPLING_DATA27 (INT_SAMPLING_DATA1+26)
#define INT_SAMPLING_DATA28 (INT_SAMPLING_DATA1+27)
#define INT_SAMPLING_DATA29 (INT_SAMPLING_DATA1+28)
#define INT_SAMPLING_DATA30 (INT_SAMPLING_DATA1+29)
#define INT_SAMPLING_DATA31 (INT_SAMPLING_DATA1+30)
#define INT_SAMPLING_DATA32 (INT_SAMPLING_DATA1+31)
#define INT_SAMPLING_MAX INT_SAMPLING_DATA32
#define SAMPLING_MAX (INT_SAMPLING_MAX - INT_SAMPLING_DATA1)
/*******************************************************************************/
// Variable Address 0x8400 // flowrate
// system complier infomation
// For System work state
#define INT_SYS_STATE 0x8400
#define INT_SYS_MODE 0x8401
#define INT_HARD_STATE 0x8402
#define INT_SWTICH_STATE 0x8403
#define INT_SYSTEM_VOLTAGE 0x8404
#define INT_PRODUCT_MODEL 0x8405// 06 07 08 09 0a // 0b 0c 0d 0e 0f
#define INT_BUILD_DATE 0x840B
#define INT_PGA_SCALE 0x8410 // PGA<47>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
#define INT_NC_8411 0x8411 // <20><><EFBFBD>߱궨ʱ<EAB6A8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
#define INT_FR_PPM 0x8412 // PPM
#define INT_STD_TA 0x8413 // <20><>׼<EFBFBD><EFBFBD> STD
#define INT_CODE_COEFF 0x8414 // TR<54><EFBFBD>ϵ<EFBFBD><CFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵ<EFBFBD><CFB5>
#define INT_TA_DELTA 0x8415 // MCU<43><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define INT_BL_FLOW 0x8416
#define INT_DOP_VALUE 0x8417 // <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INT_BPS 0x8419 // У׼ʱBPS
#define INT_DAC_ADJUST_OUT1 0x841A //
#define INT_DAC_ADJUST_OUT2 0x841B //
#define INT_DAC_ADJUST_OUT3 0x841C //
#define INT_DAC_ADJUST_OVER 0x841D //
#define INT_ZERO_CALIB_COUNTER 0x841E //
//==============================================================================
// fixed Read Address
#define INT_UPDATE_APP 0xDF00
#define INT_CALIB_1 0xE000
#define INT_CALIB_2 0xF000
//==============================================================================
#define WRITEKEY 0xAA55
#define INTCMD_NOP 0
#define INTCMD_CPOT_ADJUST (('C'<<8)+'P') //0x4350
#define INTCMD_APOT_ADJUST (('A'<<8)+'P') //0x4150
#define INTCMD_CTYPE_CURVE (('C'<<8)+'T') //0x4354
#define INTCMD_ATYPE_CURVE (('A'<<8)+'T') //0x4154
#define INTCMD_ATYPEFR_CURVE (('A'<<8)+'F') //0x4146
#define INTCMD_MICROFR_CURVE (('M'<<8)+'F') //0x4D46
#define INTCMD_DAC_CALIB (('D'<<8)+'P') //0x4450
#define INTCMD_1ST_TABLE (('N'<<8)+'1') //0x4E31
#define INTCMD_2ND_TABLE (('N'<<8)+'2') //0x4E32
#define INTCMD_USER_MODE (('U'<<8)+'R') //0x5552
#define INTCMD_CALIB_MODE (('C'<<8)+'L') //0x434C calibration mode
#define INTCMD_BATTERY_MODE (('B'<<8)+'T') //0x4254
#define INTCMD_GCF_TEST_MODE (('G'<<8)+'T') //0x4754
#define INTCMD_DEBUG_MODE (('D'<<8)+'B') //0x4442
#define INTCMD_SAVE_SETUP (('S'<<8)+'F') //0x5346 Save the factory setting
#define INTCMD_RESTORE (('R'<<8)+'F') //0x5246 Restore factory settings
#define INTCMD_RESET_CORR (('R'<<8)+'C') //0x5243 Restore
#define INTCMD_ZERO_CALIB_MODE (('Z'<<8)+'C') //0x5A43--23107
#define INTCMD_PRESET_OFFSET (('P'<<8)+'W') // 0x5057--20567
#define INTCMD_CALIB_HTEMP (('H'<<8)+'T') // 0x4854--18516
#define INTCMD_CALIB_LTEMP (('L'<<8)+'T') // 0x4c54--19540
#define INTCMD_PRESET_OFFSET_END (('P'<<8)+'D') //0x5044
#define INTCMD_CALIB_HTEMP_END (('H'<<8)+'D') //0x4844
#define INTCMD_CALIB_LTEMP_END (('L'<<8)+'D') //0x4C44
#define INTCMD_RECOGNITION_TABLE INTCMD_2ND_TABLE
#define INTCMD_TA_TABLE INTCMD_1ST_TABLE
#define INTCMD_ZERO_CALIB_HEX 0xC1
/****************************************************************************************************************************************/
//To Flash
#define INT_SN_BASE 0x8000 //6
#define INT_ALARMSTATE 0x8006 //4
#define INT_FLOWRATE 0x800A //2
//#define meterSN1 0x8000
//#define meterSN2 0x8001
//#define meterSN3 0x8002
//#define meterSN4 0x8003
//#define meterSN5 0x8004
//#define meterSN6 0x8005
//#define alarmState 0x8006
//#define alarmState1 0x8007
//#define alarmState2 0x8008
//#define alarmState3 0x8009
//#define flowRateH 0x800A
//#define flowRateL 0x800B
//#define flowAccumulationIntegerH 0x800C
//#define flowAccumulationIntegerL 0x800D
//#define flowAccumulationDecimal 0x800E
//#define PCBTemperature 0x800F
//#define GasTemperature 0x8010
////#define 0x8011
////#define 0x8012
////#define 0x8013
////#define 0x8014
//#define GASPressureH 0x8015
//#define GASPressureL 0x8016
//#define density 0x8017
//#define batteryCY 0x8018
//#define batteryVoltage 0x8019
//#define batteryDay 0x801A
//#define batteryRDay 0x801B
//#define ComBatteryCY 0x801C
//#define ComBatteryVoltage 0x801D
//#define ComBatteryDay 0x801E
//#define ComBatteryRDay 0x801F
//#define useMinte 0x8020
//#define useHourH 0x8021
//#define useHourL 0x8022
//#define VHHParameter 0x8023
////#define 0x8024
////#define 0x8025
//#define flowAccumulationHexH 0x8026
//#define flowAccumulationHexHM 0x8027
//#define flowAccumulationHexLM 0x8028
//#define flowAccumulationHexL 0x8029
////#define 0x802A
////#define 0x802B
////#define 0x802C
////#define 0x802D
////#define 0x802E
//#define densityFSParameter 0x802F
////#define 0x8030
////#define 0x8031
////#define 0x8032
////#define 0x8033
////#define 0x8034
////#define 0x8035
////#define 0x8036
////#define 0x8037
////#define 0x8038
////#define 0x8039
////#define 0x803A
////#define 0x803B
////#define 0x803C
////#define 0x803D
////#define 0x803E
////#define 0x803F
////#define 0x8040
////#define 0x8041
////#define 0x8042
////#define 0x8043
////#define 0x8044
////#define 0x8045
////#define 0x8046
////#define 0x8047
////#define 0x8048
////#define 0x8049
////#define 0x804A
////#define 0x804B
////#define 0x804C
////#define 0x804D
//#define softCRCCode 0x804E
//#define softVersion 0x804F
//#define protocol 0x8050
//#define localAddress 0x8051
//#define baudRate 0x8052
//#define minFlowRateH 0x8053
//#define minFlowRateL 0x8054
//#define maxFlowRateH 0x8055
//#define maxFlowRateL 0x8056
//#define minAnalogOutputH 0x8057
//#define minAnalogOutputL 0x8058
//#define maxAnalogOutputH 0x8059
//#define maxAnalogOutputL 0x805A
//#define GDCFactor 0x805B
//#define filterTime 0x805C
//#define responseTime 0x805D
//#define offsetGas 0x805E
//#define offsetGasA 0x805F
//#define flowUnit 0x8060
//#define VHHParameterAir 0x8061
//#define VHHParameterScale 0x8062
//#define factoryUnitPerPulse 0x8063
//#define PulseLevel 0x8064
//#define samplingTiming 0x8065
//#define alarmAccH 0x8066
//#define alarmAccL 0x8067
//#define alarmUpperFlowRateH 0x8068
//#define alarmUpperFlowRateL 0x8069
//#define alarmLowerFlowRateH 0x806A
//#define alarmLowerFlowRateL 0x806B
//#define alarmFunction 0x806C
//#define alarmOutDelay 0x806D
//#define uartDecimalPoint 0x806E
//#define historyPeriod 0x806F
//#define reverseFlowRateMinH 0x8070
//#define reverseFlowRateMinL 0x8071
//#define reverseFlowRateMaxH 0x8072
//#define reverseFlowRateMaxL 0x8073
//#define I2CAddr 0x8074
//#define I2CCrcMod 0x8075
//#define timingTxdStart 0x8076
//#define timingTxdLen 0x8077
//#define timingTxdTime 0x8078
//#define pressureOffset 0x8079
////#define 0x807A
////#define 0x807B
////#define 0x807C
////#define 0x807D
//#define keyPassWordH 0x807E
//#define keyPassWordL 0x807F
////#define 0x8080
////#define 0x8081
////#define 0x8082
////#define 0x8083
////#define 0x8084
////#define 0x8085
////#define 0x8086
////#define 0x8088
////#define 0x8088
////#define 0x8089
////#define 0x808A
////#define 0x808B
////#define 0x808C
////#define 0x808D
////#define 0x808E
////#define 0x808F
////#define 0x8090
////#define 0x8091
////#define 0x8092
////#define 0x8093
////#define 0x8094
////#define 0x8095
////#define 0x8099
////#define 0x8097
////#define 0x8098
////#define 0x8099
////#define 0x809A
////#define 0x809B
////#define 0x809C
////#define 0x809D
////#define 0x809E
////#define 0x809F
////#define 0x80A0
////#define 0x80A1
////#define 0x80A2
////#define 0x80A3
////#define 0x80A4
////#define 0x80A5
////#define 0x80A6
////#define 0x80A7
////#define 0x80A8
////#define 0x80A9
//#define minLeakFlowRate 0x80AA
//#define maxLeakFlowRate 0x80AB
//#define leakDetectTime 0x80AC
////#define 0x80AD
//#define GDCFactorAType 0x80AE
////#define 0x80AF
////#define 0x80B0
////#define 0x80B1
////#define 0x80B2
////#define 0x80B3
////#define 0x80B4
////#define 0x80B5
////#define 0x80B6
////#define 0x80BB
////#define 0x80B8
////#define 0x80B9
////#define 0x80BA
////#define 0x80BB
////#define 0x80BC
////#define 0x80BD
////#define 0x80BE
////#define 0x80BF
//#define CMDCalOffset 0x80C0
//#define CMDClrRecord 0x80C1
////#define 0x80C2
////#define 0x80C3
////#define 0x80C4
////#define 0x80C5
////#define 0x80C6
////#define 0x80C7
////#define 0x80C8
////#define 0x80C9
////#define 0x80CA
////#define 0x80CB
////#define 0x80CC
////#define 0x80CD
////#define 0x80CE
//#define CMDComPassword 0x80CF
//#define MAPPoint1 0x80D0
//#define MAPPoint2 0x80D1
//#define MAPPoint3 0x80D2
//#define MAPPoint4 0x80D3
//#define MAPPoint5 0x80D4
//#define MAPPoint6 0x80D5
//#define MAPPoint7 0x80D6
//#define MAPPoint8 0x80D7
//#define MAPPoint9 0x80D8
//#define MAPPoint10 0x80D9
//#define MAPPoint11 0x80DA
//#define MAPPoint12 0x80DB
//#define MAPPoint13 0x80DC
//#define MAPPoint14 0x80DD
//#define MAPPoint15 0x80DE
//#define MAPPoint16 0x80DF
//#define MAPPoint17 0x80E0
//#define MAPPoint18 0x80E1
//#define MAPPoint19 0x80E2
//#define MAPPoint20 0x80E3
//#define MAPPoint21 0x80E4
//#define MAPPoint22 0x80E5
//#define MAPPoint23 0x80E6
//#define MAPPoint24 0x80E7
//#define MAPPoint25 0x80E8
//#define MAPPoint26 0x80E9
//#define MAPPoint27 0x80EA
//#define MAPPoint28 0x80EB
//#define MAPPoint29 0x80EC
//#define MAPPoint30 0x80ED
//#define MAPPoint31 0x80EE
//#define MAPPoint32 0x80EF
//#define MAPPoint33 0x80F0
//#define MAPPoint34 0x80F1
//#define MAPPoint35 0x80F2
//#define MAPPoint36 0x80F3
//#define MAPPoint37 0x80F4
//#define MAPPoint38 0x80F5
//#define MAPPoint39 0x80F6
//#define MAPPoint40 0x80F7
//#define MAPPoint41 0x80F8
//#define MAPPoint42 0x80F9
//#define MAPPoint43 0x80FA
//#define MAPPoint44 0x80FB
//#define MAPPoint45 0x80FC
//#define MAPPoint46 0x80FD
//#define MAPPoint47 0x80FE
//#define MAPPoint48 0x80FF
#endif

View File

@@ -2,29 +2,32 @@
#define __InternalModbusDefine_h__
/******************************************************************************/
#define INT_METER_INFO 0x8000
#define INT_METER_CODE 0x8300
#define INT_METER_PARA 0x8200
#define INT_METER_SYS 0x8400
#define INT_METER_INFO 0x8000 // <20>DZ<EFBFBD><C7B1><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>ַ<EFBFBD><D6B7>
#define INT_METER_OPERATE 0x8200 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>
#define INT_METER_PARA 0x8210 // <20>ڲ<EFBFBD>16bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x8220-0x827F
#define INT_METER_DWORD_PARA 0x8280 // <20>ڲ<EFBFBD>32bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x8280-0x82FF
#define INT_METER_CODE 0x8300 // ʵʱ<CAB5><CAB1><EFBFBD>ݶ<EFBFBD>ȡ
#define INT_METER_SYS 0x8400 // ϵͳ״̬<D7B4><CCAC>ȡ
#define INT_METER_BASIC 0x8500
#define INT_METER_BASIC_MASK 0xff00
#define INT_METER_BASIC 0x8600 // <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>
#define INT_METER_BASIC_MASK 0xFF00
#define INT_METER_BASIC_MAX (INT_METER_BASIC + BASIC_DATA_MAX)
#define INT_METER_9000 0x9000
#define INT_METER_A000 0xA000
#define INT_METER_D000 0xD000
#define INT_METER_E000 0xE000
#define INT_METER_E000 0xE000 // У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INT_METER_F000 0xF000
#define INT_MASK 0xFF00
/******************************************************************************/
#define INT_METER_INFO_MAX (INT_METER_INFO+0x00ff)
#define INT_METER_PARA_MAX (INT_METER_PARA+0x00ff)
#define INT_METER_CODE_MAX (INT_METER_CODE+0x00ff)
#define INT_METER_SYS_MAX (INT_METER_SYS+0x00ff)
//#define INT_METER_85FF +0x00ff)
//#define INT_METER_86FF +0x00ff)
#define INT_METER_INFO_MAX 0x80FF // <20>DZ<EFBFBD><C7B1><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>ַ<EFBFBD><D6B7>
#define INT_METER_OPERATE_MAX 0x820F // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>
#define INT_METER_PARA_MAX 0x827F // <20>ڲ<EFBFBD>16bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x8220-0x827F
#define INT_METER_DWORD_PARA_MAX 0x82FF // <20>ڲ<EFBFBD>32bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x8290-0x82FF
#define INT_METER_OPERATE_MAX 0x82FF
#define INT_METER_CODE_MAX 0x8330 // ʵʱ<CAB5><CAB1><EFBFBD>ݶ<EFBFBD>ȡ
#define INT_METER_SYS_MAX 0x84FF // ϵͳ״̬<D7B4><CCAC>ȡ
/******************************************************************************/
// for factory control
@@ -82,6 +85,37 @@
#define INT_CURVE_NODE36 (INT_CURVE_BASE+105)
#define INT_CURVE_MAX (INT_CURVE_NODE1 + CURVE_DATA_MAX*3)
/*******************************************************************************/
// Variable Address 0x8100 // flowrate
// system complier infomation
// For System work state
#define INT_SYS_STATE 0x8400
#define INT_SYS_MODE 0x8401
#define INT_HARD_STATE 0x8402
#define INT_SWTICH_STATE 0x8403
#define INT_SYSTEM_VOLTAGE 0x8404
#define INT_PRODUCT_MODEL 0x8405 // 06 07 08 09 0a // 0b 0c 0d 0e 0f
#define INT_BUILD_DATE 0x840B // 0x840B 840C 840D 840E 840F
#define INT_NC_8411 0x8411 // <20><><EFBFBD>߱궨ʱ<EAB6A8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
#define INT_FR_PPM 0x8412 // PPM
#define INT_STD_TA 0x8413 // <20><>׼<EFBFBD><EFBFBD> STD
#define INT_CODE_COEFF 0x8414 // TR<54><EFBFBD>ϵ<EFBFBD><CFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵ<EFBFBD><CFB5>
#define INT_TA_DELTA 0x8415 // MCU<43><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define INT_BL_FLOW 0x8416
#define INT_DOP_VALUE 0x8417 // <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INT_BPS 0x8419 // У׼ʱBPS
#define INT_DAC_ADJUST_OUT1 0x841A //
#define INT_DAC_ADJUST_OUT2 0x841B //
#define INT_DAC_ADJUST_OUT3 0x841C //
#define INT_DAC_ADJUST_OVER 0x841D //
#define INT_ZERO_CALIB_COUNTER 0x841E //
/*******************************************************************************/
// FIX Address 0x8400 // flowrate
// system complier infomation
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INT_FIX_INFO_MAX 0x8200
#define INT_REG_BASE 0x8200
// fixed Read Address
@@ -98,84 +132,16 @@
#define INT_CALIB_DEPTH 0x820B // 2Byte [Disable Write]
#define INT_CALIB_WIDTH 0x820C // 2Byte [Disable Write]
// Variable Address
#define INT_COMMAND 0x820D //internal control start address [Disable Read]
#define INT_COMMAND 0x820D // internal control start address [Disable Read]
#define INT_CONTROL 0x820D // mode control:9d 45, 9D 00, 55 [Disable Read]
#define INT_CLEAR_RECORD 0x820E // clear data record: [Disable Read]
#define INT_TEST_OFFSET 0x820F // [Disable Read]
// parameter Address
// parameter Address [16 bit] 0x8210 - 0x827F
#define INT_PARAMETER 0x8210 // internal parameter write and read address start
#define INT_PROTOCOL 0x8210 // MODBUS Slaver Addr
#define INT_SLAVER_ADDR 0x8211 // MODBUS Slaver Addr
#define INT_METER_FACTOR 0x8212
#define INT_GDCF 0x8213
#define INT_MAX_FLOW 0x8214
#define INT_OFFSET_GAS 0x8216
#define INT_OFFSET_AIR 0x8217
#define INT_SAMPLE_PERIOD 0x8218
#define INT_HISTORY_PERIOD 0x8219
#define INT_PULSE_UNIT 0x821A
//#define INT_MAX_LOOP_FR 0x821B
#define INT_SENSOR_SN 0x821D // 0x821D/0x821E/0x821F
#define INT_TOTAL_ACC 0x8220 // 0x8220-0x8225
#define INT_CALIB_TA 0x8226 // 0x8226
#define INT_OFFSET_A_GAS 0x8227
#define INT_OFFSET_A_AIR 0x8228
#define INT_ATYPE_INDEX_GAIN 0x8229
#define INT_GDCF_ATYPE 0x822A
#define INT_GDCF_CTYPE 0x822B
#define INT_CALIB_PIPE 0x822C
#define INT_WORK_PIPE 0x822D
#define INT_WORK_UNIT 0x822E
#define INT_DIS_LANGUAGE 0x822F
#define INT_ACC_OUT_BIT 0x8230
#define INT_REVERSE_SCALE 0x8231
#define INT_VHH_HIGH 0x8232
#define INT_VHH_ROOM 0x8233
#define INT_VHH_LOW 0x8234
#define INT_NRH_HIGH 0x8235
#define INT_NRH_ROOM 0x8236
#define INT_NRH_LOW 0x8237
#define INT_NRR_HIGH 0x8238
#define INT_NRR_ROOM 0x8239
#define INT_NRR_LOW 0x823A
#define INT_GCF_A 0x823B
#define INT_GCF_B 0x823D
#define INT_GCF_C 0x823E
#define INT_RH_GAINRES 0x8240
#define INT_ZERO_SUPPRESSION 0x8244
#define INT_STATIC_LOW_TA 0x8245
#define INT_STATIC_HIGH_TA 0x8246
#define INT_PULSE_COUNTER 0x8247 // byte = 4
#define INT_ATYPE_RC 0x8249 //
#define INT_ATYPE_WIPER 0x824A //
#define INT_CTYPE_WIPER 0x824B //
#define INT_CTYPE_ADC 0x824C //
#define INT_OFFSET_HIGH 0x824D //
#define INT_OFFSET_LOW 0x824E //
#define INT_TRH_HIGH 0x824F //
#define INT_TRH_LOW 0x8250 //
#define INT_MEMS_RATIO 0x8251 //
#define INT_SYS_LCD 0x8252 //
#define INT_SYS_CHIP 0x8253 //
#define INT_TEMP_CORR 0x8254 //
#define INT_OFFSET_VDUGX_GAS 0x8255
#define INT_OFFSET_VDUGX_AIR 0x8256
#define INT_OFFSET_RGINX 0x8257
#define INT_NRH_P50 0x8258
#define INT_NRH_P0 0x8259
#define INT_ADC_GAIN 0x825A
#define INT_RES_FACTOR 0x825B
#define INT_BATTEST_PERIOD 0x825C
#define INT_FR_SWITCH_POINT 0x825D
#define INT_CALIB_FR_GAIN 0x825F // У׼<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
#define INT_AUTO_CALIB_ATYPE 0x8260
#define INT_USER_INIT_INDEX 0x8261
#define INT_DIVHX_HIGH 0x8262
#define INT_DIVHX_ROOM 0x8263
#define INT_DIVHX_LOW 0x8264
#define INT_VDUGX_HIGH 0x8265
#define INT_VDUGX_ROOM 0x8266
#define INT_VDUGX_LOW 0x8267
// parameter Address [32 bit] 0x8290
//==============================================================================
// Variable Address(read:MAX 8 Line)
@@ -236,31 +202,6 @@
#define SAMPLING_MAX (INT_SAMPLING_MAX - INT_SAMPLING_DATA1)
/*******************************************************************************/
// Variable Address 0x8400 // flowrate
// system complier infomation
// For System work state
#define INT_SYS_STATE 0x8400
#define INT_SYS_MODE 0x8401
#define INT_HARD_STATE 0x8402
#define INT_SWTICH_STATE 0x8403
#define INT_SYSTEM_VOLTAGE 0x8404
#define INT_PRODUCT_MODEL 0x8405// 06 07 08 09 0a // 0b 0c 0d 0e 0f
#define INT_BUILD_DATE 0x840B
#define INT_PGA_SCALE 0x8410 // PGA<47>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
#define INT_NC_8411 0x8411 // <20><><EFBFBD>߱궨ʱ<EAB6A8>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
#define INT_FR_PPM 0x8412 // PPM
#define INT_STD_TA 0x8413 // <20><>׼<EFBFBD><EFBFBD> STD
#define INT_CODE_COEFF 0x8414 // TR<54><EFBFBD>ϵ<EFBFBD><CFB5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ϵ<EFBFBD><CFB5>
#define INT_TA_DELTA 0x8415 // MCU<43><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define INT_BL_FLOW 0x8416
#define INT_DOP_VALUE 0x8417 // <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INT_BPS 0x8419 // У׼ʱBPS
#define INT_DAC_ADJUST_OUT1 0x841A //
#define INT_DAC_ADJUST_OUT2 0x841B //
#define INT_DAC_ADJUST_OUT3 0x841C //
#define INT_DAC_ADJUST_OVER 0x841D //
#define INT_ZERO_CALIB_COUNTER 0x841E //
//==============================================================================
// fixed Read Address
#define INT_UPDATE_APP 0xDF00
@@ -298,278 +239,308 @@
#define INTCMD_PRESET_OFFSET_END (('P'<<8)+'D') //0x5044
#define INTCMD_CALIB_HTEMP_END (('H'<<8)+'D') //0x4844
#define INTCMD_CALIB_LTEMP_END (('L'<<8)+'D') //0x4C44
#define INTCMD_CALIB_TEMP_END (('H'<<8)+'L') //
#define INTCMD_RECOGNITION_TABLE INTCMD_2ND_TABLE
#define INTCMD_TA_TABLE INTCMD_1ST_TABLE
#define INTCMD_ZERO_CALIB_HEX 0xC1
/****************************************************************************************************************************************/
/***********************************************************************************************/
//To Flash
#define INT_SN_BASE 0x8000 //6
#define INT_ALARMSTATE 0x8006 //4
#define INT_FLOWRATE 0x800A //2
#define INT_SN_BASE 0x8000 //6
#define INT_ALARMSTATE 0x8006 //4
#define INT_FLOWRATE 0x800A //2
/***********************************************************************************************/
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB6A8>
#define REG_WORD_START 0x8210
#define REG_0X8210 (0x8210 - REG_WORD_START)
#define REG_0X8211 (0x8211 - REG_WORD_START)
#define REG_0X8212 (0x8212 - REG_WORD_START)
#define REG_0X8213 (0x8213 - REG_WORD_START)
#define REG_0X8214 (0x8214 - REG_WORD_START)
#define REG_0X8215 (0x8215 - REG_WORD_START)
#define REG_0X8216 (0x8216 - REG_WORD_START)
#define REG_0X8217 (0x8217 - REG_WORD_START)
#define REG_0X8218 (0x8218 - REG_WORD_START)
#define REG_0X8219 (0x8219 - REG_WORD_START)
#define REG_0X821A (0x821A - REG_WORD_START)
#define REG_0X821B (0x821B - REG_WORD_START)
#define REG_0X821C (0x821C - REG_WORD_START)
#define REG_0X821D (0x821D - REG_WORD_START)
#define REG_0X821E (0x821E - REG_WORD_START)
#define REG_0X821F (0x821F - REG_WORD_START)
#define REG_0X8220 (0x8220 - REG_WORD_START)
#define REG_0X8221 (0x8221 - REG_WORD_START)
#define REG_0X8222 (0x8222 - REG_WORD_START)
#define REG_0X8223 (0x8223 - REG_WORD_START)
#define REG_0X8224 (0x8224 - REG_WORD_START)
#define REG_0X8225 (0x8225 - REG_WORD_START)
#define REG_0X8226 (0x8226 - REG_WORD_START)
#define REG_0X8227 (0x8227 - REG_WORD_START)
#define REG_0X8228 (0x8228 - REG_WORD_START)
#define REG_0X8229 (0x8229 - REG_WORD_START)
#define REG_0X822A (0x822A - REG_WORD_START)
#define REG_0X822B (0x822B - REG_WORD_START)
#define REG_0X822C (0x822C - REG_WORD_START)
#define REG_0X822D (0x822D - REG_WORD_START)
#define REG_0X822E (0x822E - REG_WORD_START)
#define REG_0X822F (0x822F - REG_WORD_START)
#define REG_0X8230 (0x8230 - REG_WORD_START)
#define REG_0X8231 (0x8231 - REG_WORD_START)
#define REG_0X8232 (0x8232 - REG_WORD_START)
#define REG_0X8233 (0x8233 - REG_WORD_START)
#define REG_0X8234 (0x8234 - REG_WORD_START)
#define REG_0X8235 (0x8235 - REG_WORD_START)
#define REG_0X8236 (0x8236 - REG_WORD_START)
#define REG_0X8237 (0x8237 - REG_WORD_START)
#define REG_0X8238 (0x8238 - REG_WORD_START)
#define REG_0X8239 (0x8239 - REG_WORD_START)
#define REG_0X823A (0x823A - REG_WORD_START)
#define REG_0X823B (0x823B - REG_WORD_START)
#define REG_0X823C (0x823C - REG_WORD_START)
#define REG_0X823D (0x823D - REG_WORD_START)
#define REG_0X823E (0x823E - REG_WORD_START)
#define REG_0X823F (0x823F - REG_WORD_START)
#define REG_0X8240 (0x8240 - REG_WORD_START)
#define REG_0X8241 (0x8241 - REG_WORD_START)
#define REG_0X8242 (0x8242 - REG_WORD_START)
#define REG_0X8243 (0x8243 - REG_WORD_START)
#define REG_0X8244 (0x8244 - REG_WORD_START)
#define REG_0X8245 (0x8245 - REG_WORD_START)
#define REG_0X8246 (0x8246 - REG_WORD_START)
#define REG_0X8247 (0x8247 - REG_WORD_START)
#define REG_0X8248 (0x8248 - REG_WORD_START)
#define REG_0X8249 (0x8249 - REG_WORD_START)
#define REG_0X824A (0x824A - REG_WORD_START)
#define REG_0X824B (0x824B - REG_WORD_START)
#define REG_0X824C (0x824C - REG_WORD_START)
#define REG_0X824D (0x824D - REG_WORD_START)
#define REG_0X824E (0x824E - REG_WORD_START)
#define REG_0X824F (0x824F - REG_WORD_START)
#define REG_0X8250 (0x8250 - REG_WORD_START)
#define REG_0X8251 (0x8251 - REG_WORD_START)
#define REG_0X8252 (0x8252 - REG_WORD_START)
#define REG_0X8253 (0x8253 - REG_WORD_START)
#define REG_0X8254 (0x8254 - REG_WORD_START)
#define REG_0X8255 (0x8255 - REG_WORD_START)
#define REG_0X8256 (0x8256 - REG_WORD_START)
#define REG_0X8257 (0x8257 - REG_WORD_START)
#define REG_0X8258 (0x8258 - REG_WORD_START)
#define REG_0X8259 (0x8259 - REG_WORD_START)
#define REG_0X825A (0x825A - REG_WORD_START)
#define REG_0X825B (0x825B - REG_WORD_START)
#define REG_0X825C (0x825C - REG_WORD_START)
#define REG_0X825D (0x825D - REG_WORD_START)
#define REG_0X825E (0x825E - REG_WORD_START)
#define REG_0X825F (0x825F - REG_WORD_START)
#define REG_0X8260 (0x8260 - REG_WORD_START)
#define REG_0X8261 (0x8261 - REG_WORD_START)
#define REG_0X8262 (0x8262 - REG_WORD_START)
#define REG_0X8263 (0x8263 - REG_WORD_START)
#define REG_0X8264 (0x8264 - REG_WORD_START)
#define REG_0X8265 (0x8265 - REG_WORD_START)
#define REG_0X8266 (0x8266 - REG_WORD_START)
#define REG_0X8267 (0x8267 - REG_WORD_START)
#define REG_0X8268 (0x8268 - REG_WORD_START)
#define REG_0X8269 (0x8269 - REG_WORD_START)
#define REG_0X826A (0x826A - REG_WORD_START)
#define REG_0X826B (0x826B - REG_WORD_START)
#define REG_0X826C (0x826C - REG_WORD_START)
#define REG_0X826D (0x826D - REG_WORD_START)
#define REG_0X826E (0x826E - REG_WORD_START)
#define REG_0X826F (0x826F - REG_WORD_START)
#define REG_0X8270 (0x8270 - REG_WORD_START)
#define REG_0X8271 (0x8271 - REG_WORD_START)
#define REG_0X8272 (0x8272 - REG_WORD_START)
#define REG_0X8273 (0x8273 - REG_WORD_START)
#define REG_0X8274 (0x8274 - REG_WORD_START)
#define REG_0X8275 (0x8275 - REG_WORD_START)
#define REG_0X8276 (0x8276 - REG_WORD_START)
#define REG_0X8277 (0x8277 - REG_WORD_START)
#define REG_0X8278 (0x8278 - REG_WORD_START)
#define REG_0X8279 (0x8279 - REG_WORD_START)
#define REG_0X827A (0x827A - REG_WORD_START)
#define REG_0X827B (0x827B - REG_WORD_START)
#define REG_0X827C (0x827C - REG_WORD_START)
#define REG_0X827D (0x827D - REG_WORD_START)
#define REG_0X827E (0x827E - REG_WORD_START)
#define REG_0X827F (0x827F - REG_WORD_START)
#define WORD_INX_MAX (REG_0X827F + 1)
#define REG_DWORD_START 0X8280
#define REG_0X8280 (0X8280 - REG_DWORD_START)
#define REG_0X8282 (0X8282 - REG_DWORD_START)
#define REG_0X8284 (0X8284 - REG_DWORD_START)
#define REG_0X8286 (0X8286 - REG_DWORD_START)
#define REG_0X8288 (0X8288 - REG_DWORD_START)
#define REG_0X828A (0X828A - REG_DWORD_START)
#define REG_0X828C (0X828C - REG_DWORD_START)
#define REG_0X828E (0X828E - REG_DWORD_START)
#define REG_0X8290 (0X8290 - REG_DWORD_START)
#define REG_0X8292 (0X8292 - REG_DWORD_START)
#define REG_0X8294 (0X8294 - REG_DWORD_START)
#define REG_0X8296 (0X8296 - REG_DWORD_START)
#define REG_0X8298 (0X8298 - REG_DWORD_START)
#define REG_0X829A (0X829A - REG_DWORD_START)
#define REG_0X829C (0X828C - REG_DWORD_START)
#define REG_0X829E (0X828E - REG_DWORD_START)
#define DWORD_INX_MAX (REG_0X829E+1)
//#define meterSN1 0x8000
//#define meterSN2 0x8001
//#define meterSN3 0x8002
//#define meterSN4 0x8003
//#define meterSN5 0x8004
//#define meterSN6 0x8005
//#define alarmState 0x8006
//#define alarmState1 0x8007
//#define alarmState2 0x8008
//#define alarmState3 0x8009
//#define flowRateH 0x800A
//#define flowRateL 0x800B
//#define flowAccumulationIntegerH 0x800C
//#define flowAccumulationIntegerL 0x800D
//#define flowAccumulationDecimal 0x800E
//#define PCBTemperature 0x800F
//#define GasTemperature 0x8010
////#define 0x8011
////#define 0x8012
////#define 0x8013
////#define 0x8014
//#define GASPressureH 0x8015
//#define GASPressureL 0x8016
//#define density 0x8017
//#define batteryCY 0x8018
//#define batteryVoltage 0x8019
//#define batteryDay 0x801A
//#define batteryRDay 0x801B
//#define ComBatteryCY 0x801C
//#define ComBatteryVoltage 0x801D
//#define ComBatteryDay 0x801E
//#define ComBatteryRDay 0x801F
//#define useMinte 0x8020
//#define useHourH 0x8021
//#define useHourL 0x8022
//#define VHHParameter 0x8023
////#define 0x8024
////#define 0x8025
//#define flowAccumulationHexH 0x8026
//#define flowAccumulationHexHM 0x8027
//#define flowAccumulationHexLM 0x8028
//#define flowAccumulationHexL 0x8029
////#define 0x802A
////#define 0x802B
////#define 0x802C
////#define 0x802D
////#define 0x802E
//#define densityFSParameter 0x802F
////#define 0x8030
////#define 0x8031
////#define 0x8032
////#define 0x8033
////#define 0x8034
////#define 0x8035
////#define 0x8036
////#define 0x8037
////#define 0x8038
////#define 0x8039
////#define 0x803A
////#define 0x803B
////#define 0x803C
////#define 0x803D
////#define 0x803E
////#define 0x803F
////#define 0x8040
////#define 0x8041
////#define 0x8042
////#define 0x8043
////#define 0x8044
////#define 0x8045
////#define 0x8046
////#define 0x8047
////#define 0x8048
////#define 0x8049
////#define 0x804A
////#define 0x804B
////#define 0x804C
////#define 0x804D
//#define softCRCCode 0x804E
//#define softVersion 0x804F
//#define protocol 0x8050
//#define localAddress 0x8051
//#define baudRate 0x8052
//#define minFlowRateH 0x8053
//#define minFlowRateL 0x8054
//#define maxFlowRateH 0x8055
//#define maxFlowRateL 0x8056
//#define minAnalogOutputH 0x8057
//#define minAnalogOutputL 0x8058
//#define maxAnalogOutputH 0x8059
//#define maxAnalogOutputL 0x805A
//#define GDCFactor 0x805B
//#define filterTime 0x805C
//#define responseTime 0x805D
//#define offsetGas 0x805E
//#define offsetGasA 0x805F
//#define flowUnit 0x8060
//#define VHHParameterAir 0x8061
//#define VHHParameterScale 0x8062
//#define factoryUnitPerPulse 0x8063
//#define PulseLevel 0x8064
//#define samplingTiming 0x8065
//#define alarmAccH 0x8066
//#define alarmAccL 0x8067
//#define alarmUpperFlowRateH 0x8068
//#define alarmUpperFlowRateL 0x8069
//#define alarmLowerFlowRateH 0x806A
//#define alarmLowerFlowRateL 0x806B
//#define alarmFunction 0x806C
//#define alarmOutDelay 0x806D
//#define uartDecimalPoint 0x806E
//#define historyPeriod 0x806F
//#define reverseFlowRateMinH 0x8070
//#define reverseFlowRateMinL 0x8071
//#define reverseFlowRateMaxH 0x8072
//#define reverseFlowRateMaxL 0x8073
//#define I2CAddr 0x8074
//#define I2CCrcMod 0x8075
//#define timingTxdStart 0x8076
//#define timingTxdLen 0x8077
//#define timingTxdTime 0x8078
//#define pressureOffset 0x8079
////#define 0x807A
////#define 0x807B
////#define 0x807C
////#define 0x807D
//#define keyPassWordH 0x807E
//#define keyPassWordL 0x807F
////#define 0x8080
////#define 0x8081
////#define 0x8082
////#define 0x8083
////#define 0x8084
////#define 0x8085
////#define 0x8086
////#define 0x8088
////#define 0x8088
////#define 0x8089
////#define 0x808A
////#define 0x808B
////#define 0x808C
////#define 0x808D
////#define 0x808E
////#define 0x808F
////#define 0x8090
////#define 0x8091
////#define 0x8092
////#define 0x8093
////#define 0x8094
////#define 0x8095
////#define 0x8099
////#define 0x8097
////#define 0x8098
////#define 0x8099
////#define 0x809A
////#define 0x809B
////#define 0x809C
////#define 0x809D
////#define 0x809E
////#define 0x809F
////#define 0x80A0
////#define 0x80A1
////#define 0x80A2
////#define 0x80A3
////#define 0x80A4
////#define 0x80A5
////#define 0x80A6
////#define 0x80A7
////#define 0x80A8
////#define 0x80A9
//#define minLeakFlowRate 0x80AA
//#define maxLeakFlowRate 0x80AB
//#define leakDetectTime 0x80AC
////#define 0x80AD
//#define GDCFactorAType 0x80AE
////#define 0x80AF
////#define 0x80B0
////#define 0x80B1
////#define 0x80B2
////#define 0x80B3
////#define 0x80B4
////#define 0x80B5
////#define 0x80B6
////#define 0x80BB
////#define 0x80B8
////#define 0x80B9
////#define 0x80BA
////#define 0x80BB
////#define 0x80BC
////#define 0x80BD
////#define 0x80BE
////#define 0x80BF
//#define CMDCalOffset 0x80C0
//#define CMDClrRecord 0x80C1
////#define 0x80C2
////#define 0x80C3
////#define 0x80C4
////#define 0x80C5
////#define 0x80C6
////#define 0x80C7
////#define 0x80C8
////#define 0x80C9
////#define 0x80CA
////#define 0x80CB
////#define 0x80CC
////#define 0x80CD
////#define 0x80CE
//#define CMDComPassword 0x80CF
//#define MAPPoint1 0x80D0
//#define MAPPoint2 0x80D1
//#define MAPPoint3 0x80D2
//#define MAPPoint4 0x80D3
//#define MAPPoint5 0x80D4
//#define MAPPoint6 0x80D5
//#define MAPPoint7 0x80D6
//#define MAPPoint8 0x80D7
//#define MAPPoint9 0x80D8
//#define MAPPoint10 0x80D9
//#define MAPPoint11 0x80DA
//#define MAPPoint12 0x80DB
//#define MAPPoint13 0x80DC
//#define MAPPoint14 0x80DD
//#define MAPPoint15 0x80DE
//#define MAPPoint16 0x80DF
//#define MAPPoint17 0x80E0
//#define MAPPoint18 0x80E1
//#define MAPPoint19 0x80E2
//#define MAPPoint20 0x80E3
//#define MAPPoint21 0x80E4
//#define MAPPoint22 0x80E5
//#define MAPPoint23 0x80E6
//#define MAPPoint24 0x80E7
//#define MAPPoint25 0x80E8
//#define MAPPoint26 0x80E9
//#define MAPPoint27 0x80EA
//#define MAPPoint28 0x80EB
//#define MAPPoint29 0x80EC
//#define MAPPoint30 0x80ED
//#define MAPPoint31 0x80EE
//#define MAPPoint32 0x80EF
//#define MAPPoint33 0x80F0
//#define MAPPoint34 0x80F1
//#define MAPPoint35 0x80F2
//#define MAPPoint36 0x80F3
//#define MAPPoint37 0x80F4
//#define MAPPoint38 0x80F5
//#define MAPPoint39 0x80F6
//#define MAPPoint40 0x80F7
//#define MAPPoint41 0x80F8
//#define MAPPoint42 0x80F9
//#define MAPPoint43 0x80FA
//#define MAPPoint44 0x80FB
//#define MAPPoint45 0x80FC
//#define MAPPoint46 0x80FD
//#define MAPPoint47 0x80FE
//#define MAPPoint48 0x80FF
//MAX MIN DEFAULT
#define INT_WORD_REG_MAX 112
#define REG_0X8200_VALUE {65535,0,0}
#define REG_0X8201_VALUE {65535,0,0}
#define REG_0X8202_VALUE {65535,0,0}
#define REG_0X8203_VALUE {65535,0,0}
#define REG_0X8204_VALUE {65535,0,0}
#define REG_0X8205_VALUE {65535,0,0}
#define REG_0X8206_VALUE {65535,0,0}
#define REG_0X8207_VALUE {65535,0,0}
#define REG_0X8208_VALUE {65535,0,0}
#define REG_0X8209_VALUE {65535,0,0}
#define REG_0X820A_VALUE {65535,0,0}
#define REG_0X820B_VALUE {65535,0,0}
#define REG_0X820C_VALUE {65535,0,0}
#define REG_0X820D_VALUE {65535,0,0}
#define REG_0X820E_VALUE {65535,0,0}
#define REG_0X820F_VALUE {65535,0,0}
#define REG_0X8210_VALUE {65535,0,0}
#define REG_0X8211_VALUE {65535,0,0}
#define REG_0X8212_VALUE {65535,0,0}
#define REG_0X8213_VALUE {65535,0,0}
#define REG_0X8214_VALUE {65535,0,0}
#define REG_0X8215_VALUE {65535,0,0}
#define REG_0X8216_VALUE {65535,0,0}
#define REG_0X8217_VALUE {65535,0,0}
#define REG_0X8218_VALUE {65535,0,0}
#define REG_0X8219_VALUE {65535,0,0}
#define REG_0X821A_VALUE {65535,0,0}
#define REG_0X821B_VALUE {65535,0,0}
#define REG_0X821C_VALUE {65535,0,0}
#define REG_0X821D_VALUE {65535,0,0}
#define REG_0X821E_VALUE {65535,0,0}
#define REG_0X821F_VALUE {65535,0,0}
#define REG_0X8220_VALUE {65535,0,0}
#define REG_0X8221_VALUE {65535,0,0}
#define REG_0X8222_VALUE {65535,0,0}
#define REG_0X8223_VALUE {65535,0,0}
#define REG_0X8224_VALUE {65535,0,0}
#define REG_0X8225_VALUE {65535,0,0}
#define REG_0X8226_VALUE {65535,0,0}
#define REG_0X8227_VALUE {65535,0,0}
#define REG_0X8228_VALUE {65535,0,0}
#define REG_0X8229_VALUE {65535,0,0}
#define REG_0X822A_VALUE {65535,0,0}
#define REG_0X822B_VALUE {65535,0,0}
#define REG_0X822C_VALUE {65535,0,0}
#define REG_0X822D_VALUE {65535,0,0}
#define REG_0X822E_VALUE {65535,0,0}
#define REG_0X822F_VALUE {65535,0,0}
#define REG_0X8230_VALUE {65535,0,0}
#define REG_0X8231_VALUE {65535,0,0}
#define REG_0X8232_VALUE {65535,0,0}
#define REG_0X8233_VALUE {65535,0,0}
#define REG_0X8234_VALUE {65535,0,0}
#define REG_0X8235_VALUE {65535,0,0}
#define REG_0X8236_VALUE {65535,0,0}
#define REG_0X8237_VALUE {65535,0,0}
#define REG_0X8238_VALUE {65535,0,0}
#define REG_0X8239_VALUE {65535,0,0}
#define REG_0X823A_VALUE {65535,0,0}
#define REG_0X823B_VALUE {65535,0,0}
#define REG_0X823C_VALUE {65535,0,0}
#define REG_0X823D_VALUE {65535,0,0}
#define REG_0X823E_VALUE {65535,0,0}
#define REG_0X823F_VALUE {65535,0,0}
#define REG_0X8240_VALUE {65535,0,0}
#define REG_0X8241_VALUE {65535,0,0}
#define REG_0X8242_VALUE {65535,0,0}
#define REG_0X8243_VALUE {65535,0,0}
#define REG_0X8244_VALUE {65535,0,0}
#define REG_0X8245_VALUE {65535,0,0}
#define REG_0X8246_VALUE {65535,0,0}
#define REG_0X8247_VALUE {65535,0,0}
#define REG_0X8248_VALUE {65535,0,0}
#define REG_0X8249_VALUE {65535,0,0}
#define REG_0X824A_VALUE {65535,0,0}
#define REG_0X824B_VALUE {65535,0,0}
#define REG_0X824C_VALUE {65535,0,0}
#define REG_0X824D_VALUE {65535,0,0}
#define REG_0X824E_VALUE {65535,0,0}
#define REG_0X824F_VALUE {65535,0,0}
#define REG_0X8250_VALUE {65535,0,0}
#define REG_0X8251_VALUE {65535,0,0}
#define REG_0X8252_VALUE {65535,0,0}
#define REG_0X8253_VALUE {65535,0,0}
#define REG_0X8254_VALUE {65535,0,0}
#define REG_0X8255_VALUE {65535,0,0}
#define REG_0X8256_VALUE {65535,0,0}
#define REG_0X8257_VALUE {65535,0,0}
#define REG_0X8258_VALUE {65535,0,0}
#define REG_0X8259_VALUE {65535,0,0}
#define REG_0X825A_VALUE {65535,0,0}
#define REG_0X825B_VALUE {65535,0,0}
#define REG_0X825C_VALUE {65535,0,0}
#define REG_0X825D_VALUE {65535,0,0}
#define REG_0X825E_VALUE {65535,0,0}
#define REG_0X825F_VALUE {65535,0,0}
#define REG_0X8260_VALUE {65535,0,0}
#define REG_0X8261_VALUE {65535,0,0}
#define REG_0X8262_VALUE {65535,0,0}
#define REG_0X8263_VALUE {65535,0,0}
#define REG_0X8264_VALUE {65535,0,0}
#define REG_0X8265_VALUE {65535,0,0}
#define REG_0X8266_VALUE {65535,0,0}
#define REG_0X8267_VALUE {65535,0,0}
#define REG_0X8268_VALUE {65535,0,0}
#define REG_0X8269_VALUE {65535,0,0}
#define REG_0X826A_VALUE {65535,0,0}
#define REG_0X826B_VALUE {65535,0,0}
#define REG_0X826C_VALUE {65535,0,0}
#define REG_0X826D_VALUE {65535,0,0}
#define REG_0X826E_VALUE {65535,0,0}
#define REG_0X826F_VALUE {65535,0,0}
#define REG_0X8270_VALUE {65535,0,0}
#define REG_0X8271_VALUE {65535,0,0}
#define REG_0X8272_VALUE {65535,0,0}
#define REG_0X8273_VALUE {65535,0,0}
#define REG_0X8274_VALUE {65535,0,0}
#define REG_0X8275_VALUE {65535,0,0}
#define REG_0X8276_VALUE {65535,0,0}
#define REG_0X8277_VALUE {65535,0,0}
#define REG_0X8278_VALUE {65535,0,0}
#define REG_0X8279_VALUE {65535,0,0}
#define REG_0X827A_VALUE {65535,0,0}
#define REG_0X827B_VALUE {65535,0,0}
#define REG_0X827C_VALUE {65535,0,0}
#define REG_0X827D_VALUE {65535,0,0}
#define REG_0X827E_VALUE {65535,0,0}
#define REG_0X827F_VALUE {65535,0,0}
#define INT_DWORD_REG_MAX 16
#define REG_0X8280_VALUE {65535,0,0}
#define REG_0X8282_VALUE {65535,0,0}
#define REG_0X8284_VALUE {65535,0,0}
#define REG_0X8286_VALUE {65535,0,0}
#define REG_0X8288_VALUE {65535,0,0}
#define REG_0X828A_VALUE {65535,0,0}
#define REG_0X828C_VALUE {65535,0,0}
#define REG_0X828E_VALUE {65535,0,0}
#define REG_0X8290_VALUE {65535,0,0}
#define REG_0X8292_VALUE {65535,0,0}
#define REG_0X8294_VALUE {65535,0,0}
#define REG_0X8296_VALUE {65535,0,0}
#define REG_0X8298_VALUE {65535,0,0}
#define REG_0X829A_VALUE {65535,0,0}
#define REG_0X829C_VALUE {65535,0,0}
#define REG_0X829E_VALUE {65535,0,0}
#endif

View File

@@ -49,18 +49,16 @@ void ModBusErrorInfo(u8 ErrorCode)
void ModBusReadMultiByte(void)
{
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserReadDataProtocol();
else InternalReadParameterProtocolInFlash();//InternalReadParameterProtocolInFlash InternalReadParameterProtocol
else InternalReadParameterProtocol();
}
/******************************************************************************/
void ModBusWriteMultiByte(void)
{
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserWriteDataProtocol();
else InternalWriteParameterProtocolToFlash();//InternalWriteParameterProtocol(); InternalWriteParameterProtocol_withflash
else InternalWriteParameterProtocol();
}
/******************************************************************************/
//ModBus<75><73><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
void ModBusDataProcessing(void)
@@ -72,20 +70,24 @@ void ModBusDataProcessing(void)
MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.ByteNumber = ((u16)MBBuf.RxPointer[4] << 8) | (u16)MBBuf.RxPointer[5];
if(MBBuf.ByteNumber > ENABLE_REG_MAX) { MBBuf.BusError = SLAVE_DEVICE_FAILURE; break; }
if(MBBuf.ByteNumber > ENABLE_REG_MAX) {
MBBuf.BusError = SLAVE_DEVICE_FAILURE;
break;
}
MBBuf.ByteNumber <<= 1;
MBBuf.TxdLen = MBBuf.ByteNumber;
MBBuf.TxdLen = MBBuf.ByteNumber;
MBBuf.RxPointer[2] = MBBuf.TxdLen;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ֽ<EFBFBD><D6BD><EFBFBD>
MBBuf.TxdLen += 4;
MBBuf.Index = 3;
MBBuf.TxdLen += 4;
MBBuf.Index = 3;
ModBusReadMultiByte();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case PRESET_SINGLE_REGISTER: //0x06 дԤ<D0B4>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>---------------------------------------------
MBBuf.StartAddr = MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.EndAddr = MBBuf.StartAddr + 1;
MBBuf.TxdLen = 7;
MBBuf.TxdLen = 7;
MBBuf.ByteNumber = 2;
MBBuf.Index = 4; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ʼ
MBBuf.Index = 4; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ʼ
ModBusWriteMultiByte();//д<><D0B4><EFBFBD><EFBFBD>
break;
@@ -93,8 +95,10 @@ void ModBusDataProcessing(void)
//if(RxdIndex < 11) return;
MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.ByteNumber = ((u16)MBBuf.RxPointer[4] << 8) | (u16)MBBuf.RxPointer[5];
if(MBBuf.ByteNumber > ENABLE_REG_MAX) { MBBuf.BusError = SLAVE_DEVICE_FAILURE; break; }
if(MBBuf.ByteNumber > ENABLE_REG_MAX) {
MBBuf.BusError = SLAVE_DEVICE_FAILURE;
break;
}
MBBuf.EndAddr = MBBuf.StartAddr + MBBuf.ByteNumber;
MBBuf.ByteNumber <<= 1;
//׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -103,26 +107,23 @@ void ModBusDataProcessing(void)
MBBuf.Index = 7;
ModBusWriteMultiByte();//д<><D0B4><EFBFBD><EFBFBD>
break;
case ERROR_TEST : //0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------------------------------------------------------------
if (MBBuf.RxPointer[0] != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ㲥<C7B9><E3B2A5>ַ <20><><EFBFBD>ظ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ
break;
// <09><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>
case 0x2B:
BLEModBusReturnDevice();
break;
case 0x42:
BLEModBusReturnData();
break;
case 0x43:
BLEModBusReturnparameter();
break;
break;
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʶ<CEB4><CAB6>-----------------------------------------------------------------------
MBBuf.BusError = ILLEGAL_FUNCTION;
break;
}
if(MBBuf.BusError != 0) ModBusErrorInfo(MBBuf.BusError);
if(MBBuf.RxPointer[0] == 0x00) { MBBuf.TxdLen = 0; return; } //<2F><EFBFBD><E3B2A5>ַ <20><>Ĭ
//<2F><EFBFBD><E3B2A5>ַ <20><>Ĭ
if(MBBuf.RxPointer[0] == 0x00) {
MBBuf.TxdLen = 0;
return;
}
if(MBBuf.TxdLen == 0) return;
ComputeTxdDataCRC();
memmove( (char *)MBBuf.TxPointer, (char *)MBBuf.RxPointer, MBBuf.TxdLen);
@@ -136,49 +137,40 @@ u8 ModBusProtocolDetection(void)
MBBuf.TxdLen = 0;
if(MBBuf.RxdLen < 5) return 0;
localAddress= 1 ;
//if((MBBuf.RxPointer[0] != 0) && (MBBuf.RxPointer[0] != localAddress)) // <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
if(MBBuf.RxPointer[0] != localAddress) return 0; // <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.RxdLen-1];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.RxdLen-2];
CRCTempRX = tempL.Word[0];
// <20>жϵ<D0B6>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if(MBBuf.RxPointer[0] == localAddress) goto DetecteNext;
else if(MBBuf.RxPointer[0] == 0) goto DetecteNext;
else return 0;
DetecteNext:
//tempL.Byte[1] = MBBuf.RxPointer[MBBuf.RxdLen-1];
//tempL.Byte[0] = MBBuf.RxPointer[MBBuf.RxdLen-2];
//CRCTempRX = tempL.Word[0];
CRCTempRX = ((u16)MBBuf.RxPointer[MBBuf.RxdLen-1] << 8) | (u16)MBBuf.RxPointer[MBBuf.RxdLen-2];
CRCTempCX = ModBusCRC(MBBuf.RxPointer, MBBuf.RxdLen-3); // <20><><EFBFBD><EFBFBD>CRC
if(CRCTempRX != CRCTempCX)
return 0; // CRC<52><43><EFBFBD><EFBFBD>
return 1;
if(CRCTempRX != CRCTempCX) return 0; // CRC<52><43><EFBFBD><EFBFBD>
else return 1;
}
/******************************************************************************/
//Modbus<75><73><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB4A6>
u8 ModbusVariablePointerProcess(void)
{
if(MBBuf.ByteNumber >= MBBuf.DataByte) MBBuf.ByteNumber -= MBBuf.DataByte;
else return 1;
if(MBBuf.ByteNumber < 2) return 1;
MBBuf.DataByte >>= 1;
MBBuf.StartAddr += MBBuf.DataByte;
if(MBBuf.ByteNumber >= MBBuf.DataByte) MBBuf.ByteNumber -= MBBuf.DataByte;
else return 1;
return 0;
if(MBBuf.ByteNumber < 2) return 1;
MBBuf.DataByte >>= 1;
MBBuf.StartAddr += MBBuf.DataByte;
return 0;
}
/******************************************************************************/
u8 ModbusVariablePointerDec(void)
{
if(MBBuf.ByteNumber < MBBuf.DataByte + 2)
{
if(MBBuf.ByteNumber < MBBuf.DataByte + 2) {
MBBuf.ByteNumber = 0;
return 1;
}

View File

@@ -1,6 +1,10 @@
#ifndef __MODBUS_h__
#define __MODBUS_h__
#define MAX 0
#define MIN 1
#define DEFAULT 2
//******************************************************************************
typedef struct
{
u16 StartAddr;
@@ -35,7 +39,6 @@ typedef struct
#define SLAVER_ADDR_MIN 1
//******************************************************************************
#define SLAVER_ID 0
#define FUNCTION_CODE 1
//******************************************************************************

View File

@@ -25,7 +25,7 @@ void ReadTimeBase(void)
ModbusVariablePointerDec();
}
/******************************************************************************/
///******************************************************************************/
void WriteTimeBase(void)
{
MBBuf.DataByte = 6;
@@ -49,22 +49,9 @@ void WriteTimeBase(void)
#elif(ENABLE_EXT_RTC)
if(TestExtRTCReady()) ExtRTCTimeSet();
#endif
//FY
// RTCCTL0 = 0xA500 + RTCTEVIE;
// RTCCTL13 = RTCHOLD;
// RTCYEAR = (u16)timer[YEAR]+2000;
// RTCMON = timer[MONTH];
// RTCDAY = timer[DATE];
// RTCHOUR = timer[HOUR];
// RTCMIN = timer[MINUTE];
// RTCSEC = timer[SECOND];
// RTCCTL0 = 0xA500 + RTCTEVIE;
// RTCCTL13 = RTCMODE; // Minute changed
// RTCCTL0 = 0;
}
/******************************************************************************/
///******************************************************************************/
u16 ReadSecond(void)
{
// u16 newSecond = RTCHOUR;
@@ -79,74 +66,65 @@ u16 ReadSecond(void)
return 1;
}
/******************************************************************************/
void SaveFactorySetting(void) // Save the factory setting
{
u16 I;
u8 temp[64];
for(I=0; I< SAVE_PARA_MAX; I++)
{
ReadMultiByteFromEEPROM(I*64, temp, 64, PARA_EEPROM);
WriteMultiByteToEEPROM(I*64, temp, 64, DATA_EEPROM);
}
WriteaAnAlarmData(0);
}
/******************************************************************************/
void RestoreFactorySetting(void)
{
u16 I;
unsigned char temp[64];
for(I=0; I< SAVE_PARA_MAX; I++)
{
ReadMultiByteFromEEPROM(I*64, temp, 64, DATA_EEPROM);
WriteMultiByteToEEPROM(I*64, temp, 64, PARA_EEPROM);
}
SystemParameterInit();
}
/******************************************************************************/
void WriteMEMSRatio(void)
{
// tmpLA = (u32)(NRHHigh - NRHLow);
// tmpLA *= (u32)RRRHRatio;
// tmpLA /= (u32)(RHHighTa - RHLowTa);
// tempL.Word[0] = (u16)tmpLA;
///******************************************************************************/
//void SaveFactorySetting(void) // Save the factory setting
//{
// u16 I;
// u8 temp[64];
//
// MEMSRatio = WriteShortParameterToEEPROM(MEMS_RATIO, MEMS_RATIO_WIDTH);
//FY
}
// for(I=0; I< SAVE_PARA_MAX; I++)
// {
// ReadMultiByteFromMemory(I*64, temp, 64, PARA_EEPROM);
// WriteMultiByteToMemory(I*64, temp, 64, DATA_EEPROM);
// }
//
// WriteaAnAlarmData(0);
//}
///******************************************************************************/
//void RestoreFactorySetting(void)
//{
// u16 I;
// unsigned char temp[64];
//
// for(I=0; I< SAVE_PARA_MAX; I++)
// {
// ReadMultiByteFromMemory(I*64, temp, 64, DATA_EEPROM);
// WriteMultiByteToMemory(I*64, temp, 64, PARA_EEPROM);
// }
//
// SystemParameterInit();
//}
/******************************************************************************/
//<2F>DZ<EFBFBD><C7B1><EFBFBD>Ϣ
void ReadCalibFAC(void)
{
tempL.Word[0] = 0x8000;//FAC<41><43><EFBFBD><EFBFBD>0x8000 <20><>ʾУ׼<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>ʽΪ<CABD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>FL1 FM1 FH1 <20><><EFBFBD><EFBFBD>FL2 FM2 FH2 <20><>......
tempL.Word[0] = 0x8000; //FAC<41><43><EFBFBD><EFBFBD>0x8000 <20><>ʾУ׼<D0A3><D7BC><EFBFBD>ݴ洢<DDB4><E6B4A2>ʽΪ<CABD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>FL1 FM1 FH1 <20><><EFBFBD><EFBFBD>FL2 FM2 FH2 <20><>......
//------------------------------------------------------------------------------
#ifndef ENABLE_ONE_CURVE
#pragma message("[undefined] ENABLE_ONE_CURVE")
#elif(ENABLE_ONE_CURVE)
calibType = INTCMD_CTYPE_CURVE;
#endif
calibType = INTCMD_CTYPE_CURVE;
#endif
//------------------------------------------------------------------------------
if(calibType == INTCMD_CTYPE_CURVE) tempL.Word[0] |= CALIB_COMP_FAC;//DATA_COMP_FAC
if(calibType == INTCMD_CTYPE_CURVE) tempL.Word[0] |= CALIB_COMP_FAC;
//------------------------------------------------------------------------------
#ifndef ENABLE_2ND_CURVE
#pragma message("[undefined] ENABLE_2ND_CURVE")
#elif(ENABLE_2ND_CURVE)
else if(calibType == INT_2ND_CURVE_CMD) tempL.Word[0] |= DATA_COMP_FAC2;
else if(calibType == INT_2RD_CURVE_CMD) tempL.Word[0] |= CALIB_COMP_FAC2;
#endif
//------------------------------------------------------------------------------
#ifndef ENABLE_3RD_CURVE
#pragma message("[undefined] ENABLE_3RD_CURVE")
#elif(ENABLE_3RD_CURVE)
else if(calibType == INT_3RD_CURVE_CMD) tempL.Word[0] |= DATA_COMP_FAC3;
else if(calibType == INT_3RD_CURVE_CMD) tempL.Word[0] |= CALIB_COMP_FAC3;
#endif
//------------------------------------------------------------------------------
else tempL.Word[0] = 0;
@@ -172,8 +150,9 @@ void ReadCalibDepth(void)
#ifndef ENABLE_2ND_CURVE
#pragma message("[undefined] ENABLE_2ND_CURVE")
#elif(ENABLE_2ND_CURVE)
else if(calibType == INT_2ND_CURVE_CMD) tempL.Word[0] = CALIB_DEPTH2;
else if(calibType == INT_2RD_CURVE_CMD) tempL.Word[0] = CALIB_DEPTH2;
#endif
//------------------------------------------------------------------------------
#ifndef ENABLE_3RD_CURVE
#pragma message("[undefined] ENABLE_3RD_CURVE")
@@ -181,7 +160,7 @@ void ReadCalibDepth(void)
else if(calibType == INT_3RD_CURVE_CMD) tempL.Word[0] = CALIB_DEPTH3;
#endif
//------------------------------------------------------------------------------
else tempL.Word[0] = 0;
else tempL.Word[0] = 0;
curveMode |= 0x00a0;
}
@@ -193,11 +172,12 @@ void ReadCalibWidth(void)
curveMode |= 0xa500;
}
/******************************************************************************/
//******************************************************************************/
//******************************************************************************/
void ReadCalbrationDataByCom(u16 calibAddr, u16 calibDepth)
{
MBBuf.StartAddr &= 0x0fff;
if((MBBuf.StartAddr >= MAX_OPERATE_DEPTH) || (MBBuf.ByteNumber > CALIB_WIDTH))
MBBuf.StartAddr &= 0xFFF;
if((MBBuf.StartAddr >= calibDepth) || (MBBuf.ByteNumber > CALIB_WIDTH))
{
MBBuf.ByteNumber = 0;
MBBuf.BusError = ILLEGAL_DATA_ADDRESS;
@@ -208,22 +188,36 @@ void ReadCalbrationDataByCom(u16 calibAddr, u16 calibDepth)
MBBuf.StartAddr += calibAddr;
disable_interrupts();
ReadMultiByteFromEEPROM(MBBuf.StartAddr, &MBBuf.RxPointer[3], MBBuf.ByteNumber, PARA_EEPROM);
ReadCalbrationDataFromMemory(MBBuf.StartAddr, &MBBuf.RxPointer[3], MBBuf.ByteNumber);
// u8 tempBuf[CALIB_WIDTH];
// ReadCalbrationDataFromMemory(MBBuf.StartAddr, tempBuf, MBBuf.ByteNumber);
// memcpy(&MBBuf.RxPointer[3], tempBuf, MBBuf.ByteNumber); //<2F><><EFBFBD><EFBFBD> DMA
enable_interrupts();
//systemProcessing |= WRITE_DATA_HANDLE;
// systemProcessing.Bit.WriteHandle = 1;
MBBuf.ByteNumber = 0;
}
/******************************************************************************/
void CheckWritingLegality(void)
{
MBBuf.BusError = ACKNOWLEDGE;
if((securityID != 0x0000AA55) && (securityID != COM_PASSWORD1) && (securityID != COM_PASSWORD2)) {
parameterState = ABORD_OPERATION;
MBBuf.ByteNumber = 0;
return;
}
MBBuf.BusError = 0;
IDvalidTime = 0;
}
/******************************************************************************/
void WriteCalbrationDataByCom(u16 calibAddr, u16 calibDepth)
{
//---------------------------------------------------------------------------
if((securityID != (u32)COM_PASSWORD1) && (securityID != (u32)COM_PASSWORD2)) return;
IDvalidTime = 0;
//---------------------------------------------------------------------------
CheckWritingLegality();
MBBuf.StartAddr &= 0x0fff;
MBBuf.StartAddr &= 0xFFF;
if((MBBuf.StartAddr >= calibDepth) || (MBBuf.ByteNumber > CALIB_WIDTH))
{
MBBuf.ByteNumber = 0;
@@ -231,28 +225,22 @@ void WriteCalbrationDataByCom(u16 calibAddr, u16 calibDepth)
return;
}
disable_interrupts();
if(MBBuf.StartAddr == 0) WriteMeterBasicData();
disable_interrupts();
//if(MBBuf.StartAddr == 0) WriteMeterBasicData();
MBBuf.StartAddr *= CALIB_WIDTH;
MBBuf.StartAddr += calibAddr;
WriteMultiByteToEEPROM(MBBuf.StartAddr, &MBBuf.RxPointer[MBBuf.Index], MBBuf.ByteNumber, PARA_EEPROM);
MBBuf.StartAddr += calibAddr;
// u8 tempBuf[CALIB_WIDTH];
// memcpy(tempBuf, (void *)&MBBuf.RxPointer[MBBuf.Index], MBBuf.ByteNumber); //<2F><><EFBFBD><EFBFBD> DMA
// WriteCalbrationDataToMemory(MBBuf.StartAddr, tempBuf, MBBuf.ByteNumber);
WriteCalbrationDataToMemory(MBBuf.StartAddr, &MBBuf.RxPointer[MBBuf.Index], MBBuf.ByteNumber);
enable_interrupts();
//systemProcessing |= WRITE_DATA_HANDLE;
systemProcessing.Bit.WriteHandle = 1;
MBBuf.ByteNumber = 0;
}
/******************************************************************************/
void ReadEEPROMByCom(u16 RDAdr, u16 RDLen)
{
ReadMultiByteFromEEPROM(RDAdr, &MBBuf.RxPointer[MBBuf.Index], MBBuf.ByteNumber, PARA_EEPROM);
MBBuf.DataByte = RDLen;
MBBuf.Index += RDLen;
ModbusVariablePointerDec();
}
/******************************************************************************/
//******************************************************************************/
void ReadFlashByCom(const unsigned char *RDAdr, u16 RDLen)
{
u16 I;
@@ -263,217 +251,96 @@ void ReadFlashByCom(const unsigned char *RDAdr, u16 RDLen)
ModbusVariablePointerDec();
}
/******************************************************************************/
void ReadArrayByCom(unsigned char *RDAdr, u16 RDLen)
{
u16 I;
for(I=0; I<RDLen; I++) MBBuf.RxPointer[MBBuf.Index++] = *(RDAdr+I);
MBBuf.DataByte = RDLen;
ModbusVariablePointerDec();
}
///******************************************************************************/
//void ReadArrayByCom(unsigned char *RDAdr, u16 RDLen)
//{
// u16 I;
//
// for(I=0; I<RDLen; I++) MBBuf.RxPointer[MBBuf.Index++] = *(RDAdr+I);
//
// MBBuf.DataByte = RDLen;
// ModbusVariablePointerDec();
//}
/******************************************************************************/
void ReadDByteByCom(u16 RDValue)
{
tempL.DWord = RDValue;
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[1];
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[0];
MBBuf.DataByte = 2;
ModbusVariablePointerDec();
}
///******************************************************************************/
//void ReadDByteByCom(u16 RDValue)
//{
// tempL.DWord = RDValue;
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[1];
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[0];
// MBBuf.DataByte = 2;
// ModbusVariablePointerDec();
//}
/******************************************************************************/
void ReadDWordByCom(u32 RDValue)
{
tempL.DWord = RDValue;
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[3];
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[2];
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[1];
MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[0];
MBBuf.DataByte = 4;
ModbusVariablePointerDec();
}
///******************************************************************************/
//void ReadDWordByCom(u32 RDValue)
//{
// tempL.DWord = RDValue;
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[3];
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[2];
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[1];
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[0];
// MBBuf.DataByte = 4;
// ModbusVariablePointerDec();
//}
/******************************************************************************/
void WriteEEPROMByCom(u16 WRAdr, u16 WRLen)
///******************************************************************************/
//void WriteEEPROMByCom(u16 WRAdr, u16 WRLen)
//{
// MBBuf.DataByte = WRLen;
// if(MBBuf.ByteNumber < WRLen)
// {
// MBBuf.ByteNumber = 0;
// MBBuf.BusError = ILLEGAL_DATA_ADDRESS;
// return;
// }
//
// WriteMultiByteToMemory(WRAdr, &MBBuf.RxPointer[MBBuf.Index], WRLen, PARA_EEPROM);
// MBBuf.Index += WRLen;
//}
/**************************************************************************************/
/**************************************************************************************/
void FreeWriteMultiByteParameterByCom(u8 *WRSource, u16 WRAddr, u16 WRLen)
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
MBBuf.DataByte = WRLen;
if(MBBuf.ByteNumber < WRLen)
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
MBBuf.BusError = ILLEGAL_DATA_ADDRESS;
return;
return;
}
WriteMultiByteToEEPROM(WRAdr, &MBBuf.RxPointer[MBBuf.Index], WRLen, PARA_EEPROM);
//---------------------------------------------------------------------------
MBBuf.BusError = 0;
WriteMultiByteToMemory(WRAddr, &MBBuf.RxPointer[MBBuf.Index], WRLen);
MBBuf.Index += WRLen;
}
/******************************************************************************/
void WriteWordByCom(u16 *WRSource, u16 WRAddr,
u16 WRLen, u16 WRMax,
u16 WRMin )
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
MBBuf.DataByte = 2;
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
return;
}
u16 I;
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
//---------------------------------------------------------------------------
MBBuf.BusError = ACKNOWLEDGE;
if((securityID != 0x0000AA55) && (securityID != COM_PASSWORD1) && (securityID != COM_PASSWORD2)) return;
MBBuf.BusError = 0; //V2004
IDvalidTime = 0;
//---------------------------------------------------------------------------
if(tempL.Word[0] > WRMax) return;
else if(tempL.Word[0] < WRMin) return;
// MBBuf.BusError = 0; V2004
I = *WRSource;
if(tempL.Word[0] == I) return;
parameterState = NEED_OPERATION;
//I = WRLen - 1;
//tempL.Byte[I] = CRC8(tempL.Byte, I);
//WriteMultiByteToEEPROM(WRAddr, tempL.Byte, WRLen, PARA_EEPROM);
//ReadMultiByteFromEEPROM(WRAddr, tempL.Byte, WRLen, PARA_EEPROM);
//tempL.Byte[I] = 0;
//*WRSource = tempL.Word[0];
*WRSource = WriteShortParameterToEEPROM(WRAddr, WRLen);
}
/******************************************************************************/
void FreeWriteWordByCom(u16 *WRSource, u16 WRAddr,
u16 WRLen, u16 WRMax,
u16 WRMin )
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
MBBuf.DataByte = 2;
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
return;
}
//---------------------------------------------------------------------------
MBBuf.BusError = 0; //V2004
u16 I;
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
if(tempL.Word[0] > WRMax) return;
else if(tempL.Word[0] < WRMin) return;
//MBBuf.BusError = 0; V2004
I = *WRSource;
if(tempL.Word[0] == I) return;
//---------------------------------------------------------------------------
parameterState = NEED_OPERATION;
MBBuf.BusError = 0;
//---------------------------------------------------------------------------
*WRSource = WriteShortParameterToEEPROM(WRAddr, WRLen);
// *WRSource = WriteMultiByteToMemory(WRAddr, WRLen);
ReadMultiByteFromMemory(WRAddr, WRSource,WRLen);
}
/******************************************************************************/
void WriteDWordByCom(u32 *WRSource, u16 WRAddr,u16 WRLen,
u32 WRMax, u32 WRMin )
/**************************************************************************************/
void WriteMultiByteParameterByCom(u8 *WRSource, u16 WRAddr, u16 WRLen)
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
MBBuf.DataByte = 4;
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
return;
}
//---------------------------------------------------------------------------
tempDev.Byte[3] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[2] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
//---------------------------------------------------------------------------
MBBuf.BusError = ACKNOWLEDGE;
if((securityID != 0x0000AA55) && (securityID != COM_PASSWORD1) && (securityID != COM_PASSWORD2)) return;
MBBuf.BusError = 0; //V2004
IDvalidTime = 0;
//---------------------------------------------------------------------------
if(tempDev.DWord[0] > WRMax) return;
else if(tempDev.DWord[0] < WRMin) return;
//MBBuf.BusError = 0; V2004
tempDev.DWord[1] = *WRSource;
if(tempDev.DWord[0] == tempDev.DWord[1]) return;
//---------------------------------------------------------------------------
parameterState = NEED_OPERATION;
//---------------------------------------------------------------------------
*WRSource = WriteParameterToEEPROM(WRAddr, WRLen);
CheckWritingLegality();
FreeWriteMultiByteParameterByCom(WRSource, WRAddr, WRLen);
}
/******************************************************************************/
void SetWordCmdByCom(u16 *WRSource)
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
MBBuf.DataByte = 2;
if(MBBuf.ByteNumber < 2)
{
MBBuf.ByteNumber = 0;
return;
}
//---------------------------------------------------------------------------
MBBuf.BusError = ACKNOWLEDGE;
if((securityID != 0x0000AA55) && (securityID != COM_PASSWORD1) && (securityID != COM_PASSWORD2)) return;
MBBuf.BusError = 0; //V2004
IDvalidTime = 0;
//---------------------------------------------------------------------------
parameterState = NEED_OPERATION;
//MBBuf.BusError = 0;
//---------------------------------------------------------------------------
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
*WRSource = tempL.Word[0];
}
/******************************************************************************/
void FreeSetWordCmdByCom(u16 *WRSource)
{
MBBuf.DataByte = 2;
if(MBBuf.ByteNumber < 2)
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
parameterState = ABORD_OPERATION;
@@ -487,42 +354,38 @@ void FreeSetWordCmdByCom(u16 *WRSource)
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
*WRSource = tempL.Word[0];
*WRSource = tempL.Word[0];
}
/******************************************************************************/
void SetDWordCmdByCom(u32 *WRSource)
void SetWordCmdByCom(u16 *WRSource)
{
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
MBBuf.DataByte = 4;
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
return;
}
//---------------------------------------------------------------------------
MBBuf.BusError = ACKNOWLEDGE;
if((securityID != 0x0000AA55) && (securityID != COM_PASSWORD1) && (securityID != COM_PASSWORD2)) return;
MBBuf.BusError = 0; //V2004
IDvalidTime = 0;
//---------------------------------------------------------------------------
parameterState = NEED_OPERATION;
//MBBuf.BusError = 0;
//---------------------------------------------------------------------------
tempL.Byte[3] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[2] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
*WRSource = tempL.DWord;
CheckWritingLegality();
FreeSetWordCmdByCom(WRSource);
}
/******************************************************************************/
void FreWriteWordByCom(u16 *WRSource, u16 WRAddr)
{
u16 I;
I = *WRSource;
FreeSetWordCmdByCom(WRSource);
if(tempL.Word[0] == I) return;
parameterState = NEED_OPERATION;
*WRSource = WriteShortParameterToMemory(WRAddr);
}
/******************************************************************************/
void WriteWordByCom(u16 *WRSource, u16 WRAddr)
{
CheckWritingLegality();
FreWriteWordByCom(WRSource, WRAddr);
}
/******************************************************************************/
/******************************************************************************/
void FreeSetDWordCmdByCom(u32 *WRSource)
{
@@ -530,63 +393,114 @@ void FreeSetDWordCmdByCom(u32 *WRSource)
if(MBBuf.ByteNumber < MBBuf.DataByte)
{
MBBuf.ByteNumber = 0;
//---------------------------------------------------------------------------
parameterState = ABORD_OPERATION;
MBBuf.BusError = ILLEGAL_DATA_VALUE;
//---------------------------------------------------------------------------
return;
}
//---------------------------------------------------------------------------
parameterState = NEED_OPERATION;
MBBuf.BusError = 0;
//---------------------------------------------------------------------------
tempDev.Byte[3] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[2] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempDev.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[3] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[2] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
*WRSource = tempL.DWord;
return;
*WRSource = tempDev.DWord[0];
}
/******************************************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteMeterBasicData(void)
void SetDWordCmdByCom(u32 *WRSource)
{
u16 I,J=0;
unsigned char temp[ANX*2];
for(I=0; I<ANX; I++)
{
temp[J++] = voltageDetected[I] & 0xFF;
temp[J++] = voltageDetected[I] >> 8;
}
WriteMultiByteToEEPROM(BASIC_DATA_BASE, temp, BASIC_DATA_BYTE_MAX, PARA_EEPROM);
CheckWritingLegality();
FreeSetDWordCmdByCom(WRSource);
}
/**************************************************************************************************************************/
void WriteWordByComToFlash(u16* word,u8 WriteParams)
/******************************************************************************/
void FreWriteDWordByCom(u32 *WRSource, u16 WRAddr)
{
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
*word = tempL.Word[0];
MBBuf.BusError = 0;
munWriteParams = WriteParams; //ָ<><D6B8><EFBFBD><EFBFBD>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
if(mucSaveParams != PARAMS_ING) mucSaveParams = PARAMS_READY;//word <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>Flashʱ<68><CAB1>װ<EFBFBD><D7B0>
u32 I;
I = *WRSource;
FreeSetDWordCmdByCom(WRSource);
if(tempDev.DWord[0] == I) return;
parameterState = NEED_OPERATION;
*WRSource = WriteLongParameterToMemory(WRAddr);
}
/******************************************************************************/
void WriteDWordByCom(u32 *WRSource, u16 WRAddr)
{
CheckWritingLegality();
FreWriteDWordByCom(WRSource, WRAddr);
}
/******************************************************************************/
/******************************************************************************/
void FreeWriteWordValidDataByCom(u16 *WRSource, u16 WRAddr, u16 WRMax, u16 WRMin)
{
u16 WRTarget;
FreeSetWordCmdByCom(&WRTarget);
if(WRTarget > WRMax) return;
else if(WRTarget < WRMin) return;
else if(*WRSource == WRTarget) return;
parameterState = NEED_OPERATION;
*WRSource = WriteShortParameterToMemory(WRAddr);
}
/******************************************************************************/
void WriteWordValidDataByCom(u16 *WRSource, u16 WRAddr, u16 WRMax, u16 WRMin)
{
CheckWritingLegality();
FreeWriteWordValidDataByCom(WRSource, WRAddr, WRMax, WRMin);
}
/******************************************************************************/
void FreeWriteDWordValidDataByCom(u32 *WRSource, u16 WRAddr, u32 WRMax, u32 WRMin)
{
u32 WRTarget;
FreeSetDWordCmdByCom(&WRTarget);
if(WRTarget > WRMax) return;
else if(WRTarget < WRMin) return;
else if(*WRSource == WRTarget) return;
parameterState = NEED_OPERATION;
*WRSource = WriteLongParameterToMemory(WRAddr);
}
/******************************************************************************/
void WriteDWordValidDataByCom(u32 *WRSource, u16 WRAddr, u32 WRMax, u32 WRMin)
{
CheckWritingLegality();
FreeWriteDWordValidDataByCom(WRSource, WRAddr, WRMax, WRMin);
}
///******************************************************************************/
////<2F><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//void WriteMeterBasicData(void)
//{
// u16 I,J=0;
// unsigned char temp[ANX*2];
//
// for(I=0; I<ANX; I++)
// {
// temp[J++] = voltageDetected[I] & 0xFF;
// temp[J++] = voltageDetected[I] >> 8;
// }
// WriteMultiByteToMemory(BASIC_DATA_BASE, temp, BASIC_DATA_BYTE_MAX, PARA_EEPROM);
//}
///**************************************************************************************************************************/
//void WriteWordByComToFlash(u16* word,u8 WriteParams)
//{
// tempL.Byte[1] = MBBuf.RxPointer[MBBuf.Index++];
// tempL.Byte[0] = MBBuf.RxPointer[MBBuf.Index++];
// *word = tempL.Word[0];
// MBBuf.BusError = 0;
// munWriteParams = WriteParams; //ָ<><D6B8><EFBFBD><EFBFBD>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
// if(mucSaveParams != PARAMS_ING) mucSaveParams = PARAMS_READY;//word <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>Flashʱ<68><CAB1>װ<EFBFBD><D7B0>
//}

View File

@@ -10,35 +10,34 @@ extern u16 parameterState;
void ReadTimeBase(void);
void WriteTimeBase(void);
u16 ReadSecond(void);
void SaveFactorySetting(void);
void RestoreFactorySetting(void);
void WriteMEMSRatio(void);
//---------------------------------------------------------------------------
void FreeWriteMultiByteParameterByCom(u8 *WRSource, u16 WRAddr, u16 WRLen);
void WriteMultiByteParameterByCom(u8 *WRSource, u16 WRAddr, u16 WRLen);
//---------------------------------------------------------------------------
void FreeSetWordCmdByCom(u16 *WRSource);
void SetWordCmdByCom(u16 *WRSource);
void FreWriteWordByCom(u16 *WRSource, u16 WRAddr);
void WriteWordByCom(u16 *WRSource, u16 WRAddr);
//---------------------------------------------------------------------------
void FreeSetDWordCmdByCom(u32 *WRSource);
void SetDWordCmdByCom(u32 *WRSource);
void FreWriteDWordByCom(u32 *WRSource, u16 WRAddr);
void WriteDWordByCom(u32 *WRSource, u16 WRAddr);
//---------------------------------------------------------------------------
void FreeWriteWordValidDataByCom(u16 *WRSource, u16 WRAddr, u16 WRMax, u16 WRMin);
void WriteWordValidDataByCom(u16 *WRSource, u16 WRAddr, u16 WRMax, u16 WRMin);
void FreeWriteDWordValidDataByCom(u32 *WRSource, u16 WRAddr, u32 WRMax, u32 WRMin);
void WriteDWordValidDataByCom(u32 *WRSource, u16 WRAddr, u32 WRMax, u32 WRMin);
//---------------------------------------------------------------------------
void ReadCalbrationDataByCom(u16 calibAddr, u16 calibDepth);
void WriteCalbrationDataByCom(u16 calibAddr, u16 calibDepth);
//---------------------------------------------------------------------------
void ReadCalibFAC(void);
void ReadCalibDepth(void);
void ReadCalibWidth(void);
void ReadCalbrationDataByCom(u16 calibAddr, u16 calibDepth);
void WriteCalbrationDataByCom(u16 calibAddr, u16 calibDepth);
void ReadEEPROMByCom(u16 RDAdr, u16 RDLen);
void ReadFlashByCom(const unsigned char *RDAdr, u16 RDLen);
void ReadArrayByCom(unsigned char *RDAdr, u16 RDLen);
void ReadDByteByCom(u16 RDValue);
void ReadDWordByCom(u32 RDValue);
void WriteEEPROMByCom(u16 WRAdr, u16 WRLen);
void FreeWriteWordByCom(u16 *WRSource, u16 WRAddr,
u16 WRLen, u16 WRMax,
u16 WRMin );
void WriteDWordByCom(u32 *WRSource, u16 WRAddr,u16 WRLen,
u32 WRMax, u32 WRMin );
void WriteWordByCom(u16 *WRSource, u16 WRAddr,
u16 WRLen, u16 WRMax,
u16 WRMin );
void SetWordCmdByCom(u16 *WRSource);
void FreeSetWordCmdByCom(u16 *WRSource);;
void SetDWordCmdByCom(u32 *WRSource);
void FreeSetDWordCmdByCom(u32 *WRSource);
void WriteMeterBasicData(void);
void WriteWordByComToFlash(u16* word,u8 WriteParams);
//---------------------------------------------------------------------------
#endif

View File

@@ -1,90 +1,450 @@
#include "../main/SystemInclude.h"
#if 0
__Samp_Buf_TypeDef sampleData;
//ADC0<43><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
static void ADC0_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
{
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
}
/*
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
1.<2E><><EFBFBD>ã<EFBFBD>SetSampleSiagnlForADC
//ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
static void ADC1_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
{
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC1 */
}
//ADCͬ<43><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
static void ADC0_1_SyncConversion_Init(ADC_SyncConfig_TypeDef* adc_config)
{
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain0, adc_config->PChan0, adc_config->NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain1, adc_config->PChan1, adc_config->NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
ADC_SyncCmd(ENABLE);/* 4. ADCͬ<43><CDAC>ʹ<EFBFBD><CAB9> */
}
//<2F><>ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
void SetSampleSiagnlForSingleADC(ADC_BaseConfig_TypeDef* adc_cfg)
{
ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_2P5V);
sampleData.adcBaseCfg.Gain = adc_cfg->Gain;
sampleData.adcBaseCfg.PChan = adc_cfg->PChan;
sampleData.adcBaseCfg.NChan = adc_cfg->NChan;
sampleData.adcBaseCfg.SPS = adc_cfg->SPS;
}
//˫ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
void SetSampleSiagnlForSyncADC( ADC_SyncConfig_TypeDef* adc_cfg)
{
ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_2P5V);
sampleData.adcSyncCfg.Gain0 = adc_cfg->Gain0;
sampleData.adcSyncCfg.PChan0 = adc_cfg->PChan0;
sampleData.adcSyncCfg.NChan0 = adc_cfg->NChan0;
sampleData.adcSyncCfg.Gain1 = adc_cfg->Gain1;
sampleData.adcSyncCfg.PChan1 = adc_cfg->PChan1;
sampleData.adcSyncCfg.NChan1 = adc_cfg->NChan1;
sampleData.adcSyncCfg.SPS = adc_cfg->SPS;
}
//ADC<44>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>--------------------------------------------------
u16 GetAdcGain(u16 gianX)
{
switch(gianX)
{
case 1: return GAIN1;
case 2: return GAIN2;
case 4: return GAIN4;
case 8: return GAIN8;
case 16: return GAIN16;
case 32: return GAIN32;
case 64: return GAIN64;
case 128: return GAIN128;
default:
return GetAdcGain(ADC_GAIN_DEFAULT);
}
}
/* ======================================================================================================
adc<64>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
1.<2E><><EFBFBD>ã<EFBFBD>SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
2.<2E><>ʼ<EFBFBD><CABC>StartADC0SampingData StartADC1SampingData StartADCSyncSampingData
3.<2E><>ȡ<EFBFBD><C8A1>IRQ ReadSamplingData
4.<2E><><EFBFBD>㣺ComputeSampleData
*/
__Samp_Buf_TypeDef sampleData;
void ADC0_IRQHandler(void)
======================================================================================================*/
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
void ConversionIRQ_Callback(void)
{
if(LHL_ADC_GetPending(ADC_0, ADC_FLAG_RDY) == SET)
{
if(sampleData.SkipSampNum) sampleData.SkipSampNum -- ;
ReadSamplingData(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
void ConversionTimerIRQ_Callback(void)
{
if(sampleData.SkipSampNum) sampleData.SkipSampNum -- ;
if(sampleData.SkipSampNum) {sampleData.SkipSampNum -- ; return; }
ReadSamplingData(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void SetSampleSiagnlForADC(ADC_Config_TypeDef adc_cfg)
{
sampleData.adcConfig.Gain0 = adc_cfg.Gain0;
sampleData.adcConfig.PChan0 = adc_cfg.PChan0;
sampleData.adcConfig.NChan0 = adc_cfg.NChan0;
sampleData.adcConfig.Gain1 = adc_cfg.Gain1;
sampleData.adcConfig.PChan1 = adc_cfg.PChan1;
sampleData.adcConfig.NChan1 = adc_cfg.NChan1;
sampleData.adcConfig.SPS = adc_cfg.SPS;
}
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
void StartADC0SampingData(void)
{
sampleData.ADCBuffer[0]=0;
sampleData.Counter=0;
sampleData.SkipSampNum = 3 ;
ADC0_Conversion_Init(sampleData.adcConfig);
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
StartADC(ADC_0);
}
void StartADC1SampingData(void)
{
sampleData.ADCBuffer[1]=0;
sampleData.Counter=0;
sampleData.SkipSampNum = 3 ;
ADC1_Conversion_Init(sampleData.adcConfig);
ADC1_Conversion_Init(&sampleData.adcBaseCfg);
ADC_register_irq_callback(ADC_1,ConversionIRQ_Callback);
StartADC(ADC_1);
}
void StartADCSyncSampingData(void)
{
{
sampleData.ADCBuffer[0]=0;
sampleData.ADCBuffer[1]=0;
sampleData.Counter=0;
sampleData.SkipSampNum = 3 ;
#if 1
ADC0_1_SyncConversion_Init(sampleData.adcConfig);
#else
NVIC_DisableIRQ(ADC0_IRQn);
StartConversionTimerInterval(1);//1ms <20><>ʱ<EFBFBD><CAB1><EFBFBD>ж϶<D0B6>ȡadcת<63><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Timer_register_irq_callback(ConversionTimer,ConversionTimerIRQ_Callback );//ע<><D7A2>timer2<72>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
#endif
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
StartADC(ADC_0);//ֻ<><EFBFBD><E8BFAA>ADC_0
}
void ReadSamplingData(void)//ADC<44>ж϶<D0B6>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
{
sampleData.ADCBuffer[0] += ADC_ReadSampleData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
sampleData.ADCBuffer[1] += ADC_ReadSampleData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
sampleData.Counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if(sampleData.Counter < sampleData.CounterMax) return;
sampleData.ADCBuffer[0] += ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
sampleData.ADCBuffer[1] += ADC_ReadData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
sampleData.Counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void ComputeSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
StopADCConversion(ADC_0);
StopADCConversion(ADC_1);
if(sampleData.Counter != 0)//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>
StopADC(ADC_0);
StopADC(ADC_1);
if(sampleData.Counter != 0)//<2F>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>
{
sampleData.ADCBuffer[0] /= (u32)sampleData.Counter;
sampleData.ADCBuffer[1] /= (u32)sampleData.Counter;
}
}
/* ======================================================================================================
adc dma<6D><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
1.<2E><><EFBFBD>ã<EFBFBD> SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
2.<2E><>ʼ<EFBFBD><CABC> StartDMAForADC0SampingData StartDMAForADC1SampingData StartDMAForADCSyncSampingData
3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IRQ <20><>־λ
4.<2E><><EFBFBD>㣺 DMA_ComputeSampleData_ADC0 DMA_ComputeSampleData_ADC1
======================================================================================================*/
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
void DMAForADC0_Callback()
{
sampleData.DMA_ADC_adcflag[0] = 1;
}
void DMAForADC1_Callback()
{
sampleData.DMA_ADC_adcflag[1] = 1;
}
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
//<2F><>ADCת<43><D7AA>--------------------------
void StartDMAForADC0SampingData(void)
{
sampleData.SkipSampNum = 0 ;
sampleData.DMA_ADC_adcflag[1] = 0 ;
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
DMA_StartADC(ADC_0);
}
//<2F><>ADCת<43><D7AA>--------------------------
void StartDMAForADC1SampingData(void)
{
sampleData.SkipSampNum = 0 ;
sampleData.DMA_ADC_adcflag[1] = 0 ;
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
DMA_ADC_Init(ADC_1, sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
DMA_StartADC(ADC_1);
}
//˫ADCת<43><D7AA>--------------------------
void StartDMAForADCSyncSampingData(void)
{
sampleData.SkipSampNum = 0 ;
sampleData.DMA_ADC_adcflag[0] = 0 ;
sampleData.DMA_ADC_adcflag[1] = 0 ;
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
DMA_ADC_Init(ADC_1,sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
DMA_StartADC(ADC_0);
DMA_StartADC(ADC_1);
}
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>-----------------------
inline u8 WaitADC0DMAComplete(void)
{
if (sampleData.DMA_ADC_adcflag[0]) {
sampleData.DMA_ADC_adcflag[0] = 0;
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
}
inline u8 WaitADC1DMAComplete(void)
{
if (sampleData.DMA_ADC_adcflag[1]) {
sampleData.DMA_ADC_adcflag[1] = 0;
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
}
inline u8 WaitSyncDMAComplete(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (sampleData.DMA_ADC_adcflag[0] && sampleData.DMA_ADC_adcflag[1]) {
sampleData.DMA_ADC_adcflag[0] = 0;
sampleData.DMA_ADC_adcflag[1] = 0;
return 1; // ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return 0; // ת<><D7AA>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-----------------------
u16 DMA_ComputeSampleData_ADC0(void)
{
u16 adcCode;
u32 adcCount;
u8 i ;
for(i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
{
adcCode = ((((sampleData.DMA_ADC_Buffer[0][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[0][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
adcCount += adcCode ;
}
adcCode = adcCount>>sampleData.DMA_ADC_Exponent;
return adcCode;
}
u16 DMA_ComputeSampleData_ADC1(void)
{
u16 adcCode;
u32 adcCount;
u8 i ;
for(u8 i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
{
adcCode = ((((sampleData.DMA_ADC_Buffer[1][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[1][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
adcCount += adcCode ;
}
adcCode = adcCount >> sampleData.DMA_ADC_Exponent;
return adcCode;
}
/*==========================================================================*/
//ADC<44><43><EFBFBD>в<EFBFBD><D0B2><EFBFBD>--<2D>ʺϲ<CABA><CFB2>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
//ʹ<><CAB9>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>seq_config
//StartDMA_ForADC0_SeqSample();
//u16 SeqData[4];
//if(adcFlag)ADC_ReadSeqData(SeqData,sizeof(SeqData) / sizeof(SeqData[0]));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum {
seq_1, seq_2, seq_3, seq_4,/*......*/seq_Count
}__SeqIndex;
#define SEQ_CFG { \
.Gain = GAIN64, \
.SPS = SPS_12P5, \
.SeqCount = seq_Count, \
.SeqChannel = { \
[seq_1] = {ADC0_AIN0, ADC0_AIN1}, \
[seq_2] = {ADC1_AIN3, ADC1_AIN4}, \
[seq_3] = {ADC1_AIN2, ADC1_AVSS}, \
[seq_4] = {ADC1_AIN5, ADC1_AIN4}, \
}, \
.adcFlag = 0 ,/* DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ */ \
}
__SeqConfig_TypeDef seq_config = SEQ_CFG;
//void SetSampleSeqConfig(u8 Gain ,u8 SPS) //Ӧ<><D3A6><EFBFBD>ʺϲ<CABA><CFB2>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>Ҫ~~~Ҫ<>ľͲ<C4BE><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//{
// seq_config.Gain = Gain ;
// seq_config.SPS = SPS ;
//}
void seqcallback(void)
{
seq_config.adcFlag = 1 ;
}
void StartDMA_ForADC0_SeqSample(void)
{
DMA_ADC0_SingleChannel_SEQ_Init(&seq_config);
seq_config.adcFlag = 0;
DMA_register_irq_callback(DMA_CHANNEL_ADC_CTL,NULL,seqcallback);
StartDMA_SEQ_ADC(ADC_0);
}
//<2F><>ADC<44><43><EFBFBD><EFBFBD>---------------------------------------------------------------
void ADC_ReadSeqData(u16* SeqData ,u8 SeqNumCount)
{
ADC_Data_t* tempSeqData;
if (seq_config.adcFlag > 0)
{
tempSeqData = seq_config.adcBuffer;//adcBuffer<65><72><EFBFBD><EFBFBD>Ū<EFBFBD>ɴ<EFBFBD><C9B4>ݣ<EFBFBD>
for(u8 i = 0 ; i < SeqNumCount ; i++)
{
tempSeqData[i].ADC_Data = ((((tempSeqData[i].ADC_Data & 0xFFFFFF) | ((tempSeqData[i].ADC_Data & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;
SeqData[i] = tempSeqData[i].ADC_Data;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
seq_config.adcFlag = 0;
}
}
/******-==============================================================================================================================================================******/
//__IntSingleSampleData_t sampleData1;
//__IntSyncSampleData_t sampleData2;
//__SingleDmaSampleData_t sampleData3;
//__DualSyncDmaSampleData_t sampleData4;
////<2F>жϵ<D0B6>ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
////ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//void ADC0_SingleIRQ_Callback(void)
//{
// if(sampleData1.skip_num) {sampleData1.skip_num -- ; return; }
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// sampleData1.adc_buffer+= ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
// sampleData1.counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//}
//void ComputeSingleADC0SampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//{
// StopADC(ADC_0);
// //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
// if(sampleData1.counter != 0) sampleData1.adc_buffer /= (u32)sampleData1.counter;
//}
//void StartADC0_SampingData(void)
//{
// sampleData1.adc_buffer = 0 ;
// sampleData1.counter =0 ;
// sampleData1.skip_num = 3 ;
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>׼Դ */
// ADC_Init(ADC_0, sampleData1.adc_cfg.SPS, sampleData1.adc_cfg.Gain, sampleData1.adc_cfg.PChan, sampleData1.adc_cfg.NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
// ADC_register_irq_callback(ADC_0,ADC0_SingleIRQ_Callback);
// StartADC(ADC_0);
//}
////ADC1......
////<2F>ж<EFBFBD>˫ADCͬ<43><CDAC><EFBFBD><EFBFBD>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
////ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//void ADC_SyncIRQ_Callback(void)
//{
// if(sampleData2.skip_num) {sampleData2.skip_num -- ; return; }
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// sampleData2.adc_buffer[0] += ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
// sampleData2.adc_buffer[1] += ADC_ReadData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
// sampleData2.counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//}
//void ComputeSyncADCSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//{
// StopADC(ADC_0);
// StopADC(ADC_1);
// //<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
// if(sampleData2.counter != 0)
// {
// sampleData2.adc_buffer[0] /= (u32)sampleData2.counter;
// sampleData2.adc_buffer[1] /= (u32)sampleData2.counter;
// }
//}
//void StartADC_Sync_SampingData(void)
//{
// sampleData2.adc_buffer[0] = 0 ;
// sampleData2.adc_buffer[1] = 0 ;
// sampleData2.counter =0 ;
// sampleData2.skip_num = 3 ;
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>׼Դ */
// ADC_Init(ADC_0, sampleData2.adc_cfg.SPS, sampleData2.adc_cfg.Gain0, sampleData2.adc_cfg.PChan0, sampleData2.adc_cfg.NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
// ADC_Init(ADC_1, sampleData2.adc_cfg.SPS, sampleData2.adc_cfg.Gain1, sampleData2.adc_cfg.PChan1, sampleData2.adc_cfg.NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
// ADC_SyncCmd(ENABLE);/* 4. ADCͬ<43><CDAC>ʹ<EFBFBD><CAB9> */
// ADC_register_irq_callback(ADC_0,ADC_SyncIRQ_Callback);//ֻ<><EFBFBD><E8BFAA>ADC_0
// StartADC(ADC_0);//ֻ<><EFBFBD><E8BFAA>ADC_0
//}
////DMA<4D><41>ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
//void DMAForSingleADC0_Callback()
//{
// sampleData3.adcflag = 1;
//}
//void StartDMAForSingleADC0SampingData(void)
//{
// sampleData3.skip_num = 3;
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>׼Դ */
// ADC_Init(ADC_0, sampleData3.adc_cfg.SPS, sampleData3.adc_cfg.Gain, sampleData3.adc_cfg.PChan, sampleData3.adc_cfg.NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
//// ADC_DMA_Init(ADC_0,sampleData3.dma_buffer,sampleData3.samp_len+sampleData3.skip_num);
// DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForSingleADC0_Callback);
// DMA_StartADC(ADC_0);
//}
//u16 DMA_ComputeSingleSampleData_ADC0(void)
//{
// u16 adcCode;
// u32 adcCount;
// u8 i ;
// for(i = sampleData3.skip_num ; i < sampleData3.samp_len ;i++)
// {
// adcCode = ((((sampleData3.dma_buffer[i] & 0xFFFFFF) | ((sampleData3.dma_buffer[i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
// adcCount += adcCode ;
// }
// adcCode = adcCount>>sampleData3.exponent;
// return adcCode;
//}
////ADC1......
////DMA˫ADC<44><43>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
//void DMAForSyncADC0_Callback()
//{
// sampleData4.adcflag[0] = 1;
//}
//void DMAForSyncADC1_Callback()
//{
// sampleData4.adcflag[1] = 1;
//}
//void StartDMA_ForADCSyncSampingData(void)
//{
// sampleData3.skip_num = 3;
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>׼Դ */
// ADC_Init(ADC_0, sampleData4.adc_cfg.SPS, sampleData4.adc_cfg.Gain0, sampleData4.adc_cfg.PChan0, sampleData4.adc_cfg.NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
// ADC_Init(ADC_1, sampleData4.adc_cfg.SPS, sampleData4.adc_cfg.Gain1, sampleData4.adc_cfg.PChan1, sampleData4.adc_cfg.NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
//
//// ADC_DMA_Init(ADC_0,sampleData4.dma_buffer[0],sampleData4.samp_len+sampleData4.skip_num);
//// ADC_DMA_Init(ADC_1,sampleData4.dma_buffer[1],sampleData4.samp_len+sampleData4.skip_num);
// DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForSyncADC0_Callback);
// DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForSyncADC1_Callback);
// DMA_StartADC(ADC_0);
// DMA_StartADC(ADC_1);
//}
#endif

View File

@@ -1,32 +1,126 @@
#ifndef __SAMPPROCESS_H__
#define __SAMPPROCESS_H__
#if 0
typedef struct {
u8 Gain; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
u8 PChan; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 NChan; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 SPS; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} ADC_BaseConfig_TypeDef;
typedef struct {
u8 Gain0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
u8 PChan0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 NChan0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 Gain1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
u8 PChan1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 NChan1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
u8 SPS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} ADC_SyncConfig_TypeDef;
enum
{
IRHCode,
IRRCode,
URUCode,
URHCode,
BASCode,
BATCode,
C = 0 ,
R,
H,
A,
B,
D,
E,
F,
TCode_Count
};
typedef struct
{
ADC_Config_TypeDef adcConfig;
u8 SkipSampNum ;
u8 CounterMax; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 Counter; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 ADCBuffer[2]; //<2F><><EFBFBD><EFBFBD>ֵ(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
u32 TCode[TCode_Count]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E6B4A2>
}__Samp_Buf_TypeDef; //<2F><><EFBFBD><EFBFBD>
{
ADC_BaseConfig_TypeDef adcBaseCfg;
ADC_SyncConfig_TypeDef adcSyncCfg; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 TempCode[TCode_Count]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>
u8 SkipSampNum ; //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A>жϷ<D0B6>ʽ<EFBFBD><CABD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>*/
u8 CounterMax; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 Counter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 ADCBuffer[2]; //<2F><><EFBFBD><EFBFBD>ֵ
/*DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>*/
u32 DMA_ADC_Buffer[2][70];
u8 DMA_ADC_adcflag[2];
u8 DMA_ADC_SampLen;
u8 DMA_ADC_Exponent;
}__Samp_Buf_TypeDef;//<2F><><EFBFBD><EFBFBD>
//// <20>ж<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
//typedef struct {
// ADC_BaseConfig_TypeDef adc_cfg;
// u8 skip_num ;
// u8 counter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// u32 adc_buffer; //<2F><><EFBFBD><EFBFBD>ֵ
//}__IntSingleSampleData_t;
//// <20>ж<EFBFBD>ģʽ<C4A3><CABD>˫ ADC ͬ<><CDAC><EFBFBD><EFBFBD>
//typedef struct {
// ADC_SyncConfig_TypeDef adc_cfg;
// u8 skip_num ;
// u8 counter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// u32 adc_buffer[2]; //<2F><><EFBFBD><EFBFBD>ֵ
//}__IntSyncSampleData_t;
//// <20><> ADC + DMA ģʽר<CABD><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef struct {
// ADC_BaseConfig_TypeDef adc_cfg;
// u32 dma_buffer[128];
// u8 adcflag ;
// u8 samp_len;
// u8 exponent;
// u8 skip_num;
//}__SingleDmaSampleData_t;
//// ˫ ADC ͬ<><CDAC> + DMA ģʽר<CABD><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//typedef struct {
// ADC_SyncConfig_TypeDef adc_cfg;
// u32 dma_buffer[2][128]; // [0]=ADC0, [1]=ADC1
// u8 adcflag[2] ;
// u8 samp_len;
// u8 exponent;
// u8 skip_num;
//}__DualSyncDmaSampleData_t;
//extern __IntSingleSampleData_t sampleData1;
//extern __IntSyncSampleData_t sampleData2;
//extern __SingleDmaSampleData_t sampleData3;
//extern __DualSyncDmaSampleData_t sampleData4;
extern __Samp_Buf_TypeDef sampleData;
void SetSampleSiagnlForADC(ADC_Config_TypeDef adc_cfg);
u16 GetAdcGain(u16 gianX);
/*ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>*/
void SetSampleSiagnlForSingleADC( ADC_BaseConfig_TypeDef* adc_cfg);
void SetSampleSiagnlForSyncADC( ADC_SyncConfig_TypeDef* adc_cfg);
/*<2A>жϷ<D0B6>ʽ*/
void StartADC0SampingData(void);
void StartADC1SampingData(void);
void StartADCSyncSampingData(void);
void ReadSamplingData(void);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ComputeSampleData(void);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*DMA<4D><41>ʽ*/
void StartDMAForADC0SampingData(void);
void StartDMAForADC1SampingData(void);
void StartDMAForADCSyncSampingData(void);
u8 WaitADC0DMAComplete(void);
u8 WaitADC1DMAComplete(void);
u8 WaitSyncDMAComplete(void);
u16 DMA_ComputeSampleData_ADC0(void);
u16 DMA_ComputeSampleData_ADC1(void);
/*DMA ADC<44><43><EFBFBD>з<EFBFBD>ʽ*/
void StartDMA_ForADC0_SeqSample(void);
void ADC_ReadSeqData(u16* SeqData ,u8 SeqNumCount) ;
#endif
#endif

View File

@@ -14,49 +14,12 @@ const u8 MAPDefault[] = {
MAP36_DEFAULT, MAP37_DEFAULT, MAP38_DEFAULT, MAP39_DEFAULT, MAP40_DEFAULT,
MAP41_DEFAULT, MAP42_DEFAULT, MAP43_DEFAULT, MAP44_DEFAULT, MAP45_DEFAULT,
MAP46_DEFAULT, MAP47_DEFAULT, MAP48_DEFAULT };
/*
//------------------------------------------------------------------------------
//const unsigned char BusRegLen[] = {
// STD_30_LEN, STD_31_LEN, STD_32_LEN, STD_33_LEN, STD_34_LEN, STD_35_LEN, STD_36_LEN, STD_37_LEN,
// STD_38_LEN, STD_39_LEN, STD_3A_LEN, STD_3B_LEN, STD_3C_LEN, STD_3D_LEN, STD_3E_LEN, STD_3F_LEN,
//
// STD_40_LEN, STD_41_LEN, STD_42_LEN, STD_43_LEN, STD_44_LEN, STD_45_LEN, STD_46_LEN, STD_47_LEN,
// STD_48_LEN, STD_49_LEN, STD_4A_LEN, STD_4B_LEN, STD_4C_LEN, STD_4D_LEN, STD_4E_LEN, STD_4F_LEN,
//
// STD_50_LEN, STD_51_LEN, STD_52_LEN, STD_53_LEN, STD_54_LEN, STD_55_LEN, STD_56_LEN, STD_57_LEN,
// STD_58_LEN, STD_59_LEN, STD_5A_LEN, STD_5B_LEN, STD_5C_LEN, STD_5D_LEN, STD_5E_LEN, STD_5F_LEN,
//
// STD_60_LEN, STD_61_LEN, STD_62_LEN, STD_63_LEN, STD_64_LEN, STD_65_LEN, STD_66_LEN, STD_67_LEN,
// STD_68_LEN, STD_69_LEN, STD_6A_LEN, STD_6B_LEN, STD_6C_LEN, STD_6D_LEN, STD_6E_LEN, STD_6F_LEN,
//
// STD_70_LEN, STD_71_LEN, STD_72_LEN, STD_73_LEN, STD_74_LEN, STD_75_LEN, STD_76_LEN, STD_77_LEN,
// STD_78_LEN, STD_79_LEN, STD_7A_LEN, STD_7B_LEN, STD_7C_LEN, STD_7D_LEN, STD_7E_LEN, STD_7F_LEN,
//
// STD_80_LEN, STD_81_LEN, STD_82_LEN, STD_83_LEN, STD_84_LEN, STD_85_LEN, STD_86_LEN, STD_87_LEN,
// STD_88_LEN, STD_89_LEN, STD_8A_LEN, STD_8B_LEN, STD_8C_LEN, STD_8D_LEN, STD_8E_LEN, STD_8F_LEN,
//
// STD_90_LEN, STD_91_LEN, STD_92_LEN, STD_93_LEN, STD_94_LEN, STD_95_LEN, STD_96_LEN, STD_97_LEN,
// STD_98_LEN, STD_99_LEN, STD_9A_LEN, STD_9B_LEN, STD_9C_LEN, STD_9D_LEN, STD_9E_LEN, STD_9F_LEN,
//
// STD_A0_LEN, STD_A1_LEN, STD_A2_LEN, STD_A3_LEN, STD_A4_LEN, STD_A5_LEN, STD_A6_LEN, STD_A7_LEN,
// STD_A8_LEN, STD_A9_LEN, STD_AA_LEN, STD_AB_LEN, STD_AC_LEN, STD_AD_LEN, STD_AE_LEN, STD_AF_LEN,
//
// STD_B0_LEN, STD_B1_LEN, STD_B2_LEN, STD_B3_LEN, STD_B4_LEN, STD_B5_LEN, STD_B6_LEN, STD_B7_LEN,
// STD_B8_LEN, STD_B9_LEN, STD_BA_LEN, STD_BB_LEN, STD_BC_LEN, STD_BD_LEN, STD_BE_LEN, STD_BF_LEN,
//
// STD_C0_LEN, STD_C1_LEN, STD_C2_LEN, STD_C3_LEN, STD_C4_LEN, STD_C5_LEN, STD_C6_LEN, STD_C7_LEN,
// STD_C8_LEN, STD_C9_LEN, STD_CA_LEN, STD_CB_LEN, STD_CC_LEN, STD_CD_LEN, STD_CE_LEN, STD_CF_LEN,
//
// STD_D0_LEN, STD_D1_LEN, STD_D2_LEN, STD_D3_LEN, STD_D4_LEN, STD_D5_LEN, STD_D6_LEN, STD_D7_LEN,
// STD_D8_LEN, STD_D9_LEN, STD_DA_LEN, STD_DB_LEN, STD_DC_LEN, STD_DD_LEN, STD_DE_LEN, STD_DF_LEN,
//
// STD_E0_LEN, STD_E1_LEN, STD_E2_LEN, STD_E3_LEN, STD_E4_LEN, STD_E5_LEN, STD_E6_LEN, STD_E7_LEN,
// STD_E8_LEN, STD_E9_LEN, STD_EA_LEN, STD_EB_LEN, STD_EC_LEN, STD_ED_LEN, STD_EE_LEN, STD_EF_LEN,
//
// STD_F0_LEN, STD_F1_LEN, STD_F2_LEN, STD_F3_LEN, STD_F4_LEN, STD_F5_LEN, STD_F6_LEN, STD_F7_LEN,
// STD_F8_LEN, STD_F9_LEN, STD_FA_LEN, STD_FB_LEN, STD_FC_LEN, STD_FD_LEN, STD_FE_LEN, STD_FF_LEN,
//};
*/
//******************************************************************************
__weak void CalibrateGasOffset(void) {}
//******************************************************************************
//******************************************************************************
u16 SetupResponseTimeIndex(u16 response, u16 responseDefalt)
@@ -86,12 +49,12 @@ u16 SetupResponseTime(u16 response, u16 responseDefalt)
//******************************************************************************
void InitUseBusParameter(void)
{
unsigned int I;
u16 I;
DataPoint = &MAPPoint1;
for(I=0; I<STD_MAP_MAX; I++)
{
*DataPoint = ReadParameterFromMemory(MAP_SET1 + I*MAP_SET_WIDTH, MAP_SET_WIDTH, (unsigned int)MAPDefault[I]);
*DataPoint = ReadShortParameterFromMemory(MAP_SET1 + I*REG_WORD_WIDTH, (u16)MAPDefault[I]);
DataPoint--;
}
}
@@ -99,14 +62,15 @@ void InitUseBusParameter(void)
//******************************************************************************
void WriteInitUseBusParameter(void)
{
unsigned int I;
u16 I;
DataPoint = &MAPPoint1;
for(I=0; I<STD_MAP_MAX; I++)
{
*DataPoint = (unsigned int)MAPDefault[I];
tempL.Word[0] = (unsigned int)MAPDefault[I];
WriteParameterToEEPROM(MAP_SET1 + I*MAP_SET_WIDTH, MAP_SET_WIDTH);
*DataPoint = (u16)MAPDefault[I];
tempL.Word[0] = (u16)MAPDefault[I];
WriteShortParameterToMemory(MAP_SET1 + I*REG_WORD_WIDTH);
DataPoint--;
}
}
@@ -122,13 +86,12 @@ void UserReadDataProtocol(void)
while(MBBuf.StartAddr < STD_DCOEF_NODE1)
{
if(MBBuf.ByteNumber < 2) return;
if(MBBuf.StartAddr < STD_REG_START)
{
if(MBBuf.StartAddr < STD_REG_START) {
//С<><D0A1>0x30δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
MBBuf.DataByte = DataPoint[MBBuf.StartAddr + STD_MAP_SET1];
if(MBBuf.DataByte < STD_REG_START) tempL.Word[0] = 0;
if(MBBuf.DataByte < STD_REG_START) tempL.Word[0] = 0;
else if(MBBuf.DataByte < STD_DCOEF_NODE1) tempL.Word[0] = DataPoint[MBBuf.DataByte - STD_REG_START];
else tempL.Word[0] = 0;
else tempL.Word[0] = 0;
}
else tempL.Word[0] = DataPoint[MBBuf.StartAddr - STD_REG_START];
@@ -137,7 +100,7 @@ void UserReadDataProtocol(void)
MBBuf.StartAddr++;
MBBuf.ByteNumber -= 2;
MBBuf.DataByte = 2;
MBBuf.DataByte = 2;
}
// read record data
@@ -236,11 +199,7 @@ void UserReadDataProtocol(void)
default: return;
}
}
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[1];
// MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[0];
// ModbusVariablePointerDec();
for(I=1; I<=MBBuf.DataByte; I++) MBBuf.RxPointer[MBBuf.Index++] = tempL.Byte[MBBuf.DataByte-I];
ModbusVariablePointerDec();
}
@@ -265,7 +224,7 @@ void UserWriteDataProtocol(void)
{
// С<><D0A1>0x30δ<30><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
MBBuf.DataByte = DataPoint[MBBuf.StartAddr + STD_MAP_SET1];
if((MBBuf.DataByte < STD_REG_START) || (MBBuf.DataByte > STD_REG_START)){
if((MBBuf.DataByte < STD_REG_START) || (MBBuf.DataByte > STD_DCOEF_NODE1)) {
MBBuf.BusError = ILLEGAL_DATA_ADDRESS;
return;
}
@@ -287,6 +246,8 @@ void UserWriteDataProtocol(void)
#endif
//----------------------------------------------------------------------------
MBBuf.DataByte = 0;
MBBuf.StartAddr = 0;
while(1)
{
if(MBBuf.BusError != 0) return; // V2004
@@ -354,7 +315,7 @@ void UserWriteDataProtocol(void)
if(tmPDA > 99999999999) break;
flowAccumulationInteger = (unsigned long int)(tmPDA/1000);
flowAccumulationDecimal = (unsigned int)(tmPDA-(unsigned long long int)flowAccumulationInteger*1000);
flowAccumulationDecimal = (u16)(tmPDA-(unsigned long long int)flowAccumulationInteger*1000);
ConvertHEXToBCDArray(flowAccumulationInteger, &Dis1[ACC_INT1], 8, HIGH_FIRST);
ConvertHEXToBCDArray(flowAccumulationDecimal, &Dis1[ACC_DOT1], 3, HIGH_FIRST);
tmpLB = ReturnStartUnitBit(ACC_INT1);
@@ -375,8 +336,8 @@ void UserWriteDataProtocol(void)
#ifndef ENABLE_USER_UART
#pragma message("[undefined] ENABLE_USER_UART")
#elif(ENABLE_USER_UART)
case STD_SLAVER_ID:
FreeWriteWordByCom(&localAddress, SLAVER_ADDR, SLAVER_ADDR_WIDTH, SLAVER_ADDR_MAX, SLAVER_ADDR_MIN);
case STD_SLAVER_ADDR:
FreeWriteWordValidDataByCom(&localAddress, SLAVER_ADDR, SLAVER_ADDR_MAX, SLAVER_ADDR_MIN);
if(parameterState == ABORD_OPERATION) break;
BackupParameterToFlash();
break;
@@ -384,14 +345,14 @@ void UserWriteDataProtocol(void)
#endif
//------------------------------------------------------------------------------
case STD_OUT_FR_MIN:
if(BusAdr[MBBuf.StartAddr+1] != STD_OUT_FR_MIN+1) return;
WriteDWordByCom(&minFlowRate, MIN_FLOW, MIN_FLOW_WIDTH, maxFlowRate>>1, 0);
case STD_OUT_MIN_FLOW:
if(BusAdr[MBBuf.StartAddr+1] != STD_OUT_MIN_FLOW +1) return;
WriteDWordValidDataByCom(&minFlowRate, OUT_MIN_FLOW, maxFlowRate>>1, 0);
break;
case STD_OUT_FR_MAX:
if(BusAdr[MBBuf.StartAddr+1] != STD_OUT_FR_MAX+1) return;
WriteDWordByCom(&maxFlowRate, MAX_FLOW, MAX_FLOW_WIDTH, 0x7fffffff, 0);
case STD_OUT_MAX_FLOW:
if(BusAdr[MBBuf.StartAddr+1] != STD_OUT_MAX_FLOW+1) return;
WriteDWordValidDataByCom(&maxFlowRate, OUT_MAX_FLOW, 0x7fffffff, 0);
break;
//case STD_OUT_ANALOG_MIN: break;
@@ -401,7 +362,7 @@ void UserWriteDataProtocol(void)
#pragma message("[undefined] ENABLE_USER_GCF")
#elif(ENABLE_USER_GCF)
case STD_GCF:
WriteWordByCom(&GDCFactor, GCF_B, GCF_B_WIDTH, GCF_PARAMETER_MAX, GCF_PARAMETER_MIN);
WriteWordValidDataByCom(&GDCFactor, GCF_B, GCF_PARAMETER_MAX, GCF_PARAMETER_MIN);
if(parameterState == ABORD_OPERATION) break;
ComputeGCFFactor();
break;
@@ -409,7 +370,7 @@ void UserWriteDataProtocol(void)
//---------------------------------------------------------------------
//case STD_FILTER_DEPTH: break;
case STD_REPONSE_TIME: //WriteWordByCom(&factoryInterval, SAMPLE_PERIOD, SAMPLE_PERIOD_WIDTH, SAMPLE_PERIOD_MAX, SAMPLE_PERIOD_MIN); break;
case STD_RESPONSE_TIME: //WriteWordByCom(&factoryInterval, SAMPLE_PERIOD, SAMPLE_PERIOD_WIDTH, SAMPLE_PERIOD_MAX, SAMPLE_PERIOD_MIN); break;
SetWordCmdByCom(&CMDComPassword);
if(parameterState == ABORD_OPERATION) break;
@@ -417,7 +378,7 @@ void UserWriteDataProtocol(void)
if(parameterState == ABORD_OPERATION) break;
tempL.Word[0] = CMDComPassword;
responseTimeIndex = (unsigned int)WriteShortParameterToEEPROM(RESPONSE_TIME, RESPONSE_TIME_WIDTH);
responseTimeIndex = (u16)WriteShortParameterToMemory(RESPONSE_TIME);
responseTime = SetupResponseTime(responseTimeIndex, RESPONSE_TIME_DEFAULT);
break;
@@ -425,28 +386,21 @@ void UserWriteDataProtocol(void)
#ifndef ENABLE_USER_OFFSET
#pragma message("[undefined] ENABLE_USER_OFFSET")
#elif(ENABLE_USER_OFFSET)
case STD_GAS_OFFSET_C: WriteWordByCom(&offsetGas, OFFSET_GAS, OFFSET_GAS_WIDTH, OFFSET_MAX, OFFSET_MIN); break;
case STD_GAS_OFFSET_C: WriteWordValidDataByCom(&offsetGas, GAS_OFFSET, OFFSET_MAX, OFFSET_MIN); break;
#endif
//---------------------------------------------------------------------
#ifndef ENABLE_A_TYPE_FLOWRATE
#pragma message("[undefined] ENABLE_A_TYPE_FLOWRATE")
#elif(ENABLE_A_TYPE_FLOWRATE)
case STD_GAS_OFFSET_A: WriteWordByCom(&offsetGasA, OFFSET_A_GAS, OFFSET_A_GAS_WIDTH, OFFSET_A_MAX, OFFSET_A_MIN); break;
case STD_GAS_OFFSET_A: WriteWordValidDataByCom(&offsetGasA, OFFSET_A_GAS, OFFSET_A_MAX, OFFSET_A_MIN); break;
#endif
//---------------------------------------------------------------------
// V2004
#ifndef ENABLE_USER_SET_UNIT
#pragma message("[undefined] ENABLE_USER_SET_UNIT")
#elif(ENABLE_USER_SET_UNIT)
case STD_UNIT:
// SetWordCmdByCom(&CMDComPassword);
// if(parameterState == ABORD_OPERATION) break;
// if(CMDComPassword == flowUnit) break;
// ConvertAllFlowRateAndSave(tempL.Word[0]);
// break;
case STD_UNIT:
SetWordCmdByCom(&CMDComPassword);
if(parameterState == ABORD_OPERATION) break;
if(CMDComPassword == flowUnit) break;
@@ -455,9 +409,13 @@ void UserWriteDataProtocol(void)
#endif
//--------------------------------------------------------------------------
case STD_AIR_FACTOR: WriteWordByCom(&VHHParameterAir, VHH_AIR_PARA, VHH_AIR_PARA_WIDTH, 46728, 26728); break;
case STD_FACTOR_VTH: WriteWordByCom(&VHHParameterScale, VHH_PARA_SCALE, VHH_PARA_SCALE_WIDTH, 65535, 0); break;
#ifndef ENABLE_GAS_RECOGNITION
#pragma message("[undefined] ENABLE_GAS_RECOGNITION")
#elif(ENABLE_GAS_RECOGNITION)
case STD_AIR_FACTOR: WriteWordValidDataByCom(&airFactor, AIR_FACTOR, 46728, 26728); break;
case STD_FACTOR_VTH: WriteWordValidDataByCom(&factorVth, FACTOR_VTH, 65535, 0); break;
#endif
//--------------------------------------------------------------------------
#ifndef ENABLE_ACCPULSE
#pragma message("[undefined] ENABLE_ACCPULSE")
@@ -468,13 +426,13 @@ void UserWriteDataProtocol(void)
if(parameterState == ABORD_OPERATION) break;
if((signed int)CMDComPassword > PULSE_UNIT_MAX) break;
if((signed int)CMDComPassword < PULSE_UNIT_MIN) break;
tempDev.Word[0] = CMDComPassword;
factoryUnitPerPulse = (signed int)WriteParameterToEEPROM(PULSE_UNIT, PULSE_UNIT_WIDTH);
tempL.Word[0] = CMDComPassword;
factoryUnitPerPulse = (signed int)WriteShortParameterToMemory(PULSE_UNIT);
lastRemaining = 0;
Total[MIN_BIT] = 0;
break;
case STD_IO_OUTPUT_LEVEL: WriteWordByCom(&PulseLevel, PULSE_LEVEL, PULSE_LEVEL_WIDTH, 1, 0); break;
case STD_PULSE_LEVEL: WriteWordValidDataByCom(&PulseLevel, PULSE_LEVEL, 1, 0); break;
#endif
//--------------------------------------------------------------------------
@@ -489,7 +447,7 @@ void UserWriteDataProtocol(void)
if(parameterState == ABORD_OPERATION) break;
tempL.Word[0] = CMDComPassword;
factoryInterval = (unsigned int)WriteShortParameterToEEPROM(SAMPLE_PERIOD, SAMPLE_PERIOD_WIDTH);
factoryInterval = (u16)WriteShortParameterToMemory(SAMPLE_PERIOD);
samplingTiming = SetupResponseTime(factoryInterval, SAMPLE_PERIOD_DEFAULT);
break;
#endif
@@ -500,7 +458,7 @@ void UserWriteDataProtocol(void)
#elif(ENABLE_ALARM_ACC)
case STD_ALARM_ACC: // 0x96 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(BusAdr[MBBuf.StartAddr+1] != STD_ALARM_ACC+1) return;
WriteDWordByCom(&alarmAcc, ALARM_ACC, ALARM_ACC_WIDTH, ALARM_ACC_MAX, ALARM_ACC_MIN);
WriteDWordValidDataByCom(&alarmAcc, ALARM_ACC, ALARM_ACC_WIDTH, ALARM_ACC_MAX, ALARM_ACC_MIN);
break;
#endif
//--------------------------------------------------------------------------
@@ -509,8 +467,8 @@ void UserWriteDataProtocol(void)
//case STD_ALARM_LOWER_FLOW 0x9A // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//case STD_ALARM_FUN 0x9C // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//case STD_ALARM_OUT_DELAY 0x9D // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ (<28><>λ<EFBFBD><CEBB>s)
case STD_COM_DECIMAL: WriteWordByCom(&uartDecimalPoint, COM_DECIMAL_POINT, COM_DECIMAL_POINT_WIDTH, 4, 0); break;
case STD_RECORD_TIME: WriteWordByCom(&historyPeriod, HISTORY_PERIOD, HISTORY_PERIOD_WIDTH, 720, 0); break;
case STD_COM_DECIMAL: WriteWordValidDataByCom(&uartDecimalPoint, COM_DECIMAL, 4, 0); break;
case STD_RECORD_TIME: WriteWordValidDataByCom(&recordTime, RECORD_TIME, 720, 0); break;
//case STD_REVERSE_FR_MIN: break;
//case STD_REVERSE_FR_MAX: break;
@@ -519,7 +477,7 @@ void UserWriteDataProtocol(void)
#pragma message("[undefined] ENABLE_USER_I2C")
#elif(ENABLE_USER_I2C)
case STD_I2C_ADDR:
FreeWriteWordByCom(&localAddress, SLAVER_ADDR, SLAVER_ADDR_WIDTH, SLAVER_ADDR_MAX, SLAVER_ADDR_MIN);
FreeWriteWordValidDataByCom(&localAddress, SLAVER_ADDR, SLAVER_ADDR_WIDTH, SLAVER_ADDR_MAX, SLAVER_ADDR_MIN);
I2CAddr = localAddress;
if(parameterState == ABORD_OPERATION) break;
BackupParameterToFlash();
@@ -531,9 +489,9 @@ void UserWriteDataProtocol(void)
//--------------------------------------------------------------------------
//case STD_I2C_CRC_MOD: break;
case STD_TIMING_TXD_START: WriteWordByCom(&timingTxdStart, TIMING_TXD_START, TIMING_TXD_START_WIDTH, TIMING_TXD_START_MAX, TIMING_TXD_START_MIN); break;
case STD_TIMING_TXD_LEN: WriteWordByCom(&timingTxdLen, TIMING_TXD_LEN, TIMING_TXD_LEN_WIDTH, TIMING_TXD_LEN_MAX, TIMING_TXD_LEN_MIN); break;
case STD_TIMING_TXD_TIME: WriteWordByCom(&timingTxdTime, TIMING_TXD_TIME, TIMING_TXD_TIME_WIDTH, TIMING_TXD_TIME_MAX, 0); break;
case STD_TIMING_TXD_START: WriteWordValidDataByCom(&timingTxdStart, TIMING_TXD_START, TIMING_TXD_START_MAX, TIMING_TXD_START_MIN); break;
case STD_TIMING_TXD_LEN: WriteWordValidDataByCom(&timingTxdLen, TIMING_TXD_LEN, TIMING_TXD_LEN_MAX, TIMING_TXD_LEN_MIN); break;
case STD_TIMING_TXD_TIME: WriteWordValidDataByCom(&timingTxdTime, TIMING_TXD_TIME, TIMING_TXD_TIME_MAX, 0); break;
//case STD_PRESSURE_OFFSET 0xA9 // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//case STD_LORA_ADR 0xAA // LORA <20><>ַ
//case STD_LORA_NETID 0xAB // LORA<52><41>·id
@@ -544,16 +502,16 @@ void UserWriteDataProtocol(void)
#ifndef ENABLE_KEY_FUNCTION
#pragma message("[undefined] ENABLE_KEY_FUNCTION")
#elif(ENABLE_KEY_FUNCTION)
case STD_KEY_PASSWORD: WriteDWordByCom(&keyPassWord, KEY_PASSWORD, KEY_PASSWORD_WIDTH, 99999, 0); break; // 0xAE <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case STD_KEY_PASSWORD: WriteDWordValidDataByCom(&keyPassWord, KEY_PASSWORD, KEY_PASSWORD_WIDTH, 99999, 0); break; // 0xAE <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
//---------------------------------------------------------------------
#ifndef ENABLE_LEAK_DETECT
#pragma message("[undefined] ENABLE_LEAK_DETECT")
#elif(ENABLE_LEAK_DETECT)
case STD_LEAK_FR_MIN: WriteWordByCom(&minLeakFlowRate, MIN_LEAK_FLOW, MIN_LEAK_FLOW_WIDTH, MIN_LEAK_FLOW_MAX, MIN_LEAK_FLOW_MIN); break;
case STD_LEAK_FR_MAX: WriteWordByCom(&maxLeakFlowRate, MAX_LEAK_FLOW, MAX_LEAK_FLOW_WIDTH, MAX_LEAK_FLOW_MAX, MAX_LEAK_FLOW_MIN); break;
case STD_LEAK_TIMING: WriteWordByCom(&leakDetectTime, LEAK_TIME, LEAK_TIME_WIDTH, LEAK_TIME_MAX, 0); break;
case STD_LEAK_FR_MIN: WriteWordValidDataByCom(&minLeakFlowRate, MIN_LEAK_FLOW, MIN_LEAK_FLOW_WIDTH, MIN_LEAK_FLOW_MAX, MIN_LEAK_FLOW_MIN); break;
case STD_LEAK_FR_MAX: WriteWordValidDataByCom(&maxLeakFlowRate, MAX_LEAK_FLOW, MAX_LEAK_FLOW_WIDTH, MAX_LEAK_FLOW_MAX, MAX_LEAK_FLOW_MIN); break;
case STD_LEAK_TIMING: WriteWordValidDataByCom(&leakDetectTime, LEAK_TIME, LEAK_TIME_WIDTH, LEAK_TIME_MAX, 0); break;
#endif
//**************************************************************************
@@ -600,14 +558,14 @@ void UserWriteDataProtocol(void)
if(CMDComPassword == 0x0000AAFF)
{
tempL.Word[0] = voltageDetected[VHPA];
densityFSParameter = (unsigned int)WriteShortParameterToEEPROM(DENSITY_FS_PARA, DENSITY_FS_PARA_WIDTH);
densityFSParameter = (u16)WriteShortParameterToEEPROM(DENSITY_FS_PARA, DENSITY_FS_PARA_WIDTH);
break;
}
// <20>Ͷ<EFBFBD>У׼
if(CMDComPassword == 0x0000AA00)
{
tempL.Word[0] = voltageDetected[VHPA];
VHHParameterAir = (unsigned int)WriteShortParameterToEEPROM(VHH_AIR_PARA, VHH_AIR_PARA_WIDTH);
VHHParameterAir = (u16)WriteShortParameterToEEPROM(VHH_AIR_PARA, VHH_AIR_PARA_WIDTH);
break;
}
#endif
@@ -677,11 +635,11 @@ void UserWriteDataProtocol(void)
DataPoint = &MAPPoint1;
MBBuf.DataByte = BusAdr[MBBuf.StartAddr] - STD_MAP_SET1;
DataPoint -= MBBuf.DataByte;
WriteWordByCom(DataPoint, MAP_SET1 + MBBuf.DataByte * MAP_SET_WIDTH, MAP_SET_WIDTH, 256, 0);
WriteWordValidDataByCom(DataPoint, MAP_SET1 + MBBuf.DataByte * REG_WORD_WIDTH, 256, 0);
MBBuf.DataByte = 2;
break;
case STD_DCOEF_NUM: WriteWordByCom(&dcoefNum, DCOEF_NUM, DCOEF_NUM_WIDTH, 20, 3); break;
case STD_DCOEF_NUM: WriteWordValidDataByCom(&dcoefNum, DCOEF_NUM, 20, 3); break;
case STD_DCOEF_NODE1:
case STD_DCOEF_NODE2:
case STD_DCOEF_NODE3:
@@ -709,7 +667,6 @@ void UserWriteDataProtocol(void)
if(parameterState == ABORD_OPERATION) return;
dcoefNode[I] = tmpLA;
IDvalidTime = 0;
HWState.EnableCheckCorr = 0;
StoreDevCoefNodeAndValue(I);
break;
@@ -742,7 +699,6 @@ void UserWriteDataProtocol(void)
if(tempL.Word[0] > METER_PARAMETER_MAX) return;
if(tempL.Word[0] < METER_PARAMETER_MIN) return;
IDvalidTime = 0;
dcoefVal[I] = tempL.Word[0];
StoreDevCoefNodeAndValue(I);
HWState.EnableCheckCorr = 0;

View File

@@ -2,265 +2,357 @@
#define __UserModbus_h__
//******************************************************************************
#define meterSN1 MBReg[INX_030] //0x8000
#define meterSN2 MBReg[INX_031] //0x8001
#define meterSN3 MBReg[INX_032] //0x8002
#define meterSN4 MBReg[INX_033] //0x8003
#define meterSN5 MBReg[INX_034] //0x8004
#define meterSN6 MBReg[INX_035] //0x8005
#define alarmState MBReg[INX_036] //0x8006
#define alarmState1 MBReg[INX_037] //0x8007
#define alarmState2 MBReg[INX_038] //0x8008
#define alarmState3 MBReg[INX_039] //0x8009
#define flowRateH MBReg[INX_03A] //0x800A
#define flowRateL MBReg[INX_03B] //0x800B
#define flowAccumulationIntegerH MBReg[INX_03C] //0x800C
#define flowAccumulationIntegerL MBReg[INX_03D] //0x800D
#define flowAccumulationDecimal MBReg[INX_03E] //0x800E
#define PCBTemperature MBReg[INX_03F] //0x800F
#define GasTemperature MBReg[INX_040] //0x8010
//#define MBReg[INX_041] //0x8011
//#define MBReg[INX_042] //0x8012
//#define MBReg[INX_043] //0x8013
//#define MBReg[INX_044] //0x8014
#define GASPressureH MBReg[INX_045] //0x8015
#define GASPressureL MBReg[INX_046] //0x8016
#define density MBReg[INX_047] //0x8017
#define batteryCY MBReg[INX_048] //0x8018
#define batteryVoltage MBReg[INX_049] //0x8019
#define batteryDay MBReg[INX_04A] //0x801A
#define batteryRDay MBReg[INX_04B] //0x801B
#define ComBatteryCY MBReg[INX_04C] //0x801C
#define ComBatteryVoltage MBReg[INX_04D] //0x801D
#define ComBatteryDay MBReg[INX_04E] //0x801E
#define ComBatteryRDay MBReg[INX_04F] //0x801F
#define useMinte MBReg[INX_050] //0x8020
#define useHourH MBReg[INX_051] //0x8021
#define useHourL MBReg[INX_052] //0x8022
#define VHHParameter MBReg[INX_053] //0x8023
//#define MBReg[INX_054] //0x8024
//#define MBReg[INX_055] //0x8025
#define flowAccumulationHexH MBReg[INX_056] //0x8026
#define flowAccumulationHexHM MBReg[INX_057] //0x8027
#define flowAccumulationHexLM MBReg[INX_058] //0x8028
#define flowAccumulationHexL MBReg[INX_059] //0x8029
//#define MBReg[INX_05A] //0x802A
//#define MBReg[INX_05B] //0x802B
//#define MBReg[INX_05C] //0x802C
//#define MBReg[INX_05D] //0x802D
//#define MBReg[INX_05E] //0x802E
#define densityFSParameter MBReg[INX_05F] //0x802F
//#define MBReg[INX_060] //0x8030
//#define MBReg[INX_061] //0x8031
//#define MBReg[INX_062] //0x8032
//#define MBReg[INX_063] //0x8033
//#define MBReg[INX_064] //0x8034
//#define MBReg[INX_065] //0x8035
//#define MBReg[INX_066] //0x8036
//#define MBReg[INX_067] //0x8037
//#define MBReg[INX_068] //0x8038
//#define MBReg[INX_069] //0x8039
//#define MBReg[INX_06A] //0x803A
//#define MBReg[INX_06B] //0x803B
//#define MBReg[INX_06C] //0x803C
//#define MBReg[INX_06D] //0x803D
//#define MBReg[INX_06E] //0x803E
//#define MBReg[INX_06F] //0x803F
//#define MBReg[INX_070] //0x8040
//#define MBReg[INX_071] //0x8041
//#define MBReg[INX_072] //0x8042
//#define MBReg[INX_073] //0x8043
//#define MBReg[INX_074] //0x8044
//#define MBReg[INX_075] //0x8045
//#define MBReg[INX_076] //0x8046
//#define MBReg[INX_077] //0x8047
//#define MBReg[INX_078] //0x8048
//#define MBReg[INX_079] //0x8049
//#define MBReg[INX_07A] //0x804A
//#define MBReg[INX_07B] //0x804B
//#define MBReg[INX_07C] //0x804C
//#define MBReg[INX_07D] //0x804D
#define softCRCCode MBReg[INX_07E] //0x804E
#define softVersion MBReg[INX_07F] //0x804F
#define protocol MBReg[INX_080] //0x8050
#define localAddress MBReg[INX_081] //0x8051
#define baudRate MBReg[INX_082] //0x8052
#define minFlowRateH MBReg[INX_083] //0x8053
#define minFlowRateL MBReg[INX_084] //0x8054
#define maxFlowRateH MBReg[INX_085] //0x8055
#define maxFlowRateL MBReg[INX_086] //0x8056
#define minAnalogOutputH MBReg[INX_087] //0x8057
#define minAnalogOutputL MBReg[INX_088] //0x8058
#define maxAnalogOutputH MBReg[INX_089] //0x8059
#define maxAnalogOutputL MBReg[INX_08A] //0x805A
#define GDCFactor MBReg[INX_08B] //0x805B
#define filterTime MBReg[INX_08C] //0x805C
#define responseTime MBReg[INX_08D] //0x805D
#define offsetGas MBReg[INX_08E] //0x805E
#define offsetGasA MBReg[INX_08F] //0x805F
#define flowUnit MBReg[INX_090] //0x8060
#define VHHParameterAir MBReg[INX_091] //0x8061
#define VHHParameterScale MBReg[INX_092] //0x8062
#define factoryUnitPerPulse MBReg[INX_093] //0x8063
#define PulseLevel MBReg[INX_094] //0x8064
#define samplingTiming MBReg[INX_095] //0x8065
#define alarmAccH MBReg[INX_096] //0x8066
#define alarmAccL MBReg[INX_097] //0x8067
#define alarmUpperFlowRateH MBReg[INX_098] //0x8068
#define alarmUpperFlowRateL MBReg[INX_099] //0x8069
#define alarmLowerFlowRateH MBReg[INX_09A] //0x806A
#define alarmLowerFlowRateL MBReg[INX_09B] //0x806B
#define alarmFunction MBReg[INX_09C] //0x806C
#define alarmOutDelay MBReg[INX_09D] //0x806D
#define uartDecimalPoint MBReg[INX_09E] //0x806E
#define historyPeriod MBReg[INX_09F] //0x806F
#define reverseFlowRateMinH MBReg[INX_0A0] //0x8070
#define reverseFlowRateMinL MBReg[INX_0A1] //0x8071
#define reverseFlowRateMaxH MBReg[INX_0A2] //0x8072
#define reverseFlowRateMaxL MBReg[INX_0A3] //0x8073
#define I2CAddr MBReg[INX_0A4] //0x8074
#define I2CCrcMod MBReg[INX_0A5] //0x8075
#define timingTxdStart MBReg[INX_0A6] //0x8076
#define timingTxdLen MBReg[INX_0A7] //0x8077
#define timingTxdTime MBReg[INX_0A8] //0x8078
#define pressureOffset MBReg[INX_0A9] //0x8079
//#define MBReg[INX_0AA] //0x807A
//#define MBReg[INX_0AB] //0x807B
//#define MBReg[INX_0AC] //0x807C
//#define MBReg[INX_0AD] //0x807D
#define keyPassWordH MBReg[INX_0AE] //0x807E
#define keyPassWordL MBReg[INX_0AF] //0x807F
//#define MBReg[INX_0B0] //0x8080
//#define MBReg[INX_0B1] //0x8081
//#define MBReg[INX_0B2] //0x8082
//#define MBReg[INX_0B3] //0x8083
//#define MBReg[INX_0B4] //0x8084
//#define MBReg[INX_0B5] //0x8085
//#define MBReg[INX_0B6] //0x8086
//#define MBReg[INX_0B7] //0x8088
//#define MBReg[INX_0B8] //0x8088
//#define MBReg[INX_0B9] //0x8089
//#define MBReg[INX_0BA] //0x808A
//#define MBReg[INX_0BB] //0x808B
//#define MBReg[INX_0BC] //0x808C
//#define MBReg[INX_0BD] //0x808D
//#define MBReg[INX_0BE] //0x808E
//#define MBReg[INX_0BF] //0x808F
//#define MBReg[INX_0C0] //0x8090
//#define MBReg[INX_0C1] //0x8091
//#define MBReg[INX_0C2] //0x8092
//#define MBReg[INX_0C3] //0x8093
//#define MBReg[INX_0C4] //0x8094
//#define MBReg[INX_0C5] //0x8095
//#define MBReg[INX_0C6] //0x8099
//#define MBReg[INX_0C7] //0x8097
//#define MBReg[INX_0C8] //0x8098
//#define MBReg[INX_0C9] //0x8099
//#define MBReg[INX_0CA] //0x809A
//#define MBReg[INX_0CB] //0x809B
//#define MBReg[INX_0CC] //0x809C
//#define MBReg[INX_0CD] //0x809D
//#define MBReg[INX_0CE] //0x809E
//#define MBReg[INX_0CF] //0x809F
//#define MBReg[INX_0D0] //0x80A0
//#define MBReg[INX_0D1] //0x80A1
//#define MBReg[INX_0D2] //0x80A2
//#define MBReg[INX_0D3] //0x80A3
//#define MBReg[INX_0D4] //0x80A4
//#define MBReg[INX_0D5] //0x80A5
//#define MBReg[INX_0D6] //0x80A6
//#define MBReg[INX_0D7] //0x80A7
//#define MBReg[INX_0D8] //0x80A8
//#define MBReg[INX_0D9] //0x80A9
#define minLeakFlowRate MBReg[INX_0DA] //0x80AA
#define maxLeakFlowRate MBReg[INX_0DB] //0x80AB
#define leakDetectTime MBReg[INX_0DC] //0x80AC
//#define MBReg[INX_0DD] //0x80AD
#define GDCFactorAType MBReg[INX_0DE] //0x80AE
//#define MBReg[INX_0DF] //0x80AF
//#define MBReg[INX_0E0] //0x80B0
//#define MBReg[INX_0E1] //0x80B1
//#define MBReg[INX_0E2] //0x80B2
//#define MBReg[INX_0E3] //0x80B3
//#define MBReg[INX_0E4] //0x80B4
//#define MBReg[INX_0E5] //0x80B5
//#define MBReg[INX_0E6] //0x80B6
//#define MBReg[INX_0E7] //0x80BB
//#define MBReg[INX_0E8] //0x80B8
//#define MBReg[INX_0E9] //0x80B9
//#define MBReg[INX_0EA] //0x80BA
//#define MBReg[INX_0EB] //0x80BB
//#define MBReg[INX_0EC] //0x80BC
//#define MBReg[INX_0ED] //0x80BD
//#define MBReg[INX_0EE] //0x80BE
//#define MBReg[INX_0EF] //0x80BF
#define CMDCalOffset MBReg[INX_0F0] //0x80C0
#define CMDClrRecord MBReg[INX_0F1] //0x80C1
//#define MBReg[INX_0F2] //0x80C2
//#define MBReg[INX_0F3] //0x80C3
//#define MBReg[INX_0F4] //0x80C4
//#define MBReg[INX_0F5] //0x80C5
//#define MBReg[INX_0F6] //0x80C6
//#define MBReg[INX_0F7] //0x80C7
//#define MBReg[INX_0F8] //0x80C8
//#define MBReg[INX_0F9] //0x80C9
//#define MBReg[INX_0FA] //0x80CA
//#define MBReg[INX_0FB] //0x80CB
//#define MBReg[INX_0FC] //0x80CC
//#define MBReg[INX_0FD] //0x80CD
//#define MBReg[INX_0FE] //0x80CE
#define CMDComPassword MBReg[INX_0FF] //0x80CF
#define MAPPoint1 MBReg[INX_100] //0x80D0
#define MAPPoint2 MBReg[INX_101] //0x80D1
#define MAPPoint3 MBReg[INX_102] //0x80D2
#define MAPPoint4 MBReg[INX_103] //0x80D3
#define MAPPoint5 MBReg[INX_104] //0x80D4
#define MAPPoint6 MBReg[INX_105] //0x80D5
#define MAPPoint7 MBReg[INX_106] //0x80D6
#define MAPPoint8 MBReg[INX_107] //0x80D7
#define MAPPoint9 MBReg[INX_108] //0x80D8
#define MAPPoint10 MBReg[INX_109] //0x80D9
#define MAPPoint11 MBReg[INX_10A] //0x80DA
#define MAPPoint12 MBReg[INX_10B] //0x80DB
#define MAPPoint13 MBReg[INX_10C] //0x80DC
#define MAPPoint14 MBReg[INX_10D] //0x80DD
#define MAPPoint15 MBReg[INX_10E] //0x80DE
#define MAPPoint16 MBReg[INX_10F] //0x80DF
#define MAPPoint17 MBReg[INX_110] //0x80E0
#define MAPPoint18 MBReg[INX_111] //0x80E1
#define MAPPoint19 MBReg[INX_112] //0x80E2
#define MAPPoint20 MBReg[INX_113] //0x80E3
#define MAPPoint21 MBReg[INX_114] //0x80E4
#define MAPPoint22 MBReg[INX_115] //0x80E5
#define MAPPoint23 MBReg[INX_116] //0x80E6
#define MAPPoint24 MBReg[INX_117] //0x80E7
#define MAPPoint25 MBReg[INX_118] //0x80E8
#define MAPPoint26 MBReg[INX_119] //0x80E9
#define MAPPoint27 MBReg[INX_11A] //0x80EA
#define MAPPoint28 MBReg[INX_11B] //0x80EB
#define MAPPoint29 MBReg[INX_11C] //0x80EC
#define MAPPoint30 MBReg[INX_11D] //0x80ED
#define MAPPoint31 MBReg[INX_11E] //0x80EE
#define MAPPoint32 MBReg[INX_11F] //0x80EF
#define MAPPoint33 MBReg[INX_120] //0x80F0
#define MAPPoint34 MBReg[INX_121] //0x80F1
#define MAPPoint35 MBReg[INX_122] //0x80F2
#define MAPPoint36 MBReg[INX_123] //0x80F3
#define MAPPoint37 MBReg[INX_124] //0x80F4
#define MAPPoint38 MBReg[INX_125] //0x80F5
#define MAPPoint39 MBReg[INX_126] //0x80F6
#define MAPPoint40 MBReg[INX_127] //0x80F7
#define MAPPoint41 MBReg[INX_128] //0x80F8
#define MAPPoint42 MBReg[INX_129] //0x80F9
#define MAPPoint43 MBReg[INX_12A] //0x80FA
#define MAPPoint44 MBReg[INX_12B] //0x80FB
#define MAPPoint45 MBReg[INX_12C] //0x80FC
#define MAPPoint46 MBReg[INX_12D] //0x80FD
#define MAPPoint47 MBReg[INX_12E] //0x80FE
#define MAPPoint48 MBReg[INX_12F] //0x80FF
#define meterSN1 MBReg[INX_030]
#define meterSN2 MBReg[INX_031]
#define meterSN3 MBReg[INX_032]
#define meterSN4 MBReg[INX_033]
#define meterSN5 MBReg[INX_034]
#define meterSN6 MBReg[INX_035]
#define alarmState MBReg[INX_036]
#define alarmState1 MBReg[INX_037]
#define alarmState2 MBReg[INX_038]
#define alarmState3 MBReg[INX_039]
#define flowRateH MBReg[INX_03A]
#define flowRateL MBReg[INX_03B]
#define flowAccumulationIntegerH MBReg[INX_03C]
#define flowAccumulationIntegerL MBReg[INX_03D]
#define flowAccumulationDecimal MBReg[INX_03E]
#define PCBTemperature MBReg[INX_03F]
#define GasTemperature MBReg[INX_040]
//#define MBReg[INX_041]
//#define MBReg[INX_042]
//#define MBReg[INX_043]
//#define MBReg[INX_044]
#define GASPressureH MBReg[INX_045]
#define GASPressureL MBReg[INX_046]
#define density MBReg[INX_047]
#define batteryCY MBReg[INX_048]
#define batteryVoltage MBReg[INX_049]
#define batteryDay MBReg[INX_04A]
#define batteryRDay MBReg[INX_04B]
#define ComBatteryCY MBReg[INX_04C]
#define ComBatteryVoltage MBReg[INX_04D]
#define ComBatteryDay MBReg[INX_04E]
#define ComBatteryRDay MBReg[INX_04F]
#define useMinte MBReg[INX_050]
#define useHourH MBReg[INX_051]
#define useHourL MBReg[INX_052]
#define VHHParameter MBReg[INX_053]
//#define MBReg[INX_054]
//#define MBReg[INX_055]
#define flowAccumulationHexH MBReg[INX_056]
#define flowAccumulationHexHM MBReg[INX_057]
#define flowAccumulationHexLM MBReg[INX_058]
#define flowAccumulationHexL MBReg[INX_059]
//#define MBReg[INX_05A]
//#define MBReg[INX_05B]
//#define MBReg[INX_05C]
//#define MBReg[INX_05D]
//#define MBReg[INX_05E]
#define densityFSParameter MBReg[INX_05F]
//#define MBReg[INX_060]
//#define MBReg[INX_061]
//#define MBReg[INX_062]
//#define MBReg[INX_063]
//#define MBReg[INX_064]
//#define MBReg[INX_065]
//#define MBReg[INX_066]
//#define MBReg[INX_067]
//#define MBReg[INX_068]
//#define MBReg[INX_069]
//#define MBReg[INX_06A]
//#define MBReg[INX_06B]
//#define MBReg[INX_06C]
//#define MBReg[INX_06D]
//#define MBReg[INX_06E]
//#define MBReg[INX_06F]
//#define MBReg[INX_070]
//#define MBReg[INX_071]
//#define MBReg[INX_072]
//#define MBReg[INX_073]
//#define MBReg[INX_074]
//#define MBReg[INX_075]
//#define MBReg[INX_076]
//#define MBReg[INX_077]
//#define MBReg[INX_078]
//#define MBReg[INX_079]
//#define MBReg[INX_07A]
//#define MBReg[INX_07B]
//#define MBReg[INX_07C]
//#define MBReg[INX_07D]
#define softCRCCode MBReg[INX_07E]
#define softVersion MBReg[INX_07F]
#define protocol MBReg[INX_080]
#define localAddress MBReg[INX_081]
#define baudRate MBReg[INX_082]
#define minFlowRateH MBReg[INX_083]
#define minFlowRateL MBReg[INX_084]
#define maxFlowRateH MBReg[INX_085]
#define maxFlowRateL MBReg[INX_086]
#define minAnalogOutputH MBReg[INX_087]
#define minAnalogOutputL MBReg[INX_088]
#define maxAnalogOutputH MBReg[INX_089]
#define maxAnalogOutputL MBReg[INX_08A]
#define GDCFactor MBReg[INX_08B]
#define filterTime MBReg[INX_08C]
#define responseTime MBReg[INX_08D]
#define offsetGas MBReg[INX_08E]
#define offsetGasA MBReg[INX_08F]
#define flowUnit MBReg[INX_090]
#define airFactor MBReg[INX_091]
#define factorVth MBReg[INX_092]
#define factoryUnitPerPulse MBReg[INX_093]
#define PulseLevel MBReg[INX_094]
#define samplingTiming MBReg[INX_095]
#define alarmAccH MBReg[INX_096]
#define alarmAccL MBReg[INX_097]
#define alarmUpperFlowRateH MBReg[INX_098]
#define alarmUpperFlowRateL MBReg[INX_099]
#define alarmLowerFlowRateH MBReg[INX_09A]
#define alarmLowerFlowRateL MBReg[INX_09B]
#define alarmFunction MBReg[INX_09C]
#define alarmOutDelay MBReg[INX_09D]
#define uartDecimalPoint MBReg[INX_09E]
#define recordTime MBReg[INX_09F]
#define reverseFlowRateMinH MBReg[INX_0A0]
#define reverseFlowRateMinL MBReg[INX_0A1]
#define reverseFlowRateMaxH MBReg[INX_0A2]
#define reverseFlowRateMaxL MBReg[INX_0A3]
#define I2CAddr MBReg[INX_0A4]
#define I2CCrcMod MBReg[INX_0A5]
#define timingTxdStart MBReg[INX_0A6]
#define timingTxdLen MBReg[INX_0A7]
#define timingTxdTime MBReg[INX_0A8]
#define pressureOffset MBReg[INX_0A9]
//#define MBReg[INX_0AA]
//#define MBReg[INX_0AB]
//#define MBReg[INX_0AC]
//#define MBReg[INX_0AD]
#define keyPassWordH MBReg[INX_0AE]
#define keyPassWordL MBReg[INX_0AF]
//#define MBReg[INX_0B0]
//#define MBReg[INX_0B1]
//#define MBReg[INX_0B2]
//#define MBReg[INX_0B3]
//#define MBReg[INX_0B4]
//#define MBReg[INX_0B5]
//#define MBReg[INX_0B6]
//#define MBReg[INX_0B7]
//#define MBReg[INX_0B8]
//#define MBReg[INX_0B9]
//#define MBReg[INX_0BA]
//#define MBReg[INX_0BB]
//#define MBReg[INX_0BC]
//#define MBReg[INX_0BD]
//#define MBReg[INX_0BE]
//#define MBReg[INX_0BF]
//#define MBReg[INX_0C0]
//#define MBReg[INX_0C1]
//#define MBReg[INX_0C2]
//#define MBReg[INX_0C3]
//#define MBReg[INX_0C4]
//#define MBReg[INX_0C5]
//#define MBReg[INX_0C6]
//#define MBReg[INX_0C7]
//#define MBReg[INX_0C8]
//#define MBReg[INX_0C9]
//#define MBReg[INX_0CA]
//#define MBReg[INX_0CB]
//#define MBReg[INX_0CC]
//#define MBReg[INX_0CD]
//#define MBReg[INX_0CE]
//#define MBReg[INX_0CF]
//#define MBReg[INX_0D0]
//#define MBReg[INX_0D1]
//#define MBReg[INX_0D2]
//#define MBReg[INX_0D3]
//#define MBReg[INX_0D4]
//#define MBReg[INX_0D5]
//#define MBReg[INX_0D6]
//#define MBReg[INX_0D7]
//#define MBReg[INX_0D8]
//#define MBReg[INX_0D9]
#define minLeakFlowRate MBReg[INX_0DA]
#define maxLeakFlowRate MBReg[INX_0DB]
#define leakDetectTime MBReg[INX_0DC]
//#define MBReg[INX_0DD]
#define GDCFactorAType MBReg[INX_0DE]
//#define MBReg[INX_0DF]
//#define MBReg[INX_0E0]
//#define MBReg[INX_0E1]
//#define MBReg[INX_0E2]
//#define MBReg[INX_0E3]
//#define MBReg[INX_0E4]
//#define MBReg[INX_0E5]
//#define MBReg[INX_0E6]
//#define MBReg[INX_0E7]
//#define MBReg[INX_0E8]
//#define MBReg[INX_0E9]
//#define MBReg[INX_0EA]
//#define MBReg[INX_0EB]
//#define MBReg[INX_0EC]
//#define MBReg[INX_0ED]
//#define MBReg[INX_0EE]
//#define MBReg[INX_0EF]
#define CMDCalOffset MBReg[INX_0F0]
#define CMDClrRecord MBReg[INX_0F1]
//#define MBReg[INX_0F2]
//#define MBReg[INX_0F3]
//#define MBReg[INX_0F4]
//#define MBReg[INX_0F5]
//#define MBReg[INX_0F6]
//#define MBReg[INX_0F7]
//#define MBReg[INX_0F8]
//#define MBReg[INX_0F9]
//#define MBReg[INX_0FA]
//#define MBReg[INX_0FB]
//#define MBReg[INX_0FC]
//#define MBReg[INX_0FD]
//#define MBReg[INX_0FE]
#define CMDComPassword MBReg[INX_0FF]
#define MAPPoint1 MBReg[INX_100]
#define MAPPoint2 MBReg[INX_101]
#define MAPPoint3 MBReg[INX_102]
#define MAPPoint4 MBReg[INX_103]
#define MAPPoint5 MBReg[INX_104]
#define MAPPoint6 MBReg[INX_105]
#define MAPPoint7 MBReg[INX_106]
#define MAPPoint8 MBReg[INX_107]
#define MAPPoint9 MBReg[INX_108]
#define MAPPoint10 MBReg[INX_109]
#define MAPPoint11 MBReg[INX_10A]
#define MAPPoint12 MBReg[INX_10B]
#define MAPPoint13 MBReg[INX_10C]
#define MAPPoint14 MBReg[INX_10D]
#define MAPPoint15 MBReg[INX_10E]
#define MAPPoint16 MBReg[INX_10F]
#define MAPPoint17 MBReg[INX_110]
#define MAPPoint18 MBReg[INX_111]
#define MAPPoint19 MBReg[INX_112]
#define MAPPoint20 MBReg[INX_113]
#define MAPPoint21 MBReg[INX_114]
#define MAPPoint22 MBReg[INX_115]
#define MAPPoint23 MBReg[INX_116]
#define MAPPoint24 MBReg[INX_117]
#define MAPPoint25 MBReg[INX_118]
#define MAPPoint26 MBReg[INX_119]
#define MAPPoint27 MBReg[INX_11A]
#define MAPPoint28 MBReg[INX_11B]
#define MAPPoint29 MBReg[INX_11C]
#define MAPPoint30 MBReg[INX_11D]
#define MAPPoint31 MBReg[INX_11E]
#define MAPPoint32 MBReg[INX_11F]
#define MAPPoint33 MBReg[INX_120]
#define MAPPoint34 MBReg[INX_121]
#define MAPPoint35 MBReg[INX_122]
#define MAPPoint36 MBReg[INX_123]
#define MAPPoint37 MBReg[INX_124]
#define MAPPoint38 MBReg[INX_125]
#define MAPPoint39 MBReg[INX_126]
#define MAPPoint40 MBReg[INX_127]
#define MAPPoint41 MBReg[INX_128]
#define MAPPoint42 MBReg[INX_129]
#define MAPPoint43 MBReg[INX_12A]
#define MAPPoint44 MBReg[INX_12B]
#define MAPPoint45 MBReg[INX_12C]
#define MAPPoint46 MBReg[INX_12D]
#define MAPPoint47 MBReg[INX_12E]
#define MAPPoint48 MBReg[INX_12F]
#define dcoefNum MBReg[INX_130]
//--------------------------------------------------------
//#define MBReg[INX_131]
//#define MBReg[INX_132]
//#define MBReg[INX_133]
//#define MBReg[INX_134]
//#define MBReg[INX_135]
//#define MBReg[INX_136]
//#define MBReg[INX_137]
//#define MBReg[INX_138]
//#define MBReg[INX_139]
//#define MBReg[INX_13A]
//#define MBReg[INX_13B]
//#define MBReg[INX_13C]
//#define MBReg[INX_13D]
//#define MBReg[INX_13E]
//#define MBReg[INX_13F]
//#define MBReg[INX_140]
//#define MBReg[INX_141]
//#define MBReg[INX_142]
//#define MBReg[INX_143]
//#define MBReg[INX_144]
//#define MBReg[INX_145]
//#define MBReg[INX_146]
//#define MBReg[INX_147]
//#define MBReg[INX_148]
//#define MBReg[INX_149]
//#define MBReg[INX_14A]
//#define MBReg[INX_14B]
//#define MBReg[INX_14C]
//#define MBReg[INX_14D]
//#define MBReg[INX_14E]
//#define MBReg[INX_14F]
//#define MBReg[INX_150]
//#define MBReg[INX_151]
//#define MBReg[INX_152]
//#define MBReg[INX_153]
//#define MBReg[INX_154]
//#define MBReg[INX_155]
//#define MBReg[INX_156]
//#define MBReg[INX_157]
//#define MBReg[INX_158]
//#define MBReg[INX_159]
//#define MBReg[INX_15A]
//#define MBReg[INX_15B]
//#define MBReg[INX_15C]
//#define MBReg[INX_15D]
//#define MBReg[INX_15E]
//#define MBReg[INX_15F]
//#define MBReg[INX_160]
//#define MBReg[INX_161]
//#define MBReg[INX_162]
//#define MBReg[INX_163]
//#define MBReg[INX_164]
//#define MBReg[INX_165]
//#define MBReg[INX_166]
//#define MBReg[INX_167]
//#define MBReg[INX_168]
//#define MBReg[INX_169]
//#define MBReg[INX_16A]
//#define MBReg[INX_16B]
//#define MBReg[INX_16C]
//#define MBReg[INX_16D]
//#define MBReg[INX_16E]
//#define MBReg[INX_16F]
//#define MBReg[INX_170]
//#define MBReg[INX_171]
//#define MBReg[INX_172]
//#define MBReg[INX_173]
//#define MBReg[INX_174]
//#define MBReg[INX_175]
//#define MBReg[INX_176]
//#define MBReg[INX_177]
//#define MBReg[INX_178]
//#define MBReg[INX_179]
//#define MBReg[INX_17A]
//#define MBReg[INX_17B]
//#define MBReg[INX_17C]
//#define MBReg[INX_17D]
//#define MBReg[INX_17E]
//#define MBReg[INX_17F]
//#define MBReg[INX_180]
/*****************************************************************************************/
extern u16 MBReg[];
#define GET_MBWORD_IDX(var) ((u32)(&(var) - MBReg)) //<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>varΪMBReg[index]<5D>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
#define GET_MBWORD_ADDR(var) (MEM_ADDR_REG_0X30+GET_MBWORD_IDX(var)*REG_WORD_WIDTH)//<2F><><EFBFBD><EFBFBD> <20><> <20><>ַvarΪMBReg[index]<5D>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>
#define ADR_MBWORD_IDX(adr) (((u32)(adr) - MEM_ADDR_REG_0X30) / REG_WORD_WIDTH)//<2F><>ַ <20><> <20><><EFBFBD><EFBFBD> adrΪMBReg[index]<5D><>ʵ<EFBFBD><CAB5><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ַ
/*****************************************************************************************/
#define SERIES_BASE GET_MBWORD_ADDR(meterSN1)
#define SERIES_DEPTH 12
//--------------------------------------------------------
u16 SetupResponseTimeIndex(u16 response, u16 responseDefalt);
u16 SetupResponseTime(u16 response, u16 responseDefalt);

View File

@@ -2,10 +2,10 @@
#define __UserModbusDefine_h__
//******************************************************************************
#define INX_030 0x000
#define INX_031 0x001
#define INX_032 0x002
#define INX_033 0x003
#define INX_030 0x000
#define INX_031 0x001
#define INX_032 0x002
#define INX_033 0x003
#define INX_034 0x004
#define INX_035 0x005
#define INX_036 0x006
@@ -260,7 +260,93 @@
#define INX_12F 0x0FF
#define INX_130 0x100
#define USER_INX_MAX (INX_130+1)
#define INX_131 0x101
#define INX_132 0x102
#define INX_133 0x103
#define INX_134 0x104
#define INX_135 0x105
#define INX_136 0x106
#define INX_137 0x107
#define INX_138 0x108
#define INX_139 0x109
#define INX_13A 0x10A
#define INX_13B 0x10B
#define INX_13C 0x10C
#define INX_13D 0x10D
#define INX_13E 0x10E
#define INX_13F 0x10F
#define INX_140 0x110
#define INX_141 0x111
#define INX_142 0x112
#define INX_143 0x113
#define INX_144 0x114
#define INX_145 0x115
#define INX_146 0x116
#define INX_147 0x117
#define INX_148 0x118
#define INX_149 0x119
#define INX_14A 0x11A
#define INX_14B 0x11B
#define INX_14C 0x11C
#define INX_14D 0x11D
#define INX_14E 0x11E
#define INX_14F 0x11F
#define INX_150 0x120
#define INX_151 0x121
#define INX_152 0x122
#define INX_153 0x123
#define INX_154 0x124
#define INX_155 0x125
#define INX_156 0x126
#define INX_157 0x127
#define INX_158 0x128
#define INX_159 0x129
#define INX_15A 0x12A
#define INX_15B 0x12B
#define INX_15C 0x12C
#define INX_15D 0x12D
#define INX_15E 0x12E
#define INX_15F 0x12F
#define INX_160 0x130
#define INX_161 0x131
#define INX_162 0x132
#define INX_163 0x133
#define INX_164 0x134
#define INX_165 0x135
#define INX_166 0x136
#define INX_167 0x137
#define INX_168 0x138
#define INX_169 0x139
#define INX_16A 0x13A
#define INX_16B 0x13B
#define INX_16C 0x13C
#define INX_16D 0x13D
#define INX_16E 0x13E
#define INX_16F 0x13F
#define INX_170 0x140
#define INX_171 0x141
#define INX_172 0x142
#define INX_173 0x143
#define INX_174 0x144
#define INX_175 0x145
#define INX_176 0x146
#define INX_177 0x147
#define INX_178 0x148
#define INX_179 0x149
#define INX_17A 0x14A
#define INX_17B 0x14B
#define INX_17C 0x14C
#define INX_17D 0x14D
#define INX_17E 0x14E
#define INX_17F 0x14F
//#define USER_INX_MAX (INX_130+1)
#define USER_INX_MAX (INX_17F+1)
//******************************************************************************
//<2F><>׼<EFBFBD>û<EFBFBD>Э<EFBFBD><EFBFBD><E9B6A8>
//******************************************************************************
@@ -404,26 +490,26 @@
//******************************************************************************
// 0x80~0xf0: read and write
#define STD_PROTOCOL 0x80 // 0x80 Э<><D0AD>
#define STD_SLAVER_ID 0x81 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define STD_SLAVER_ADDR 0x81 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define STD_COM_BPS 0x82 // <20><><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>0-4800<30><30>1-9600<30><30>2-19200<30><30>3-38400<30><30>4-57600<30><30>5-115200<30><30>
#define STD_OUT_FR_MIN 0x83 // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define STD_OUT_FR_MIN_L 0x84
#define STD_OUT_FR_MAX 0x85 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define STD_OUT_FR_MAX_L 0x86
#define STD_OUT_MIN_FLOW 0x83 // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define STD_OUT_MIN_FLOW_L 0x84
#define STD_OUT_MAX_FLOW 0x85 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define STD_OUT_MAX_FLOW_L 0x86
#define STD_OUT_ANALOG_MIN 0x87 // <20><>Сģ<D0A1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mv<6D><76>
#define STD_OUT_ANALOG_MIN_L 0x88
#define STD_OUT_ANALOG_MAX 0x89 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mv<6D><76>
#define STD_OUT_ANALOG_MAX_L 0x8A
#define STD_GCF 0x8B // GCF* (<28><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>STD_PASSWORD 0XAA55)
#define STD_FILTER_DEPTH 0x8C // <20>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>
#define STD_REPONSE_TIME 0x8D // <20><>Ӧʱ<D3A6><CAB1>*
#define STD_RESPONSE_TIME 0x8D // <20><>Ӧʱ<D3A6><CAB1>*
#define STD_GAS_OFFSET_C 0x8E // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨C TYPE<50><45>
#define STD_GAS_OFFSET_A 0x8F // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨A TYPE<50><45>
#define STD_UNIT 0x90 // <20><>λ
#define STD_AIR_FACTOR 0x91 // <20><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ֵ
#define STD_FACTOR_VTH 0x92 // ʶ<><CAB6><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD>
#define STD_PULSE_UNIT 0x93 //
#define STD_IO_OUTPUT_LEVEL 0x94 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
#define STD_PULSE_LEVEL 0x94 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
#define STD_SAMPLE_PERIOD 0x95 //
#define STD_ALARM_ACC 0x96 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define STD_ALARM_ACC_L 0x97

View File

@@ -0,0 +1,123 @@
#ifndef __UserModbusMemAdr_h__
#define __UserModbusMemAdr_h__
//******************************************************************************
//#define MEM_ADDR_REG_0X30
#define PROTOCOL MEM_ADDR_REG_0X80 // MEM_ADDR_REG_0X80 Э<><D0AD>
#define SLAVER_ADDR MEM_ADDR_REG_0X81 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define COM_BPS MEM_ADDR_REG_0X82 // <20><><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>0-4800<30><30>1-9600<30><30>2-19200<30><30>3-38400<30><30>4-57600<30><30>5-115200<30><30>
#define OUT_MIN_FLOW MEM_ADDR_REG_0X83 // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define OUT_MIN_FLOW_L MEM_ADDR_REG_0X84
#define OUT_MAX_FLOW MEM_ADDR_REG_0X85 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>
#define OUT_MAX_FLOW_L MEM_ADDR_REG_0X86
#define OUT_ANALOG_MIN MEM_ADDR_REG_0X87 // <20><>Сģ<D0A1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mv<6D><76>
#define OUT_ANALOG_MIN_L MEM_ADDR_REG_0X88
#define OUT_ANALOG_MAX MEM_ADDR_REG_0X89 // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mv<6D><76>
#define OUT_ANALOG_MAX_L MEM_ADDR_REG_0X8A
#define GCF_B MEM_ADDR_REG_0X8B // GCF* (<28><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>PASSWORD 0XAA55)
#define FILTER_DEPTH MEM_ADDR_REG_0X8C // <20>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>
#define RESPONSE_TIME MEM_ADDR_REG_0X8D // <20><>Ӧʱ<D3A6><CAB1>*
#define GAS_OFFSET MEM_ADDR_REG_0X8E // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨C TYPE<50><45>
#define GAS_OFFSET_A MEM_ADDR_REG_0X8F // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨A TYPE<50><45>
#define FLOW_UNIT MEM_ADDR_REG_0X90 // <20><>λ
#define AIR_FACTOR MEM_ADDR_REG_0X91 // <20><><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ֵ
#define FACTOR_VTH MEM_ADDR_REG_0X92 // ʶ<><CAB6><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD>
#define PULSE_UNIT MEM_ADDR_REG_0X93 //
#define PULSE_LEVEL MEM_ADDR_REG_0X94 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
#define SAMPLE_PERIOD MEM_ADDR_REG_0X95 //
#define ALARM_ACC MEM_ADDR_REG_0X96 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_ACC_L MEM_ADDR_REG_0X97
#define ALARM_UPPER_FLOW MEM_ADDR_REG_0X98 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_UPPER_FLOW_L MEM_ADDR_REG_0X99
#define ALARM_LOWER_FLOW MEM_ADDR_REG_0X9A // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_LOWER_FLOW_L MEM_ADDR_REG_0X9B
#define ALARM_FUN MEM_ADDR_REG_0X9C // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_OUT_DELAY MEM_ADDR_REG_0X9D // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ (<28><>λ<EFBFBD><CEBB>s)
#define COM_DECIMAL MEM_ADDR_REG_0X9E
#define RECORD_TIME MEM_ADDR_REG_0X9F // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>֣<EFBFBD>max 720<32><30>
#define REVERSE_FR_MIN MEM_ADDR_REG_0XA0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>*
#define REVERSE_FR_MIN_L MEM_ADDR_REG_0XA1
#define REVERSE_FR_MAX MEM_ADDR_REG_0XA2 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<CEBB><D0A1><EFBFBD><EFBFBD>*
#define REVERSE_FR_MAX_L MEM_ADDR_REG_0XA3
#define I2C_ADDR MEM_ADDR_REG_0XA4 // I2C<32><43>ַ
#define I2C_CRC_MOD MEM_ADDR_REG_0XA5 // I2C<32><43>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>crcģʽ(0Ϊ<30><CEAA>crcģʽ)<29><>λ<EFBFBD><CEBB>Ч
#define TIMING_TXD_START MEM_ADDR_REG_0XA6 // <20><>ʱ<EFBFBD><CAB1><EFBFBD>Ϳ<EFBFBD>ʼ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
#define TIMING_TXD_LEN MEM_ADDR_REG_0XA7 // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TIMING_TXD_TIME MEM_ADDR_REG_0XA8 // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define PRESSURE_OFFSET MEM_ADDR_REG_0XA9 // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define LORA_ADR MEM_ADDR_REG_0XAA // LORA <20><>ַ
#define LORA_NETID MEM_ADDR_REG_0XAB // LORA<52><41>·id
#define LORA_CH MEM_ADDR_REG_0XAC // LORA<52>ŵ<EFBFBD>
#define LORA_STATE MEM_ADDR_REG_0XAD // LORAģ<41><EFBFBD><E9B9A4>״̬
#define KEY_PASSWORD MEM_ADDR_REG_0XAE // <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define KEY_PASSWORD_L MEM_ADDR_REG_0XAF // <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_UPPER_PRESS MEM_ADDR_REG_0XB0 // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_UPPER_PRESS_L MEM_ADDR_REG_0XB1 //
#define ALARM_LOWER_PRESS MEM_ADDR_REG_0XB2 // ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALARM_LOWER_PRESS_L MEM_ADDR_REG_0XB3 //
#define ALARM_UPPER_TEMP MEM_ADDR_REG_0XB4 // <20><EFBFBD><C2B6><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B4
#define ALARM_LOWER_TEMP MEM_ADDR_REG_0XB5 // <20><EFBFBD><C2B6><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B5
#define ALARM_UPPER_RH MEM_ADDR_REG_0XB6 // ʪ<><CAAA><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B6
#define ALARM_LOWER_RH MEM_ADDR_REG_0XB7 // ʪ<><CAAA><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B7
#define ALARM_UPPER_PPM MEM_ADDR_REG_0XB8 // Ũ<><C5A8><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B8
#define ALARM_LOWER_PPM MEM_ADDR_REG_0XB9 // Ũ<><C5A8><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><DEB1><EFBFBD> B9
//#define BA MEM_ADDR_REG_0XBA //
//#define BB MEM_ADDR_REG_0XBB //
//#define BC MEM_ADDR_REG_0XBC //
//#define BD MEM_ADDR_REG_0XBD //
//#define BE MEM_ADDR_REG_0XBE //
//#define BF MEM_ADDR_REG_0XBF //
//#define C0 MEM_ADDR_REG_0XC0 //
//#define C1 MEM_ADDR_REG_0XC1
//#define C2 MEM_ADDR_REG_0XC2 //
//#define C3 MEM_ADDR_REG_0XC3
//#define C4 MEM_ADDR_REG_0XC4 //
//#define C5 MEM_ADDR_REG_0XC5 //
//#define C6 MEM_ADDR_REG_0XC6 //
//#define C7 MEM_ADDR_REG_0XC7 //
//#define C8 MEM_ADDR_REG_0XC8 //
//#define C9 MEM_ADDR_REG_0XC9 //
//#define CA MEM_ADDR_REG_0XCA //
//#define CB MEM_ADDR_REG_0XCB //
//#define CC MEM_ADDR_REG_0XCC //
//#define CD MEM_ADDR_REG_0XCD //
//#define CE MEM_ADDR_REG_0XCE //
//#define CF MEM_ADDR_REG_0XCF //
//#define D0 MEM_ADDR_REG_0XD0 //
//#define D1 MEM_ADDR_REG_0XD1 //
//#define D2 MEM_ADDR_REG_0XD2 //
//#define D3 MEM_ADDR_REG_0XD3 //
//#define D4 MEM_ADDR_REG_0XD4 //
//#define D5 MEM_ADDR_REG_0XD5 //
//#define D6 MEM_ADDR_REG_0XD6 //
//#define D7 MEM_ADDR_REG_0XD7 //
//#define D8 MEM_ADDR_REG_0XD8 //
//#define D9 MEM_ADDR_REG_0XD9 //
//#define LEAK_FR_MIN MEM_ADDR_REG_0XDA
//#define LEAK_FR_MAX MEM_ADDR_REG_0XDB
//#define LEAK_TIMING MEM_ADDR_REG_0XDC
// //
//#define DD MEM_ADDR_REG_0XDD //
//#define GCF_A MEM_ADDR_REG_0XDE //
//#define DF MEM_ADDR_REG_0XDF //
//#define E0 MEM_ADDR_REG_0XE0 //
//#define E1 MEM_ADDR_REG_0XE1 //
//#define E2 MEM_ADDR_REG_0XE2 //
//#define E3 MEM_ADDR_REG_0XE3 //
//#define E4 MEM_ADDR_REG_0XE4 //
//#define E5 MEM_ADDR_REG_0XE5 //
//#define E6 MEM_ADDR_REG_0XE6 //
//#define E7 MEM_ADDR_REG_0XE7 //
//#define E8 MEM_ADDR_REG_0XE8 //
//#define E9 MEM_ADDR_REG_0XE9 //
//#define EA MEM_ADDR_REG_0XEA //
//#define EB MEM_ADDR_REG_0XEB //
//#define EC MEM_ADDR_REG_0XEC //
//#define ED MEM_ADDR_REG_0XED //
//#define EE MEM_ADDR_REG_0XEE //
//#define EF MEM_ADDR_REG_0XEF //
#define DCOEF_NUM MEM_ADDR_REG_0X130
#endif