|
@@ -73,39 +73,39 @@ static struct {
|
|
|
|
|
|
|
|
|
const char *MegaTecCMD[] = {
|
|
|
- "Q1\r",
|
|
|
- "T\r",
|
|
|
- "TL\r",
|
|
|
- "T",
|
|
|
- "Q\r",
|
|
|
- "S",
|
|
|
- "R",
|
|
|
- "C\r",
|
|
|
- "CT\r",
|
|
|
- "I\r",
|
|
|
- "F\r",
|
|
|
- "Q2\r",
|
|
|
- "QGS\r",
|
|
|
- "QBV\r",
|
|
|
- "QMD\r",
|
|
|
- "QVFW\r",
|
|
|
- "QVFW2\r",
|
|
|
- "QID\r",
|
|
|
- "QPI\r",
|
|
|
- "QS\r",
|
|
|
- "M\r",
|
|
|
- "PDA\r",
|
|
|
- "QMOD\r",
|
|
|
- "SON\r",
|
|
|
- "QWS\r",
|
|
|
- "QBYV\r",
|
|
|
- "PHV264\r",//264
|
|
|
- "QFLAG\r",
|
|
|
- "PEL\r",
|
|
|
- "BT\r",
|
|
|
- "QTPR\r",
|
|
|
- "QFS\r",
|
|
|
- "SOFF\r",
|
|
|
+ "Q1\r", // ups_status_req [1] - OK
|
|
|
+ "T\r", // ups_test_10sec
|
|
|
+ "TL\r", // ups_test_low_bat
|
|
|
+ "T", // ups_test_time
|
|
|
+ "Q\r", // ups_beep
|
|
|
+ "S", // ups_shutdown
|
|
|
+ "R", // ups_shutdown_restore
|
|
|
+ "C\r", // ups_cancel_shut_down
|
|
|
+ "CT\r", // ups_cancel_test
|
|
|
+ "I\r", // ups_info [3] - OK
|
|
|
+ "F\r", // ups_rating_info
|
|
|
+ "Q2\r", // ups_remain_time_reg [2] - ERR
|
|
|
+ "QGS\r", // ups_general_status_req
|
|
|
+ "QBV\r", // ups_akb_info
|
|
|
+ "QMD\r", // ups_model_req
|
|
|
+ "QVFW\r", // ups_version_req
|
|
|
+ "QVFW2\r", // ups_version2_req
|
|
|
+ "QID\r", // ups_serial_req
|
|
|
+ "QPI\r", // ups_protocol_id_req
|
|
|
+ "QS\r", // ups_offline_status_req
|
|
|
+ "M\r", // ups_passw_req
|
|
|
+ "PDA\r", // ups_buzzer_cntrl
|
|
|
+ "QMOD\r", // ups_mode_req
|
|
|
+ "SON\r", // ups_remote_turn_on
|
|
|
+ "QWS\r", // ups_warning_status
|
|
|
+ "QBYV\r", // ups_bypass_volt_range
|
|
|
+ "PHV264\r", // ups_bypass_hvolt_264_set
|
|
|
+ "QFLAG\r", // ups_qflag_status
|
|
|
+ "PEL\r", // ups_cmd_enable_flag_l
|
|
|
+ "BT\r", // ups_kstar_status [4] - ERR
|
|
|
+ "QTPR\r", // ups_temperature
|
|
|
+ "QFS\r", // ups_fault_status
|
|
|
+ "SOFF\r", // ups_remote_turn_off
|
|
|
};
|
|
|
|
|
|
extern bool flUpdateLog;
|
|
@@ -239,8 +239,8 @@ bool ups_megatec_rx_pdu(void)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- DBG printf("UPS raw data: %s\r\n", ups_pdu.data);
|
|
|
- DBG printf("UPS raw data len: %d\r\n", ups_pdu.len);
|
|
|
+ printf("UPS raw data: %s\r\n", ups_pdu.data);
|
|
|
+ printf("UPS raw data len: %d\r\n", ups_pdu.len);
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -273,7 +273,7 @@ void ups_status_response(char *data)
|
|
|
char value[20];
|
|
|
float tmp;
|
|
|
uint8_t len = 0;
|
|
|
- DBG printf("ups_status_response: %s\r\n", data);
|
|
|
+ printf("ups_status_response: %s\r\n", data);
|
|
|
if (data[0] != '(') {
|
|
|
return;
|
|
|
}
|
|
@@ -364,23 +364,24 @@ void ups_status_response(char *data)
|
|
|
for (i = 0; i < len; i ++) {
|
|
|
stat |= (value[i] - 0x30) << (7 - i);
|
|
|
}
|
|
|
- UPS.Status = stat;
|
|
|
+ UPS.Status = stat; // теперь параметр как обычное число
|
|
|
}
|
|
|
|
|
|
// if (sSettings.UPS_Setting.type_ups == ups_kestar || sSettings.UPS_Setting.type_ups == ups_offline) {
|
|
|
- if(UPS.Status & 0x04){
|
|
|
- UPS.SOC_prev = UPS.SOC;
|
|
|
- }
|
|
|
- if (UPS.Vcell_curr < 7) {
|
|
|
- UPS.SOC = round(100 * (UPS.Vcell_curr - sSettings.UPS_Setting.Ucellmin) / (sSettings.UPS_Setting.Ucellmax -
|
|
|
- sSettings.UPS_Setting.Ucellmin));
|
|
|
- } else {
|
|
|
- UPS.SOC = round(100 * (UPS.Vcell_curr / AKB_NUM_CELL - sSettings.UPS_Setting.Ucellmin) /
|
|
|
- (sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
|
|
|
- }
|
|
|
+ // Bat Capacity
|
|
|
+ if(UPS.Status & 0x04) {
|
|
|
+ UPS.SOC_prev = UPS.SOC;
|
|
|
+ }
|
|
|
+ if (UPS.Vcell_curr < 7) {
|
|
|
+ UPS.SOC = round(100 * (UPS.Vcell_curr - sSettings.UPS_Setting.Ucellmin) / (sSettings.UPS_Setting.Ucellmax -
|
|
|
+ sSettings.UPS_Setting.Ucellmin));
|
|
|
+ } else {
|
|
|
+ UPS.SOC = round(100 * (UPS.Vcell_curr / AKB_NUM_CELL - sSettings.UPS_Setting.Ucellmin) /
|
|
|
+ (sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
|
|
|
+ }
|
|
|
// }
|
|
|
|
|
|
- if((UPS.Status >> 2) & 0x01 || ((UPS.Status >> 7) & 0x01)) {
|
|
|
+ if ((UPS.Status >> 2) & 0x01 || ((UPS.Status >> 7) & 0x01)) {
|
|
|
UPS.Load_test_akb = UPS.Load;
|
|
|
TM_RTC_t data;
|
|
|
TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
|
|
@@ -837,7 +838,7 @@ void ups_serial_response(char *data)
|
|
|
|
|
|
void ups_protocol_id_response(char *data)
|
|
|
{
|
|
|
-
|
|
|
+ printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
|
|
|
DBG printf("ups_protocol_id_response: %s\r\n", data);
|
|
|
|
|
|
UPS.Present = UPS_CONNECTED;
|
|
@@ -846,15 +847,24 @@ void ups_protocol_id_response(char *data)
|
|
|
|
|
|
if (data[0] != '(') {
|
|
|
if (strncmp(data, "NAK", 3) == 0 || strncmp(data, " \r", 2) == 0) {
|
|
|
+ printf("-------------------------------------------");
|
|
|
+ printf("UPS protocol kestar!!!!!!!");
|
|
|
+ printf("-------------------------------------------");
|
|
|
sSettings.UPS_Setting.type_ups = ups_kestar;
|
|
|
}
|
|
|
else if(strncmp(data, "QPI", 3) == 0) {
|
|
|
+ printf("-------------------------------------------");
|
|
|
+ printf("UPS protocol ups_offline!!!!!!!");
|
|
|
+ printf("-------------------------------------------");
|
|
|
sSettings.UPS_Setting.type_ups = ups_offline;
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
data++;
|
|
|
+ printf("-------------------------------------------");
|
|
|
+ printf("UPS protocol coltronic!!!!!!!");
|
|
|
+ printf("-------------------------------------------");
|
|
|
sSettings.UPS_Setting.type_ups = ups_voltronic;
|
|
|
|
|
|
DBG printf("UPS ups_protocol_id_parser_start: %s\r\n", data);
|
|
@@ -895,16 +905,17 @@ void ups_mode_response(char *data)
|
|
|
|
|
|
DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
|
|
|
|
|
|
+#if 1
|
|
|
// -----------------------------------------------------------------------
|
|
|
// Тестовый
|
|
|
// Если значение режима изменилось или режим "Fault"
|
|
|
if ((UPS.Mode != data[0]) || (data[0] == 'F')) {
|
|
|
+ UPS.Mode = data[0];
|
|
|
#ifdef UPS_MODE_MONITOR
|
|
|
memset(value, 0, sizeof(value));
|
|
|
GetModeStr(value, &len);
|
|
|
// В режиме "Fault" запрашиваем статус
|
|
|
if (data[0] == 'F') {
|
|
|
-
|
|
|
memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
send_MegaTec_cmd(ups_fault_status);
|
|
|
if (ups_megatec_rx_pdu()) {
|
|
@@ -921,23 +932,23 @@ void ups_mode_response(char *data)
|
|
|
strncat(value, &ups_pdu.data[53], 4);
|
|
|
strncat(value, &ups_pdu.data[59], 8);
|
|
|
|
|
|
- if ((strncmp(value, fault_status, sizeof(value)) != 0) || (UPS.Mode != data[0]))
|
|
|
+ if ((strncmp(value, fault_status, sizeof(value)) != 0))
|
|
|
{
|
|
|
SNMP_SendUserTrap(UPS_MODE);
|
|
|
syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
|
|
|
log_event_data(LOG_UPS_MODE, value);
|
|
|
}
|
|
|
memcmp(fault_status, value, sizeof(value));
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
SNMP_SendUserTrap(UPS_MODE);
|
|
|
syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
|
|
|
log_event_data(LOG_UPS_MODE, value);
|
|
|
#endif
|
|
|
- UPS.Mode = data[0];
|
|
|
}
|
|
|
// -----------------------------------------------------------------------
|
|
|
-
|
|
|
+#endif
|
|
|
|
|
|
#if 0 // Пока закроем
|
|
|
if (UPS.Mode != data[0]) {
|
|
@@ -1231,6 +1242,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
|
|
|
void kstar_mode(void)
|
|
|
{
|
|
|
uint8_t mode = UPS.Mode;
|
|
|
+#if 0
|
|
|
if((UPS.Status >> 4) & 0x01) {
|
|
|
UPS.Mode = 'F';
|
|
|
} else if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
|
|
@@ -1244,6 +1256,19 @@ void kstar_mode(void)
|
|
|
} else if((UPS.Status >> 2) & 0x01) {
|
|
|
UPS.Mode = 'T';
|
|
|
}
|
|
|
+#endif
|
|
|
+
|
|
|
+ if((UPS.Status >> 4) & 0x01) {
|
|
|
+ UPS.Mode = 'F';
|
|
|
+ } else if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
|
|
|
+ UPS.Mode = 'D';
|
|
|
+ } else if(((UPS.Status >> 5) & 0x01) && UPS.VAC_out > 120 && UPS.VAC_in != 0) {
|
|
|
+ UPS.Mode = 'Y';
|
|
|
+ } else if(((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
|
|
|
+ UPS.Mode = 'B';
|
|
|
+ } else if((UPS.Status >> 2) & 0x01) {
|
|
|
+ UPS.Mode = 'T';
|
|
|
+ }
|
|
|
|
|
|
|
|
|
if (UPS.Mode != mode) {
|
|
@@ -1263,7 +1288,8 @@ void kstar_mode(void)
|
|
|
//void request_task(void)
|
|
|
void request_task(void *params)
|
|
|
{
|
|
|
- uint8_t kestar_req[4] = { ups_status_req, ups_remain_time_reg, ups_info, ups_kstar_status};
|
|
|
+ //uint8_t kestar_req[4] = { ups_status_req, ups_remain_time_reg, ups_info, ups_kstar_status};
|
|
|
+ uint8_t kestar_req[1] = { ups_status_req};
|
|
|
uint8_t voltronic_req[9] = {ups_temperature, ups_status_req, ups_akb_info, ups_model_req, ups_mode_req, ups_version_req, ups_version2_req, ups_serial_req, ups_warning_status};//
|
|
|
uint8_t num_req = 0;
|
|
|
uint8_t *req;
|
|
@@ -1301,6 +1327,9 @@ void request_task(void *params)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
|
|
|
+ printf("megatec_send: %u\r\n", megatec_send);
|
|
|
+
|
|
|
if (megatec_send) {
|
|
|
memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
megatec_send = false;
|
|
@@ -1389,14 +1418,23 @@ void request_task(void *params)
|
|
|
memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
megatec_send = false;
|
|
|
UPS.Flag_Present = false;
|
|
|
+ // printf("~~~~~~~~~~ set UPS.Flag_Present false\r\n");
|
|
|
send_MegaTec_cmd(req[i]);
|
|
|
if (ups_megatec_rx_pdu()) {
|
|
|
ups_megatec_process_pdu(req[i]);
|
|
|
}
|
|
|
|
|
|
megatec_send = true;
|
|
|
+
|
|
|
+ // printf("~~~~~~~~~~~~~~~ Current UPS.Flag_Present: %u\r\n", (uint8_t)UPS.Flag_Present);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // printf("UPS.Flag_Present: %u\r\n", (uint8_t)UPS.Flag_Present);
|
|
|
+ // printf("UPS_Setting.type_ups: %u\r\n", sSettings.UPS_Setting.type_ups);
|
|
|
+ kstar_mode();
|
|
|
+
|
|
|
+
|
|
|
if(UPS.Flag_Present && (sSettings.UPS_Setting.type_ups == ups_kestar
|
|
|
|| sSettings.UPS_Setting.type_ups == ups_offline)) {
|
|
|
kstar_mode();
|