From 027afa7e01a5fd7d07102d96436bb4caed95e3ce Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 5 Dec 2018 11:48:37 +0200 Subject: valve actions in tech board --- .../Modules/Diagnostics/DiagnosticActions.c | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c index 6d575e17b..3a7672bb7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c @@ -16,6 +16,10 @@ #include #include +#include +#include +#include +#include #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/I2C_Communication/DAC/blower.h" @@ -190,6 +194,94 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer) return OK; } +/******************************************************************************** + *Valve Setting + ********************************************************************************/ +uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer) +{ + MessageContainer responseContainer; + uint8_t* container_buffer; + uint32_t status = OK; + uint32_t valve; + SetValveStateRequest* request = set_component_value_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + + + SetValveStateResponse response = SET_VALVE_STATE_RESPONSE__INIT; + + responseContainer = createContainer(MESSAGE_TYPE__SetValveStateResponse, requestContainer->token, true, &response, &set_valve_state_response__pack, &set_valve_state_response__get_packed_size); + container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + + + if (request->valvetype <= VALVE_TYPE__DispenserValve8 ) //dispenser 3 way valves + { + valve = request->valvetype; + if (request->state == VALVE_STATE_CODE__MidTank) + { + Control3WayValvesWithCallback(request->valvetype,MidTank_Dispenser,NULL); + } + else if (request->state == VALVE_STATE_CODE__VGroove) + { + Control3WayValvesWithCallback(request->valvetype,Dispenser_Mixer,NULL); + } + else + status = ERROR; + } + else if (request->valvetype <= VALVE_TYPE__MidTankInkValve8 ) //midtank toward dispenser + { + valve = IDS_Id_to_CartrideValve[request->valvetype - VALVE_TYPE__MidTankInkValve1]; + if (request->state == VALVE_STATE_CODE__Open) + { + Valve_Set(valve,Cartridge_MidTank_ON); + } + else if (request->state == VALVE_STATE_CODE__Close) + { + Valve_Set(valve,Cartridge_MidTank_OFF); + } + else + status = ERROR; + + } + else if (request->valvetype <= VALVE_TYPE__MidTankAirValve8 )//midtank toward air + { + valve = IDS_Id_to_AirValve[request->valvetype - VALVE_TYPE__MidTankAirValve1]; + if (request->state == VALVE_STATE_CODE__Open) + { + Valve_Set(valve,Atm_MidTank_ON); + } + else if (request->state == VALVE_STATE_CODE__Close) + { + Valve_Set(valve,Atm_MidTank_OFF); + } + else + status = ERROR; + } + else if (request->valvetype <= VALVE_TYPE__CartridgeWasteValve ) //not supported + { + status = FAILED; + } + else if (request->valvetype <= VALVE_TYPE__CartridgeInkValve8 ) //cartridge - not supported yet + { + status = FAILED; + } + else + { + status = FAILED; + } + + if (status == FAILED) + { + status = ERROR; + responseContainer.has_error = true; + responseContainer.error = ERROR_CODE__GENERAL_ERROR; + } + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars(container_buffer, container_size); + set_valve_state_request__free_unpacked(request,NULL); + + return status; +} -- cgit v1.3.1 From df708005176d8085ca069c46084119c4330f9cba Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 5 Dec 2018 16:02:02 +0200 Subject: Version 1.1.5.4 fix alarm handling bug, improve valve handling and reports, add vavle widget support. Thread advanced PID! --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Common/report/reportInit.c | 26 +++++++++++++++++++++- .../Embedded_SW/Embedded/Communication/Container.c | 12 +++++++--- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 10 ++++----- .../Modules/Diagnostics/DiagnosticActions.c | 2 +- .../Embedded/Modules/Diagnostics/Diagnostics.h | 1 + .../Embedded/Modules/Thread/Thread_print.c | 2 +- .../Embedded/StateMachines/Printing/JobSTM.c | 1 + 8 files changed, 44 insertions(+), 12 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index c0649394b..3657916c3 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {001,001,005,003}; +TangoVersion_t _gTangoVersion = {001,001,005,004}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c index 82afbcc60..825c23082 100644 --- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c +++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c @@ -59,6 +59,30 @@ char protobufToken[36+1] = {0}; }*/ +/*MessageContainer ReportcreateContainer(MessageType type, char* token, protobuf_c_boolean completed, void* response, size_t (*packPtr)(void*, uint8_t*), size_t (*sizePtr)(void*)) +{ + MessageContainer container = MESSAGE_CONTAINER__INIT; + container.completed = completed; + container.token = token; + container.has_completed = true; + container.has_data = true; + container.has_type = true; + container.type = type; + + + + uint8_t* response_buffer = my_malloc((*sizePtr)(response)); + size_t response_size = 0; + if (response_buffer) + { + response_size = (*packPtr)(response, response_buffer); + } + container.data.data = response_buffer; + container.data.len = response_size; + + //free(response); + return container; +}*/ int ReportResponseFunc(char *message, /* The formatted message */ char *FileName, @@ -104,7 +128,7 @@ int ReportResponseFunc(char *message, /* The formatted message break; } response.message = message; - responseContainer = createContainer(MESSAGE_TYPE__StartDebugLogResponse, protobufToken, false, &response, &start_debug_log_response__pack, &start_debug_log_response__get_packed_size); + responseContainer = /*Report*/createContainer(MESSAGE_TYPE__StartDebugLogResponse, protobufToken, false, &response, &start_debug_log_response__pack, &start_debug_log_response__get_packed_size); responseContainer.continuous = true; if (responseContainer.data.data) { diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index 7b5e44860..50a3153a9 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -50,7 +50,7 @@ uint32_t TxmsgId[MAX_CONT_LOG+1] = {0}; uint32_t TxLength[MAX_CONT_LOG+1] = {0}; uint32_t TxAddr[MAX_CONT_LOG+1] = {0}; -byte Txindex = 0; +uint16_t Txindex = 0; /*uint32_t msgId[50] = {0}; uint32_t Length[50] = {0}; uint32_t DataLength[50] = {0}; @@ -66,8 +66,6 @@ MessageContainer createContainer(MessageType type, char* token, protobuf_c_boole container.has_type = true; container.type = type; - - uint8_t* response_buffer = my_malloc((*sizePtr)(response)); size_t response_size = 0; if (response_buffer) @@ -83,6 +81,11 @@ MessageContainer createContainer(MessageType type, char* token, protobuf_c_boole if (Txindex++>=MAX_CONT_LOG) Txindex = 0; +/* if (SuspendLargeMessages == true) + { + Report("EndJobMessage",__FILE__,__LINE__,(int)type,RpWarning,(int)response_size,0); + }*/ + //free(response); return container; } @@ -312,6 +315,9 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__SetDigitalOutRequest: SetDigitalOutRequestRequestFunc(requestContainer); break; + case MESSAGE_TYPE__SetValveStateRequest: + SetValveStateRequestFunc(requestContainer); + break; case MESSAGE_TYPE__ThreadJoggingRequest: ThreadJoggingRequestFunc(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index cc1c946dc..0c11fb1fe 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -340,11 +340,11 @@ uint32_t Valve3WayCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) //stop this control loop if (RemoveControlCallback(Valve3WayControlId[ValveId], Valve3WayCallBackFunction )==OK) { - LOG_ERROR(ValveId, "Remove control callback"); + Report("Remove control callback",__FILE__,__LINE__,(int)ValveId,RpWarning,(int)Valve3WayControlId[ValveId],0); Valve3WayControlId[ValveId] = 0xFF; } else - LOG_ERROR(ValveId, "Remove control callback failed"); + Report("Remove control callback failed",__FILE__,__LINE__,(int)ValveId,RpWarning,(int)Valve3WayControlId[ValveId],0); //call the module callback if (Valve3WayModuleCallback[ValveId]) @@ -363,11 +363,11 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb Valve3WayModuleCallback[_ValveId] = callback; - Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eTenMillisecond, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); + Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eHundredMillisecond, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); if (Valve3WayControlId[_ValveId] == 0xFF) - LOG_ERROR(Valve3WayControlId[_ValveId], "Add control callback failed"); + Report("Add control callback failed",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); else - LOG_ERROR(Valve3WayControlId[_ValveId], "Add control callback"); + Report("Add control callback",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); EnableDisableDispenserValve(_ValveId, ENABLE); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c index 3a7672bb7..f8f467d63 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c @@ -203,7 +203,7 @@ uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer) uint8_t* container_buffer; uint32_t status = OK; uint32_t valve; - SetValveStateRequest* request = set_component_value_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + SetValveStateRequest* request = set_valve_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h index 91d531972..711faa7d5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h @@ -36,6 +36,7 @@ uint32_t DispenserAbortJoggingRequestFunc(MessageContainer* requestContainer); uint32_t SetComponentValueRequestRequestFunc(MessageContainer* requestContainer); uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer); +uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index dc9cfcd6d..2fac46a3c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -459,7 +459,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index]; MotorControlConfig[index].m_mesuredParam = NormalizedError; DancerError[DancerId] = NormalizedError; - MotorControlConfig[index].m_calculatedError = /*Advanced*/PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam, + MotorControlConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam, &MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral); if (index != FEEDER_MOTOR) //feeder unit handles errors opposite to left unit { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 21911acd0..b60f844cb 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -587,6 +587,7 @@ void JobRequestFunc(MessageContainer* requestContainer) CurrentRequest = request; status = PASSED; + JobEndReason = JOB_OK; JobAlarmReason = AlarmHandlingPrepareJob(CurrentJob); if (JobAlarmReason ==OK) { -- cgit v1.3.1