Jelajahi Sumber

1)[voltronic] change showing ups serial number and sw version
2)[megatex] fix size remain_work_time uint8_t - > uint32_t
3)[ups data]add akb_work_time

balbekova 5 tahun lalu
induk
melakukan
27c321464e
2 mengubah file dengan 72 tambahan dan 20 penghapusan
  1. 67 17
      modules/MegaTec/megatec.c
  2. 5 3
      modules/MegaTec/megatec.h

+ 67 - 17
modules/MegaTec/megatec.c

@@ -68,6 +68,7 @@ const char* MegaTecCMD[] =
 		"QBV\r",
 		"QMD\r",
 		"QVFW\r",
+		"QVFW2\r",
 		"QID\r",
 		"QPI\r",
 		"QS\r",
@@ -86,14 +87,16 @@ void init_UPS_value(void)
 	UPS.Load = 0;
 	UPS.SOC = 0;
 	UPS.work_time = 0;
+	UPS.akb_work_time = 0;
 	UPS.Status = 0;
 	UPS.Alarm = 0;
 	UPS.cnt_err_ups = 0;
 	UPS.Flag_Present = false;
 	UPS.Present = false;
 
-	memset(UPS.model, 0, 11);
-	memset(UPS.vertion, 0, 11);
+	memset(UPS.model, 0,  sizeof(UPS.model));
+	memset(UPS.vertion, 0, sizeof(UPS.vertion));
+	memset(UPS.serial, 0, sizeof(UPS.serial));
 }
 
 void send_MegaTec_cmd(cmdMegaTecEnums_t command)
@@ -447,7 +450,7 @@ void ups_remain_time_response(char *data)
 	memset(value, 0, 10);
 	strcpy(value, data);
 	//if((UPS.Status >> 7) & 0x01)
-		UPS.work_time = atof(value);
+		UPS.work_time = atoi(value);
 	//else
 	//	UPS.work_time = 0;
 }
@@ -543,20 +546,45 @@ void ups_version_response(char *data)
 
 	data++;
 
-	DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
+	if(UPS.vertion[0] != 0){
+		return;
+	}
 
-	//TODO
-	len = get_ups_param(data, ".", value);
+	len = get_ups_param(data, ":", value);
 	data += (len + 1);
 
+	DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
+
 	len = get_ups_param(data, "\r", value);
-	if(UPS.vertion[0] == 0){
-		strncpy(UPS.vertion, value, 2);
-		SNMP_SetObjDescr();
-	}
-	else{
-		strncpy(UPS.vertion, value, 2);
+	strncpy(UPS.vertion, value, 8);
+	strncat(UPS.vertion, "/", 1);
+}
+
+void ups_version_part2_response(char *data)
+{
+	char value[20];
+	uint8_t len = 0;
+	DBG printf("ups_akb_info_response: %s\r\n", data);
+	if(data[0] != '(')
+		return;
+	DBG printf("ups_akb_info_parser_start\r\n");
+	UPS.Present = true;
+	UPS.Flag_Present = true;
+	UPS.cnt_err_ups = 0;
+
+	data++;
+
+	if(UPS.vertion[9] != 0){
+		return;
 	}
+
+	DBG printf("UPS ups_akb_info_parser_start: %s\r\n", data);
+
+	len = get_ups_param(data, ":", value);
+	data += (len + 1);
+
+	len = get_ups_param(data, "\r", value);
+	strncpy(&UPS.vertion[9], value, 8);
 }
 
 void ups_serial_response(char *data)
@@ -576,8 +604,8 @@ void ups_serial_response(char *data)
 	DBG printf("UPS ups_serial_parser_start: %s\r\n", data);
 
 	len = get_ups_param(data, "\r", value);
-	strncpy(UPS.serial, &value[9], 5);
-	UPS.serial[5] = 0;
+	strncpy(UPS.serial, &value[0], 14);
+	UPS.serial[14] = 0;
 }
 
 void ups_protocol_id_response(char *data)
@@ -633,6 +661,9 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
 	case ups_version_req:
 		ups_version_response(ups_pdu.data);
 		break;
+	case ups_version2_req:
+		ups_version_part2_response(ups_pdu.data);
+		break;
 	case ups_serial_req:
 		ups_serial_response(ups_pdu.data);
 		break;
@@ -681,7 +712,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
 void request_task(void* params)
 {
 	uint8_t kestar_req[3] = {ups_status_req, ups_remain_time_reg, ups_info};
-	uint8_t voltronic_req[5] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_serial_req};//
+	uint8_t voltronic_req[6] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_version2_req, ups_serial_req};//
 	uint8_t num_req = 0;
 	uint8_t *req;
 
@@ -706,7 +737,7 @@ void request_task(void* params)
 						UPS.Present = false;
 
 						//memset(UPS.model, 0, 11);
-						memset(UPS.vertion, 0, 11);
+						memset(UPS.vertion, 0, sizeof(UPS.vertion));
 						init_ups_rbuf();
 					}
 				}
@@ -757,9 +788,28 @@ void request_task(void* params)
 		}
 }
 
+void akb_time_work_task(void* params)
+{
+	static uint32_t tick_prev = 0;
+	for(;;) {
+		if(UPS.Present && ((UPS.Status >> 7) & 0x01)) {
+			if(tick_prev == 0) {
+				tick_prev = xTaskGetTickCount();
+			}
+			UPS.akb_work_time += (xTaskGetTickCount() - tick_prev)/1000;
+			tick_prev = xTaskGetTickCount();
+
+		} else {
+			tick_prev = 0;
+			UPS.akb_work_time = 0;
+		}
+		vTaskDelay(1000);
+	}
+}
+
 void ups_megatec_init(void) {
 	init_UPS_value();
 	UPS.Present = true;
 	xTaskCreate(request_task, ( char * ) "request_task", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY, NULL);
-
+	xTaskCreate(akb_time_work_task, ( char * ) "akb_time_work_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
 }

+ 5 - 3
modules/MegaTec/megatec.h

@@ -29,6 +29,7 @@ typedef enum{
 	ups_akb_info,
 	ups_model_req,
 	ups_version_req,
+	ups_version2_req,
 	ups_serial_req,
 	ups_protocol_id_req,
 	ups_offline_status_req,
@@ -44,12 +45,13 @@ typedef struct{
 	float Temp;
 	uint8_t Load;
 	uint8_t SOC;
-	uint8_t work_time;
+	uint16_t work_time;
+	uint32_t akb_work_time;
 	uint8_t Status;
 	uint8_t Alarm;
 	char model[16];
-	char vertion[5];
-	char serial[9];
+	char vertion[18];
+	char serial[15];
 	uint8_t cnt_err_ups;
 	bool Present;
 	bool Flag_Present;