aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c102
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c47
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c17
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c87
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/buttons.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IFS/ifs.c33
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c105
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c66
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c4
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;
}