diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
21 files changed, 333 insertions, 189 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 968ef689b..881a02f8e 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -73,6 +73,7 @@ bool AlarmHandlingActive = false; uint32_t AlarmHandlingControlId = 0xFF; uint32_t AlarmHandlingTick = 0; +int MotorConfiguredTimeout = 100; double CurrentAlarmHighLimit ,CurrentAlarmLowLimit; bool CheckHardLimitAlarms = false,CheckCurrentAlarms = false,CheckTamperAlarms = false,CheckMotorAlarms = false; uint8_t alarm_response_buffer[500]; @@ -504,7 +505,7 @@ uint32_t AlarmHandlingLoadFile(void) if (F_count == 4) { - ReportWithPackageFilter(AlarmFilter,"Writing four alarms", __FILE__,AlarmPtr,F_count, RpMessage, p_size, 0); + //ReportWithPackageFilter(AlarmFilter,"Writing four alarms", __FILE__,AlarmPtr,F_count, RpMessage, p_size, 0); F_count = 0; ReadAppAndProgram(AlarmPtr, p_size,FileAlarmItem); AlarmPtr+=p_size; @@ -812,6 +813,12 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever } return OK; } +bool FileAnalysis = false; +bool FileAnalysisGetState(void) +{ + return FileAnalysis; +} + JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { //JobTicket* JobTicket = CurrentJob; @@ -828,6 +835,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) ACTIVITY_GREEN_LED_ON; Task_setPri(TaskHandle1, 11); + FileAnalysis = true; Task_sleep(10); Report("Task_setPri", __FILE__, pri, 3, RpWarning, (int)TaskHandle1, 0); IDS_MapDispenserUsedinJob(CurrentJob); @@ -835,6 +843,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) Report("Task_setPri", __FILE__, __LINE__, pri, RpWarning, (int)Task_self(), 0); Task_sleep(10); ACTIVITY_GREEN_LED_OFF; + FileAnalysis = false; if (n_segments == 0) { ReportWithPackageFilter(AlarmFilter,"no segments in the job", __FILE__,__LINE__,0, DEBUG_LOG_CATEGORY__Warning, 222, 0); @@ -976,7 +985,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) if ((IFS_Availability[1] == IFS_RECOGNIZED_INIT_PASSED)&&(IFS_Availability[2] == IFS_RECOGNIZED_INIT_PASSED)) //ifs installed -check cartridges { - tempFoundReason = Waste_Prepare(); + tempFoundReason = Waste_CheckState(&AlarmId); if (tempFoundReason!=JOB_OK) { FoundReason = tempFoundReason; @@ -1044,6 +1053,7 @@ uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue) return OK; } void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value); +StartEventsNotificationResponse PersistentEventsResponse = START_EVENTS_NOTIFICATION_RESPONSE__INIT; void AlarmHandlingSetAlarm(uint32_t AlarmId, bool value) { @@ -1059,46 +1069,77 @@ void AlarmHandlingSetAlarm(uint32_t AlarmId, bool value) } void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value) { - int Alarm_i; + int Alarm_i,Event_i; + Event **re_events; if (AlarmItem == NULL) return; for (Alarm_i = 0;Alarm_i < NumOfSystemAlarms;Alarm_i++) { if (AlarmItem[Alarm_i].EventType == AlarmId) { - if (AlarmState[Alarm_i].Status != value) + if (0) // PERSISTENT ALARM { - if (value == true) + PersistentEventsResponse.n_events++; + if (PersistentEventsResponse.events == NULL) + PersistentEventsResponse.events = (Event **)my_malloc(sizeof(Event*)*PersistentEventsResponse.n_events); + else { - // no need to call consequent actionsAlarmHandlingConsequentActions(Alarm_i, AlarmItem[Alarm_i].Severity); - // report the alarm! - AlarmState[Alarm_i].EventPtr = my_malloc (sizeof(Event)); - if (AlarmState[Alarm_i].EventPtr) + re_events = (Event **)my_malloc(sizeof(Event*)*PersistentEventsResponse.n_events); + for (Event_i = 0;Event_i < (PersistentEventsResponse.n_events-1);Event_i++) { - event__init(AlarmState[Alarm_i].EventPtr); - AlarmState[Alarm_i].EventPtr->has_type = true; - AlarmState[Alarm_i].EventPtr->type = AlarmItem[Alarm_i].EventType; - AlarmState[Alarm_i].EventPtr->message = NULL;//AlarmItem[Alarm_i].EventName; - AlarmState[Alarm_i].Status = value; - } - ReportWithPackageFilter(AlarmFilter,"Alarm ON ", __FILE__,AlarmState[Alarm_i].EventPtr,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); - if ((AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Critical)&&(JobIsActive())) - { - JobEndReason = getEndReason(Alarm_i); - SendJobProgress(0.0,0, false, "Critical alarm!!!!"); - AbortJob("Critical alarm"); - ReportWithPackageFilter(AlarmFilter, AlarmReasonStr,__FILE__,__LINE__,Alarm_i,RpError, 0,0); + re_events[Event_i] = PersistentEventsResponse.events[Event_i]; } + my_free(PersistentEventsResponse.events); + PersistentEventsResponse.events = re_events; } - else + AlarmState[Alarm_i].EventPtr = my_malloc (sizeof(Event)); + if (AlarmState[Alarm_i].EventPtr) { - ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); - if (AlarmState[Alarm_i].EventPtr) + event__init(AlarmState[Alarm_i].EventPtr); + AlarmState[Alarm_i].EventPtr->has_type = true; + AlarmState[Alarm_i].EventPtr->type = AlarmItem[Alarm_i].EventType; + AlarmState[Alarm_i].EventPtr->message = NULL;//AlarmItem[Alarm_i].EventName; + } + AlarmState[Alarm_i].Status = true; + PersistentEventsResponse.events[PersistentEventsResponse.n_events] = AlarmState[Alarm_i].EventPtr; + ReportWithPackageFilter(AlarmFilter,"Persistent Alarm ", __FILE__,PersistentEventsResponse.n_events,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + } + else + { + if (AlarmState[Alarm_i].Status != value) + { + if (value == true) { - my_free(AlarmState[Alarm_i].EventPtr); - AlarmState[Alarm_i].EventPtr = NULL; + // no need to call consequent actionsAlarmHandlingConsequentActions(Alarm_i, AlarmItem[Alarm_i].Severity); + // report the alarm! + AlarmState[Alarm_i].EventPtr = my_malloc (sizeof(Event)); + if (AlarmState[Alarm_i].EventPtr) + { + event__init(AlarmState[Alarm_i].EventPtr); + AlarmState[Alarm_i].EventPtr->has_type = true; + AlarmState[Alarm_i].EventPtr->type = AlarmItem[Alarm_i].EventType; + AlarmState[Alarm_i].EventPtr->message = NULL;//AlarmItem[Alarm_i].EventName; + AlarmState[Alarm_i].Status = value; + } + ReportWithPackageFilter(AlarmFilter,"Alarm ON ", __FILE__,AlarmState[Alarm_i].EventPtr,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + if ((AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Critical)&&(JobIsActive())) + { + JobEndReason = getEndReason(Alarm_i); + SendJobProgress(0.0,0, false, "Critical alarm!!!!"); + AbortJob("Critical alarm"); + ReportWithPackageFilter(AlarmFilter, AlarmReasonStr,__FILE__,__LINE__,Alarm_i,RpError, 0,0); + } + } + else + { + ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + if (AlarmState[Alarm_i].EventPtr) + { + my_free(AlarmState[Alarm_i].EventPtr); + AlarmState[Alarm_i].EventPtr = NULL; + } + AlarmState[Alarm_i].Status = value; } - AlarmState[Alarm_i].Status = value; } } break; @@ -1160,6 +1201,9 @@ uint32_t AlarmHandlingLoop(uint32_t tick) if (AlarmItem == NULL) return ERROR; int AlarmCounter=0; + if (MotorConfiguredTimeout) + MotorConfiguredTimeout--; + for (Alarm_i = 0;Alarm_i < NumOfSystemAlarms;Alarm_i++) { Status = false; @@ -1336,7 +1380,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) case ALARM_SOURCE_TYPE__MotorAlarm: if (CheckMotorAlarms) { - if ((FPGA_WD_Occurred == true)||(MachineReadyForHeating == false)) + if ((FPGA_WD_Occurred == true)||(MotorConfiguredTimeout > 0)) { Status = false; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h index 3b39370bf..a8dd43a17 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -10,6 +10,8 @@ #include "StateMachines/Printing/PrintingSTM.h" #include <PMR/Diagnostics/EventType.pb-c.h> +extern int MotorConfiguredTimeout; + uint32_t AlarmHandlingFlashLoad(void); uint32_t AlarmHandlingLoadFile(void); @@ -24,6 +26,7 @@ uint32_t AlarmHandlingStop(void); void AlarmHandlingSetAlarm(uint32_t AlarmId, bool Value); JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob); +bool FileAnalysisGetState(void); extern char AlarmReasonStr[100]; uint32_t StartEventsNotificationRequestFunc(MessageContainer* requestContainer); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 6ce453538..689219583 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -598,7 +598,6 @@ void setRapidPressureRead(bool value) if (GetDiagnosticMode() == Diagnostic_Extreme_Mode) RapidPressureRead = true; } -bool Shinko_Read = false; uint16_t PumpCounter = 0; uint16_t realtimetest[101]; uint32_t MillisecLowLoop(uint32_t tick) @@ -640,6 +639,7 @@ uint32_t MillisecLowLoop(uint32_t tick) //Screw_ENC_Velocity_to_DAC(); - for testing the screw enc if (Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) StartPT100 = TEMP_SENSE_ANALOG_DRYER_TEMP1; + if (Ten_msTick) { //Speed_Data = Read_Speed_Sensor_TypeII(); @@ -738,26 +738,6 @@ uint32_t MillisecLowLoop(uint32_t tick) if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); } -#ifdef USE_SHINKO_AUTO_COMM - if ((WHS_Type == WHS_TYPE_NEW)&&(Shinko_Read == true)) - { - if(ShinkoTempDeg.Read_Setup == 0x00)//didn't read it yet - { - WHS_Shinko_Communication(R_SETUP); - } - else - /*if(0)//TBD - need stop condition to write only once (all the steps) , Read_Setup != setup, Read_Setup != 0, Read_Setup != Prev_Read_Setup - { - // option to wrte + read setup and stop when read = write - WHS_Shinko_Communication(W_SETUP); - } - else*/ - { - //finish reading the setup before start reading the value - WHS_Shinko_Communication(R_Value); // Reading every fourth cycle (Set HW, Request, Set HW, Response) - } - } -#endif } if ((O500Millisecond_Tick)&&(RapidPressureRead == false)) { @@ -820,6 +800,11 @@ uint32_t MillisecLowLoop(uint32_t tick) Whs_emptying_cycle++; } */ + + if(Shinko_first_read < 2)//read the two steps once and than in cycle every 10 minutes, also will be used to read after updating the temperature + { + Shinko_Cycle_Comm(); + } } if (Head_Type == HEAD_TYPE_ARC) { HeadBlowersControlLoop(); @@ -837,15 +822,6 @@ uint32_t MillisecLowLoop(uint32_t tick) } if (Tensecond_Tick) { - #ifndef RUN_AS_MAIN_JIG - //Trigger_MidTank_Pressure_Read(); - for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) - { - Read_MidTank_Pressure_Sensor(Disp_i); - } - #endif - - Shinko_Read = true;//start cycle of R/W setup or value every 10Sec } if (OneMinute_Tick) { @@ -876,6 +852,17 @@ uint32_t MillisecLowLoop(uint32_t tick) { waste_seq_step1();// include 1Sec delay <- to open !!!! }*/ + if (WHS_Type == WHS_TYPE_NEW) + { + Shinko_Cycle_Comm(); + } +#ifndef RUN_AS_MAIN_JIG + //Trigger_MidTank_Pressure_Read(); + for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) + { + Read_MidTank_Pressure_Sensor(Disp_i); + } +#endif } if (OneHourTick) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h index f7351d0b1..0d7c42ad6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h @@ -50,7 +50,6 @@ void MillisecLogClose(void); #endif -extern bool Shinko_Read; extern bool watchdogCriticalAlarm; extern Task_Handle Millisecond_Task_Handle; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 14275533e..0a092821e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -190,6 +190,7 @@ uint32_t ControlActivityLed( uint32_t Parameter1) if (JobIsActive()) { JobEndReason = JOB_MOTOR_ALARM; + usnprintf(AlarmReasonStr, 100, "Hardware Failure Error"); SendJobProgress(0.0,0,false, "Hardware Failure Error"); AbortJob("FPGA Watchdog Error"); } @@ -198,6 +199,8 @@ uint32_t ControlActivityLed( uint32_t Parameter1) ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0); ACTIVITY_GREEN_LED_ON; + MotorConfiguredTimeout = 100; + FPGA_SetMotorsInit(); Motor_ReconfigAllMotors(); } @@ -206,6 +209,20 @@ uint32_t ControlActivityLed( uint32_t Parameter1) else ACTIVITY_GREEN_LED_OFF; + if(power.color == colorOFF) Pannel_Leds(POWER_ON_OFF,MODE_OFF); + if(jog.color == colorOFF) Pannel_Leds(THREAD_JOGGING,MODE_OFF); + if(load.color == colorOFF) Pannel_Leds(THREAD_JOGGING,MODE_OFF); + if(cart1.color == colorOFF) Pannel_Leds(CART_1,MODE_OFF); + if(cart2.color == colorOFF) Pannel_Leds(CART_2,MODE_OFF); + if(cart3.color == colorOFF) Pannel_Leds(CART_3,MODE_OFF); + + if(power.color == colorON) Pannel_Leds(POWER_ON_OFF,MODE_ON); + if(jog.color == colorON) Pannel_Leds(THREAD_JOGGING,MODE_ON); + if(load.color == colorON) Pannel_Leds(THREAD_JOGGING,MODE_ON); + if(cart1.color == colorON) Pannel_Leds(CART_1,MODE_ON); + if(cart2.color == colorON) Pannel_Leds(CART_2,MODE_ON); + if(cart3.color == colorON) Pannel_Leds(CART_3,MODE_ON); + if(power.color == fastBILNK) Pannel_Leds(POWER_ON_OFF,MODE_OFF); else diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index d78b5114f..fef3f05a8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -429,6 +429,13 @@ void LoadChillerState(HeaterType HeaterType,HeaterState *HeaterState) HeaterState->setpoint = (float)(ShinkoTempDeg.Read_Setup); HeaterState->has_currentvalue = true; HeaterState->currentvalue = (float)(ShinkoTempDeg.Read_value); + HeaterState->has_isactive = true; + HeaterState->isactive = false; + HeaterState->has_isrampingup = true; + HeaterState->isrampingup = false; + HeaterState->has_isinsetpoint = true; + HeaterState->isinsetpoint = true; + return; } @@ -634,7 +641,8 @@ void DiagnosticOneMinuteCollection(void) } DiagnosticsMonitor.n_overalltemperature = 1; - OverallTemperature = (max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)))/100; + OverallTemperature = (max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2))); + OverallTemperature = (double)OverallTemperature/100.0; //OverallTemperature = ((int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1)/100)*1000 + (int)(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)/100)); DiagnosticsMonitor.overalltemperature = &OverallTemperature; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 1defda43c..90c18caa0 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -186,12 +186,6 @@ uint32_t HWConfigurationInit(void) //WHS_init(); // remove call to old WHS #endif - if (WHS_Type == WHS_TYPE_NEW) - { -/* WHS_IO_Init(); - Task_sleep(1);//wait for WHS_IO_Init*/ - InitConsole_WHS_UART3();//WHS Shinko communication - } // Waste Init (WHS) Waste_Init(); @@ -473,6 +467,7 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) //if (request->n_winders == 1) // status += InternalWinderConfigMessage(request->winders); + MotorConfiguredTimeout = 100; status += MotorsInit(); diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c index d5816ab42..a0b1b30c2 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c @@ -40,8 +40,9 @@ MachineState StoredMachineStatus = MACHINE_STATE__PowerUp; bool SetMAchineStateProblem = false; -void SetMachineStatus (MachineState State) +void SetMachineStatus (MachineState New_state) { + MachineState State = New_state; if (StoredMachineStatus == MACHINE_STATE__PowerOff) { ReportWithPackageFilter(GeneralFilter,"not changing MachineStatus while on power down",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); @@ -53,9 +54,10 @@ void SetMachineStatus (MachineState State) { ReportWithPackageFilter(GeneralFilter,"SetMachineStatus problem",__FILE__,__LINE__,State,RpWarning,GetMachineState(), 0); SetMAchineStateProblem = true; + State = MACHINE_STATE__PowerUp; } } - ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); + ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,GetMachineState(),State,RpWarning,StoredMachineStatus, 0); StoredMachineStatus = State; MachineUpdateResponseFunc(); @@ -68,7 +70,8 @@ bool temp_measure_alarm = false; int MachineUpdateResponseFunc(void) { int i; - int internaltemp1,internaltemp2,usetemp; + int internaltemp1,internaltemp2; + double usetemp; bool int1valid = true,int2valid = true; MessageContainer responseContainer; if (MachineUpdateToken[0] == 0) @@ -95,7 +98,9 @@ int MachineUpdateResponseFunc(void) MachineStatus.has_overalltemperature = true; if ((int2valid == true)&&(int1valid == true)) { - usetemp = (max(internaltemp1,internaltemp2))/100; + usetemp = (max(internaltemp1,internaltemp2)); + usetemp = (double)usetemp/100.0; + if (temp_measure_alarm == true) { AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, false); @@ -107,14 +112,14 @@ int MachineUpdateResponseFunc(void) //AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, true); temp_measure_alarm = true; if ((int2valid == false)&&(int1valid == true)) - usetemp = internaltemp1/100; + usetemp = (double)internaltemp1/100.0; else if ((int2valid == false)&&(int1valid == false)) { MachineStatus.has_overalltemperature = FALSE; usetemp = 0; } else if ((int1valid == false)&&(int2valid == true)) - usetemp = internaltemp2/100; + usetemp = (double)internaltemp2/100.0; } MachineStatus.overalltemperature = usetemp; @@ -239,7 +244,7 @@ return OK; * */ char WasteEmptyingToken[36+1] = {0}; -uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State) +uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double percentage) { if (WasteEmptyingToken[0] == 0) return ERROR; @@ -248,44 +253,46 @@ uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State) CartridgeStatus CartridgeStatus = CARTRIDGE_STATUS__INIT; Cartridge CartData = CARTRIDGE__INIT; StartInkFillingStatusResponse response = START_INK_FILLING_STATUS_RESPONSE__INIT; - response.status->n_cartridgesstatuses = MAX_CARTRIDGES; + response.status->n_cartridgesstatuses = 1; response.status->cartridgesstatuses[0] = &CartridgeStatus; CartridgeStatus.has_state = true; CartridgeStatus.state = State; CartridgeStatus.cartridge = &CartData; + if (percentage>1) + { + CartridgeStatus.has_progresspercentage = true; + CartridgeStatus.progresspercentage = percentage; + } CartData.has_slot = true; CartData.slot = Slot; - - - /* -struct _CartridgeStatus -{ - ProtobufCMessage base; - Cartridge *cartridge; - protobuf_c_boolean has_state; - CartridgeState state; - protobuf_c_boolean has_progresspercentage; - double progresspercentage; - char *message; -}; - size_t n_cartridgesstatuses; - CartridgeStatus **cartridgesstatuses; -typedef enum _CartridgeState { - CARTRIDGE_STATE__None = 0, - CARTRIDGE_STATE__Absent = 1, - CARTRIDGE_STATE__Exists = 2, - CARTRIDGE_STATE__Inserted = 3, - CARTRIDGE_STATE__Filling = 4, - CARTRIDGE_STATE__FillingCompleted = 5, - CARTRIDGE_STATE__Emptying = 6, - CARTRIDGE_STATE__EmptyingCompleted = 7, - CARTRIDGE_STATE__Empty = 8, - CARTRIDGE_STATE__Full = 9, - CARTRIDGE_STATE__Error = 10 - PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_STATE) -} CartridgeState; + struct _CartridgeStatus + { + ProtobufCMessage base; + Cartridge *cartridge; + protobuf_c_boolean has_state; + CartridgeState state; + protobuf_c_boolean has_progresspercentage; + double progresspercentage; + char *message; + }; + size_t n_cartridgesstatuses; + CartridgeStatus **cartridgesstatuses; + typedef enum _CartridgeState { + CARTRIDGE_STATE__None = 0, + CARTRIDGE_STATE__Absent = 1, + CARTRIDGE_STATE__Exists = 2, + CARTRIDGE_STATE__Inserted = 3, + CARTRIDGE_STATE__Filling = 4, + CARTRIDGE_STATE__FillingCompleted = 5, + CARTRIDGE_STATE__Emptying = 6, + CARTRIDGE_STATE__EmptyingCompleted = 7, + CARTRIDGE_STATE__Empty = 8, + CARTRIDGE_STATE__Full = 9, + CARTRIDGE_STATE__Error = 10 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CARTRIDGE_STATE) + } CartridgeState; */ responseContainer = createContainer(MESSAGE_TYPE__StartInkFillingStatusResponse, WasteEmptyingToken, false, &response, &start_ink_filling_status_response__pack, &start_ink_filling_status_response__get_packed_size); @@ -313,9 +320,9 @@ uint32_t StartInkFillingStatusRequestFunc(MessageContainer* requestContainer) StartInkFillingStatusRequest* request = start_ink_filling_status_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ustrncpy (WasteEmptyingToken, requestContainer->token,36); - CartridgeStateUpdate(CARTRIDGE_SLOT__Ink,CARTRIDGE_STATE__None); - CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle,CARTRIDGE_STATE__None); - CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower,CARTRIDGE_STATE__None); + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink,CARTRIDGE_STATE__None,0); + CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle,CARTRIDGE_STATE__None,0); + CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower,CARTRIDGE_STATE__None,0); start_ink_filling_status_request__free_unpacked(request,NULL); return status; // case MESSAGE_TYPE__StartWasteEmptyingRequest: diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h index b421785cc..b3b773b1e 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h @@ -18,7 +18,7 @@ void SetMachineStatus (MachineState State); int MachineUpdateResponseFunc(void); uint32_t StartInkFillingStatusRequestFunc(MessageContainer* requestContainer); -uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State); +uint32_t CartridgeStateUpdate(CartridgeSlot Slot,CartridgeState State, double percentage); diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index c03f7d913..0dda71d16 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -416,9 +416,15 @@ uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue) if (ThreadLoadingActive() == false) { if (JobIsActive()) + { load.color = colorOFF; + Pannel_Leds(THREAD_LOAD, MODE_OFF); + } else + { load.color = colorON; + Pannel_Leds(THREAD_LOAD, MODE_ON); + } } break; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index d977fe3f3..56b46c98c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -399,6 +399,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu if (JobIsActive()) { JobEndReason = JOB_TEMPERATURE_ALARM; + usnprintf(AlarmReasonStr, 100, "Internal Temperature %d Error %d",index,readValue); SendJobProgress(0.0,0,false, "Internal Temperature Error"); AbortJob("Internal Over Temperature Error"); //SegmentReady(Module_Heaters,ModuleFail); @@ -1188,6 +1189,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) if (JobIsActive()&&(HeaterReady[index]==true)) { JobEndReason = JOB_TEMPERATURE_ALARM; + usnprintf(AlarmReasonStr, 100, "Temperature %d Error %d",index,readValue); SendJobProgress(0.0,0,false, "Temperature Error"); AbortJob("Over Temperature Error"); //SegmentReady(Module_Heaters,ModuleFail); @@ -1239,6 +1241,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) if (JobIsActive()&&(HeaterReady[index]==true)) { JobEndReason = JOB_TEMPERATURE_ALARM; + usnprintf(AlarmReasonStr, 100, "Temperature %d Error %d",index,readValue); SendJobProgress(0.0,0,false, "Temperature Error"); AbortJob("Under Temperature Error"); ReportWithPackageFilter(HeatersFilter, "Temperature Error",__FILE__,__LINE__,index,RpError, 0,0); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 4fe32e7cd..ab2062293 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -20,6 +20,7 @@ #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/Motors/Motor.h" #include "drivers/Valves/Valve.h" +#include "Modules/AlarmHandling/AlarmHandling.h" FPGA_GPI_ENUM Dispenser_Id_to_LS_Id[MAX_SYSTEM_DISPENSERS] = { @@ -84,7 +85,7 @@ uint32_t InitialDispenserSpeed = INITIAL_DISPENSER_SPEED; uint32_t ControlIdtoInactiveDispenserId [MAX_SYSTEM_DISPENSERS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; -uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); +//uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); AutoHoming_Config_enum AutoHoming_Config = AutoHoming_off; void IDS_Dispenser_SetAutoHoming_Config(AutoHoming_Config_enum Config) @@ -350,6 +351,7 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) CurrentDispenserSpeed[DispenserId] = 0; return OK; } +/* uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) { assert(DispenserId < MAX_SYSTEM_DISPENSERS); @@ -380,7 +382,7 @@ uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) } // HomingActive[DispenserId]= false; ReportWithPackageFilter(IDSFilter,"End homing for job start",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); - /* else + /`* else { ReportWithPackageFilter(IDSFilter,"homing aborted,start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); @@ -389,12 +391,12 @@ uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) Task_sleep(10); MotorSetSpeed(motorId, 1000); CurrentDispenserSpeed[DispenserId] = 1000; - }*/ + }*`/ //IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); return OK; } - +*/ uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id) { int DispenserId; @@ -501,6 +503,7 @@ uint32_t IDS_Dispenser_Alarm_On (uint8_t DispenserId) status |= MotorStop(MotorId, Hard_Hiz); IDS_Dispenser_Init(DispenserId); JobEndReason = JOB_OUT_OF_DYE; + usnprintf(AlarmReasonStr, 100, "IDS_Dispenser_Alarm_On %d ",DispenserId); return status; } uint32_t IDS_Dispenser_Alarm_Off (uint8_t DispenserId) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 462165ee7..d2fd74256 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -643,6 +643,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl endOfPrepareWCF = true; result = ModuleFail; JobEndReason = JOB_PRESSURE_ALARM; + usnprintf(AlarmReasonStr, 100, "IDS pressure timeout %d ",DispenserPrepareTimeout); pressureReady = true; ReportWithPackageFilter(IDSFilter,"pressure timeout!",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)(DispenserPreparePressure*100),0); for (i = 0; i < MAX_DYE_DISPENSERS; i++) @@ -1357,6 +1358,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { ReportWithPackageFilter(IDSFilter,"Error JobBrushStopId",__FILE__,__LINE__,(int)Segment->n_brushstops,RpError,(int)0,0); JobEndReason = JOB_OUT_OF_DYE; + usnprintf(AlarmReasonStr, 100, "IDS brushstop error %d above %d ",JobBrushStopId,Segment->n_brushstops); PreSegmentReady(Module_IDS,ModuleFail); return ERROR; } @@ -1449,6 +1451,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { ReportWithPackageFilter(IDSFilter,"End run - BrushStopReadError",__FILE__,__LINE__,(int)FileBrushStop,RpError,(int)0,0); JobEndReason = JOB_OUT_OF_DYE; + usnprintf(AlarmReasonStr, 100, "IDS brushstop read error"); PreSegmentReady(Module_IDS,ModuleFail); } } @@ -1663,6 +1666,7 @@ uint32_t IDSBrushStopRestartCallback(uint32_t IfIndex, uint32_t readValue) { Task_stat(Task_self(),&statbuf); ReportWithPackageFilter(IDSFilter,"BrushStopRead Error",__FILE__,statbuf.used,(int)statbuf.stackSize,RpWarning,(int)statbuf.stackHeap,0); + usnprintf(AlarmReasonStr, 100, "IDS brushstop error"); JobEndReason = JOB_OUT_OF_DYE; SegmentReady(Module_IDS,ModuleFail); } @@ -1944,6 +1948,6 @@ uint32_t IDS_StopLubrication(void) TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[LUBRICANT_DISPENSER]; MotorStop(HW_Motor_Id,Hard_Hiz); CurrentDispenserSpeed[LUBRICANT_DISPENSER] = 0; - IDS_HomeDispenser (LUBRICANT_DISPENSER, 1000 , NULL); + //IDS_HomeDispenser (LUBRICANT_DISPENSER, 1000 , NULL); do not fill lubricant between jobs return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index d62ad3a43..b2498ee7f 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -28,6 +28,7 @@ #include "drivers/Valves/Valve.h" #include "../control/control.h" #include "Modules/General/buttons.h" +#include "Modules/General/MachineStatus.h" #define CARTRIDGE_EMPTY_QUANTITY_LIMIT 10 #define CARTRIDGE_EMPTY_CALCULATION_TIME 12 @@ -147,13 +148,20 @@ bool CartridgeInkFull() //currently sensor work properly only until 1.6 - 1.8 Liter (TBD) Report("DetectIfCartridgeFinished", __FILE__,__LINE__,int_MidTank_Pressure_1000, RpMessage, int_MidTank_Pressure_1000, 0); //return true; - //IFS_State = CARTRIDGE_STATE__FillingCompleted; } } return false; } #endif +int GetCartridgeFillPercent() +{ + double MidTank_Pressure = 0; + + MidTank_Pressure = Read_MidTank_Pressure_Sensor(midTankCartColor); + return (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY); +} + bool midTankCart_door() { bool door; @@ -275,8 +283,8 @@ void midTankStateMachine(void) if (!RdInkCartridgeSensor()) { break; } - //check RFID? (TBD) - //IFS_State = CARTRIDGE_STATE__Inserted; + //check RFID - check cartridge OK + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Inserted, 0); // send request for validation to ppc inkAuthenticationPass = 2; //not defined @@ -298,16 +306,17 @@ void midTankStateMachine(void) Report("MidTank Cartridge authentication wait...", __FILE__, __LINE__, authenticationTimeOutCounter, RpMessage, 0, 0); if (authenticationTimeOutCounter > 60) { midTankState = MidTankStateIdle; - //IFS_State = CARTRIDGE_STATE__Error; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0); } break; } if (inkAuthenticationPass == false) { Report("MidTank Cartridge authentication fail", __FILE__, __LINE__, 0, RpMessage, 0, 0); - //IFS_State = CARTRIDGE_STATE__Error; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0); midTankState = MidTankStateIdle; break; } + // Cartridge status received from user - assume cartridge is full midTankCapacity = Get_MidTank_Pressure_Sensor(midTankCartColor); if ((midTankCapacity > MidTankEmptyLimit)&&(midTankCartColor!=MIDTANK_8))//enable lubricant filling in two stages @@ -316,13 +325,13 @@ void midTankStateMachine(void) cart1.color = fastBILNK; Report("Mid-tank not empty", __FILE__, __LINE__, midTankCapacity, RpMessage, MidTankEmptyLimit, 0); midTankState = MidTankStateIdle; - //IFS_State = CARTRIDGE_STATE__Exists; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, 0); break; } Report("Mid-tank filling in process", __FILE__,__LINE__,(int)(MidTankEmptyLimit*1000), RpMessage, (int)(midTankCapacity*1000), 0); Pannel_Leds(CART_1, MODE_ON); cart1.color = BLINK; - //IFS_State = CARTRIDGE_STATE__Filling; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Filling, 0); if (midTankCartColor == MIDTANK_8) { @@ -333,7 +342,7 @@ void midTankStateMachine(void) MidTankValvesAction(Cartridge_MidTank_ON); Report("midTankStateWait set valve", __FILE__, __LINE__, 0, RpMessage, 0, 0); - // RFID change status - TBD + // RFID change status - inkUsed, inkFill // set count down midTankTimeoutCounter = 1; @@ -347,7 +356,7 @@ void midTankStateMachine(void) Report("Cartridge extracted during filling!!!", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); Report("Mid-tank # filling fail", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); midTankState = MidTankStateIdle; - //IFS_State = CARTRIDGE_STATE__Absent; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Absent, GetCartridgeFillPercent()); } // if time out or emptying done - idle if (midTankTimeoutCounter++ > CartridgeInkTimeout) { @@ -357,7 +366,7 @@ void midTankStateMachine(void) MidTankValvesAction(Cartridge_MidTank_OFF); Report("Mid-tank # filling fail", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); Report("Call customer support", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); - //IFS_State = CARTRIDGE_STATE__Error; + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Error, GetCartridgeFillPercent()); midTankState = MidTankStateIdle; } else if (CartridgeInkFull()) { midTankTimeoutCounter = 0; @@ -366,8 +375,10 @@ void midTankStateMachine(void) MidTankValvesAction(Cartridge_MidTank_OFF); Report("Mid-tank # filling done", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); midTankState = MidTankStateIdle; - //IFS_State = CARTRIDGE_STATE__FillingCompleted; + // RFID change status - inkEmpty + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__FillingCompleted, 100.0); } + CartridgeStateUpdate(CARTRIDGE_SLOT__Ink, CARTRIDGE_STATE__Filling, GetCartridgeFillPercent()); break; default: Report("wrong state", __FILE__, __LINE__, midTankState, RpMessage, 0, 0); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index fb8e97898..987257645 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -488,35 +488,35 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xAD1) //Set_Check_Pressure_Bypass { - LOG_ERROR((request->delay)?1:0,"Set_Check_Pressure_Bypass"); + REPORT_MSG((request->delay)?1:0,"Set_Check_Pressure_Bypass"); response.progress = Set_Check_Pressure_Bypass(request->delay); response.has_progress = true; } else if(request->amount == 0xAD2) //Set_Thread_Rockers_Bypass { - LOG_ERROR((request->delay)?1:0,"Set_Thread_Rockers_Bypass"); + REPORT_MSG((request->delay)?1:0,"Set_Thread_Rockers_Bypass"); response.progress = Set_Thread_Rockers_Bypass(request->delay); response.has_progress = true; } else if(request->amount == 0xAD3) //Set_Auto_Shutdown_Bypass { - LOG_ERROR((request->delay)?1:0,"Set_Auto_Shutdown_Bypass"); + REPORT_MSG((request->delay)?1:0,"Set_Auto_Shutdown_Bypass"); response.progress = Set_Auto_Shutdown_Bypass(request->delay); response.has_progress = true; } else if(request->amount == 0xAD4) //Set_Auto_Idle_Bypass { - LOG_ERROR((request->delay)?1:0,"Set_Auto_Idle_Bypass"); + REPORT_MSG((request->delay)?1:0,"Set_Auto_Idle_Bypass"); response.progress = Set_Auto_Idle_Bypass(request->delay); response.has_progress = true; } else if(request->amount == 0xAD5) //Set SecondFeederCorrection { - LOG_ERROR(request->delay,"Set SecondFeederCorrection"); + REPORT_MSG(request->delay,"Set SecondFeederCorrection"); SecondFeederCorrection = request->delay; response.progress = SecondFeederCorrection; response.has_progress = true; @@ -524,7 +524,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xAD6) //Set skip open lids { - LOG_ERROR(request->delay,"Set SkipOpenLids"); + REPORT_MSG(request->delay,"Set SkipOpenLids"); SkipOpenLids = request->delay; response.progress = SkipOpenLids; response.has_progress = true; @@ -532,7 +532,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xAD7) //Set actuators cleaning sequence { - LOG_ERROR(request->delay,"Set actuators cleaning sequence"); + REPORT_MSG(request->delay,"Set actuators cleaning sequence"); ActuatorsCleaningSequence = request->delay; response.progress = ActuatorsCleaningSequence; response.has_progress = true; @@ -540,7 +540,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xAD8) //Set ignore cone missing { - LOG_ERROR(request->delay,"Set ignore cone missing"); + REPORT_MSG(request->delay,"Set ignore cone missing"); IgnoreConeMissing = request->delay; response.progress = IgnoreConeMissing; response.has_progress = true; @@ -548,7 +548,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xAD9) //halt { - LOG_ERROR(request->delay,"halt"); + REPORT_MSG(request->delay,"halt"); memset (0,0,100000); response.progress = IgnoreConeMissing; response.has_progress = true; @@ -559,7 +559,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.progress = Power_Step_01_Mode(((request->delay &0x00FF00)>>8), request->delay &0x0000FF); response.has_progress = true; } - else + /*else if((request->amount == 0xAB) && (request->delay == 0xAB)) //Get pressure with flow (orifice flow meter) { response.progress = Calculate_Pitot_Pressure(true); @@ -572,7 +572,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.progress = Calculate_Pitot_Pressure(false); response.has_progress = true; - } + }*/ else if((request->amount == 0xAC) && (request->delay == 0xAC)) //VAC { @@ -909,7 +909,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) FRESULT iFResult = Init_Flash_File_System(true); if(iFResult != FR_OK) { - LOG_ERROR (iFResult, "Error during init Flash File System"); + REPORT_MSG (iFResult, "Error during init Flash File System"); assert(iFResult); } #ifdef WATCHDOG @@ -918,17 +918,17 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout); #endif } - else + /*else if((request->amount == 0x0C) && (request->delay == 0x0C)) //Get Gas Sensor { response.progress = (double)Calculate_Gas_Power_Consumption(); response.has_progress = true; - } + }*/ else if((request->amount == 0xDD) && (request->delay == 0xDD)) //Read Input Voltage { - LOG_ERROR(request->delay,"CheckAcInputVoltage"); + REPORT_MSG(request->delay,"CheckAcInputVoltage"); CheckAcInputVoltage(); response.progress = (double)Input_Voltage; @@ -937,7 +937,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor { - LOG_ERROR(request->delay,"FlashInit"); + REPORT_MSG(request->delay,"FlashInit"); HeatersEnd(); FlashInit(); response.progress = (double)OK; @@ -947,8 +947,12 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if((request->amount == 0x0CD) && (request->delay == 0x0CD)) //Get Gas Sensor { - LOG_ERROR(request->delay,"Load embedded parameters from file and restart"); + REPORT_MSG(request->delay,"Load embedded parameters from file and restart"); + base_flashErased = false; LoadConfigurationParamsFromFile(true); + REPORT_MSG(255,"Update successful, Rebooting in 5 seconds"); + Task_sleep (eOneSecond*5); + Power_Reset(); response.progress = (double)OK; response.has_progress = true; @@ -956,7 +960,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0x0CC) //Cartridge Validation Response Demo { - LOG_ERROR(request->delay,"ResponseDemo"); + REPORT_MSG(request->delay,"ResponseDemo"); ResponseDemo(request->delay); response.progress = (double)OK; response.has_progress = true; @@ -964,7 +968,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xE0) //fast refresh for pressure { - LOG_ERROR(request->delay,"setRapidPressureRead"); + REPORT_MSG(request->delay,"setRapidPressureRead"); setRapidPressureRead(request->delay); response.progress = (double)OK; response.has_progress = true; @@ -972,7 +976,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) /*else if(request->amount == 0xE1) //fast refresh for pressure { - LOG_ERROR(request->delay,"Starting Dispenser PID"); + REPORT_MSG(request->delay,"Starting Dispenser PID"); IDS_Start_Pid_Testing(request->delay); response.progress = (double)OK; response.has_progress = true; @@ -980,7 +984,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xE2) //fast refresh for pressure { - LOG_ERROR(request->delay,"Stoping Dispenser PID"); + REPORT_MSG(request->delay,"Stoping Dispenser PID"); IDS_Stop_Pid_Testing(request->delay); response.progress = (double)OK; response.has_progress = true; @@ -1024,7 +1028,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB1) //fast refresh for pressure { - LOG_ERROR(request->delay,"Set loading arm center"); + REPORT_MSG(request->delay,"Set loading arm center"); Read_Dryer_ENC_Position(); Task_sleep(500); Read_Dryer_ENC_Position(); @@ -1036,7 +1040,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB2) //Set loading arm cycles { - LOG_ERROR(request->delay,"Set loading arm cycles"); + REPORT_MSG(request->delay,"Set loading arm cycles"); response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,request->delay); response.has_progress = true; @@ -1044,7 +1048,8 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB3) //fast refresh for pressure { - LOG_ERROR(request->amount,"keep alive test"); + REPORT_MSG(request->amount,"keep alive test"); + keepalivetest = request->amount; response.progress = keepalivetest; response.has_progress = true; @@ -1052,9 +1057,9 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB4) //IDS_Dispenser_Content_Init { - LOG_ERROR(request->amount,"IDS_Dispenser_Content_Init"); + REPORT_MSG(request->amount,"IDS_Dispenser_Content_Init"); IDS_Dispenser_Content_Init(); - response.progress = keepalivetest; + response.progress = 0; response.has_progress = true; } @@ -1063,7 +1068,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { if (request->delay<=100) { - LOG_ERROR(request->delay,"set stub_heating_limit"); + REPORT_MSG(request->delay,"set stub_heating_limit"); stub_heating_limit = request->delay; } response.progress = request->delay; @@ -1074,7 +1079,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB6) //fast refresh for pressure { - LOG_ERROR(request->delay,"set vac read test"); + REPORT_MSG(request->delay,"set vac read test"); VAC_Test = (double)request->delay; response.progress = request->delay; response.has_progress = true; @@ -1085,7 +1090,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xB7) //fast refresh for pressure { specialHeaterState = request->delay?true:false; - LOG_ERROR(specialHeaterState,"set specialHeaterState"); + REPORT_MSG(specialHeaterState,"set specialHeaterState"); response.progress = specialHeaterState; response.has_progress = true; @@ -1095,7 +1100,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { if (request->delay == 1) {//init waste Waste_Init(); - LOG_ERROR(request->delay,"Waste_Init"); + REPORT_MSG(request->delay,"Waste_Init"); } response.progress = request->delay; response.has_progress = true; @@ -1105,7 +1110,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) { if ((request->delay == 0) || (request->delay == 1)) { doorState = request->delay; - LOG_ERROR(request->delay,"door"); + REPORT_MSG(request->delay,"door"); } response.progress = request->delay; response.has_progress = true; @@ -1149,7 +1154,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB14) { - LOG_ERROR(request->amount,"IDS_Cleaning_Move_Actuators"); + REPORT_MSG(request->amount,"IDS_Cleaning_Move_Actuators"); Init_CleaningStageCounter(); IDS_Cleaning_Move_Actuators(); @@ -1160,7 +1165,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xB15) { TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DH_LID; - LOG_ERROR(request->amount,"Motor soft stop"); + REPORT_MSG(request->amount,"Motor soft stop"); MotorStop(MotorId,Soft_Stop); response.progress = 0xB15; @@ -1170,7 +1175,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xB16) { TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DH_LID; - LOG_ERROR(request->amount,"MotorMovetoLimitSwitch"); + REPORT_MSG(request->amount,"MotorMovetoLimitSwitch"); MotorMovetoLimitSwitch(MotorId,1 - MotorsCfg[MotorId].directionthreadwize, 50, Motor_Id_to_LS_IdDown[MotorId], cleaningMotorCBFunction,30000); ReportWithPackageFilter(IDSFilter,"IDS_Cleaning_Motor_Homing", __FILE__, __LINE__, 1, RpWarning, 0, 0); @@ -1180,7 +1185,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB17) { - LOG_ERROR(request->delay,"HeadBlowersOff"); + REPORT_MSG(request->delay,"HeadBlowersOff"); HeadBlowersOff(request->delay); response.progress = 0xB17; @@ -1190,7 +1195,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xB18) { enable = HeadBlowersOffGet(); - LOG_ERROR(enable, "HeadBlowersOffGet"); + REPORT_MSG(enable, "HeadBlowersOffGet"); response.progress = 0xB18; response.has_progress = true; @@ -1198,7 +1203,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB19) { - LOG_ERROR(request->amount,"ThreadCheckArcHeadCovers"); + REPORT_MSG(request->amount,"ThreadCheckArcHeadCovers"); ThreadCheckArcHeadCovers(); ReportWithPackageFilter(IDSFilter,"ThreadCheckArcHeadCovers", __FILE__, __LINE__, 1, RpWarning, 0, 0); @@ -1208,24 +1213,32 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xB20) //Set loading arm cycles { - LOG_ERROR(request->delay,"Set winding calibration data"); + REPORT_MSG(request->delay,"Set winding calibration data"); response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_WINDER_CALIBRATION,request->delay); response.has_progress = true; } else + if(request->amount == 0xB21) //Set loading arm cycles + { + REPORT_MSG(request->delay,"Set screw max speed"); + + response.progress = (double)MotorSetMaxSpeed(HARDWARE_MOTOR_TYPE__MOTO_SCREW,request->delay); + response.has_progress = true; + } + else if(request->amount == 0xC3) //suspend I2C task { if (request->delay == 0) { - LOG_ERROR(request->delay,"Suspend I2C"); + REPORT_MSG(request->delay,"Suspend I2C"); PowerOffHeatersOff(); Task_sleep(1000); Task_setPri (I2C_Task_Handle,-1); } else { - LOG_ERROR(request->delay,"Resume"); + REPORT_MSG(request->delay,"Resume"); Task_setPri (I2C_Task_Handle,17); } response.progress = request->delay; @@ -1236,7 +1249,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xC11) { IgnoreMidTank = request->delay; - LOG_ERROR(IgnoreMidTank, "IgnoreMidTank"); + REPORT_MSG(IgnoreMidTank, "IgnoreMidTank"); response.progress = request->delay; response.has_progress = true; @@ -1246,7 +1259,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xC12) { MidTankMitigation = request->delay; - LOG_ERROR(MidTankMitigation, "MidTankMitigation"); + REPORT_MSG(MidTankMitigation, "MidTankMitigation"); response.progress = request->delay; response.has_progress = true; @@ -1255,7 +1268,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xC13) { MidTankMitigationOff = request->delay; - LOG_ERROR(MidTankMitigationOff, "MidTankMitigationOff"); + REPORT_MSG(MidTankMitigationOff, "MidTankMitigationOff"); response.progress = request->delay; response.has_progress = true; @@ -1264,7 +1277,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if(request->amount == 0xC14) { MidTankMitigationOn = request->delay; - LOG_ERROR(MidTankMitigationOn, "MidTankMitigationOn"); + REPORT_MSG(MidTankMitigationOn, "MidTankMitigationOn"); response.progress = request->delay; response.has_progress = true; @@ -1278,7 +1291,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0xF1) { - LOG_ERROR(request->delay,"NumberOfRotationPerPassage"); + REPORT_MSG(request->delay,"NumberOfRotationPerPassage"); NumberOfRotationPerPassage = (float)(request->delay)/1000; } else @@ -1314,7 +1327,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) //free(container_buffer); if (RestartNeeded == true) { - LOG_ERROR(255,"Update successful, Rebooting in 5 seconds"); + REPORT_MSG(255,"Update successful, Rebooting in 5 seconds"); Task_sleep (eOneSecond*5); Power_Reset(); RestartNeeded = false; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index f7ed9065f..63072e4d8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -339,6 +339,7 @@ else { load.color = colorON; + Pannel_Leds(THREAD_LOAD, MODE_ON); ThreadLoadingReport(); } } @@ -852,6 +853,7 @@ LoadStages = THREAD_LOAD_INIT; load.color = colorON; + Pannel_Leds(THREAD_LOAD, MODE_ON); return OK; } uint32_t Thread_Load_switchCallback(uint32_t deviceID, uint32_t BusyFlag) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 0440d2241..a6cb25c45 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -167,6 +167,7 @@ uint32_t Winder_Prepare(void *JobDetails) if (IgnoreConeMissing == false) { JobEndReason = JOB_THREAD_BREAK; + usnprintf(AlarmReasonStr, 100, "No cone in winder"); PrepareReady(Module_Winder,ModuleFail); AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true); return ERROR; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 94350f752..bc4e6cb8f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -459,6 +459,7 @@ uint32_t checkBreakSensor(uint32_t index) JobEndReason = JOB_THREAD_BREAK; ThreadControlActive = false; SendJobProgress(0.0,0,false, TMessage); + strcpy(AlarmReasonStr,TMessage); SendSegmentFail(); //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); //EndState(CurrentJob,"ReadBreakSensor Error" ); @@ -482,6 +483,7 @@ uint32_t checkBreakSensor(uint32_t index) { //consider applying the debouce parameters later usnprintf(TMessage, 60, "thread speed too low"); + strcpy(AlarmReasonStr,TMessage); JobEndReason = JOB_THREAD_BREAK; ThreadControlActive = false; SendJobProgress(0.0,0,false, TMessage); @@ -685,6 +687,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) JobEndReason = JOB_WINDER_DANCER_FAIL+HARDWARE_DANCER_0; #endif SendJobProgress(0.0,0,false, TMessage); + strcpy(AlarmReasonStr,TMessage); //EndState(CurrentJob,TMessage ); SendSegmentFail(); /*switch (index) @@ -1115,6 +1118,7 @@ uint32_t ThreadPrepareState(void *JobDetails) { ReportWithPackageFilter(ThreadFilter,"Dyeing head is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpWarning,LIMIT,0); //JobEndReason = JOB_LIDS_OPEN; + // usnprintf(AlarmReasonStr, 100, "Dyeing head is open!!!"); //PrepareReady(Module_Thread,ModuleFail); //return ERROR; } @@ -1122,6 +1126,7 @@ uint32_t ThreadPrepareState(void *JobDetails) { ReportWithPackageFilter(ThreadFilter,"Dryer lid is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpWarning,LIMIT,0); //JobEndReason = JOB_LIDS_OPEN; + // usnprintf(AlarmReasonStr, 100, "Dyeing head is open!!!"); //PrepareReady(Module_Thread,ModuleFail); //return ERROR; }*/ @@ -1135,6 +1140,7 @@ uint32_t ThreadPrepareState(void *JobDetails) if (SkipOpenLids == false) { JobEndReason = JOB_LIDS_OPEN; + usnprintf(AlarmReasonStr, 100, "Dyeing head is open!!!"); PrepareReady(Module_Thread,ModuleFail); return ERROR; } @@ -1155,6 +1161,7 @@ uint32_t ThreadPrepareState(void *JobDetails) if (SkipOpenLids == false) { JobEndReason = JOB_LIDS_OPEN; + usnprintf(AlarmReasonStr, 100, "Dryer lid is open!!!"); PrepareReady(Module_Thread,ModuleFail); return ERROR; } diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h index 8a075bfd4..db15a9ffd 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h @@ -44,7 +44,7 @@ bool WHS_IsContainerFull(); bool WHS_WasteCartridgeLowerPresent(); bool WHS_WasteCartridgeMiddlePresent(); bool WHS_IsEmptying(); -uint32_t Waste_CheckState(void); +uint32_t Waste_CheckState(int *AlarmId); uint32_t Waste_Prepare(void); bool WHS_IsVocPpmOverAlarmLimit(); void setWastePrepareValues(float HeadLimit,float WasteLimit); diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index c87dc88c3..5471397aa 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -22,6 +22,7 @@ #include "CartridgeValidationResponse.pb-c.h" #include "Modules/General/buttons.h" #include "modules/General/process.h" +#include "Modules/General/MachineStatus.h" #include "Modules/IFS/ifs.h" #include <Drivers/I2C_Communication/I2C_Task.h> #include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h> @@ -36,7 +37,7 @@ bool DoorState = OPEN; uint32_t timeout_counter = 0; int wasteLevel = 0; WasteCartridgeEnum SelectedCard = MaxWasteCartridges; -CartridgeStateEnum CartState[MaxWasteCartridges]; +CartridgeStateEnum CartState[MaxWasteCartridges];// = {CartridgeStateOUT,CartridgeStateOUT,CartridgeStateOUT}; uint32_t Cartridge_Cover_Control; button *CartLed[MaxWasteCartridges] = {0, &cart2, &cart3}; WasteTankStateEnum WasteTankState = WasteTankStateIdle; @@ -49,7 +50,7 @@ bool setWasteValve (WasteCartridgeEnum WasteCartridge); #define WASTE_LEVEL_OVERFLOW 2700 #define WASTE_LEVEL_FULL 2300 #define WASTE_LEVEL_EMPTY 900 -#define WASTE_EMPTING_TIMEOUT 1200 +#define WASTE_EMPTING_TIMEOUT 1500 double wasteLevelOverflow = WASTE_LEVEL_OVERFLOW; double wasteLevelFull = WASTE_LEVEL_FULL; double wasteLevelEmpty = WASTE_LEVEL_EMPTY; @@ -65,6 +66,7 @@ void cartCART_INSERTED (WasteCartridgeEnum CartId) if (CartState[CartId] != CartridgeStateOUT) Report("Cartridges Cart inserted wrong state", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0); CartState[CartId] = CartridgeStateIN; + Pannel_Leds((CartId == WasteCartridge_middle)?CART_2:CART_3, MODE_ON); CartLed[CartId]->color = colorON; Report("Cartridges Cart inserted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0); @@ -77,6 +79,7 @@ void cartCART_EXTRACTED(WasteCartridgeEnum CartId) //{called from polling functi Report("Cartridges Cart extracted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0); CartState[CartId] = CartridgeStateOUT; + Pannel_Leds((CartId == WasteCartridge_middle)?CART_2:CART_3, MODE_OFF); CartLed[CartId]->color = colorOFF; if (init==0) WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS); @@ -259,6 +262,14 @@ bool RdWasteTankOverFlowSensor() return 0; } +int WHS_GetCartridgeFillPercent() +{ + return (((wasteLevel - wasteLevelEmpty) * 100) / WASTE_CARTRIDGE_SIZE); +} +int WHS_GetCartridgeFill() +{ + return (wasteLevelFull - wasteLevel); +} bool WHS_IsContainerFull() { return RdWasteTankFullSensor(); @@ -343,6 +354,7 @@ void Waste_StateMachine_OneSecond_Call(void) if ((Is_Cartridge_Present(CART_2) != cartGetPresence(WasteCartridge_middle)) || (init)) { if (Is_Cartridge_Present(CART_2)) { cartCART_INSERTED(WasteCartridge_middle); + CartridgeStateUpdate(CARTRIDGE_SLOT__WasteMiddle, CARTRIDGE_STATE__Inserted, 0); } else { cartCART_EXTRACTED(WasteCartridge_middle); } @@ -350,6 +362,7 @@ void Waste_StateMachine_OneSecond_Call(void) if ((Is_Cartridge_Present(CART_3) != cartGetPresence(WasteCartridge_lower)) || (init)) { if (Is_Cartridge_Present(CART_3)) { cartCART_INSERTED(WasteCartridge_lower); + CartridgeStateUpdate(CARTRIDGE_SLOT__WasteLower, CARTRIDGE_STATE__Inserted, 0); } else { cartCART_EXTRACTED(WasteCartridge_lower); } @@ -383,6 +396,7 @@ void Waste_StateMachine_OneSecond_Call(void) void Waste_StateMachine(void) { uint32_t activeCart; + char str[100]; switch (WasteTankState) { case WasteTankStateIdle: @@ -417,7 +431,8 @@ void Waste_StateMachine(void) //Report("Close cartridge cover", __FILE__, __LINE__, DoorState, RpMessage, 0, 0); break; } - //check RFID? (TBD) + // check RFID - check cartridge OK (inkEmpty) + // RFID change status - set WasteEmpty //move to next state WasteTankState = WasteTankStateFull; @@ -432,7 +447,6 @@ void Waste_StateMachine(void) activeCart = cartGetActiveCart(); //Report("WasteTankStateEmptying set valve", __FILE__, __LINE__, activeCart, RpMessage, 0, 0); setWasteValve(activeCart); - // RFID change status - TBD // set count down timeout_counter = 1; @@ -440,6 +454,7 @@ void Waste_StateMachine(void) // set emptying limit wasteLevelEmpty = wasteLevel - WASTE_CARTRIDGE_SIZE; + wasteLevelFull = wasteLevel; waste_seq_step1_cont(); // start a timer to observe door opening @@ -447,19 +462,23 @@ void Waste_StateMachine(void) Report("add control Cartridge Cover Door", __FILE__, __LINE__, 0, RpMessage, 0, 0); SetWastePump(OPEN); - Report("WasteTankStateEmptying set Pump Open", __FILE__, __LINE__, activeCart, RpMessage, 0, 0); + Report("WasteTankStateEmptying set Pump Open", __FILE__, activeCart, wasteLevel, RpMessage, wasteLevelEmpty, 0); //start emptying + // RFID change status - set wasteFilling WasteTankState = WasteTankStateEmptying; + CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, 0); break; case WasteTankStateEmptying: // if time out or emptying done - idle + activeCart = cartGetActiveCart(); if (timeout_counter++ > WASTE_EMPTING_TIMEOUT) { SetWastePump(CLOSE); cartFILLING_END(); - // RFID change status - TBD WasteTankState = WasteTankStateIdle; - Report("WasteTankStateEmptying TimeOut", __FILE__, __LINE__, 0, RpMessage, 0, 0); + usnprintf(str, 100, "WasteTankStateEmptying Timeout. time:%d:%d volume:%d", timeout_counter/60, timeout_counter%60, WHS_GetCartridgeFill()); + Report(str, __FILE__, __LINE__, 0, RpMessage, 0, 0); + CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent()); AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true); RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying); timeout_counter = 0; @@ -467,14 +486,17 @@ void Waste_StateMachine(void) SetWastePump(CLOSE); cartFILLING_END(); waste_seq_cont_stop(); - // RFID change status - TBD + // RFID change status - set wasteFull WasteTankState = WasteTankStateIdle; RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying); //if (cartNotAllFull() == false) AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); - Report("WasteTankStateEmptying done", __FILE__, __LINE__, 0, RpMessage, 0, 0); + usnprintf(str, 100, "WasteTankStateEmptying done. time:%d:%d volume:%d", timeout_counter/60, timeout_counter%60, WHS_GetCartridgeFill()); + Report(str, __FILE__, __LINE__, 0, RpMessage, 0, 0); + CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__EmptyingCompleted, WHS_GetCartridgeFillPercent()); timeout_counter = 0; } + CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Emptying, WHS_GetCartridgeFillPercent()); #ifdef WHS_DEBUG wasteLevel -= 100; timeout_counter += 10; @@ -495,7 +517,7 @@ void Waste_StateMachine(void) AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); Report("WasteTankStatePaused done", __FILE__, __LINE__, 0, RpMessage, 0, 0); timeout_counter = 0; - + CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent()); } break; default: @@ -503,7 +525,7 @@ void Waste_StateMachine(void) break; } } -uint32_t Waste_CheckState(void) +uint32_t Waste_CheckState(int *AlarmId) { //check if the waste is ready to run - waste level not above overflow level and no cartridge in the slots if (wasteLevel > wasteLevelOverflow) @@ -512,6 +534,7 @@ uint32_t Waste_CheckState(void) JobEndReason = JOB_SAFETY_CRITICAL_ALARM; usnprintf(AlarmReasonStr, 100, "cannot start a job with waste tank overflow"); AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); + *AlarmId = EVENT_TYPE__WASTE_CONTAINER_OVERFLOW; //PrepareReady(Module_Waste,ModuleFail); return JOB_SAFETY_CRITICAL_ALARM; } @@ -525,11 +548,13 @@ uint32_t Waste_CheckState(void) Report("cannot start a job with cartridges in the IFS", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0); JobEndReason = JOB_WASTE_HANDLING_PROBLEM; AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); + *AlarmId = EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL; usnprintf(AlarmReasonStr, 100, "cannot start a job with cartridges in the IFS"); //PrepareReady(Module_Waste,ModuleFail); return JOB_WASTE_HANDLING_PROBLEM; } } +int Waste_Prepare_Timeout = 0; bool WHS_FlowReady = false,HeadIn_FlowReady = false,HeadOut_FlowReady = false; uint32_t WasteReadyControlId = 0xFF; float AllowedRangeForHeadBlowerDeviation = 0.07,AllowedRangeForWasteBlowerDeviation = 0.20; @@ -565,7 +590,7 @@ uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue) Report("Module waste HeadOut_FlowReady ready", __FILE__, __LINE__, (int)(HeadOut_Flow*100), RpMessage, WHS_FlowReady, 0); HeadOut_FlowReady = true; } - if (Head_Type <HEAD_TYPE_FLAT) + if (Head_Type <=HEAD_TYPE_FLAT) headready = true; else if ((HeadIn_FlowReady == true)&&(HeadOut_FlowReady == true)) headready = true; @@ -575,6 +600,17 @@ uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue) whsready = true; if ((headready == true)&&(whsready == true)) ready = true; + if ((Waste_Prepare_Timeout%30 == 0)||(Waste_Prepare_Timeout>250)) + { + Report("Module waste preparing values", __FILE__, (int)(HeadFlow*100), (int)(HeadIn_Flow*100), RpMessage, (int)(HeadOut_Flow*100), 0); + } + if (Waste_Prepare_Timeout++>300) + { + SafeRemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak); + WasteReadyControlId = 0xFF; + Report("Module waste prepare failed!", __FILE__, __LINE__, headready, RpMessage, headready, 0); + PrepareReady(Module_Waste,ModuleFail); + } if (ready == true) { SafeRemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak); @@ -590,6 +626,7 @@ uint32_t Waste_Prepare(void) WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false; if (WasteReadyControlId != 0xFF) RemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak); + Waste_Prepare_Timeout = 0; //check that blowers are within 10% of designated flow: WHS, head blowers WasteReadyControlId = AddControlCallback("Cartridge Cover Door", Waste_PrepareCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0); Report("Module waste prepare", __FILE__, __LINE__, Head_Type, RpMessage, WHS_Type, 0); @@ -609,6 +646,7 @@ bool WHS_IsVocPpmOverAlarmLimit() if( ( Latest_Gas_Sens_PPM > VocPpmAlarmLimit ) || //PPM ( (Latest_Gas_Sens_PPM > VocPpmAlarmLimit90Percent) && (ReadingVocEverySec == true) ) ) //Hysteresis { + //Report("VOC nearing alarm state", __FILE__, (int)(Latest_Gas_Sens_PPM*100), VocPpmAlarmLimit, RpMessage, counter, 0); //reading every sec ReadingVocEverySec = true; if(counter < 0xFF) @@ -616,11 +654,11 @@ bool WHS_IsVocPpmOverAlarmLimit() counter++; } - if(counter > VocPpmLimitForXSec)//Sec + /*if(counter > VocPpmLimitForXSec)//Sec { AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true); return true;//Buzzer ON if defined - } + }*/ } else { diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c index 614fd05eb..070f3c7e7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c @@ -86,10 +86,6 @@ bool newWHS_init(void) //Set_All_WHS_Fans(0xFF); // delayms(4000); //Trigger_SetWHSBlowerVoltage (0x0C00); - //Task_sleep(1); - //InitConsole_WHS_UART3();//WHS Shinko communication - - return status; } |
