#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]; // // 变量 → 索引(隐式绑定数组) 内部参数获取索引 #define GET_WORD_IDX(var) ((u32)(&(var) - WordReg)) // 变量 → 地址 内部参数获取内存地址 #define GET_WORD_ADDR(var) (MEM_ADDR_WORD_REG_START + GET_WORD_IDX(var)*REG_WORD_WIDTH) // 地址 → 索引 内存获取参数索引 #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)) //例: 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 CheckWritingLegality(void); void MeterOperate(void); void WriteMeterParameter(void); void WriteMeterDwordParameter(void); void InternalReadParameterProtocol(void); void InternalWriteParameterProtocol(void); #endif