diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-11-03 11:05:41 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-11-03 11:05:41 +0200 |
| commit | 732d7aaededc72fd28eca57e5a5ffb89ab29a9ef (patch) | |
| tree | 13db6b044ccdae6a93d79d9ce59cee7f3f405928 /Software/Embedded_SW | |
| parent | ef601f78d1e17cefc5bb4df82b4108d93cdea9dc (diff) | |
| download | Tango-732d7aaededc72fd28eca57e5a5ffb89ab29a9ef.tar.gz Tango-732d7aaededc72fd28eca57e5a5ffb89ab29a9ef.zip | |
add job end error codes. turn off safety alarms when cleared.improve idle/power on/off sequences
Diffstat (limited to 'Software/Embedded_SW')
17 files changed, 118 insertions, 56 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/report/distributor.c b/Software/Embedded_SW/Embedded/Common/report/distributor.c index d485abb70..71d30f998 100644 --- a/Software/Embedded_SW/Embedded/Common/report/distributor.c +++ b/Software/Embedded_SW/Embedded/Common/report/distributor.c @@ -240,7 +240,7 @@ Void reportService(UArg arg0, UArg arg1) int DistTableEntry;//,msgLen, errCode, par1, par2; ReportInitParams InitParams; - InitParams.DistributorQueueMaxMsgs = 30; + InitParams.DistributorQueueMaxMsgs = 60; InitParams.DistributorTaskPriority = 6; InitParams.MaxNumOfFilterNames = 30; InitParams.MaxNumberOfPrivateDistributors = 2; diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.c index e0a1c841c..bf21067e2 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.c +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.c @@ -7,7 +7,7 @@ #endif #include "ErrorCode.pb-c.h" -static const ProtobufCEnumValue error_code__enum_values_by_number[44] = +static const ProtobufCEnumValue error_code__enum_values_by_number[47] = { { "NONE", "ERROR_CODE__NONE", 0 }, { "GENERAL_ERROR", "ERROR_CODE__GENERAL_ERROR", 1 }, @@ -53,11 +53,14 @@ static const ProtobufCEnumValue error_code__enum_values_by_number[44] = { "JOB_PRESSURE_ALARM", "ERROR_CODE__JOB_PRESSURE_ALARM", 2010 }, { "JOB_CURRENT_ALARM", "ERROR_CODE__JOB_CURRENT_ALARM", 2011 }, { "JOB_MOTOR_ALARM", "ERROR_CODE__JOB_MOTOR_ALARM", 2012 }, + { "JOB_LIDS_OPEN", "ERROR_CODE__JOB_LIDS_OPEN", 2013 }, + { "JOB_ABORTED_BY_USER", "ERROR_CODE__JOB_ABORTED_BY_USER", 2014 }, + { "JOB_SAFETY_ALARM", "ERROR_CODE__JOB_SAFETY_ALARM", 2015 }, }; static const ProtobufCIntRange error_code__value_ranges[] = { -{0, 0},{1000, 8},{2000, 31},{0, 44} +{0, 0},{1000, 8},{2000, 31},{0, 47} }; -static const ProtobufCEnumValueIndex error_code__enum_values_by_name[44] = +static const ProtobufCEnumValueIndex error_code__enum_values_by_name[47] = { { "BAD_CRC", 2 }, { "CONTINUOUS_RESPONSE_ABORTED", 5 }, @@ -87,15 +90,18 @@ static const ProtobufCEnumValueIndex error_code__enum_values_by_name[44] = { "INVALID_PARAMETER", 7 }, { "INVALID_PROCESS_ID", 10 }, { "INVALID_UPLOAD_ID", 8 }, + { "JOB_ABORTED_BY_USER", 45 }, { "JOB_CURRENT_ALARM", 42 }, { "JOB_FAILED", 6 }, { "JOB_FEEDER_DANCER_FAIL", 35 }, + { "JOB_LIDS_OPEN", 44 }, { "JOB_LS_ALARM", 40 }, { "JOB_MOTOR_ALARM", 43 }, { "JOB_OTHER_ALARM", 37 }, { "JOB_OUT_OF_DYE", 36 }, { "JOB_POOLER_DANCER_FAIL", 34 }, { "JOB_PRESSURE_ALARM", 41 }, + { "JOB_SAFETY_ALARM", 46 }, { "JOB_TEMPERATURE_ALARM", 39 }, { "JOB_THREAD_BREAK", 32 }, { "JOB_UNSPECIFIED_ERROR", 31 }, @@ -111,9 +117,9 @@ const ProtobufCEnumDescriptor error_code__descriptor = "ErrorCode", "ErrorCode", "", - 44, + 47, error_code__enum_values_by_number, - 44, + 47, error_code__enum_values_by_name, 3, error_code__value_ranges, diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.h index 74c9e2a31..30979b52a 100644 --- a/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.h +++ b/Software/Embedded_SW/Embedded/Communication/PMR/Common/ErrorCode.pb-c.h @@ -63,7 +63,10 @@ typedef enum _ErrorCode { ERROR_CODE__JOB_LS_ALARM = 2009, ERROR_CODE__JOB_PRESSURE_ALARM = 2010, ERROR_CODE__JOB_CURRENT_ALARM = 2011, - ERROR_CODE__JOB_MOTOR_ALARM = 2012 + ERROR_CODE__JOB_MOTOR_ALARM = 2012, + ERROR_CODE__JOB_LIDS_OPEN = 2013, + ERROR_CODE__JOB_ABORTED_BY_USER = 2014, + ERROR_CODE__JOB_SAFETY_ALARM = 2015 PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ERROR_CODE) } ErrorCode; diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index 1f871a4cc..636848c91 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -549,7 +549,7 @@ bool Is_FPGA_WD_Occurred() FPGA_WD_Occurred = true; //To recover: - //1. Disable all FPGA's WD: +/* //1. Disable all FPGA's WD: Control_WD(DISABLE,0); //2. Enqable all FPGA's WD: Control_WD(ENABLE,250); @@ -558,7 +558,7 @@ bool Is_FPGA_WD_Occurred() //4. Init Motor's Drivers: //Init_Motors_Drivers_After_FPGA_WD(); Motor_ReconfigAllMotors(); -/* + //OR //Reset MCU (will reset also the FPGA): //Power_Reset(); diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 5b57b8870..6570ea8e0 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -558,7 +558,7 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) return JOB_TEMPERATURE_ALARM; case ALARM_SOURCE_TYPE__LimitSwitchAlarm: usnprintf(AlarmReasonStr, 100, "Dispenser %d empty",AlarmItem[AlarmId].DeviceId); - return JOB_LS_ALARM; + return JOB_OUT_OF_DYE; case ALARM_SOURCE_TYPE__PressureAlarm: usnprintf(AlarmReasonStr, 100, "Over pressure in dispenser %d",AlarmItem[AlarmId].DeviceId); return JOB_PRESSURE_ALARM; @@ -571,6 +571,21 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) case ALARM_SOURCE_TYPE__CoversAlarm: usnprintf(AlarmReasonStr, 100, "Machine door %d removed during a run",AlarmItem[AlarmId].DeviceId); return JOB_TAMPER_ALARM; + case ALARM_SOURCE_TYPE__HardLimitAlarm: + usnprintf(AlarmReasonStr, 100, "Dispenser %d hit the hard limit",AlarmItem[AlarmId].DeviceId); + return JOB_LS_ALARM; + break; + case ALARM_SOURCE_TYPE__DoNotPollAlarm: + if (AlarmItem[AlarmId].Severity == DEBUG_LOG_CATEGORY__Critical) + { + usnprintf(AlarmReasonStr, 100, "Safety Critical Alarm %d",AlarmItem[AlarmId].EventType); + return JOB_SAFETY_CRITICAL_ALARM; + } + else + { + usnprintf(AlarmReasonStr, 100, "Alarm %d caused a job stop",AlarmId); + return JOB_OTHER_ALARM; + } default: usnprintf(AlarmReasonStr, 100, "Alarm %d caused a job stop",AlarmId); return JOB_OTHER_ALARM; diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index dcbd6b9b0..c833c8fe8 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -169,11 +169,11 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_underheatcountlimit = true; EmbeddedParameters->underheatcountlimit = 3; EmbeddedParameters->has_closevalvetimeout = true; - EmbeddedParameters->closevalvetimeout = 50; + EmbeddedParameters->closevalvetimeout = 52; EmbeddedParameters->has_openvalvetimeout = true; - EmbeddedParameters->openvalvetimeout = 50; + EmbeddedParameters->openvalvetimeout = 52; EmbeddedParameters->has_initialdispenserpressure = true; - EmbeddedParameters->initialdispenserpressure = 1.08; + EmbeddedParameters->initialdispenserpressure = 0.25; EmbeddedParameters->has_initialdispensertimeout = true; EmbeddedParameters->initialdispensertimeout = 60000; EmbeddedParameters->has_initialdispensertimelag = true; @@ -181,7 +181,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_dispenserbuildpressurespeed = true; EmbeddedParameters->dispenserbuildpressurespeed=500; EmbeddedParameters->has_dispenserbuildpressurelimit = true; - EmbeddedParameters->dispenserbuildpressurelimit=0.8 ; + EmbeddedParameters->dispenserbuildpressurelimit=1.0 ; EmbeddedParameters->has_dispenserbuildpressuretimeout = true; EmbeddedParameters->dispenserbuildpressuretimeout=60000; EmbeddedParameters->has_dispenserbuildpressurelag = true; @@ -210,11 +210,11 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->generalparameters[3] = 0.0; //CheckMotorAlarms EmbeddedParameters->generalparameters[4] = 800.0; //Winder homing time at end of job EmbeddedParameters->generalparameters[5] = 1000.0; //Dispenser initial pressure speed - EmbeddedParameters->generalparameters[6] = Diagnostic_Normal_Mode; //Diagnostic Mode SetDiagnosticMode - EmbeddedParameters->generalparameters[7] = AutoHoming_JobEnd_PowerOn_off; // + EmbeddedParameters->generalparameters[6] = Diagnostic_Extended_Mode; //Diagnostic Mode SetDiagnosticMode + EmbeddedParameters->generalparameters[7] = AutoHoming_PowerOn_off; // } EmbeddedParameters->has_currentalarmlowlimit = true; - EmbeddedParameters->currentalarmlowlimit = 0.77; + EmbeddedParameters->currentalarmlowlimit = 0.78; EmbeddedParameters->has_currentalarmhighlimit = true; EmbeddedParameters->currentalarmhighlimit= 1.07; EmbeddedParameters->has_ids_segmentrefilltimeout = true; @@ -222,15 +222,15 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_ids_presegmentbuilduptime = true; EmbeddedParameters->ids_presegmentbuilduptime = 5000; EmbeddedParameters->has_ids_cleaningspeed = true; - EmbeddedParameters->ids_cleaningspeed = 50; + EmbeddedParameters->ids_cleaningspeed = 800; EmbeddedParameters->has_ids_cleaningstopbeforesegmenttime = true; - EmbeddedParameters->ids_cleaningstopbeforesegmenttime = 3000; + EmbeddedParameters->ids_cleaningstopbeforesegmenttime = 10000; EmbeddedParameters->has_ids_cleaningstartspraypresegmenttime = true; - EmbeddedParameters->ids_cleaningstartspraypresegmenttime = 1000; + EmbeddedParameters->ids_cleaningstartspraypresegmenttime = 2000; EmbeddedParameters->has_ids_leftcleaningmotorspeed = true; - EmbeddedParameters->ids_leftcleaningmotorspeed = 30; + EmbeddedParameters->ids_leftcleaningmotorspeed = 52; EmbeddedParameters->has_ids_rightcleaningmotorspeed = true; - EmbeddedParameters->ids_rightcleaningmotorspeed = 23; + EmbeddedParameters->ids_rightcleaningmotorspeed = 52; EmbeddedParameters->has_switchtoidletimeinseconds = true; EmbeddedParameters->switchtoidletimeinseconds = 3600; EmbeddedParameters->has_idledriertemperature = true; @@ -242,7 +242,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_powerofftemperaturelimit = true; EmbeddedParameters->powerofftemperaturelimit = 50; EmbeddedParameters->has_ids_presegment_wfcf_timebeforesegment = true; - EmbeddedParameters->ids_presegment_wfcf_timebeforesegment = 1500; + EmbeddedParameters->ids_presegment_wfcf_timebeforesegment = 20000; uint8_t* response_buffer = my_malloc(configuration_parameters__get_packed_size(EmbeddedParameters)); size_t response_size = 0; if (response_buffer) diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c index 4958139e6..2a4800b77 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c @@ -30,6 +30,8 @@ MachineState StoredMachineStatus = MACHINE_STATE__Ready; void SetMachineStatus (MachineState State) { + ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); + StoredMachineStatus = State; } char MachineUpdateToken[36+1] = {0}; diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c index 6a0b9a67b..ea2cc2e6b 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c +++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c @@ -42,10 +42,10 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) bool AllDispensersInSafety = true; bool AnyDispensersInSafety = false; bool DispenserBypass = false; - /*bool mDrierDoorAlarmState = false; + bool mDrierDoorAlarmState = false; bool mAirFlowAlarmState = false; bool mAirFilterAlarmState = false; - bool mWasteOverflowAlarmState = false;*/ + bool mWasteOverflowAlarmState = false; for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) { if (isMotorConfigured(Disp_i + HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)==true) @@ -61,8 +61,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle dryer door open AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true); - // mDrierDoorAlarmState = true; - // DrierDoorAlarmState = true; + mDrierDoorAlarmState = true; + DrierDoorAlarmState = true; } else { @@ -71,8 +71,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) //report and handle air flow failure //if blower if off handling is different AlarmHandlingSetAlarm(EVENT_TYPE__NO_AIR_PRESSURE, true); - // mAirFlowAlarmState = true; - // AirFlowAlarmState = true; + mAirFlowAlarmState = true; + AirFlowAlarmState = true; } else { @@ -80,8 +80,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle filter missing AlarmHandlingSetAlarm(EVENT_TYPE__AIR_FILTER_NOT_INSTALLED, true); - // mAirFilterAlarmState = true; - // AirFilterAlarmState = true; + mAirFilterAlarmState = true; + AirFilterAlarmState = true; } else { @@ -89,8 +89,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle waste overflow AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); - // mWasteOverflowAlarmState = true; - // WasteOverflowAlarmState = true; + mWasteOverflowAlarmState = true; + WasteOverflowAlarmState = true; } } } @@ -167,7 +167,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) } } } -/* if ((mDrierDoorAlarmState != DrierDoorAlarmState)|| (mDrierDoorAlarmState == false)) + if ((mDrierDoorAlarmState != DrierDoorAlarmState)|| (mDrierDoorAlarmState == false)) { //alarm went off AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, false); @@ -191,7 +191,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false); WasteOverflowAlarmState = mWasteOverflowAlarmState; } -*/ + return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index 0a5cfc2f3..1b3f16044 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -40,6 +40,7 @@ int PowerUp(); int thredJog(); #define BUTTONS_SAMPLE_TIME (eHundredMillisecond) +#define SECOND1 (1000/BUTTONS_SAMPLE_TIME) #define SECOND2 (2000/BUTTONS_SAMPLE_TIME) #define SECOND5 (5000/BUTTONS_SAMPLE_TIME) @@ -89,6 +90,8 @@ int PowerUp() { bool ret = OK; + PowerIdleOutOfIdleState(); + return ret; } @@ -308,7 +311,7 @@ uint32_t ShortLongOffPB(uint8_t OnOffPB, button *pBtn) case COUNTPB: // last OnOffPBstate was COUNTPB if (OnOffPB) { - if( pBtn->count > SECOND2 ) + if( pBtn->count > SECOND1 ) { pBtn->Action = SHORTPB ; ReportWithPackageFilter(GeneralFilter,"------------ 2 seconds count PB Power -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index a086fe898..b05f236c5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -223,7 +223,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu } readValue = MillisecGetTemperatures(InternalId2PT100Id[index]); - if((MINIMUM_HEATER_READ*100>=readValue)||(MAXIMUM_HEATER_READ*100 < readValue)) + if((MINIMUM_HEATER_READ*100>=readValue)||(270.00*100 < readValue)) { //ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; @@ -558,6 +558,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) } DeActivateHeater(HeaterId); HeaterCmd[HeaterId].targettemperatue = 0; +#warning PT100 error is misidentified as overheat in alarms AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true); return; @@ -879,7 +880,8 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterMaxTempFlag[index] = true; //ReportWithPackageFilter(HeatersFilter,(MinreadValue/100), "Heater Over the max temperature, turned off"); ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); - AlarmHandlingSetAlarm(HeaterEventType[index], true); + if (getIdleState() == false) + AlarmHandlingSetAlarm(HeaterEventType[index], true); return OK; } else if ((HeaterPreviousRead[index]) < (HeaterControl[index].sensorminvalue)) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 28ba11fcd..41d98e892 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -735,12 +735,14 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) if (FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) != LIMIT) { ReportWithPackageFilter(ThreadFilter,"Dyeing head is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpFatalError,LIMIT,0); + JobEndReason = JOB_LIDS_OPEN; PrepareReady(Module_Thread,ModuleFail); return ERROR; } if (FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) != LIMIT) { ReportWithPackageFilter(ThreadFilter,"Dryer lid is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpFatalError,LIMIT,0); + JobEndReason = JOB_LIDS_OPEN; PrepareReady(Module_Thread,ModuleFail); return ERROR; } diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index e366ef378..a652e9035 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,4 +1,4 @@ -Embedded SW Release note - Version 1.4.5.9 (alpha 3) +Embedded SW Release note - Version 1.4.6.0 ============================================================= I2C reading task for better handling of slow I2C interactions (head etc) textual names for control calls to help debuggng @@ -13,9 +13,7 @@ Thread: *real dryer rampup. dancers from EEPROM only. *insure rockers motors vol print: *prevent job on open covers (dryer, head) -Embedded SW Release note - Version 1.4.5.95 (alpha 2) -============================================================= -Embedded SW Release note - Version 1.4.5.9 (alpha 1) +Embedded SW Release note - Version 1.4.5.96 (alpha 1 +) ============================================================= common: log filtering by severity and modules @@ -26,15 +24,17 @@ drivers: valves: bug fixed. modules: alarm handling: current alarms, fans alarms, bugs fixes. - control: current reading disabled, machine status, led on FPGA reset. + control: current reading disabled, machine status every 1 sec, led on FPGA reset. general: buttons fixed. handling of config failures, dryer buffer length: number of dryer cycles *76 cm + 90 cm (dryer to winder), safety alarms. - heaters: machine internal alrms, bugs fixed. - IDS: dispenser data store in FFS, homing - consider safety bypass, midtank content, active homing. use RML's feeder_tension as pressure buildup limit. - thread: load fixed. hold dryer arm. + heaters: machine internal alrams, bugs fixed. + IDS: dispenser data store in FFS, stub fixed, homing - consider safety bypass, midtank content, active homing. use RML's feeder_tension as pressure buildup limit. + use puller tension as cleaner speed for RML, trial - better stop of homing on job start + thread: load fixed. hold dryer arm, dryer ramp up!!! waste, IFS: tested and fixed state machines Init: open and cloase dispensers valve, fix problems, - power off sequence and clean job fixed. + power off: sequence and clean job fixed. + idle: out of idlw - push power button for 1 sec print: job length fixed. diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index fe6f12053..a6e0f7d12 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -265,7 +265,6 @@ uint32_t InitSequenceStartHeatingCallBackFunction(uint32_t IfIndex, uint32_t Bus if (HeaterCheckReady()==true) { MachineStateDetail = MACHINE_STATE_MACHINE_READY_TO_DYE; - SetMachineStatus(MACHINE_STATE__Ready); if (SafeRemoveControlCallback(HWControlId, InitSequenceStartHeatingCallBackFunction )==OK) HWControlId = 0xFF; else @@ -294,12 +293,15 @@ uint32_t InitSequenceStartHeating(void) else { MachineStateDetail = MACHINE_STATE_NO_PROCESS_PARAMS; + SetMachineStatus(MACHINE_STATE__Ready); + REPORT_MSG(MachineStateDetail,"InitSequenceStateMachine no processparameters file"); } } else { REPORT_MSG(InitialHeating,"InitSequenceStateMachine InitialHeating is OFF"); MachineStateDetail = MACHINE_STATE_MACHINE_READY_TO_DYE; + InitStages++; } if (AutoHoming_Config >= AutoHoming_PowerOn_off ) { diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c index df2f3705c..9fb7e097d 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c @@ -37,7 +37,8 @@ uint32_t IdleMixerTemperature = 0; bool powerIdleState = false; bool machineActive = false; uint32_t IdleControlId = 0xFF; -ProcessParameters ActiveProcessParameters; +uint32_t IdleHeatingControlId = 0xFF; +ProcessParameters ActiveProcessParameters,ProcessParametersClear; void PowerIdleSetIdle(void) { memcpy (&ActiveProcessParameters,&ProcessParametersKeep,sizeof(ProcessParameters)); @@ -103,9 +104,10 @@ void PowerIdleInit(void) void PowerIdleSetParameters(uint32_t switchtoidletimeinseconds,uint32_t idledriertemperature,uint32_t idleheadtemperature,uint32_t idlemixertemperature) { powerIdleSecondsLimit = switchtoidletimeinseconds; - IdleDrierTemperature = idledriertemperature*100; - IdleHeadTemperature = idleheadtemperature*100; - IdleMixerTemperature = idlemixertemperature*100; + IdleDrierTemperature = idledriertemperature; + IdleHeadTemperature = idleheadtemperature; + IdleMixerTemperature = idlemixertemperature; + Report("Power Idle Set Parameters",__FILE__,powerIdleSecondsLimit,(int)idledriertemperature,RpWarning,(int)idleheadtemperature,0); } int getIdleCounter (void) {return powerIdleSecondsCounter;} @@ -114,6 +116,22 @@ void setmachineActive(bool Active){machineActive = Active;} void resetIdleCounter (void) {powerIdleSecondsCounter = 0;} bool getIdleState (void) {return powerIdleState;} +uint32_t PowerIdleStartHeatingCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + if (HeaterCheckReady()==true) + { + //MachineStateDetail = MACHINE_STATE_MACHINE_READY_TO_DYE; + if (SafeRemoveControlCallback(IdleHeatingControlId, PowerIdleStartHeatingCallBackFunction )==OK) + IdleHeatingControlId = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)IdleHeatingControlId,RpWarning,(int)PowerIdleStartHeatingCallBackFunction,0); + //InitSequenceStateMachine(InitStages); + SetMachineStatus(MACHINE_STATE__Ready); + } + + return OK; +} + void PowerIdleOutOfIdleState(void) { Report("PowerIdle Out of Idle ",__FILE__,__LINE__,(int)powerIdleSecondsLimit,RpWarning,(int)powerIdleSecondsCounter,0); @@ -128,10 +146,12 @@ void PowerIdleOutOfIdleState(void) return ; } if (IdleControlId == 0xFF) - IdleControlId = AddControlCallback("IdleCounter", PowerIdleCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + IdleControlId = AddControlCallback( "NULL",PowerIdleCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); if (IdleControlId == 0xFF) Report("AddControlCallback failed",__FILE__,__LINE__,(int)IdleControlId,RpWarning,(int)0,0); - SetMachineStatus(MACHINE_STATE__Ready); + SetMachineStatus(MACHINE_STATE__Initializing); + IdleHeatingControlId = AddControlCallback("Heating Out of Idle", PowerIdleStartHeatingCallBackFunction, 2*eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 67e86397c..285c6ee74 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -89,6 +89,7 @@ uint32_t PowerOffInit(void) PowerOffMachineState++; StopInitSequence(); setmachineActive(true); + PowerIdleOutOfIdleState(); PowerOffInProcess = true; PowerOffControlId = AddControlCallback("PowerOff", PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); SetMachineStatus(MACHINE_STATE__PowerOff); @@ -114,7 +115,7 @@ uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); PowerOffHeadCleanControlId = 0xFF; PowerOffMachineState++; - + SetMachineStatus(MACHINE_STATE__PowerOff); } return OK; } @@ -139,6 +140,7 @@ uint32_t PowerOffHeadClean(void) { LOG_ERROR(0,"Clean job failed"); PowerOffMachineState++; + SetMachineStatus(MACHINE_STATE__PowerOff); } // if ( PowerOffHeadCleanControlId == 0xFF) // return ERROR; @@ -311,6 +313,7 @@ uint32_t PowerOffStopRunningJob(void) if (JobIsActive()) { REPORT_MSG (PowerOffMachineState, "Stop running job"); + JobEndReason = JOB_ABORTED_BY_USER; AbortJob("Power off pressed"); } PowerOffMachineState++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 1f6ff685e..58d82e428 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -82,7 +82,7 @@ JobEndReasonEnum JobEndReason = JOB_OK; ErrorCode JobError_to_ErrorCode[JOB_ERRORS_MAX+1] = {ERROR_CODE__NONE,ERROR_CODE__JOB_UNSPECIFIED_ERROR,ERROR_CODE__JOB_THREAD_BREAK,ERROR_CODE__JOB_WINDER_DANCER_FAIL, ERROR_CODE__JOB_POOLER_DANCER_FAIL,ERROR_CODE__JOB_FEEDER_DANCER_FAIL,ERROR_CODE__JOB_OUT_OF_DYE,ERROR_CODE__JOB_OTHER_ALARM, ERROR_CODE__JOB_TEMPERATURE_ALARM,ERROR_CODE__JOB_LS_ALARM,ERROR_CODE__JOB_PRESSURE_ALARM,ERROR_CODE__JOB_CURRENT_ALARM, - ERROR_CODE__JOB_MOTOR_ALARM,ERROR_CODE__JOB_OTHER_ALARM}; + ERROR_CODE__JOB_MOTOR_ALARM,ERROR_CODE__JOB_LIDS_OPEN,ERROR_CODE__JOB_ABORTED_BY_USER,ERROR_CODE__JOB_SAFETY_ALARM,ERROR_CODE__JOB_OTHER_ALARM}; JobTicket *CurrentJob = NULL; JobRequest *CurrentRequest = NULL; @@ -353,6 +353,7 @@ void JobAbortFunc(MessageContainer* requestContainer) my_free(responseContainer.data.data); SendChars((char*)container_buffer, container_size); abort_job_request__free_unpacked(request,NULL); + JobEndReason = JOB_ABORTED_BY_USER; JobAbortedByUser = true; AbortJob("Job Aborted by user"); //We keep the job request until it is done diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index 85f5a61c7..bd9998a31 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -97,6 +97,9 @@ typedef enum JOB_CURRENT_ALARM, JOB_MOTOR_ALARM, JOB_TAMPER_ALARM, + JOB_LIDS_OPEN, + JOB_ABORTED_BY_USER, + JOB_SAFETY_CRITICAL_ALARM, JOB_ERRORS_MAX }JobEndReasonEnum; extern JobEndReasonEnum JobEndReason; |
