aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Waste
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-10-29 13:19:45 +0200
committerAvi Levkovich <avi@twine-s.com>2020-10-29 13:19:45 +0200
commitf07e100bb3fd2feb41e3e1b6ff8c5e2b5e82cc86 (patch)
tree6a1cdd0f9db18c24d64ab6675eeca7e79f628037 /Software/Embedded_SW/Embedded/Modules/Waste
parent902139314c4d406236de4eec79ba7364d09e68d0 (diff)
parent6d2c4fb1e5834a7a74bdd5399e9ba82f403a52eb (diff)
downloadTango-f07e100bb3fd2feb41e3e1b6ff8c5e2b5e82cc86.tar.gz
Tango-f07e100bb3fd2feb41e3e1b6ff8c5e2b5e82cc86.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Waste')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c29
2 files changed, 24 insertions, 7 deletions
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 1de7f1319..bfed5d0ee 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;
@@ -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,10 @@ bool RdWasteTankOverFlowSensor()
return 0;
}
+int WHS_GetCartridgeFillPercent()
+{
+ return (((wasteLevel - wasteLevelEmpty) * 100) / WASTE_CARTRIDGE_SIZE);
+}
bool WHS_IsContainerFull()
{
return RdWasteTankFullSensor();
@@ -343,6 +350,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 +358,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);
}
@@ -451,15 +460,18 @@ void Waste_StateMachine(void)
//start emptying
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);
+ CartridgeStateUpdate(activeCart, CARTRIDGE_STATE__Error, WHS_GetCartridgeFillPercent());
AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
timeout_counter = 0;
@@ -473,8 +485,10 @@ void Waste_StateMachine(void)
//if (cartNotAllFull() == false)
AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
Report("WasteTankStateEmptying done", __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 +509,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 +517,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 +526,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,6 +540,7 @@ 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;
@@ -565,7 +581,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;
@@ -609,6 +625,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 +633,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
{