Files
CHJ/user/Protocol/InternalModbus.h
2026-03-20 21:16:58 +08:00

46 lines
1.7 KiB
C
Executable File

#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