From 73743443c771284e0be3a50bbf15fada18e589a5 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Fri, 9 Aug 2019 12:48:47 +0300 Subject: Version 1.4.3.41 critical update in alarm handling. created some problem in HW init --- Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 063d7c823..f5ac6cf92 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -39,6 +39,7 @@ #include "modules/thread/thread_ex.h" #include "modules/ids/ids_ex.h" +#include "modules/Diagnostics/Diagnostics.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" @@ -613,6 +614,7 @@ uint32_t MillisecLowLoop(uint32_t tick) if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); }*/ + midtankDisplay = 1-midtankDisplay; } if (OneHourTick) { -- cgit v1.3.1 From 61954c23bc81fb1d24dd9c0a95bc27ca37371584 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 12 Aug 2019 16:36:18 +0300 Subject: Version 1.4.3.5: prepare for dispenser filling. VOC alarms. fix alarm handling. improved IDS and other features --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 25 ++- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 87 --------- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 166 ++++++++++++++++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 7 +- .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c | 3 +- .../Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c | 2 +- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 13 +- .../Embedded/Drivers/Motors/MotorActions.c | 5 +- .../Embedded/Drivers/flash_ram/FlashProgram.c | 34 +++- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 12 ++ Software/Embedded_SW/Embedded/Main.c | 1 - .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 212 ++++++++++++++------- .../Embedded/Modules/Control/MillisecTask.c | 11 +- .../Embedded/Modules/Diagnostics/Diagnostics.c | 72 ++++++- .../Embedded/Modules/Diagnostics/Diagnostics.h | 1 + .../Modules/Diagnostics/DiagnosticsHoming.c | 27 +++ .../Embedded/Modules/General/GeneralHardware.c | 14 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 3 + .../Embedded/Modules/IDS/IDS_Cleaning.c | 2 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 2 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 - .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 51 +++++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 58 ++++-- .../Embedded/Modules/Thread/ThreadLoad.c | 4 +- .../StateMachines/Initialization/InitSequence.c | 7 + .../StateMachines/Initialization/InitSequence.h | 1 + .../Embedded/StateMachines/Printing/PrintingSTM.c | 1 + 28 files changed, 613 insertions(+), 211 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index 7c6b4d4ef..8818d51e5 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -44,7 +44,7 @@ bool SwUpgradeActive(void) { if (ActivateVersionControlId != 0xFF) { - Reboot = false; + //Reboot = false; return true; } return false; @@ -59,18 +59,27 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0); if (CurrentRunningFiletoken, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size); + responseContainer.continuous = true; if (Fresult!= OK) { responseContainer.error = FileError_to_ErrorCode[Fresult]; responseContainer.errormessage = "Activate Version Request error"; + responseContainer.continuous = false; } - responseContainer.continuous = false; + responseContainer.continuous = true; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 9efaf59c8..5a528d18b 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,3,0}; +TangoVersion_t _gTangoVersion = {1,4,3,5}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index cd47751d1..5c52963eb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -460,93 +460,6 @@ double Calculate_Pitot_Pressure() // WHS - AN_AIRPRESS_1 return Pressure; } -uint8_t Calculate_Gas_Power_Consumption() // WHS -{ - // TGS 2602 (FIGARO) - - -/* Concentrtion Sensor - [ppm] [v] - 0 0.353 - 18 0.438 - 33 2.919 - 100 4.196 - 316 4.571 -*/ - - double VOC_Vsensor[] = - { - 0.353, //0 PPM - 0.357, //1 PPM - 0.362, //2 PPM - 0.367, //3 PPM - 0.371, //4 PPM - 0.376, //5 PPM - 0.381, //6 PPM - 0.386, //7 PPM - 0.390, //8 PPM - 0.395, //9 PPM - 0.400, //10 PPM - 0.404, //11 PPM - 0.409, //12 PPM - 0.414, //13 PPM - 0.419, //14 PPM - 0.423, //15 PPM - 0.428, //16 PPM - 0.433, //17 PPM - 0.438, //18 PPM - 0.603, //19 PPM - 0.768, //20 PPM - 0.934, //21 PPM - 1.099, //22 PPM - 1.265, //23 PPM - 1.430, //24 PPM - 1.595, //25 PPM - 1.761, //26 PPM - 1.926, //27 PPM - 2.092, //28 PPM - 2.257, //29 PPM - 2.422, //30 PPM - 2.588, //31 PPM - 2.753, //32 PPM - 2.919 //33 PPM - }; - - uint32_t VsampleInBits; - - double temp, VADC = 0.0 ,VSensor; - - uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; - - VsampleInBits = ADC_GetReading(ADC_VOCSENS); - - //---- VBits -> VADC ---- - - //ADC 12 bit -> 4096 -> 2.5V - - temp = VsampleInBits*2.5; - VADC = temp / 4096; - - //---- VADC -> VSensor --- - - //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) - // VSensor = 0 V -> VADC = 2.3824 V - // VSensor = 10 V -> VADC = 0.2272 V - - VSensor = (1.96- VADC) * 4.64 + 1.96; - - for(i=0;i + +#include +#include +#include + +#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "ADC.h" +#include +#include +#include "modules/AlarmHandling/AlarmHandling.h" +#include "PMR/Diagnostics/EventType.pb-c.h" + +#define MAX_VOC_SAMPLES 120 + +uint16_t VOC_Index = 0; +uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; +uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; + +bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; + +void CalculateVOCAlarms(void) +{ + int i,slope1=0,slope2=0,slopeindex=0; + double a; + bool alarmstate = false; + for (i = 0; i< MAX_VOC_SAMPLES; i++) + { + a += Gas_PPM[i]; + if(i!=0) + { + slope2 = slope1; + slope1 = Gas_PPM[i]-Gas_PPM[i-1]; + if (slope1 > VOC_Slope) + { + slopeindex++; + if (slopeindex>=VOC_Slope_Time) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true); + Report("CalculateVOCAlarms slope on",__FILE__,__LINE__,(int)slope1,RpWarning,slopeindex,0); + alarmstate = true; + VOC_SlopeAlarm = true; + } + } + + } + } + + if ((alarmstate==false)&&(VOC_SlopeAlarm == true)) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,false); + } + + if (a/MAX_VOC_SAMPLES > VOC_AverageLimit) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,true); + Report("CalculateVOCAlarms time on",__FILE__,__LINE__,(int)a,RpWarning,VOC_AverageLimit,0); + } + else if (VOC_TimeAlarm == true) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,false); + } + +} + +uint8_t Calculate_Gas_Power_Consumption() // WHS +{ + // TGS 2602 (FIGARO) + + +/* Concentrtion Sensor + [ppm] [v] + 0 0.353 + 18 0.438 + 33 2.919 + 100 4.196 + 316 4.571 +*/ + + double VOC_Vsensor[] = + { + 0.353, //0 PPM + 0.357, //1 PPM + 0.362, //2 PPM + 0.367, //3 PPM + 0.371, //4 PPM + 0.376, //5 PPM + 0.381, //6 PPM + 0.386, //7 PPM + 0.390, //8 PPM + 0.395, //9 PPM + 0.400, //10 PPM + 0.404, //11 PPM + 0.409, //12 PPM + 0.414, //13 PPM + 0.419, //14 PPM + 0.423, //15 PPM + 0.428, //16 PPM + 0.433, //17 PPM + 0.438, //18 PPM + 0.603, //19 PPM + 0.768, //20 PPM + 0.934, //21 PPM + 1.099, //22 PPM + 1.265, //23 PPM + 1.430, //24 PPM + 1.595, //25 PPM + 1.761, //26 PPM + 1.926, //27 PPM + 2.092, //28 PPM + 2.257, //29 PPM + 2.422, //30 PPM + 2.588, //31 PPM + 2.753, //32 PPM + 2.919 //33 PPM + }; + + uint32_t VsampleInBits; + + double temp, VADC = 0.0 ,VSensor; + + uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; + + VsampleInBits = ADC_GetReading(ADC_VOCSENS); + + //---- VBits -> VADC ---- + + //ADC 12 bit -> 4096 -> 2.5V + + temp = VsampleInBits*2.5; + VADC = temp / 4096; + + //---- VADC -> VSensor --- + + //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) + // VSensor = 0 V -> VADC = 2.3824 V + // VSensor = 10 V -> VADC = 0.2272 V + + VSensor = (1.96- VADC) * 4.64 + 1.96; + + for(i=0;i= MAX_VOC_SAMPLES) + VOC_Index = 0; + if (VOC_Index%60 == 0) + { + CalculateVOCAlarms(); + } + return i;//PPM + } + } + +return 0xFF;//out of scale + +} diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c index f8a256215..3c9ae591a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1001,6 +1001,7 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; + ReportWithPackageFilter(GeneralFilter,"FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); } @@ -1138,7 +1139,9 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - FPGA_SPI_Transnit(_motorId); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); + + MillisecWriteToMotor(_motorId,temp,4,NULL); } void FPGA_SetMotKvalRun(TimerMotors_t _motorId) @@ -1163,6 +1166,8 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); + MillisecWriteToMotor(_motorId, temp, 4, NULL); //FPGA_SPI_Transnit(_motorId); } diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c index 11ba12c32..79ec46b18 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.c @@ -94,7 +94,8 @@ FRESULT FPGA_Programming_Up(FPGA_ID FPGA_Id, char * FullPath, bool IncludeReboot return(fresult); } Report(FullPath,__FILE__,__LINE__,CurrentFileSize,RpWarning,0,0); - + StopInitSequence(); + HeatersEnd(); fresult = main_vme(); CurrentRunningFile++; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index 5aea18994..a26813c4a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -26,7 +26,7 @@ #include "ADC_MUX.h" bool MidTank_Pressure_Read_Enable[8] = {true,true,true,true,true,true,true,true}; -double MidTank_Pressure[8]; +double MidTank_Pressure[8] = {1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0}; uint32_t MidTank_Pressure_Bits[8];//just for debug static uint8_t Config_Buf[3]; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 93ac3f6b6..d8ba1f045 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -357,6 +357,7 @@ uint32_t MotorSetMaxSpeed(TimerMotors_t _motorId, uint32_t MaxSpeed) { MotorsCfg[_motorId].maxfrequency = MaxSpeed; FPGA_SetMotMaxSpeed(_motorId); + ReportWithPackageFilter(GeneralFilter,"MotorSetMaxSpeed",__FILE__,__LINE__,_motorId,RpMessage,MaxSpeed,0); return OK; } @@ -365,24 +366,26 @@ uint32_t MotorSetMicroStep(TimerMotors_t _motorId, uint32_t microstep) { MotorDriverRequest[_motorId].microstep = microstep; FPGA_SetMotMicroStep(_motorId); - Report("MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetMicroStep",__FILE__,__LINE__,_motorId,RpMessage,microstep,0); return OK; } uint32_t MotorSetKvalHold(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalHold = Value; + MotorsCfg[_motorId].kvalhold = Value; + MotorsCfg[_motorId].tvalhold = Value; FPGA_SetMotKvalHold(_motorId); - Report("MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } uint32_t MotorSetKvalRun(TimerMotors_t _motorId, uint8_t Value) { - MotorDriverRequest[_motorId].KvalRun = Value; + MotorsCfg[_motorId].kvalrun = Value; + MotorsCfg[_motorId].tvalrun = Value; FPGA_SetMotKvalRun(_motorId); - Report("MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); + ReportWithPackageFilter(GeneralFilter,"MotorSetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,Value,0); return OK; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 79261286e..280c3807c 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -147,7 +147,7 @@ uint32_t MotorGotoWithCallback (TimerMotors_t MotorId, uint32_t Steps, uint32_t //MotorStop(MotorId,Hard_Hiz ); MotorGoTo(MotorId,Steps ); MotorControlId[MotorId] = AddControlCallback( MotorMoveToLimitSwitchCallBackFunction, eTenMillisecond, FPGA_Read_limit_Switches,(IfTypeMotors*0x100+MotorId), LimitSwitchId, 0 ); - MotorControlCallback[MotorId] = MotorMoveCallBackFunction; + MotorControlCallback[MotorId] = MotorMoveToLimitSwitchCallBackFunction; return MotorControlId[MotorId]; } uint32_t MotorGotoWithBusyCallback (TimerMotors_t MotorId,bool direction, uint32_t Steps, callback_fptr callback,uint32_t timeout) //TODO @@ -435,7 +435,10 @@ uint32_t MotorMoveToLimitSwitchCallBackFunction(uint32_t IfIndex, uint32_t Limit MotorId = (TimerMotors_t)(IfIndex&0xFF); if (MotorControlId[MotorId] == 0xFF) + { + SafeRemoveControlCallback(MotorControlId[MotorId], MotorMoveToLimitSwitchCallBackFunction ); return ERROR; + } MotorTimeout[MotorId]+=MotorTimeLag[MotorId]; if ((LimitSwitch == LIMIT) ||((MotorTimeout[MotorId]>=MotorTimeLimit[MotorId])&&(MotorTimeLimit[MotorId]>0))) diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index f2f5aefb6..99d7c0b9e 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -10,7 +10,17 @@ #include #include "FlashProgram.h" - +//#define FLASH_DEBUG +#ifdef FLASH_DEBUG +#define MAX_CONT_LOG 20 + +#define READ 1 +#define DELETE 2 +uint32_t Address[MAX_CONT_LOG+1] = {0}; +uint32_t Size[MAX_CONT_LOG+1] = {0}; +uint32_t EraseWrite[MAX_CONT_LOG+1] = {0}; +byte RxIndex = 0; +#endif //***************************************************************************** // // Read the application image from the file system and program it into flash. @@ -35,7 +45,13 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b volatile uint32_t ui32Idx; //uint32_t ui32FlashEnd; - +#ifdef FLASH_DEBUG + Address[RxIndex] = ui32FlashStart; + Size[RxIndex] = ui32FileSize; + EraseWrite[RxIndex] = READ; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif // // Get the size of flash. This is the ending address of the flash. // If reserved space is configured, then the ending address is reduced @@ -111,6 +127,13 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) { volatile uint32_t ui32Idx; +#ifdef FLASH_DEBUG + Address[RxIndex] = ui32FlashStart; + Size[RxIndex] = ui32FileSize; + EraseWrite[RxIndex] = DELETE; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif for(ui32Idx = ui32FlashStart; ui32Idx < ui32FlashStart+ui32FileSize; ui32Idx += 1024) { ROM_FlashErase(ui32Idx); @@ -125,6 +148,13 @@ void FlashInit(void) { volatile uint32_t ui32Idx; //FlashUsecSet(120); +#ifdef FLASH_DEBUG + Address[RxIndex] = FLASH_RAM_BASE; + Size[RxIndex] = FLASH_SIZE; + EraseWrite[RxIndex] = DELETE; + if (RxIndex++>=MAX_CONT_LOG) + RxIndex = 0; +#endif for(ui32Idx = FLASH_RAM_BASE; ui32Idx < FLASH_RAM_BASE+FLASH_SIZE; ui32Idx += 1024) { ROM_FlashErase(ui32Idx); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index 88c27989c..f227dcd32 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -16,7 +16,10 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) { uint32_t Buffer = Data; if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromProgram Error",__FILE__,__LINE__,Address,RpWarning,Data,0); return ERROR; + } Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,Data,0); return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); @@ -24,7 +27,10 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) uint32_t MCU_E2PromRead(int Address,uint32_t *Data) { if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromRead Error",__FILE__,__LINE__,Address,RpWarning,*Data,0); return ERROR; + } EEPROMRead((uint32_t *)Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); @@ -36,7 +42,10 @@ float MCU_E2PromReadMidtank_A(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_A+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); @@ -47,7 +56,10 @@ float MCU_E2PromReadMidtank_B(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_B+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index e04ce0d36..301d0d6c3 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -277,7 +277,6 @@ int main(void) #ifndef EVALUATION_BOARD WHS_init(); - Buttons_Init(); //IDS_ModuleInit(); Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index c4fcfaf8e..6f80fdffb 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -130,8 +130,10 @@ AlarmStatusItem AlarmState[MAX_SYSTEM_ALARMS]; * or static variable whose declaration follows the pragma directive (only if using it without #define for example: #pragma location = MOTOR_MAP_IN_FLASH) * The variables must be declared either __no_init or const! */ -AlarmHandlingItemStruc *AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; -const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ +uint32_t * pAlarmItemSize = (uint32_t *)(ALARM_MAP_IN_FLASH); +uint32_t AlarmItemSize ; +AlarmHandlingItemStruc *AlarmItem = (AlarmHandlingItemStruc *)(ALARM_MAP_IN_FLASH+4); +AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,0,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_1_EMPTY}, {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_2_EMPTY}, {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_3_EMPTY}, @@ -176,14 +178,24 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - // {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + - /* {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT }, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERCURRENT }, @@ -236,7 +248,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_STALL}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_STALL}, - */ + {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE}, {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE}, @@ -256,7 +268,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,false,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor,1,false,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, - /* + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A}, @@ -264,7 +276,7 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A}, - */ + {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B}, @@ -275,49 +287,49 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B }, {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B }, - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ // - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ - // {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE }, /* 5038 */ + {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE }, /* 5042 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 125 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE }, /* 5018 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE }, /* 5019 */ @@ -338,6 +350,9 @@ const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, /* 6004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, @@ -367,27 +382,54 @@ bool EventsNotificationRequestAccepted = false; //machine cover open uint32_t AlarmHandlingFlashLoad(void) { + AlarmItemSize = sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; + - EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); + EraseFlashSection(pAlarmItemSize,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS+4); + ReadAppAndProgram(pAlarmItemSize, 4,&AlarmItemSize); ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); -// LOG_ERROR(AlarmItem[2].EventName,"Flash Test"); + LOG_ERROR(AlarmItem[110].EventType,"Flash Test"); - return sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; + return AlarmItemSize; } uint32_t AlarmHandlingLoadFile(void) { FRESULT Fresult = FR_OK; uint8_t* buffer = NULL; - uint32_t Bytes = 0; - + uint32_t Bytes = 0,i,p_size = 0; + AlarmParameters * AlarmParametersTable = NULL; Fresult = FileRead(AlarmStorePath, &Bytes, &buffer); if (Fresult == FR_OK) { - EraseFlashSection(AlarmItem,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS); - ReadAppAndProgram(AlarmItem, Bytes,buffer); - free (buffer); - ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); - + AlarmParametersTable = alarm_parameters__unpack(NULL, Bytes, buffer); + if (AlarmParametersTable) + { + if (AlarmParametersTable->n_alarmitem) + { + for (i = 0; i < AlarmParametersTable->n_alarmitem ;i++) + { + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].Frequency = AlarmParametersTable->alarmitem[i]->frequency; //1/10/100/1000 + HardCodedAlarmItem[i].AlarmSource = AlarmParametersTable->alarmitem[i]->alarmsource; + HardCodedAlarmItem[i].DeviceId = AlarmParametersTable->alarmitem[i]->deviceid; + HardCodedAlarmItem[i].ModuleDeviceId = AlarmParametersTable->alarmitem[i]->moduledeviceid; + HardCodedAlarmItem[i].AlarmValue = AlarmParametersTable->alarmitem[i]->alarmvalue; + HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + HardCodedAlarmItem[i].Severity = AlarmParametersTable->alarmitem[i]->severity; + HardCodedAlarmItem[i].Predecessor = AlarmParametersTable->alarmitem[i]->predecessor; + HardCodedAlarmItem[i].DebounceValue = AlarmParametersTable->alarmitem[i]->debouncevalue; + HardCodedAlarmItem[i].EventType = AlarmParametersTable->alarmitem[i]->eventtype; + p_size+= sizeof(AlarmHandlingItemStruc); + } + EraseFlashSection(pAlarmItemSize,p_size+4); + ReadAppAndProgram(pAlarmItemSize, 4,&p_size); + ReadAppAndProgram(AlarmItem, p_size,HardCodedAlarmItem); + free (buffer); + ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,p_size, RpMessage, AlarmParametersTable->n_alarmitem, 0); + } + alarm_parameters__free_unpacked(AlarmParametersTable,NULL); + } } return Bytes; } @@ -395,6 +437,7 @@ uint32_t AlarmHandlingLoadFile(void) void AlarmHandlingInit(void) { Error_Block eb; + uint32_t Bytes; Error_init(&eb); @@ -408,9 +451,20 @@ void AlarmHandlingInit(void) AlarmState[Alarm_i].EventPtr = NULL; } - AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH; + memcpy(&Bytes,(void *)pAlarmItemSize,sizeof(Bytes)); + REPORT_MSG(Bytes,"Bytes read from flash"); + + if ((Bytes)&&(Bytes < 10000)) + { + AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH+4; + } + else + { + Bytes = AlarmHandlingFlashLoad(); + REPORT_MSG(Bytes,"Bytes read hard coded"); + } + AlarmItem = HardCodedAlarmItem; //back to hard coded until flash problem are solved - //AlarmHandlingFlashLoad(); return; } @@ -458,11 +512,17 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { case ALARM_SOURCE_TYPE__TemperatureAlarm: //need to discover the heater Id and shut it down - HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Heating alarm, turning heating off", __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0); + //HeaterCommandRequestMessage(AlarmItem[AlarmId].ModuleDeviceId, HEATER_OFF, 0); + HeatersEnd(); + } break; case ALARM_SOURCE_TYPE__LimitSwitchAlarm: case ALARM_SOURCE_TYPE__HardLimitAlarm: case ALARM_SOURCE_TYPE__PressureAlarm: + ReportWithPackageFilter(AlarmFilter,"Dispenser alarm, stop job and dispenser", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); if (Severity == DEBUG_LOG_CATEGORY__Info) { IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); @@ -475,7 +535,22 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever case ALARM_SOURCE_TYPE__CurrentAlarm: break; case ALARM_SOURCE_TYPE__MotorAlarm: - MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + if ((Severity == DEBUG_LOG_CATEGORY__Error)||(Severity == DEBUG_LOG_CATEGORY__Critical)) + { + ReportWithPackageFilter(AlarmFilter,"Motor alarm, motor stopped", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); + MotorStop(AlarmItem[AlarmId].ModuleDeviceId,Hard_Hiz); + } + if ((AlarmItem[AlarmId].ModuleDeviceId >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(AlarmItem[AlarmId].ModuleDeviceId <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) //dispenser motor alarm + { + if (Severity == DEBUG_LOG_CATEGORY__Info) + { + IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + } + else + { + IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + } + } break; default: break; @@ -795,11 +870,13 @@ uint32_t AlarmHandlingLoop(uint32_t tick) int32_t value; //int32_t ivalue; bool Status = false; + int AlarmCounter=0; for (Alarm_i = 0;Alarm_i < MAX_SYSTEM_ALARMS;Alarm_i++) { Status = false; if (AlarmItem[Alarm_i].AlarmSource > ALARM_SOURCE_TYPE__FluidLevelAlarm) continue; + AlarmCounter++; if (tick%AlarmItem[Alarm_i].Frequency == 0) { switch (AlarmItem[Alarm_i].AlarmSource) @@ -930,6 +1007,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) Status = false; break; case ALARM_SOURCE_TYPE__FluidLevelAlarm: + Status = false; value = Get_MidTank_Int100_Sensor(AlarmItem[Alarm_i].DeviceId); if (AlarmItem[Alarm_i].AlarmDirection == OVER_VALUE) { @@ -1034,6 +1112,8 @@ uint32_t AlarmHandlingLoop(uint32_t tick) //valve OCD //Motor Status //machine cover open + if ((tick%(eOneSecond*5) == 0)&&(AlarmCounter == 0)) + ReportWithPackageFilter(AlarmFilter,"Error in alarms data!!!!!!!!! ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpFatalError, 0, Alarm_i); if ((tick%eOneSecond == 0)&&(EventsNotificationRequestAccepted==true)) SendEventNotifications(); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 063d7c823..fa94614fd 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -39,6 +39,7 @@ #include "modules/thread/thread_ex.h" #include "modules/ids/ids_ex.h" +#include "modules/Diagnostics/Diagnostics.h" #include "drivers/Flash_Memory/Flash_Memory.h" #include "drivers/Flash_Memory/fatfs/ff.h" @@ -87,14 +88,13 @@ uint32_t Dancer_Data[NUM_OF_DANCERS] = {0}; float Speed_Data = 0; uint32_t DrawerFansStatus = 0; uint32_t SystemFansStatus = 0; -uint8_t Gas_PPM = 0; - bool watchdogCriticalAlarm = false; uint32_t msec_millisecondCounter = 0; extern bool Machine_Idle_Mode; +uint8_t Gas_PPM_Info; MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; @@ -110,6 +110,7 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** @@ -594,7 +595,6 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Heaters_Current(Heater_i); } } - Gas_PPM = Calculate_Gas_Power_Consumption(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -613,6 +613,9 @@ uint32_t MillisecLowLoop(uint32_t tick) if (isMotorConfigured(Motor_i)) MotorGetStatusFromFPGA(Motor_i); }*/ + midtankDisplay = 1-midtankDisplay; + Gas_PPM_Info = Calculate_Gas_Power_Consumption(); + } if (OneHourTick) { @@ -718,7 +721,7 @@ uint32_t getDrawerFansStatus(void) } uint8_t getGasReading(void) { - return Gas_PPM; + return Gas_PPM_Info; } uint32_t getSystemFansStatus(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 2ca57e08e..8956f417d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -60,6 +60,7 @@ uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); +uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); //#define REDUCED_DIAGNOSTICS @@ -81,7 +82,7 @@ int DiagnosticLimit =eOneSecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection #endif int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection - +//#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; @@ -129,6 +130,7 @@ Task_Handle Diagnostics_Task_Handle; Mailbox_Handle DiagnosticsMsgQ = NULL; bool blowervolatgedisplay = false; +bool midtankDisplay = false; double diagvoltage = 0; /******************** Functions ********************************************/ //uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); @@ -137,6 +139,7 @@ typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, + DiagnosticsOneSecTrigger, }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -337,7 +340,7 @@ void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; -#ifdef TEN_MSEC_COLLECTION +//#ifdef TEN_MSEC_COLLECTION /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); @@ -349,7 +352,33 @@ void DiagnosticTenMsecCollection(void) DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -#endif +//#endif +} +void DiagnosticOneSecCollection(void) +{ + int i; + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); + + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); + for (i=0;ipowerofftemperaturelimit); InitSequenceSetStartHeating (EmbeddedParameters->startheatingoninitsequence); - bool a1,a2,a3,a4; - a1 = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; - a2 = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; - a3 = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; - a4 = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; - AlarmHandlingSetFlags(a1,a2,a3,a4); + bool checkHardLimitAlarms, checkCurrentAlarms, checkTamperAlarms, checkMotorAlarms; + checkHardLimitAlarms = (EmbeddedParameters->generalparameters[0] < 0.5)?false:true; + checkCurrentAlarms = (EmbeddedParameters->generalparameters[1] < 0.5)?false:true; + checkTamperAlarms = (EmbeddedParameters->generalparameters[2] < 0.5)?false:true; + checkMotorAlarms = (EmbeddedParameters->generalparameters[3] < 0.5)?false:true; + AlarmHandlingSetFlags(checkHardLimitAlarms,checkCurrentAlarms,checkTamperAlarms,checkMotorAlarms); SetWinderBackToBaseTime((uint32_t) EmbeddedParameters->generalparameters[4]); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index 33033ad69..c31a1a72b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -24,6 +24,8 @@ extern bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS]; extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; +extern bool HomingActive[MAX_SYSTEM_DISPENSERS]; + uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); /*typedef struct @@ -40,6 +42,7 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c index 09a3fbda4..2a1a8fa31 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -53,7 +53,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) { uint32_t status = OK; status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANING_DISPENSER_ID,callback); - Report("IDS_Dispenser_Close_Valve_And_Stop_Motor", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); + Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); return status; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index de7d12024..16545b27d 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -48,7 +48,7 @@ void IDS_Dispenser_SetPrepareValues( uint32_t DispenserBuildPressureSpeed, DispenserPreparePressure = DispenserBuildPressureLimit; DispenserPrepareTimeout = DispenserBuildPressureTimeout; DispenserPrepareTimeLag = DispenserBuildPressureLag; - Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareSpeed,RpWarning,(int)DispenserPreparePressure,0); + Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareSpeed,RpWarning,(int)(DispenserPreparePressure*100),0); Report("IDS_Dispenser_SetPrepareValues ",__FILE__,__LINE__,DispenserPrepareTimeout,RpWarning,(int)DispenserPrepareTimeLag,0); } void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index e578d593a..b9ccdce27 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -63,7 +63,6 @@ uint32_t IDS_DispenserControlInit(); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); -uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 9a0f23cbd..bfece1890 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -59,9 +59,14 @@ FPGA_GPI_ENUM Dispenser_Id_to_Alarm_LS_Id[MAX_SYSTEM_DISPENSERS*2] = { GPI_LS_DISPENSER_25_8, //MOTO_DISPENSER_8 = 13, }; callback_fptr HomingRequestCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; +callback_fptr HomingBacklashCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0}; +uint32_t HomingBacklashTimeout[MAX_SYSTEM_DISPENSERS]; +uint32_t HomingBacklashTime[MAX_SYSTEM_DISPENSERS]; + bool HomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool PrimingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; uint32_t DispenserHomingControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +uint32_t DispenserBacklashControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; uint32_t DispenserHomingTime[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0}; #define INITIAL_DISPENSER_PRESSURE 2.10 #define INITIAL_DISPENSER_TIMEOUT_LIMIT 60000 @@ -73,6 +78,9 @@ uint32_t InitialDispenserTimeout = INITIAL_DISPENSER_TIMEOUT_LIMIT; uint32_t InitialDispenserTimeLag = INITIAL_DISPENSER_TIMEOUT; uint32_t InitialDispenserSpeed = INITIAL_DISPENSER_SPEED; +uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); + + void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag, uint32_t initialdispenserspeed) { InitialDispenserPressure = initialdispenserpressure; @@ -82,6 +90,49 @@ void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32 Report("IDS_Dispenser_SetBackLashValues ",__FILE__,InitialDispenserPressure,InitialDispenserTimeout,RpWarning,(int)InitialDispenserTimeLag,0); } +uint32_t IDS_HomeDispenserWaitForHomingEndCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + HomingBacklashTime[DispenserId]+=eOneSecond; + if (( HomingActive[DispenserId]== false) ||((HomingBacklashTime[DispenserId]>=HomingBacklashTimeout[DispenserId])&&(HomingBacklashTimeout[DispenserId]>0))) + { + //stop this control loop + SafeRemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + + if (HomingBacklashCallback[DispenserId]) + { + if ( HomingActive[DispenserId]== false) + HomingBacklashCallback[DispenserId](DispenserId,OK); + else + HomingBacklashCallback[DispenserId](DispenserId,ERROR); + } + HomingBacklashCallback[DispenserId] = 0; + } + return OK; +} +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + + if (HomingBacklashCallback[DispenserId]!=NULL) + return ERROR; + HomingBacklashCallback[DispenserId] = callback; + HomingBacklashTimeout[DispenserId] = timeout; + HomingBacklashTime[DispenserId] = 0; + + if (DispenserBacklashControlId[DispenserId] != 0xFF) + { + RemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + //return ERROR; + } + DispenserBacklashControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); + if ( DispenserBacklashControlId[DispenserId] == 0xFF) + return ERROR; + + return OK; +} + uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index e3ecd5d55..7a719d39a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -104,6 +104,9 @@ int lInterSegmentLength = 0; LeftRockerSpeed = ids_leftcleaningmotorspeed; if ( ids_rightcleaningmotorspeed) RighttRockerSpeed = ids_rightcleaningmotorspeed; + Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,CleaningDispenserSpeed,RpWarning,(int)LeftRockerSpeed,0); + Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0); + } uint32_t DispenserPreSegmentControlId = 0xFF; @@ -602,7 +605,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. { NumofReadyDispensers++; tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + updatedSpeed = (tempSpeed*0.98>100)?tempSpeed*0.98:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -610,7 +613,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. else { tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; + updatedSpeed = (tempSpeed*1.04<1000)?tempSpeed*1.04:1000; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -683,6 +686,19 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } + uint32_t IDSPrepareStartDispenserAfterHoming(uint32_t DispenserId, uint32_t Result) + { + double dispenserspeed = 0; + Report("IDSPrepare Start Dispenser After Homing",__FILE__,__LINE__,DispenserId,RpWarning,(int)Result,0); + dispenserspeed = DispenserPrepareSpeed; + if (DispenserUsedInJob[DispenserId] == true) //we actually should check for all dispensers + { + Report("Prepare Speed",__FILE__,__LINE__,DispenserId,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,dispenserspeed, NULL); + } + return OK; + + } void IDSPrepareStart(void) { int i; @@ -697,9 +713,9 @@ c. Go to step 2.a x Segment.BrushStopsCount. NumOfActiveDispensers = 0; for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { + IDS_StopHomeDispenser(i); NumOfActiveDispensers++; } } @@ -711,8 +727,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. dispenserspeed = DispenserPrepareSpeed; if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); - IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + if (HomingActive[i] == false) + { + Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + } + else + { + Report("IDSPrepare Stop Dispenser Homing",__FILE__,__LINE__,i,RpWarning,(int)HomingActive[i],0); + IDS_HomeDispenserWaitForHomingEnd(i, DispenserPrepareTimeout/2 , IDSPrepareStartDispenserAfterHoming); + } } } } @@ -742,7 +766,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (DispenserBuildTimeCounter<(1*eOneSecond)) { - REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); return OK; } if (PreSegmentWCFStarted == true) @@ -762,7 +786,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. { NumofReadyDispensers++; tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.95>100)?tempSpeed*0.95:100; + updatedSpeed = (tempSpeed*0.98>100)?tempSpeed*0.98:100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS PreSegment reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -770,7 +794,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. else { tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.1<1000)?tempSpeed*1.1:1000; + updatedSpeed = (tempSpeed*1.04<1100)?tempSpeed*1.04:1100; MotorSetSpeed(HW_Motor_Id, updatedSpeed); CurrentDispenserSpeed[i] = updatedSpeed; //Report("IDS PreSegment accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); @@ -779,14 +803,14 @@ c. Go to step 2.a x Segment.BrushStopsCount. } if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) - Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); if (NumofReadyDispensers>=NumOfActiveDispensers) pressureReady = true; if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { - Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; @@ -797,7 +821,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. //******************************************************************************************************************** void IDSPresegmentPrepareStart(void) { - int i; + int Dispenser_i,n_dispensers,DispenserId; TimerMotors_t HW_Motor_Id; double segmentfirst_speed; @@ -834,16 +858,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserUsedInSegment[Dispenser_i] = true; MotorSetSpeed(HW_Motor_Id, DispenserPrepareSpeed); CurrentDispenserSpeed[Dispenser_i] = DispenserPrepareSpeed; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d speed %d",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d speed %d",DispenserId,(int) DispenserPrepareSpeed); //REPORT_MSG(segmentfirst_speed,IdsMessage); - Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, DispenserPrepareSpeed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); } else { MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[Dispenser_i] = 0; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); } @@ -957,7 +981,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); { IDS_PreSegmentPrepare_Callback(0,0); } - if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist @@ -1445,7 +1469,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; }*/ - InterSegmentStartWFCFDispensers = 0; + //InterSegmentStartWFCFDispensers = 0; return OK; @@ -1456,7 +1480,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[deviceID]; //REPORT_MSG(deviceID,"Dispenser End called"); //MotorStop(HW_Motor_Id,Hard_Hiz); - //IDS_HomeDispenser (deviceID, 800 , NULL); + //IDS_HomeDispenser (deviceID, 1000 , NULL); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index ca5f77aba..7d4b66dfb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -115,6 +115,7 @@ } Report("Thread_Load_Init",__FILE__,__LINE__,LoadArmInfo.LoadArmBackLash,RpMessage,LoadArmInfo.LoadArmRounds,0); + StopInitSequence(); memcpy (&ProcessParametersRecover,&ProcessParametersKeep,sizeof(ProcessParameters)); //NumberOfDrierLoaderCycles = loadLoadArmParameters(); LoadStages++; @@ -462,7 +463,8 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; - //LoadArmInfo.LoadArmRounds = 5; + if (LoadArmInfo.LoadArmRounds <= 2) + LoadArmInfo.LoadArmRounds = 20; float numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 3b972cc23..91979c8b1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -51,6 +51,7 @@ void SetMachineState(MACHINE_STATE_STAGES_ENUM NewState) { MachineState = NewState; } + uint32_t HWControlId,InitSchedulerControlId; uint32_t MidTankControlId; @@ -66,6 +67,11 @@ uint32_t InitSequenceMachineReadyToDye(void); uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue); +void StopInitSequence(void) +{ + InitStages = INIT_SEQUENCE_END; + InitSequenceStateMachine(InitStages); +} uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { if (SafeRemoveControlCallback(HWControlId, InitSequenceCallBackFunction )==OK) @@ -297,6 +303,7 @@ uint32_t InitSequenceMachineReadyToDye(void) } uint32_t InitSequenceInitEnd(void) { + RemoveControlCallback( InitSchedulerControlId,InitScheduler); return OK; } diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h index e4df62eb8..105537721 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.h @@ -29,6 +29,7 @@ }MACHINE_STATE_STAGES_ENUM; uint32_t Start_InitSequence(void); +void StopInitSequence(void); MACHINE_STATE_STAGES_ENUM GetMachineState(void); void SetMachineState(MACHINE_STATE_STAGES_ENUM); void InitSequenceSetStartHeating(bool StartHeating); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 599056a5e..8606d68d3 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -732,6 +732,7 @@ void PrintSTMMsgHandler(void * msg) if (dryerbufferlength <= 0.1) EndState(CurrentJob, "Job Ended"); else + Report("DistanceToSpoolState segmentId",__FILE__,__LINE__, SegmentId,RpMessage,n_segments,0); DistanceToSpoolState(CurrentJob); } else -- cgit v1.3.1 From abc2f5fc8f757eddeccdd10646039c96b58e522d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 13 Aug 2019 19:27:10 +0300 Subject: Version 1.4.3.7 Power off sequence with flushing and cleaning job. VOC alarms, safety, auto filling dispensers --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 87 ----------- .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 166 +++++++++++++++++++++ .../Embedded/Drivers/FPGA/FPGA_SPI_Comm.c | 6 +- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 4 + .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 13 +- Software/Embedded_SW/Embedded/Main.c | 1 - .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 29 +++- .../Embedded/Modules/Control/MillisecTask.c | 9 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 8 + .../Embedded_SW/Embedded/Modules/Control/control.h | 1 + .../Embedded/Modules/Diagnostics/Diagnostics.c | 64 +++++++- .../Embedded/Modules/General/GeneralHardware.c | 2 + Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 2 + .../Embedded/Modules/IDS/IDS_dispenser.c | 15 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 2 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 51 +++++++ .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 47 ++++-- .../Embedded/Modules/Thread/Thread_Winder.c | 26 +++- .../StateMachines/Initialization/InitSequence.c | 10 +- .../Initialization/PowerOffSequence.c | 140 ++++++++++++++--- .../Initialization/PowerOffSequence.h | 4 +- .../Embedded/StateMachines/Printing/JobSTM.c | 72 +++++++++ .../Embedded/StateMachines/Printing/PrintingSTM.h | 1 + 24 files changed, 598 insertions(+), 164 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 24d49cb81..163ae4756 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,3,41}; +TangoVersion_t _gTangoVersion = {1,4,3,7}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index cd47751d1..5c52963eb 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -460,93 +460,6 @@ double Calculate_Pitot_Pressure() // WHS - AN_AIRPRESS_1 return Pressure; } -uint8_t Calculate_Gas_Power_Consumption() // WHS -{ - // TGS 2602 (FIGARO) - - -/* Concentrtion Sensor - [ppm] [v] - 0 0.353 - 18 0.438 - 33 2.919 - 100 4.196 - 316 4.571 -*/ - - double VOC_Vsensor[] = - { - 0.353, //0 PPM - 0.357, //1 PPM - 0.362, //2 PPM - 0.367, //3 PPM - 0.371, //4 PPM - 0.376, //5 PPM - 0.381, //6 PPM - 0.386, //7 PPM - 0.390, //8 PPM - 0.395, //9 PPM - 0.400, //10 PPM - 0.404, //11 PPM - 0.409, //12 PPM - 0.414, //13 PPM - 0.419, //14 PPM - 0.423, //15 PPM - 0.428, //16 PPM - 0.433, //17 PPM - 0.438, //18 PPM - 0.603, //19 PPM - 0.768, //20 PPM - 0.934, //21 PPM - 1.099, //22 PPM - 1.265, //23 PPM - 1.430, //24 PPM - 1.595, //25 PPM - 1.761, //26 PPM - 1.926, //27 PPM - 2.092, //28 PPM - 2.257, //29 PPM - 2.422, //30 PPM - 2.588, //31 PPM - 2.753, //32 PPM - 2.919 //33 PPM - }; - - uint32_t VsampleInBits; - - double temp, VADC = 0.0 ,VSensor; - - uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; - - VsampleInBits = ADC_GetReading(ADC_VOCSENS); - - //---- VBits -> VADC ---- - - //ADC 12 bit -> 4096 -> 2.5V - - temp = VsampleInBits*2.5; - VADC = temp / 4096; - - //---- VADC -> VSensor --- - - //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) - // VSensor = 0 V -> VADC = 2.3824 V - // VSensor = 10 V -> VADC = 0.2272 V - - VSensor = (1.96- VADC) * 4.64 + 1.96; - - for(i=0;i + +#include +#include +#include + +#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "ADC.h" +#include +#include +#include "modules/AlarmHandling/AlarmHandling.h" +#include "PMR/Diagnostics/EventType.pb-c.h" + +#define MAX_VOC_SAMPLES 120 + +uint16_t VOC_Index = 0; +uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; +uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; + +bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; + +void CalculateVOCAlarms(void) +{ + int i,slope1=0,slope2=0,slopeindex=0; + double a; + bool alarmstate = false; + for (i = 0; i< MAX_VOC_SAMPLES; i++) + { + a += Gas_PPM[i]; + if(i!=0) + { + slope2 = slope1; + slope1 = Gas_PPM[i]-Gas_PPM[i-1]; + if (slope1 > VOC_Slope) + { + slopeindex++; + if (slopeindex>=VOC_Slope_Time) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,true); + Report("CalculateVOCAlarms slope on",__FILE__,__LINE__,(int)slope1,RpWarning,slopeindex,0); + alarmstate = true; + VOC_SlopeAlarm = true; + } + } + + } + } + + if ((alarmstate==false)&&(VOC_SlopeAlarm == true)) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE,false); + } + + if (a/MAX_VOC_SAMPLES > VOC_AverageLimit) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,true); + Report("CalculateVOCAlarms time on",__FILE__,__LINE__,(int)a,RpWarning,VOC_AverageLimit,0); + } + else if (VOC_TimeAlarm == true) + { + AlarmHandlingSetAlarm(EVENT_TYPE__VOC_SENSOR_ALARM_TIME,false); + } + +} + +uint8_t Calculate_Gas_Power_Consumption() // WHS +{ + // TGS 2602 (FIGARO) + + +/* Concentrtion Sensor + [ppm] [v] + 0 0.353 + 18 0.438 + 33 2.919 + 100 4.196 + 316 4.571 +*/ + + double VOC_Vsensor[] = + { + 0.353, //0 PPM + 0.357, //1 PPM + 0.362, //2 PPM + 0.367, //3 PPM + 0.371, //4 PPM + 0.376, //5 PPM + 0.381, //6 PPM + 0.386, //7 PPM + 0.390, //8 PPM + 0.395, //9 PPM + 0.400, //10 PPM + 0.404, //11 PPM + 0.409, //12 PPM + 0.414, //13 PPM + 0.419, //14 PPM + 0.423, //15 PPM + 0.428, //16 PPM + 0.433, //17 PPM + 0.438, //18 PPM + 0.603, //19 PPM + 0.768, //20 PPM + 0.934, //21 PPM + 1.099, //22 PPM + 1.265, //23 PPM + 1.430, //24 PPM + 1.595, //25 PPM + 1.761, //26 PPM + 1.926, //27 PPM + 2.092, //28 PPM + 2.257, //29 PPM + 2.422, //30 PPM + 2.588, //31 PPM + 2.753, //32 PPM + 2.919 //33 PPM + }; + + uint32_t VsampleInBits; + + double temp, VADC = 0.0 ,VSensor; + + uint8_t PPM = sizeof(VOC_Vsensor) / sizeof(VOC_Vsensor[0]), i; + + VsampleInBits = ADC_GetReading(ADC_VOCSENS); + + //---- VBits -> VADC ---- + + //ADC 12 bit -> 4096 -> 2.5V + + temp = VsampleInBits*2.5; + VADC = temp / 4096; + + //---- VADC -> VSensor --- + + //VADC = 1.96 - 10k( VSensor - 1.96) / 46.4k (from the electrical scheme) + // VSensor = 0 V -> VADC = 2.3824 V + // VSensor = 10 V -> VADC = 0.2272 V + + VSensor = (1.96- VADC) * 4.64 + 1.96; + + for(i=0;i= MAX_VOC_SAMPLES) + VOC_Index = 0; + if (VOC_Index%60 == 0) + { + CalculateVOCAlarms(); + } + return i;//PPM + } + } + +return 0xFF;//out of scale + +} diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c index 4d243408c..3c9ae591a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1001,7 +1001,7 @@ void FPGA_SetMotMicroStep(TimerMotors_t _motorId)// CM_VM = MotorDriverResponse[_motorId].DriverMode; temp |= (!x_SYNC_EN | CM_VM | good | x_SYNC_SEL_1)<<16; - Report("FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); + ReportWithPackageFilter(GeneralFilter,"FPGA_SetMotMicroStep",__FILE__,__LINE__,_motorId,RpMessage,i,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); } @@ -1139,7 +1139,7 @@ void FPGA_SetMotKvalHold(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - Report("FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalHold",__FILE__,__LINE__,_motorId,RpMessage,MotorDriverResponse[_motorId].DriverMode,0); MillisecWriteToMotor(_motorId,temp,4,NULL); } @@ -1166,7 +1166,7 @@ void FPGA_SetMotKvalRun(TimerMotors_t _motorId) Fpga_Spi[_motorId].TX_MOSI = temp; Fpga_Spi[_motorId].AMT_OF_Words = 4; - Report("FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); + ReportWithPackageFilter(GeneralFilter,"FPGA SetKvalRun",__FILE__,__LINE__,_motorId,RpMessage,temp,0); MillisecWriteToMotor(_motorId, temp, 4, NULL); //FPGA_SPI_Transnit(_motorId); diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index ec9ea17db..275a4db22 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -363,7 +363,11 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb { if (Valve3WayControlId[_ValveId] != 0xFF) + { Report("Control3WayValvesWithCallback called busy ",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); + RemoveControlCallback(Valve3WayControlId[_ValveId], Valve3WayCallBackFunction ); + } + Valve3WayModuleCallback[_ValveId] = callback; Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eOneSecond/*eHundredMillisecond*/, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c index 25aec02a5..f227dcd32 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -16,16 +16,21 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) { uint32_t Buffer = Data; if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromProgram Error",__FILE__,__LINE__,Address,RpWarning,Data,0); return ERROR; + } Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,Data,0); return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); } uint32_t MCU_E2PromRead(int Address,uint32_t *Data) { - Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromRead Error",__FILE__,__LINE__,Address,RpWarning,*Data,0); return ERROR; + } EEPROMRead((uint32_t *)Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,*Data,0); @@ -37,7 +42,10 @@ float MCU_E2PromReadMidtank_A(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_A+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); @@ -48,7 +56,10 @@ float MCU_E2PromReadMidtank_B(int MidtankId) int Address = EEPROM_STORAGE_MIDTANK_1_B+(MidtankId*2); float Data; if (MidtankId>=NUM_OF_MIDTANKS) + { + Report("MCU_E2PromReadMidtank error",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); return ERROR; + } EEPROMRead((uint32_t *)&Data,Address*4, 4); Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0); diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c index e04ce0d36..301d0d6c3 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -277,7 +277,6 @@ int main(void) #ifndef EVALUATION_BOARD WHS_init(); - Buttons_Init(); //IDS_ModuleInit(); Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index d1eabb6c7..6f80fdffb 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -178,12 +178,22 @@ AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,60/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning,0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, + //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, + {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, @@ -340,6 +350,9 @@ AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, /* 6004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, + {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, @@ -531,11 +544,11 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { if (Severity == DEBUG_LOG_CATEGORY__Info) { - IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId); + IDS_Dispenser_Alarm_Off(AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); } else { - IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId); + IDS_Dispenser_Alarm_On (AlarmItem[AlarmId].ModuleDeviceId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); } } break; diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index f5ac6cf92..fa94614fd 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -88,14 +88,13 @@ uint32_t Dancer_Data[NUM_OF_DANCERS] = {0}; float Speed_Data = 0; uint32_t DrawerFansStatus = 0; uint32_t SystemFansStatus = 0; -uint8_t Gas_PPM = 0; - bool watchdogCriticalAlarm = false; uint32_t msec_millisecondCounter = 0; extern bool Machine_Idle_Mode; +uint8_t Gas_PPM_Info; MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; @@ -111,6 +110,7 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); +void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ //********************************************************************** @@ -595,7 +595,6 @@ uint32_t MillisecLowLoop(uint32_t tick) Read_Heaters_Current(Heater_i); } } - Gas_PPM = Calculate_Gas_Power_Consumption(); for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) { TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i); @@ -615,6 +614,8 @@ uint32_t MillisecLowLoop(uint32_t tick) MotorGetStatusFromFPGA(Motor_i); }*/ midtankDisplay = 1-midtankDisplay; + Gas_PPM_Info = Calculate_Gas_Power_Consumption(); + } if (OneHourTick) { @@ -720,7 +721,7 @@ uint32_t getDrawerFansStatus(void) } uint8_t getGasReading(void) { - return Gas_PPM; + return Gas_PPM_Info; } uint32_t getSystemFansStatus(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index f1e19d851..a88f67d5e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -479,6 +479,14 @@ uint32_t GetControlLowDevice_i(void) { return ControlLowDevice_i; } +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId) +{ + if (ControlArray[ControlId].ControlActive) + return ControlArray[ControlId].ControlCallbackPtr; + else + return NULL; + +} uint32_t ControlLoop(uint32_t tick) { if (MaxHighDevices == 0xFF) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 380040e34..c54909f73 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -47,6 +47,7 @@ int SafeRemoveHighControlCallback(uint32_t deviceId , ControlCBFunction uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); extern Task_Handle Control_Task_Handle; extern uint32_t millisecondCounter; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 116988720..8956f417d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -60,6 +60,7 @@ uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); +uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); //#define REDUCED_DIAGNOSTICS @@ -81,7 +82,7 @@ int DiagnosticLimit =eOneSecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection #endif int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection -#define TEN_MSEC_COLLECTION +//#define TEN_MSEC_COLLECTION //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; @@ -138,6 +139,7 @@ typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, + DiagnosticsOneSecTrigger, }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -338,7 +340,7 @@ void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; -#ifdef TEN_MSEC_COLLECTION +//#ifdef TEN_MSEC_COLLECTION /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); @@ -350,7 +352,33 @@ void DiagnosticTenMsecCollection(void) DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); -#endif +//#endif +} +void DiagnosticOneSecCollection(void) +{ + int i; + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); + + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); + DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); + for (i=0;i=HomingBacklashTimeout[DispenserId])&&(HomingBacklashTimeout[DispenserId]>0))) + { + //stop this control loop + SafeRemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + + if (HomingBacklashCallback[DispenserId]) + { + if ( HomingActive[DispenserId]== false) + HomingBacklashCallback[DispenserId](DispenserId,OK); + else + HomingBacklashCallback[DispenserId](DispenserId,ERROR); + } + HomingBacklashCallback[DispenserId] = 0; + } + return OK; +} +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + + if (HomingBacklashCallback[DispenserId]!=NULL) + return ERROR; + HomingBacklashCallback[DispenserId] = callback; + HomingBacklashTimeout[DispenserId] = timeout; + HomingBacklashTime[DispenserId] = 0; + + if (DispenserBacklashControlId[DispenserId] != 0xFF) + { + RemoveControlCallback(DispenserBacklashControlId[DispenserId], IDS_HomeDispenserWaitForHomingEndCallback ); + DispenserBacklashControlId[DispenserId] = 0xFF; + //return ERROR; + } + DispenserBacklashControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); + if ( DispenserBacklashControlId[DispenserId] == 0xFF) + return ERROR; + + return OK; +} + uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 039b152e5..7a719d39a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -686,6 +686,19 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } + uint32_t IDSPrepareStartDispenserAfterHoming(uint32_t DispenserId, uint32_t Result) + { + double dispenserspeed = 0; + Report("IDSPrepare Start Dispenser After Homing",__FILE__,__LINE__,DispenserId,RpWarning,(int)Result,0); + dispenserspeed = DispenserPrepareSpeed; + if (DispenserUsedInJob[DispenserId] == true) //we actually should check for all dispensers + { + Report("Prepare Speed",__FILE__,__LINE__,DispenserId,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,dispenserspeed, NULL); + } + return OK; + + } void IDSPrepareStart(void) { int i; @@ -700,9 +713,9 @@ c. Go to step 2.a x Segment.BrushStopsCount. NumOfActiveDispensers = 0; for (i = 0; i < MAX_DYE_DISPENSERS; i++) { - //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { + IDS_StopHomeDispenser(i); NumOfActiveDispensers++; } } @@ -714,8 +727,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. dispenserspeed = DispenserPrepareSpeed; if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); - IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + if (HomingActive[i] == false) + { + Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); + IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); + } + else + { + Report("IDSPrepare Stop Dispenser Homing",__FILE__,__LINE__,i,RpWarning,(int)HomingActive[i],0); + IDS_HomeDispenserWaitForHomingEnd(i, DispenserPrepareTimeout/2 , IDSPrepareStartDispenserAfterHoming); + } } } } @@ -745,7 +766,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (DispenserBuildTimeCounter<(1*eOneSecond)) { - REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 1 seconds for pressure changes"); return OK; } if (PreSegmentWCFStarted == true) @@ -782,14 +803,14 @@ c. Go to step 2.a x Segment.BrushStopsCount. } if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) - Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback",__FILE__,DispenserBuildTimeCounter,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); if (NumofReadyDispensers>=NumOfActiveDispensers) pressureReady = true; if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) { - Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + Report("IDS_PreSegmentPrepare_Callback SafeRemoveControlCallback",__FILE__,DispenserPrepareControlId,InterSegmentStepsCount,RpWarning,(int)NumOfActiveDispensers,0); SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; @@ -800,7 +821,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. //******************************************************************************************************************** void IDSPresegmentPrepareStart(void) { - int i; + int Dispenser_i,n_dispensers,DispenserId; TimerMotors_t HW_Motor_Id; double segmentfirst_speed; @@ -837,16 +858,16 @@ c. Go to step 2.a x Segment.BrushStopsCount. DispenserUsedInSegment[Dispenser_i] = true; MotorSetSpeed(HW_Motor_Id, DispenserPrepareSpeed); CurrentDispenserSpeed[Dispenser_i] = DispenserPrepareSpeed; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d speed %d",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d speed %d",DispenserId,(int) DispenserPrepareSpeed); //REPORT_MSG(segmentfirst_speed,IdsMessage); - Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, DispenserPrepareSpeed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); } else { MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[Dispenser_i] = 0; - usnprintf(IdsMessage, 80,"WFCF Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); } @@ -960,7 +981,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); { IDS_PreSegmentPrepare_Callback(0,0); } - if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == InterSegmentStepsCount)) + if ((InterSegmentStartWFCFDispensers > 0)&&(InterSegmentStartWFCFDispensers == (lInterSegmentLength-InterSegmentStepsCount))) { Report("start dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); PreSegmentWCFStarted = true; // stop any presegment prepare stages, if still exist @@ -1448,7 +1469,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) InterSegmentStartRocking = 1000; InterSegmentCenterRockers = 3000; }*/ - InterSegmentStartWFCFDispensers = 0; + //InterSegmentStartWFCFDispensers = 0; return OK; @@ -1459,7 +1480,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[deviceID]; //REPORT_MSG(deviceID,"Dispenser End called"); //MotorStop(HW_Motor_Id,Hard_Hiz); - //IDS_HomeDispenser (deviceID, 800 , NULL); + //IDS_HomeDispenser (deviceID, 1000 , NULL); return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 7e1312464..5d9b26f92 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -59,10 +59,11 @@ static uint32_t WindingConeLocation; static uint32_t WinderBackToBaseTime = 800; InternalWinderConfigStruc InternalWinderCfg = {0}; - +#define READ_SCREW_ENCODER +#ifdef READ_SCREW_ENCODER uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; - +#endif bool SampleWinding = false; uint32_t Winder_Init(void) { @@ -132,8 +133,10 @@ uint32_t Winder_Prepare(void *JobDetails) return ERROR; }*/ +#ifdef READ_SCREW_ENCODER ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; +#endif if (( KeepWindingCone == false)||(WindingConeLocation == 0)) { WindingConeLocation = InternalWinderCfg.startoffsetpulses; @@ -176,10 +179,11 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); +#ifdef READ_SCREW_ENCODER Read_Screw_Encoder(); ScrewLocationLimitSwitch = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); - +#endif REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2"); if (ReadValue != LIMIT) @@ -203,6 +207,7 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands Task_sleep(5); +#ifdef READ_SCREW_ENCODER Reset_Screw_Encoder(); Task_sleep(5); Read_Screw_Encoder(); @@ -210,10 +215,13 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); +#endif SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home ScrewCurrentDirection = false; +#ifdef READ_SCREW_ENCODER ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif ScrewSpeed = 0; ScrewControlId = 0xFF; ScrewNumberOfSteps = 0; @@ -302,13 +310,15 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if (SampleWinding) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; - //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); -// usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); +#ifdef READ_SCREW_ENCODER + + REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); + //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); - +#endif if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { if (Add100 == true) //once per job @@ -617,11 +627,13 @@ void ScrewTimerInterrupt(int ARG0) if (SCREW_TimerActivated == true) { - Read_Screw_Encoder(); ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime); MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); +#ifdef READ_SCREW_ENCODER + Read_Screw_Encoder(); ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif // ScrewChangeCounter = 0; // ScrewChangeLimit = ScrewRunningTime/12000000; ScrewDirectionChangeCounter++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index a9b63ea47..91979c8b1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -51,11 +51,6 @@ void SetMachineState(MACHINE_STATE_STAGES_ENUM NewState) { MachineState = NewState; } -void StopInitSequence(void) -{ - InitStages = INIT_SEQUENCE_END; - InitSequenceStateMachine(InitStages); -} uint32_t HWControlId,InitSchedulerControlId; uint32_t MidTankControlId; @@ -72,6 +67,11 @@ uint32_t InitSequenceMachineReadyToDye(void); uint32_t InitSequenceStateMachine( INIT_SEQUENCE_STAGES_ENUM ReadValue); +void StopInitSequence(void) +{ + InitStages = INIT_SEQUENCE_END; + InitSequenceStateMachine(InitStages); +} uint32_t InitSequenceCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) { if (SafeRemoveControlCallback(HWControlId, InitSequenceCallBackFunction )==OK) diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 94cb8b623..73421f142 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -36,14 +36,14 @@ typedef enum { POWER_OFF_INIT, + POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_HEAD_CLEAN, POWER_OFF_MIXER_FLUSH, POWER_OFF_HEATERS_OFF, POWER_OFF_STORE_DATA, - POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading - POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_SET_VALVE_POSITION, POWER_OFF_WAIT_FOR_TEMPERATURE, + POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading POWER_OFF_TURN_OFF_DRYER_FAN, POWER_OFF_TURN_OFF_COOLER, POWER_OFF_TURN_OFF_BLOWER, @@ -84,7 +84,9 @@ uint32_t PowerOffScheduler(uint32_t IfIndex, uint32_t BusyFlag) uint32_t PowerOffInit(void) { LOG_ERROR(0,"Power Off Init"); - PowerOffMachineState = POWER_OFF_HEAD_CLEAN; + PowerOffMachineState++; + StopInitSequence(); + setmachineActive(true); PowerOffInProcess = true; PowerOffControlId = AddControlCallback( PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; @@ -97,19 +99,96 @@ uint32_t PowerOffCancel(void) PowerOffInProcess = false; return OK; } +/************************************************************************shlomo + + */ +uint32_t PowerOffHeadCleanControlId = 0xff; +uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + if ( JobIsActive()== false) + { + //stop this control loop + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + PowerOffMachineState++; + + } + return OK; +} /*******************************************************************************************************/ uint32_t PowerOffHeadClean(void) { + uint32_t status; + //TBD - PowerOffMachineState = POWER_OFF_MIXER_FLUSH; + ThreadCleaningJobFunc(50); + if (PowerOffHeadCleanControlId != 0xFF) + { + RemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + //return ERROR; + } + PowerOffHeadCleanControlId = AddControlCallback( PowerOffHeadCleanCallback,eOneSecond , TemplateDataReadCBFunction,0,0, 0 ); +// if ( PowerOffHeadCleanControlId == 0xFF) +// return ERROR; + return OK; } /*******************************************************************************************************/ -uint32_t PowerOffMixerFlush(void) +bool DispenserHomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; +uint32_t PowerOffDispenserHomingCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + DispenserHomingActive[DispenserId] = false; + REPORT_MSG (DispenserId, "PowerOffDispenserHomingCallback"); +} +#define TI_DISPENSER_ID 4 +#define DEFAULT_MIXER_CLEANING_SPEED 1000 +#define DEFAULT_MIXER_CLEANING_TIMEOUT 10000 + +uint32_t PowerOffMixerFlushCallback(void) { //TBD - PowerOffMachineState = POWER_OFF_HEATERS_OFF; + int i; + REPORT_MSG (PowerOffMachineState, "PowerOffMixerFlushCallback"); + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffMixerFlushCallback ); + + Control3WayValvesWithCallback ((Valves_t)TI_DISPENSER_ID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[TI_DISPENSER_ID]; + MotorStop(HW_Motor_Id,Hard_Hiz); + + Task_sleep (20); + for (i=0;ilength = 200.0; + TSegment->n_brushstops = 1; + TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); + TSegment->brushstops[0] = TbrushStop; + Tdispenser = my_malloc(sizeof(JobDispenser)); + + TbrushStop->has_index =true; + TbrushStop->index = 0; + TbrushStop->n_dispensers = 1; + TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); + TbrushStop->dispensers[0] = Tdispenser; + Tdispenser->nanolitterpersecond = 10000; + Tdispenser->nanoliterperpulse = 2.34; + Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; + Ticket.segments[0] = TSegment; + Ticket.segments[1] = TSegment; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; + Tspool->segmentoffsetpulses = 1000; + Tspool->startoffsetpulses = 220; + Tspool->rotationsperpassage = 3.1415926*2; + Ticket.spool = Tspool; + CurrentJob = &Ticket; + InternalWindingConfigMessage(Tspool); + StartJob(&Ticket); + } + } + return status; +} void ThreadJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index b9a82defa..e1a52cef4 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -164,6 +164,7 @@ void ThreadAbortJoggingRequestFunc(MessageContainer* requestContainer); void ThreadAbortJoggingFunc(void); uint32_t ThreadJoggingFunc(int speed); +uint32_t ThreadCleaningJobFunc(int speed); uint32_t CurrentJobRequestFunc(MessageContainer* requestContainer); uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1 From 517b7d9643f336d498fada274d6666da38e42c06 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 14 Aug 2019 15:11:15 +0300 Subject: Version 1.4.3.7 VOC sensors, disable saving dispenser data to flash during a job (winder jump), screw encoder data,power off and init improved. --- .../Embedded_SW/Embedded/Common/SW_Info/SW_Info.c | 2 +- .../Embedded/Drivers/ADC_Sampling/ADC.c | 1 + .../Embedded/Drivers/ADC_Sampling/ADC.h | 1 + .../Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c | 12 +- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 9 +- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 4 + .../Embedded/Drivers/flash_ram/FlashProgram.c | 6 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 8 ++ .../Embedded_SW/Embedded/Modules/Control/control.h | 2 + Software/Embedded_SW/Embedded/Modules/IDS/IDS.h | 1 - .../Embedded/Modules/IDS/IDS_dispenser.c | 24 ++-- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 3 + .../Embedded/Modules/Thread/Thread_Winder.c | 54 ++++++-- .../StateMachines/Initialization/InitSequence.c | 5 + .../Initialization/PowerOffSequence.c | 140 ++++++++++++++++++--- .../Initialization/PowerOffSequence.h | 4 +- .../Embedded/StateMachines/Printing/JobSTM.c | 72 +++++++++++ .../Embedded/StateMachines/Printing/PrintingSTM.h | 1 + 19 files changed, 301 insertions(+), 49 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Control') diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index 5a528d18b..163ae4756 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,4,3,5}; +TangoVersion_t _gTangoVersion = {1,4,3,7}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c index 5c52963eb..89328402b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.c @@ -348,6 +348,7 @@ void ADCAcquireInit(void) // (called by MillisecInit) ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V); ADCReferenceSet(ADC1_BASE, ADC_REF_EXT_3V); + VOCAlarmsInit(); if (!isInitialized) { // Create a periodic Clock Instance with _period - triggers the ADC sampling diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h index d3a1fe108..bcb383f6d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC.h @@ -48,6 +48,7 @@ extern int DispenserIdToPressureSensorId[MAX_DISPENSERS]; typedef void (*ProcessCallback)(uint32_t* adcData); void ADCAcquireInit(void); +void VOCAlarmsInit(void); uint32_t ADC_TriggerCollection(void); diff --git a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c index 6122c2a87..d74adb212 100644 --- a/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c +++ b/Software/Embedded_SW/Embedded/Drivers/ADC_Sampling/ADC_VOC_Sensor.c @@ -26,6 +26,10 @@ uint8_t Gas_PPM[MAX_VOC_SAMPLES] = {0}; uint32_t VOC_Slope=0,VOC_AverageLimit=0, VOC_Slope_Time=0; bool VOC_TimeAlarm = false,VOC_SlopeAlarm = false; +void VOCAlarmsInit(void) +{ + memset(Gas_PPM,0,sizeof(Gas_PPM)); +} void CalculateVOCAlarms(void) { @@ -39,7 +43,7 @@ void CalculateVOCAlarms(void) { slope2 = slope1; slope1 = Gas_PPM[i]-Gas_PPM[i-1]; - if (slope1 > VOC_Slope) + if ((slope1>0)&&(slope1 > VOC_Slope)) { slopeindex++; if (slopeindex>=VOC_Slope_Time) @@ -50,6 +54,10 @@ void CalculateVOCAlarms(void) VOC_SlopeAlarm = true; } } + else + { + slopeindex = 0; //not a consequent raise is slope + } } } @@ -157,6 +165,8 @@ uint8_t Calculate_Gas_Power_Consumption() // WHS { CalculateVOCAlarms(); } + Report("Calculate_Gas_Power_Consumption",__FILE__,__LINE__,(int)i,RpWarning,VOC_Index,0); + return i;//PPM } } 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 dd700563b..ceff20ea8 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 @@ -499,12 +499,19 @@ uint32_t ActivateHeadMagnet() Task_sleep(500); F2_CTRL_Reg.ushort &= ~SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; - + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DRIER_LID_OPEN, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); + } return OK; } uint32_t DeActivateHeadMagnet() { + if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) + { + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM, DRIER_LID_CLOSE, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM], NULL,1000); + } F2_CTRL_Reg.ushort |= SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; Task_sleep(500); diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index ec9ea17db..275a4db22 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -363,7 +363,11 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb { if (Valve3WayControlId[_ValveId] != 0xFF) + { Report("Control3WayValvesWithCallback called busy ",__FILE__,__LINE__,(int)_ValveId,RpWarning,(int)Valve3WayControlId[_ValveId],0); + RemoveControlCallback(Valve3WayControlId[_ValveId], Valve3WayCallBackFunction ); + } + Valve3WayModuleCallback[_ValveId] = callback; Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eOneSecond/*eHundredMillisecond*/, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c index 99d7c0b9e..3c84ed049 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/FlashProgram.c @@ -100,7 +100,7 @@ uint32_t ReadAppAndProgram(uint32_t ui32FlashStart,uint32_t ui32FileSize,void* b // Call the function to program a block of flash. The length of the // block passed to the flash function must be divisible by 4. // - ROM_FlashProgram((uint32_t *)ui32BufferAddr, ui32ProgAddr, + FlashProgram((uint32_t *)ui32BufferAddr, ui32ProgAddr, (ui32DataSize + 3) & ~3); // @@ -136,7 +136,7 @@ uint32_t EraseFlashSection(uint32_t ui32FlashStart,uint32_t ui32FileSize) #endif for(ui32Idx = ui32FlashStart; ui32Idx < ui32FlashStart+ui32FileSize; ui32Idx += 1024) { - ROM_FlashErase(ui32Idx); + FlashErase(ui32Idx); } return OK; @@ -157,7 +157,7 @@ void FlashInit(void) #endif for(ui32Idx = FLASH_RAM_BASE; ui32Idx < FLASH_RAM_BASE+FLASH_SIZE; ui32Idx += 1024) { - ROM_FlashErase(ui32Idx); + FlashErase(ui32Idx); } } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index f1e19d851..a88f67d5e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -479,6 +479,14 @@ uint32_t GetControlLowDevice_i(void) { return ControlLowDevice_i; } +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId) +{ + if (ControlArray[ControlId].ControlActive) + return ControlArray[ControlId].ControlCallbackPtr; + else + return NULL; + +} uint32_t ControlLoop(uint32_t tick) { if (MaxHighDevices == 0xFF) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 380040e34..450646a68 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -48,6 +48,8 @@ uint32_t TemplateDataReadCBFunction (uint32_t deviceId, uint32_t Parameter1); uint32_t GetControlDevice_i(void); uint32_t GetControlLowDevice_i(void); +ControlCBFunction GetControlCallbackFuncPtr(uint32_t ControlId); + extern Task_Handle Control_Task_Handle; extern uint32_t millisecondCounter; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index c31a1a72b..a919ce4e1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -42,7 +42,6 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps); void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps); //uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback); -uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed); uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 16545b27d..2f563d7d1 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -107,8 +107,9 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re Control3WayValvesWithCallback ((Valves_t)DispenserId, CloseValve, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); - + { + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); + } DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_Build_Pressure_Callback, DispenserPrepareTimeLag,TemplateDataReadCBFunction ,DispenserId, DispenserId, 0 ); if (DispenserControlId[DispenserId] == 0xFF) Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); @@ -127,7 +128,7 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re uint32_t IDS_Dispenser_StopMotorCallback(uint32_t DispenserId, uint32_t ReadValue) { - //Report("IDS_Dispenser_Close_Valve_And_Stop_Motor callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); + Report("IDS_Dispenser_Close_Valve_And_Stop_Motor callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); if (SafeRemoveControlCallback(DispenserControlId[DispenserId], IDS_Dispenser_StopMotorCallback )==OK) DispenserControlId[DispenserId] = 0xFF; else @@ -152,13 +153,13 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re Control3WayValvesWithCallback ((Valves_t)DispenserId, CloseValve, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_StopMotorCallback, CloseValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 ); if (DispenserControlId[DispenserId] == 0xFF) Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); - //else - // Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + else + Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); return OK; } @@ -202,7 +203,7 @@ uint32_t IDS_Dispenser_Start_Motor_and_Open_Valve(int DispenserId, int MotorSpee MotorSetSpeed(HW_Motor_Id, MotorSpeed); CurrentDispenserSpeed[DispenserId] = MotorSpeed; if (DispenserControlId[DispenserId] != 0xFF) - Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); + Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); //Report("IDS_Dispenser_Start_Motor_and_Open_Valve",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0); DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_OpenValveCallback, OpenValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 ); @@ -294,9 +295,12 @@ uint32_t IDS_Dispenser_Store_Data (void) // Report("IDS_Dispenser_Store_Data 0",__FILE__,(int)IDS_Dispenser_Data[0].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[0].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[0].microsteps,0); // Report("IDS_Dispenser_Store_Data 4",__FILE__,(int)IDS_Dispenser_Data[4].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[4].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[4].microsteps,0); //response_size = dispenser_data__pack(&IDSDispenserData, response_buffer); - EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); - ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); - ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); + if (JobIsActive()==false) + { + EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); + ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); + ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); + } Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT); if (Status == FR_OK) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index b9ccdce27..51086b09e 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -63,6 +63,7 @@ uint32_t IDS_DispenserControlInit(); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); +uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index bfece1890..603c4ac66 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -186,6 +186,9 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr assert(DispenserId < MAX_SYSTEM_DISPENSERS); //if (DispensersAlarmState[DispenserId] == true) // return ERROR; + + //if Safety is active + //if safety is upper position or if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) { LOG_ERROR (DispenserId,"Homing already active"); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 7e1312464..0ed0f5318 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -59,10 +59,11 @@ static uint32_t WindingConeLocation; static uint32_t WinderBackToBaseTime = 800; InternalWinderConfigStruc InternalWinderCfg = {0}; - +#define READ_SCREW_ENCODER +#ifdef READ_SCREW_ENCODER uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; - +#endif bool SampleWinding = false; uint32_t Winder_Init(void) { @@ -89,6 +90,8 @@ uint32_t InternalWinderConfigMessage(HardwareWinder* request) return status; } +char ScrewStr[150]; + uint32_t InternalWindingConfigMessage(JobSpool* request) { uint32_t status = PASSED; @@ -99,6 +102,9 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*2;//request->rotationsperpassage; InternalWinderCfg.diameter = request->diameter; + usnprintf(ScrewStr, 150, "WindingConfig start,offset,head,tail {, %d, %d, %d, %d, %d}",InternalWinderCfg.startoffsetpulses,(int)InternalWinderCfg.segmentoffsetpulses, + (int)InternalWinderCfg.spoolbackingrate,(int)InternalWinderCfg.SpoolBottomBackingRate); + Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.diameter,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); return status; } @@ -132,8 +138,10 @@ uint32_t Winder_Prepare(void *JobDetails) return ERROR; }*/ +#ifdef READ_SCREW_ENCODER ScrewLocationRun[0] = 0; ScrewLocationRun[1] = 0; +#endif if (( KeepWindingCone == false)||(WindingConeLocation == 0)) { WindingConeLocation = InternalWinderCfg.startoffsetpulses; @@ -176,10 +184,11 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue) //MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW,InternalWinderCfg.segmentoffsetpulses); //REPORT_MSG(numOfSteps, "Winder_PrepareStage2"); +#ifdef READ_SCREW_ENCODER Read_Screw_Encoder(); ScrewLocationLimitSwitch = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationLimitSwitch, "Winder_PrepareStage2 Encoder Location"); - +#endif REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2"); if (ReadValue != LIMIT) @@ -203,6 +212,7 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) MotorStop (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Soft_Hiz); //per L6470 errata between mov and run commands Task_sleep(5); +#ifdef READ_SCREW_ENCODER Reset_Screw_Encoder(); Task_sleep(5); Read_Screw_Encoder(); @@ -210,10 +220,13 @@ uint32_t Winder_ScrewAtOffsetCallback(uint32_t deviceID, uint32_t BusyFlag) ScrewLocationStart = Screw_RotEnc.Position; REPORT_MSG(ScrewLocationStart, "Winder_ScrewAtOffsetCallback Encoder Location"); +#endif SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_SCREW); //set this point as the spool home ScrewCurrentDirection = false; +#ifdef READ_SCREW_ENCODER ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif ScrewSpeed = 0; ScrewControlId = 0xFF; ScrewNumberOfSteps = 0; @@ -249,7 +262,7 @@ InternalWinderCfg.segmentoffsetpulses numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; */ -char ScrewStr[150]; + //char TempScrewStr[100]; double WinderReferenceSpeed=0; double TotalWinderSpeed=0; @@ -259,6 +272,8 @@ int flipflop = 0; uint32_t motspeed; float speedf; int WinderCalculation = 0; +float WinderRunAverage = 0.0,WinderRunSum = 0.0; +int WinderRunSamples = 0; uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; @@ -266,6 +281,8 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) double screw_horizontal_speed = 0; double RotationsPerSecond; double Averagewinderspeed = 0; + int WinderRun; + // { // TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; @@ -302,13 +319,28 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if (SampleWinding) return OK; //double calcsteps = (ScrewRunningTime/SYS_CLK_FREQ)*ScrewSpeed; - //REPORT_MSG((abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); -// usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); +#ifdef READ_SCREW_ENCODER + WinderRun = abs(ScrewLocationRun[1] - ScrewLocationRun[0]); + if ((WinderRun < 50000)&&(Add100 == false)) + { + WinderRunSum+=WinderRun; + WinderRunSamples++; + WinderRunAverage = WinderRunSum/WinderRunSamples; + if ((fabs(WinderRun-WinderRunAverage)>=30)||(WinderRunSamples%100 == 0)) + { + usnprintf(ScrewStr, 150, "curr,sum,avg,samples {Winder Encoder:, %d, %d, %d, %d, %d}",WinderRun,(int)WinderRunSum,(int)WinderRunAverage,(int)WinderRunSamples, + (int)(100*WinderRun/ScrewNumberOfSteps)); + Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + } + } + //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + //REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); + //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); - +#endif if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { if (Add100 == true) //once per job @@ -321,7 +353,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { ScrewNumberOfSteps--; WindingConeLocation--; - // ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + ReportWithPackageFilter(ThreadFilter,"Head Backing",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } else //next time going back @@ -329,7 +361,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) if ((CalculationDirectionChangeCounter/2)%InternalWinderCfg.SpoolBottomBackingRate == 0) { ScrewNumberOfSteps++; - // Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); + Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } /* if (WinderMotorSpeedRollOver) @@ -617,11 +649,13 @@ void ScrewTimerInterrupt(int ARG0) if (SCREW_TimerActivated == true) { - Read_Screw_Encoder(); ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime); MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection); MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed); +#ifdef READ_SCREW_ENCODER + Read_Screw_Encoder(); ScrewLocationRun[ScrewCurrentDirection] = Screw_RotEnc.Position; +#endif // ScrewChangeCounter = 0; // ScrewChangeLimit = ScrewRunningTime/12000000; ScrewDirectionChangeCounter++; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c index 91979c8b1..7b94cd792 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/InitSequence.c @@ -214,6 +214,11 @@ uint32_t InitSequenceInitialBlowerActivation(void) else Control_Voltage_To_Blower(3000); HWControlId = AddControlCallback( InitSequenceBlowerCallBackFunction, 10* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + if (RdInkCartridgeSensor()) //if there is a cartridge in the ink slot skip the valves procedure + { + MidTankOperationCounter = MidTankEnd; + Report("There is a cartridge in the ink slot. skipping the valves procedure",__FILE__,__LINE__,(int)MidTankOperationCounter,RpWarning,(int)InitStages,0); + } MidTankControlId = AddControlCallback( InitSequenceMidTankCallBackFunction, 300/*eHundredMillisecond*/, TemplateDataReadCBFunction,0,0, 0 ); return OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index 94cb8b623..73421f142 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -36,14 +36,14 @@ typedef enum { POWER_OFF_INIT, + POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_HEAD_CLEAN, POWER_OFF_MIXER_FLUSH, POWER_OFF_HEATERS_OFF, POWER_OFF_STORE_DATA, - POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading - POWER_OFF_STOP_RUNNING_JOB, POWER_OFF_SET_VALVE_POSITION, POWER_OFF_WAIT_FOR_TEMPERATURE, + POWER_OFF_WAIT_FOR_PROCESSES,//wait for waste emptying, ink filling, thread loading POWER_OFF_TURN_OFF_DRYER_FAN, POWER_OFF_TURN_OFF_COOLER, POWER_OFF_TURN_OFF_BLOWER, @@ -84,7 +84,9 @@ uint32_t PowerOffScheduler(uint32_t IfIndex, uint32_t BusyFlag) uint32_t PowerOffInit(void) { LOG_ERROR(0,"Power Off Init"); - PowerOffMachineState = POWER_OFF_HEAD_CLEAN; + PowerOffMachineState++; + StopInitSequence(); + setmachineActive(true); PowerOffInProcess = true; PowerOffControlId = AddControlCallback( PowerOffScheduler, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); return OK; @@ -97,19 +99,96 @@ uint32_t PowerOffCancel(void) PowerOffInProcess = false; return OK; } +/************************************************************************shlomo + + */ +uint32_t PowerOffHeadCleanControlId = 0xff; +uint32_t PowerOffHeadCleanCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + if ( JobIsActive()== false) + { + //stop this control loop + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + PowerOffMachineState++; + + } + return OK; +} /*******************************************************************************************************/ uint32_t PowerOffHeadClean(void) { + uint32_t status; + //TBD - PowerOffMachineState = POWER_OFF_MIXER_FLUSH; + ThreadCleaningJobFunc(50); + if (PowerOffHeadCleanControlId != 0xFF) + { + RemoveControlCallback(PowerOffHeadCleanControlId, PowerOffHeadCleanCallback ); + PowerOffHeadCleanControlId = 0xFF; + //return ERROR; + } + PowerOffHeadCleanControlId = AddControlCallback( PowerOffHeadCleanCallback,eOneSecond , TemplateDataReadCBFunction,0,0, 0 ); +// if ( PowerOffHeadCleanControlId == 0xFF) +// return ERROR; + return OK; } /*******************************************************************************************************/ -uint32_t PowerOffMixerFlush(void) +bool DispenserHomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; +uint32_t PowerOffDispenserHomingCallback(uint32_t DispenserId, uint32_t ReadValue) +{ + DispenserHomingActive[DispenserId] = false; + REPORT_MSG (DispenserId, "PowerOffDispenserHomingCallback"); +} +#define TI_DISPENSER_ID 4 +#define DEFAULT_MIXER_CLEANING_SPEED 1000 +#define DEFAULT_MIXER_CLEANING_TIMEOUT 10000 + +uint32_t PowerOffMixerFlushCallback(void) { //TBD - PowerOffMachineState = POWER_OFF_HEATERS_OFF; + int i; + REPORT_MSG (PowerOffMachineState, "PowerOffMixerFlushCallback"); + SafeRemoveControlCallback(PowerOffHeadCleanControlId, PowerOffMixerFlushCallback ); + + Control3WayValvesWithCallback ((Valves_t)TI_DISPENSER_ID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[TI_DISPENSER_ID]; + MotorStop(HW_Motor_Id,Hard_Hiz); + + Task_sleep (20); + for (i=0;ilength = 200.0; + TSegment->n_brushstops = 1; + TSegment->brushstops = my_malloc(sizeof(TSegment->brushstops)); + TSegment->brushstops[0] = TbrushStop; + Tdispenser = my_malloc(sizeof(JobDispenser)); + + TbrushStop->has_index =true; + TbrushStop->index = 0; + TbrushStop->n_dispensers = 1; + TbrushStop->dispensers = my_malloc(sizeof(TbrushStop->dispensers)); + TbrushStop->dispensers[0] = Tdispenser; + Tdispenser->nanolitterpersecond = 10000; + Tdispenser->nanoliterperpulse = 2.34; + Tdispenser->dispenserstepdivision = DISPENSER_STEP_DIVISION__Auto; + Ticket.segments[0] = TSegment; + Ticket.segments[1] = TSegment; + Tspool->backingrate = 32; + Tspool->bottombackingrate = 32; + Tspool->segmentoffsetpulses = 1000; + Tspool->startoffsetpulses = 220; + Tspool->rotationsperpassage = 3.1415926*2; + Ticket.spool = Tspool; + CurrentJob = &Ticket; + InternalWindingConfigMessage(Tspool); + StartJob(&Ticket); + } + } + return status; +} void ThreadJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index b9a82defa..e1a52cef4 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -164,6 +164,7 @@ void ThreadAbortJoggingRequestFunc(MessageContainer* requestContainer); void ThreadAbortJoggingFunc(void); uint32_t ThreadJoggingFunc(int speed); +uint32_t ThreadCleaningJobFunc(int speed); uint32_t CurrentJobRequestFunc(MessageContainer* requestContainer); uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer); -- cgit v1.3.1