|
|
@ -25,26 +25,22 @@ const char* const fields[] = {"U_DC", "I_DC", "P_DC", "YieldDay", "YieldWeek", " |
|
|
|
|
|
|
|
// indices to calculation functions, defined in hmInverter.h
|
|
|
|
enum {CALC_YT_CH0 = 0, CALC_YD_CH0, CALC_UDC_CH}; |
|
|
|
enum {CMD_CALC = 0xffff}; |
|
|
|
|
|
|
|
|
|
|
|
// CH0 is default channel (freq, ac, temp)
|
|
|
|
enum {CH0 = 0, CH1, CH2, CH3, CH4}; |
|
|
|
// received command ids, special command CMDFF for calculations
|
|
|
|
enum {CMD01 = 0x01, CMD02, CMD03, CMD82 = 0x82, CMD83, CMD84, CMDFF=0xff}; |
|
|
|
|
|
|
|
enum {INV_TYPE_HM600 = 0, INV_TYPE_HM1200, INV_TYPE_HM400, INV_TYPE_HM800}; |
|
|
|
const char* const invTypes[] = {"HM600", "HM1200 / HM1500", "HM400", "HM800"}; |
|
|
|
#define NUM_INVERTER_TYPES 4 |
|
|
|
enum {INV_TYPE_1CH = 0, INV_TYPE_2CH, INV_TYPE_4CH}; |
|
|
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
uint8_t fieldId; // field id
|
|
|
|
uint8_t unitId; // uint id
|
|
|
|
uint8_t ch; // channel 0 - 3
|
|
|
|
uint8_t cmdId; // received command id
|
|
|
|
uint8_t ch; // channel 0 - 4
|
|
|
|
uint8_t start; // pos of first byte in buffer
|
|
|
|
uint8_t num; // number of bytes in buffer
|
|
|
|
uint16_t div; // divisor
|
|
|
|
uint16_t div; // divisor / calc command
|
|
|
|
} byteAssign_t; |
|
|
|
|
|
|
|
|
|
|
@ -54,106 +50,88 @@ typedef struct { |
|
|
|
* */ |
|
|
|
|
|
|
|
//-------------------------------------
|
|
|
|
// HM400 HM350?, HM300?
|
|
|
|
// HM300, HM350, HM400
|
|
|
|
//-------------------------------------
|
|
|
|
const byteAssign_t hm400assignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH1, CMD01, 9, 4, 1000 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, CMD01, 13, 2, 1 }, |
|
|
|
{ FLD_UAC, UNIT_V, CH0, CMD01, 15, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, CMD82, 1, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, CMD82, 3, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, CMD82, 7, 2, 100 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, CMD82, 11, 2, 10 } |
|
|
|
const byteAssign_t hm1chAssignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, 2, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, 4, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, 6, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, 12, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH1, 8, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UAC, UNIT_V, CH0, 14, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, 22, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, 18, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, 16, 2, 100 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, 26, 2, 10 } |
|
|
|
}; |
|
|
|
#define HM400_LIST_LEN (sizeof(hm400assignment) / sizeof(byteAssign_t)) |
|
|
|
#define HM1CH_LIST_LEN (sizeof(hm1chAssignment) / sizeof(byteAssign_t)) |
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------
|
|
|
|
// HM600, HM700
|
|
|
|
// HM600, HM700, HM800
|
|
|
|
//-------------------------------------
|
|
|
|
const byteAssign_t hm600assignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 }, |
|
|
|
{ FLD_UDC, UNIT_V, CH2, CMD01, 9, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH2, CMD01, 11, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH2, CMD01, 13, 2, 10 }, |
|
|
|
{ FLD_YW, UNIT_WH, CH0, CMD02, 1, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH0, CMD02, 3, 4, 1000 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, CMD02, 7, 2, 1 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH2, CMD02, 9, 2, 1 }, |
|
|
|
{ FLD_UAC, UNIT_V, CH0, CMD02, 11, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, CMD02, 13, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, CMD02, 15, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, CMD83, 3, 2, 100 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, CMD83, 7, 2, 10 } |
|
|
|
}; |
|
|
|
#define HM600_LIST_LEN (sizeof(hm600assignment) / sizeof(byteAssign_t)) |
|
|
|
|
|
|
|
const byteAssign_t hm2chAssignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, 2, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, 4, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, 6, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, 22, 2, 1 }, |
|
|
|
{ FLD_YD, UNIT_KWH, CH1, 14, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UDC, UNIT_V, CH2, 8, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH2, 10, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH2, 12, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH2, 18, 2, 1 }, |
|
|
|
{ FLD_YD, UNIT_KWH, CH2, 24, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UAC, UNIT_V, CH0, 26, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, 34, 2, 10 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, 30, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, 28, 2, 100 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, 38, 2, 10 } |
|
|
|
|
|
|
|
//-------------------------------------
|
|
|
|
// HM800
|
|
|
|
//-------------------------------------
|
|
|
|
const byteAssign_t hm800assignment[] = { |
|
|
|
|
|
|
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 }, |
|
|
|
{ FLD_UDC, UNIT_V, CH2, CMD01, 9, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH2, CMD01, 11, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH2, CMD01, 13, 2, 10 }, |
|
|
|
{ FLD_YW, UNIT_WH, CH0, CMD02, 1, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH0, CMD02, 3, 4, 1000 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, CMD02, 7, 2, 1 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH2, CMD02, 9, 2, 1 }, |
|
|
|
{ FLD_UAC, UNIT_V, CH0, CMD02, 11, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, CMD02, 13, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, CMD02, 15, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, CMD83, 3, 2, 100 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, CMD83, 7, 2, 10 } |
|
|
|
}; |
|
|
|
#define HM800_LIST_LEN (sizeof(hm800assignment) / sizeof(byteAssign_t)) |
|
|
|
#define HM2CH_LIST_LEN (sizeof(hm2chAssignment) / sizeof(byteAssign_t)) |
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------
|
|
|
|
// HM1200, HM1500
|
|
|
|
//-------------------------------------
|
|
|
|
const byteAssign_t hm1200assignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 9, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, CMD02, 5, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH1, CMD01, 13, 4, 1000 }, |
|
|
|
{ FLD_UDC, UNIT_V, CH3, CMD02, 9, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH2, CMD01, 7, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH2, CMD01, 11, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH2, CMD02, 7, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH2, CMD02, 1, 4, 1000 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH3, CMD02, 11, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH3, CMD02, 15, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH3, CMD03, 11, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH3, CMD03, 3, 4, 1000 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH4, CMD02, 13, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH4, CMD03, 1, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH4, CMD03, 13, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH4, CMD03, 7, 4, 1000 }, |
|
|
|
{ FLD_UAC, UNIT_V, CH0, CMD03, 15, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, CMD84, 7, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, CMD84, 3, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, CMD84, 1, 2, 100 }, |
|
|
|
{ FLD_PCT, UNIT_PCT, CH0, CMD84, 9, 2, 10 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, CMD84, 11, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH0, CMDFF, CALC_YD_CH0, 0, 0 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH0, CMDFF, CALC_YT_CH0, 0, 0 }, |
|
|
|
{ FLD_UDC, UNIT_V, CH2, CMDFF, CALC_UDC_CH, CH1, 0 }, |
|
|
|
{ FLD_UDC, UNIT_V, CH4, CMDFF, CALC_UDC_CH, CH3, 0 } |
|
|
|
const byteAssign_t hm4chAssignment[] = { |
|
|
|
{ FLD_UDC, UNIT_V, CH1, 2, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH1, 4, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH1, 8, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH1, 20, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH1, 12, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UDC, UNIT_V, CH2, CALC_UDC_CH, CH1, CMD_CALC }, |
|
|
|
{ FLD_IDC, UNIT_A, CH2, 6, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH2, 10, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH2, 22, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH2, 16, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UDC, UNIT_V, CH3, 24, 2, 10 }, |
|
|
|
{ FLD_IDC, UNIT_A, CH3, 26, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH3, 30, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH3, 42, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH3, 34, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UDC, UNIT_V, CH4, CALC_UDC_CH, CH3, CMD_CALC }, |
|
|
|
{ FLD_IDC, UNIT_A, CH4, 28, 2, 100 }, |
|
|
|
{ FLD_PDC, UNIT_W, CH4, 32, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH4, 44, 2, 1 }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH4, 38, 4, 1000 }, |
|
|
|
|
|
|
|
{ FLD_UAC, UNIT_V, CH0, 46, 2, 10 }, |
|
|
|
{ FLD_IAC, UNIT_A, CH0, 54, 2, 100 }, |
|
|
|
{ FLD_PAC, UNIT_W, CH0, 50, 2, 10 }, |
|
|
|
{ FLD_F, UNIT_HZ, CH0, 48, 2, 100 }, |
|
|
|
{ FLD_PCT, UNIT_PCT, CH0, 56, 2, 10 }, |
|
|
|
{ FLD_T, UNIT_C, CH0, 58, 2, 10 }, |
|
|
|
{ FLD_YD, UNIT_WH, CH0, CALC_YD_CH0, 0, CMD_CALC }, |
|
|
|
{ FLD_YT, UNIT_KWH, CH0, CALC_YT_CH0, 0, CMD_CALC } |
|
|
|
}; |
|
|
|
#define HM1200_LIST_LEN (sizeof(hm1200assignment) / sizeof(byteAssign_t)) |
|
|
|
|
|
|
|
|
|
|
|
#define HM4CH_LIST_LEN (sizeof(hm4chAssignment) / sizeof(byteAssign_t)) |
|
|
|
|
|
|
|
|
|
|
|
#endif /*__HM_DEFINES_H__*/ |
|
|
|