aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-10-07 21:40:34 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-10-07 21:40:34 +0300
commita20d25bb885b3ec46d63bda7263fd98faa4095c2 (patch)
tree65df8f99ebcf6b55f73798e89ed77fd237ffb4d0 /Software/Embedded_SW
parentd93d90e692d19ccb8c29892a3471e59f969124ee (diff)
downloadTango-a20d25bb885b3ec46d63bda7263fd98faa4095c2.tar.gz
Tango-a20d25bb885b3ec46d63bda7263fd98faa4095c2.zip
winder calibration from main EEPROM (for #3782, #3761). waste prepare (#2995) increased suction after job (#2994)
Diffstat (limited to 'Software/Embedded_SW')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c16
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c44
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c32
9 files changed, 94 insertions, 25 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index 764ef0d44..9e626ec7f 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -391,6 +391,8 @@ bool IFS_Clearing_Suction = false;
bool IFS_Clearing_SuctionWaiting = false;
int midtank_cleared = NUM_OF_MIDTANKS;
+bool JobEndSuction = false;
+
void WHS_Set_IFS_Clearing_Suction (int midtank)
{
if (JobIsActive())
@@ -405,6 +407,12 @@ void WHS_Set_IFS_Clearing_Suction (int midtank)
}
Report("------------ WHS_Set_IFS_Clearing_Suction :-----------------", __FILE__,__LINE__, (int) IFS_Clearing_Suction, RpMessage, (int)JobIsActive(), 0);
}
+#define JobEndSuctionTime 30
+void WHS_Set_JobEndSuction (void)
+{
+ JobEndSuction = true;
+ Report("------------ WHS_Set_JobEndSuction :-----------------", __FILE__,__LINE__, (int) JobEndSuction, RpMessage, (int)JobIsActive(), 0);
+}
#define MAX_ALLOWED_BLOWER_VOLTAGE 4300
#define MIN_ALLOWED_BLOWER_VOLTAGE 2400
@@ -482,6 +490,14 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value)
}
}
+ if (JobEndSuction == true)
+ {
+ JobEndSuction = false;
+ Report("------------ Job end Clearing Suction -----------------", __FILE__,__LINE__, (int)4000, RpMessage, (int)JobEndSuctionTime, 0);
+ Control_Voltage_To_Blower(4000);
+ close_loop_time = JobEndSuctionTime;
+ return OK;
+ }
volt = getBlowerState();
WHS_Pid_Testing_Func(Q_value,current_dying_head_flow_Q);
//close_loop_time = 1;
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
index f5bc52858..3033d6d06 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h
@@ -28,6 +28,8 @@ double get_average_Q(WHS_Flow_Meter ORF_id);
bool WHS_Set_Blower_Control_Closed_Loop(double Q_value);
void WHS_Start_Blower_Control_Closed_Loop (void);
void WHS_Set_IFS_Clearing_Suction (int midtank);
+void WHS_Set_JobEndSuction (void);
+
double WHS_Get_Blower_Control_Closed_Loop_SetPoint(void);
void WHS_Set_SetPoint_Q_value(double value);
void WHS_enable_control_loop(bool value);
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
index bb171dda4..12598ed07 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
@@ -33,7 +33,7 @@ typedef enum {
EEPROM_STORAGE_MIDTANK_8_B,
//EEPROM_STORAGE_SERIAL_NUM,
//EEPROM_STORAGE_MAC_ADDR,
- EEPROM_STORAGE_DRYER_BACKLASH,
+ EEPROM_STORAGE_WINDER_CALIBRATION,
EEPROM_STORAGE_EMBEDDED_VERSION,
EEPROM_ALARM_SUPPORT,
EEPROM_ORIFICE1_ZERO_VALUE,
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index ca6c4d51f..01e3533d6 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -972,7 +972,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
}
if (Configured[Module_Waste])
{
- FoundReason = Waste_Prepare();
+ FoundReason = Waste_CheckState();
}
if ((AlarmState[Alarm_i].Status == true)&&(FoundReason == JOB_OK))
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index e4a573e7b..a81cfff52 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -1041,7 +1041,6 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,request->delay);
response.has_progress = true;
}
-
else
if(request->amount == 0xB3) //fast refresh for pressure
{
@@ -1207,6 +1206,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
+ if(request->amount == 0xB20) //Set loading arm cycles
+ {
+ LOG_ERROR(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 == 0xC3) //suspend I2C task
{
if (request->delay == 0)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index f4d34284d..4ec45c5b8 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -17,7 +17,7 @@
#include "Common/report/report.h"
#include "drivers/FPGA/FPGA.h"
-
+#include "drivers/Flash_ram/MCU_E2Prom.h"
#include "drivers/FPGA/FPGA_SPI_Comm.h"
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
@@ -102,15 +102,22 @@ char ScrewStr[150];
uint32_t InternalWindingConfigMessage(JobSpool* request)
{
uint32_t status = PASSED;
+ int limitswitchstartpointoffset = 0;
InternalWinderCfg.segmentoffsetpulses = request->segmentoffsetpulses;
InternalWinderCfg.spoolbackingrate = request->backingrate;
InternalWinderCfg.startoffsetpulses = request->startoffsetpulses;
if (request->has_limitswitchstartpointoffset)
{
- InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset;
+ //InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset;
Report("limit switch start point offset",__FILE__,__LINE__,(int)(request->startoffsetpulses),RpWarning,(int)(request->limitswitchstartpointoffset), 0);
}
+ status |= MCU_E2PromRead(EEPROM_STORAGE_WINDER_CALIBRATION,&limitswitchstartpointoffset);
+ if ((status!= OK )||(limitswitchstartpointoffset == 0xFFFF))
+ limitswitchstartpointoffset = 0;
+ Report("limit switch start point offset",__FILE__,(int)(request->startoffsetpulses),(int)(limitswitchstartpointoffset),RpWarning,status, 0);
+ InternalWinderCfg.startoffsetpulses += limitswitchstartpointoffset;
+
InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate;
InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*3;//request->rotationsperpassage;
if (request->rotationsperpassage > 6.1)
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
index 996191b63..0a7534635 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
@@ -44,6 +44,7 @@ bool WHS_IsContainerFull();
bool WHS_WasteCartridgeLowerPresent();
bool WHS_WasteCartridgeMiddlePresent();
bool WHS_IsEmptying();
+uint32_t Waste_CheckState(void);
uint32_t Waste_Prepare(void);
bool WHS_IsVocPpmOverAlarmLimit();
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index 28a5720ab..fa89164d3 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -19,6 +19,7 @@
#include "CartridgeValidationRequest.pb-c.h"
#include "CartridgeValidationResponse.pb-c.h"
#include "Modules/General/buttons.h"
+#include "modules/General/process.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>
@@ -501,7 +502,7 @@ void Waste_StateMachine(void)
break;
}
}
-uint32_t Waste_Prepare(void)
+uint32_t Waste_CheckState(void)
{
//check if the waste is ready to run - waste level not above overflow level and no cartridge in the slots
if (wasteLevel > wasteLevelOverflow)
@@ -528,6 +529,45 @@ uint32_t Waste_Prepare(void)
return JOB_WASTE_HANDLING_PROBLEM;
}
}
+bool WHS_FlowReady = false,HeadIn_FlowReady = false,HeadOut_FlowReady = false;
+uint32_t WasteReadyControlId = 0xFF;
+uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue)
+{
+ bool ready = false, headready = false,whsready = false;
+ double HeadFlow = GetWHSAirFlow(HEAD_FLOW_METER);
+ double HeadIn_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_5_0X84_0);
+ double HeadOut_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_7_0X86_0);
+ if ((HeadFlow<(headairflow*1.07))&&(HeadFlow>(headairflow*0.93)))
+ WHS_FlowReady = true;
+ if ((HeadIn_FlowReady<(headBlowersFlow[0]*1.07))&&(HeadIn_FlowReady>(headBlowersFlow[0]*0.93)))
+ HeadIn_FlowReady = true;
+ if ((HeadOut_Flow<(headBlowersFlow[1]*1.07))&&(HeadOut_Flow>(headBlowersFlow[1]*0.93)))
+ HeadOut_FlowReady = true;
+ if (Head_Type <HEAD_TYPE_FLAT)
+ headready = true;
+ else if ((HeadIn_FlowReady == true)&&(HeadOut_FlowReady == true))
+ headready = true;
+ if (WHS_Type == WHS_TYPE_UNKNOWN)
+ whsready = true;
+ else if (WHS_FlowReady == true)
+ whsready = true;
+ if ((headready == true)&&(whsready == true))
+ ready = true;
+ if (ready == true)
+ {
+ SafeRemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak);
+ WasteReadyControlId = 0xFF;
+ PrepareReady(Module_Waste,ModuleDone);
+ }
+}
+uint32_t Waste_Prepare(void)
+{
+ WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false;
+ if (WasteReadyControlId != 0xFF)
+ RemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak);
+ //check that blowers are within 10% of designated flow: WHS, head blowers
+ WasteReadyControlId = AddControlCallback("Cartridge Cover Door", Waste_PrepareCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0);
+}
bool WHS_IsVocPpmOverAlarmLimit()
{
@@ -565,3 +605,5 @@ bool WHS_IsVocPpmOverAlarmLimit()
return false;
}
+
+
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index c217a68b3..86c8ef7da 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -209,10 +209,10 @@ static ReturnCode PrepareState(void *JobDetails)
{
PrepareWaiting[Module_Thread] = ModuleWaiting;
}
- /*if (Configured[Module_Waste])
+ if (Configured[Module_Waste])
{
PrepareWaiting[Module_Waste] = ModuleWaiting;
- }*/
+ }
if (Configured[Module_Winder])
{
PrepareWaiting[Module_Winder] = ModuleWaiting;
@@ -245,8 +245,8 @@ static ReturnCode PrepareState(void *JobDetails)
SendJobProgress(0.0, 0, false, "Winder prepare failed !!!!");
}
}
- //if (Configured[Module_Waste])
- // Waste_Prepare();
+ if (Configured[Module_Waste])
+ Waste_Prepare();
return retcode;
}
@@ -1406,12 +1406,10 @@ Void jobTask(UArg arg0, UArg arg1)
CurrentJob = NULL;
if (IFS_Clearing_SuctionWaiting == true)
WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS);
- //if (CurrentRequest!= NULL)
- // job_request__free_unpacked(CurrentRequest,NULL);
- //CurrentRequest = NULL;
- SuspendLargeMessages = false;
- LOG_ERROR(4,"ResumeLargeMessages PrintingResultsOk");
- //DiagnosticsStart();
+ WHS_Set_JobEndSuction();
+ SuspendLargeMessages = false;
+ Report("Job Ended PrintingResultsOk",__FILE__,__LINE__, 4,RpMessage,0,0);
+ //DiagnosticsStart();
//CleanState(CurrentJob);
break;
case PrintingResultsFail:
@@ -1422,15 +1420,11 @@ Void jobTask(UArg arg0, UArg arg1)
SetMachineStatus(MACHINE_STATE__Ready);
resetIdleCounter();
CurrentJob = NULL;
- //if (CurrentRequest!= NULL)
- // job_request__free_unpacked(CurrentRequest,NULL);
- //CurrentRequest = NULL;
- SuspendLargeMessages = false;
- if (IFS_Clearing_SuctionWaiting == true)
- WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS);
- LOG_ERROR(3,"ResumeLargeMessages PrintingResultsFail");
- //DiagnosticsStart();
-
+ SuspendLargeMessages = false;
+ if (IFS_Clearing_SuctionWaiting == true)
+ WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS);
+ WHS_Set_JobEndSuction();
+ Report("Job Ended PrintingResultsFail",__FILE__,__LINE__, 4,RpError,JobEndReason,0);
//send message data as a validation error message to host
ExitState(Message.messageData);
break;