diff options
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c | 153 |
1 files changed, 145 insertions, 8 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index 099fc0c2e..dc76a3390 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -32,6 +32,10 @@ uint32_t Cartridge_Cover_Control; button *CartLed[MaxWasteCartridges] = {0, &cart2, &cart3}; WasteTankStateEnum WasteTankState = WasteTankStateIdle; +int init = 1; + +bool setWasteValve (WasteCartridgeEnum WasteCartridge); + #define WASTE_CARTRIDGE_SIZE 1500 #define WASTE_LEVEL_OVERFLOW 2700 #define WASTE_LEVEL_FULL 2300 @@ -65,6 +69,8 @@ void cartCART_EXTRACTED(WasteCartridgeEnum CartId) //{called from polling functi Report("Cartridges Cart extracted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0); CartState[CartId] = CartridgeStateOUT; CartLed[CartId]->color = colorOFF; + if (init==0) + WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS); } WasteCartridgeEnum cartSELECT_CART(void) //{ if there is no SELECTED cartridge select the first cartridge in IN state. If there is none, return -1} @@ -113,6 +119,8 @@ void cartFILLING_END(void) } else { Report("Cartridges end with no active cartridge", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0); } + setWasteValve(WasteCartridge_middle); + } CartridgeStateEnum cartGetState(WasteCartridgeEnum CartId) @@ -163,6 +171,119 @@ WasteCartridgeEnum cartNotAllFull() return false; } +bool SetWastePump( bool power) +{ + if ( power == OPEN ) { + if (WHS_Type == WHS_TYPE_UNKNOWN) { + Pumps_Control(WHS_WTANKPUMP2, OPEN); //waste_pump_power_on(); + } else { //new WHS + Trigger_SetWHSPump(OPEN); + } + return OPEN; + } else { + if (WHS_Type == WHS_TYPE_UNKNOWN) { + Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_on(); + } else { //new WHS + Trigger_SetWHSPump(CLOSE); + } + return CLOSE; + } +} + +bool setWasteValve (WasteCartridgeEnum WasteCartridge) +{ + bool direction; + + if (WasteCartridge == WasteCartridge_lower) { + direction = true; + } else { + direction = false; + } + + if (WHS_Type == WHS_TYPE_UNKNOWN) { + Valve_Set(VALVE_WASTE_TANK,direction); + } else { //new WHS + Trigger_SetWHSValveWatseCartridge(direction); + } + return direction; +} + +bool RdWasteTankEmptySensor() +{ + //double WasteLevel = 0.0; + + if (WHS_Type == WHS_TYPE_UNKNOWN) { + return WHS_GPI_WCONTAINER_WARN(); + } else { //new WHS + //WasteLevel = GetWHSWasteTankLevelMiliLiter(); + if (wasteLevel < wasteLevelEmpty) + return 1; //Empty + } + return 0; +} + +bool RdWasteTankFullSensor() +{ + //double WasteLevel = 0.0; + + if (WHS_Type == WHS_TYPE_UNKNOWN) { + return WHS_GPI_WCONTAINER_FULL(); + } else { //new WHS + //WasteLevel = GetWHSWasteTankLevelMiliLiter(); + if (wasteLevel >= wasteLevelFull) + return 1; //full + } + return 0; +} + +bool RdWasteTankOverFlowSensor() +{ + //double WasteLevel = 0.0; + + if (WHS_Type == WHS_TYPE_UNKNOWN) { + return WHS_GPI_WASTE_OVERFULL(); + } else {//new WHS + //WasteLevel = GetWHSWasteTankLevelMiliLiter(); + if (wasteLevel > wasteLevelOverflow) + return 1; //overflow + } + return 0; +} + +bool WHS_IsContainerFull() +{ + return RdWasteTankFullSensor(); +} + +bool WHS_IsContainerEmpty() +{ + return RdWasteTankEmptySensor(); +} + +bool WHS_IsContainerOverflow() +{ + return RdWasteTankOverFlowSensor(); +} + +bool WHS_WasteCartridgeLowerPresent() +{ + return Is_Cartridge_Present(CART_3); +} + +bool WHS_WasteCartridgeMiddlePresent() +{ + return Is_Cartridge_Present(CART_2); +} + +bool WHS_IsEmptying() +{ + if (WasteTankState == WasteTankStateEmptying) { + return true; + } else { + return false; + } +} + void Waste_Init() { CartState[WasteCartridge_middle] = CartridgeStateOUT; @@ -186,7 +307,6 @@ bool cartCart_door()//Polled by polling function. Notify waste. Poll each 1 seco return DoorState; } -//Waste_DoorOpenDuringEmptying uint32_t Waste_DoorOpenDuringEmptying(uint32_t IfIndex, uint32_t ReadValue) { cartCart_door(); @@ -212,7 +332,6 @@ uint32_t Waste_DoorOpenDuringEmptying(uint32_t IfIndex, uint32_t ReadValue) void Waste_StateMachine_OneSecond_Call(void) { - static int init = 1; static WasteTankStateEnum prev_state = 0; static int prev_wasteLevel = 0; @@ -263,7 +382,7 @@ void Waste_StateMachine(void) switch (WasteTankState) { case WasteTankStateIdle: - if (wasteLevel > wasteLevelOverFlow) { + if(WHS_IsContainerOverflow()) { AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); } else { AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false); @@ -271,7 +390,7 @@ void Waste_StateMachine(void) if (cartNotAllFull() == true) { AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false); } - if (wasteLevel > wasteLevelFull) { + if(WHS_IsContainerFull()) { //check if power down in process if ( PowerOffInProcessGetState() ) { Report("Power-down in process", __FILE__, __LINE__, 0, RpMessage, 0, 0); @@ -307,9 +426,8 @@ void Waste_StateMachine(void) // set valve selection activeCart = cartGetActiveCart(); - Valve_Set(VALVE_WASTE_TANK, activeCart); - Report("WasteTankStateEmptying set valve", __FILE__, __LINE__, activeCart, RpMessage, 0, 0); - + //Report("WasteTankStateEmptying set valve", __FILE__, __LINE__, activeCart, RpMessage, 0, 0); + setWasteValve(activeCart); // RFID change status - TBD // set count down @@ -317,6 +435,7 @@ void Waste_StateMachine(void) // set emptying limit wasteLevelEmpty = wasteLevel - WASTE_CARTRIDGE_SIZE; + waste_seq_step1_cont(); // start a timer to observe door opening Cartridge_Cover_Control = AddControlCallback("Cartridge Cover Door", Waste_DoorOpenDuringEmptying, 100, cartCart_door, 0, 0, 0); @@ -338,15 +457,18 @@ void Waste_StateMachine(void) Report("WasteTankStateEmptying TimeOut", __FILE__, __LINE__, 0, RpMessage, 0, 0); AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true); RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying); - } else if (wasteLevel < wasteLevelEmpty) { + timeout_counter = 0; + } else if (WHS_IsContainerEmpty()) { SetWastePump(CLOSE); cartFILLING_END(); + waste_seq_cont_stop(); // RFID change status - TBD 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); + timeout_counter = 0; } #ifdef WHS_DEBUG wasteLevel -= 100; @@ -355,6 +477,21 @@ void Waste_StateMachine(void) break; case WasteTankStatePaused: Report("WasteTankStatePaused...", __FILE__, __LINE__, 0, RpMessage, 0, 0); + activeCart = cartGetActiveCart(); + if (activeCart == MaxWasteCartridges) + { + SetWastePump(CLOSE); + cartFILLING_END(); + waste_seq_cont_stop(); + // RFID change status - TBD + WasteTankState = WasteTankStateIdle; + RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying); + if (cartNotAllFull() == false) + AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); + Report("WasteTankStatePaused done", __FILE__, __LINE__, 0, RpMessage, 0, 0); + timeout_counter = 0; + + } break; default: Report("wrong state", __FILE__, WasteTankState, 0, RpMessage, SelectedCard, 0); |
