diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-09-06 15:24:39 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-09-06 15:24:39 +0300 |
| commit | dc3e9a8e3936f24d01d85652ff2fb9b8c320261c (patch) | |
| tree | d58239e55ba1eaf0a27788c0d20f004c72fa6355 /Software/Embedded_SW/Embedded | |
| parent | b68b34d6247175678f76cc40bb60019685740dd9 (diff) | |
| download | Tango-dc3e9a8e3936f24d01d85652ff2fb9b8c320261c.tar.gz Tango-dc3e9a8e3936f24d01d85652ff2fb9b8c320261c.zip | |
some fixes in dispenser handling, implement setheaterstate, procedures and stubs updated
Diffstat (limited to 'Software/Embedded_SW/Embedded')
10 files changed, 73 insertions, 30 deletions
diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index b14efbd55..307e4eecb 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -349,6 +349,9 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__StartEventsNotificationRequest: StartEventsNotificationRequestFunc(requestContainer); break; + case MESSAGE_TYPE__SetHeaterStateRequest: + SetHeaterStateRequestFunc(requestContainer); + break; case MESSAGE_TYPE__StopEventsNotificationRequest: StopEventsNotificationRequestFunc(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index 8c12b4ea3..f33edee50 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -222,7 +222,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S //SetMotorSpeed (deviceId, parameter); MotorCallback[MotorId] = callback; MotorTimeout[MotorId] = 0; - MotorTimeLag[MotorId] = 40; + MotorTimeLag[MotorId] = 20; MotorTimeLimit[MotorId] = timeout; if (MotorId ==HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) { @@ -233,7 +233,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S //MotorStop(MotorId,Hard_Hiz ); MotorMove(MotorId,direction,Steps ); - MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/40, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); + MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/20, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 ); MotorControlCallback[MotorId] = MotorMoveCallBackFunction; return MotorControlId[MotorId]; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e8e2e4ed0..78398119b 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -446,6 +446,7 @@ uint16_t FluidLevelWarning = 20,FluidLevelError = 50; int NumOfSystemAlarms = MAX_SYSTEM_ALARMS; //bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool EventsNotificationRequestAccepted = false; +char AlarmReasonStr[100]; //read dispensers limit switches. 25 - send warning. up - stop job and send alarm //Cone missing //Dyeing head over temperature @@ -594,7 +595,8 @@ void AlarmHandlingLoadFlags(void) CheckCurrentAlarms = (AlarmhandlingFlags && 0x0002); CheckTamperAlarms = (AlarmhandlingFlags && 0x0004); CheckMotorAlarms = (AlarmhandlingFlags && 0x0008); - ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + usnprintf(AlarmReasonStr, 100, "Alarm group from EEPPROM Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); } void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms) @@ -604,7 +606,9 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms CheckCurrentAlarms = checkCurrentAlarms; CheckTamperAlarms = checkTamperAlarms; CheckMotorAlarms = checkMotorAlarms; - ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + usnprintf(AlarmReasonStr, 100, "Alarm group setting Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0); + if (CheckHardLimitAlarms) flags |= 0x1; if (CheckCurrentAlarms) flags |= 0x2; if (CheckTamperAlarms) flags |= 0x4; @@ -615,7 +619,6 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms AlarmhandlingFlags = flags; } } -char AlarmReasonStr[100]; JobEndReasonEnum getEndReason(uint32_t AlarmId) { switch (AlarmItem[AlarmId].AlarmSource) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 00d5a2a65..c428faea3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -22,6 +22,8 @@ void HeatingTestSendResonse(uint32_t status, bool last,bool heater1Active,bool h uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature); void HeatingTestRequest(MessageContainer* requestContainer); void HeatingTestPollRequest(MessageContainer* requestContainer); +void SetHeaterStateRequestFunc(MessageContainer* requestContainer); + bool HeaterCheckReady(void); bool isHeaterReady(uint8_t HeaterId); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 56e71b345..783e337cc 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -15,6 +15,8 @@ #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "PMR/Hardware/HardwarePidControl.pb-c.h" #include "PMR/Hardware/HardwareBlower.pb-c.h" +#include "PMR/Diagnostics/SetHeaterStateRequest.pb-c.h" +#include "PMR/Diagnostics/SetHeaterStateResponse.pb-c.h" #include "PMR/Diagnostics/HeaterType.pb-c.h" #include "PMR/Diagnostics/HeaterState.pb-c.h" #include "PMR/common/MessageContainer.pb-c.h" @@ -638,6 +640,40 @@ int GetFilteredHeaterRead(int HeaterId) * initialized all global data *************************************************************************************/ bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; + +void SetHeaterStateRequestFunc(MessageContainer* requestContainer) +{ + + uint32_t status = PASSED; + MessageContainer responseContainer; + + SetHeaterStateRequest* request = set_heater_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + SetHeaterStateResponse response = SET_HEATER_STATE_RESPONSE__INIT; + + if (request->has_heatertype) + { + if ((request->has_isactive)&&(request->has_setpoint)) + status = HeaterCommandRequestMessage(request->heatertype,true,request->setpoint); + else + status = HeaterCommandRequestMessage(request->heatertype,false,request->setpoint); + } + + responseContainer = createContainer(MESSAGE_TYPE__SetHeaterStateResponse, requestContainer->token, true, &response, &set_heater_state_response__pack, &set_heater_state_response__get_packed_size); + if (status) + { + responseContainer.has_error = true; + responseContainer.error = (ErrorCode)status; + } + //------------------------------------------------------------------------------------------- + uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + + set_heater_state_request__free_unpacked(request,NULL); + +} uint32_t HeaterCommandRequestMessage(int HeaterNum, bool OnOff, int Temperature) { //uint32_t status = NOT_SUPPORTED; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 75acec0b6..c8f435cb9 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -354,12 +354,16 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) //double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only //consumedintimeframe = 10+DispenserId; IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]*4/10);//400 milliseconds ==> speed*4/10 + if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) + IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; //if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]>0)) - // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); + // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data info",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0); + //if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]<0)) + // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data fill",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)(-1*CurrentDispenserSpeed[DispenserId]),0); if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0) IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0; - if (CurrentDispenserSpeed[DispenserId]>0.1) + if (abs(CurrentDispenserSpeed[DispenserId])>0) { DispenserDataUpdated = true; IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 327d80eb1..d40f3c00b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -452,10 +452,12 @@ c. Go to step 2.a x Segment.BrushStopsCount. uint32_t DispenserPrepareControlId = 0xFF; int NumOfActiveDispensers = 0; int DispenserBuildTimeCounter = 0; -#define DISPENSER_UP_MOVEMENT + double TargetNumberOfStepsPreRun,MaximalPressurePreRun; int DispenserTotalPrepareSteps[MAX_SYSTEM_DISPENSERS]; bool DispenserLastMovementDown[MAX_SYSTEM_DISPENSERS]; -#define PRESSURE_READ_TIME_GAP 100 + + #define PRESSURE_READ_TIME_GAP 100 + uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) { if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) @@ -582,10 +584,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond); HW_Motor_Id = DispenserIdToMotorId[i]; -//#ifdef DISPENSER_UP_MOVEMENT - if (DispenserTotalPrepareSteps[i]<InitialDispenserTimeout) + + if (DispenserTotalPrepareSteps[i]<TargetNumberOfStepsPreRun) { - AdjustDispenserSpeedToPressure(i,InitialDispenserPressure,pressure); + AdjustDispenserSpeedToPressure(i,MaximalPressurePreRun,pressure); } else if (pressure > DispenserPreparePressure*1.2) { @@ -597,7 +599,6 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl if (AdjustDispenserSpeedToPressure(i,DispenserPreparePressure,pressure) == true) NumofReadyDispensers++; } -//#endif ReportWithPackageFilter(IDSFilter,"IDS prepare",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(CurrentDispenserSpeed[i]*100),0); } } @@ -758,7 +759,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl JobTicket* JobTicket = JobDetails; JobEndSequence = false; - if ((pressurebuildup>0.1)&&(pressurebuildup<4.0)) + if ((pressurebuildup>0.1)&&(pressurebuildup<4.5)) { ReportWithPackageFilter(IDSFilter,"Setting pressure from RML feeder tension",__FILE__,__LINE__,(int)(pressurebuildup*100),RpWarning,(int)(DispenserPreparePressure*100),0); DispenserPreparePressure = pressurebuildup; @@ -778,6 +779,8 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl CleaningDispenserSpeed = 0; EnableCleaning = false; } + TargetNumberOfStepsPreRun = InitialDispenserTimeout; + MaximalPressurePreRun = InitialDispenserPressure; for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++) { @@ -1840,7 +1843,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) DispenserPreSegmentControlId = 0xFF; } - IDS_Dispenser_Store_Data (); + //IDS_Dispenser_Store_Data (); for ( Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 7295084e3..8856d873a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -898,6 +898,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) uint32_t timeout = 0xFFFFFFFFU; ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout); #endif + HeatersEnd(); FRESULT iFResult = Init_Flash_File_System(true); if(iFResult != FR_OK) { @@ -930,6 +931,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor { LOG_ERROR(request->delay,"FlashInit"); + HeatersEnd(); FlashInit(); response.progress = (double)OK; response.has_progress = true; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index a4172185a..cd7c146fe 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -373,10 +373,7 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0); - //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); - //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP + Report("Thread_Load_Lift right actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP } return OK; @@ -400,11 +397,8 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Lift_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); + Report("Thread_Load_Lift left actuator",__FILE__,__LINE__,LOW,RpMessage,false,0); Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP); - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP); - //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP - //Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP } return OK; @@ -476,7 +470,7 @@ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000); if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Close_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,true,0); + Report("Thread_Load_Close left actuator",__FILE__,__LINE__,LOW,RpMessage,true,0); Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); } @@ -516,12 +510,7 @@ } if (Head_Type == HEAD_TYPE_FLAT) { - Report("Thread_Load_Close_actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); - - //Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN - //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN); - - //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN); + Report("Thread_Load_Close right actuators",__FILE__,__LINE__,LOW,RpMessage,true,0); HeadCard_Actuators_Relocate(); } return OK; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index e16909c45..c217a68b3 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -1401,6 +1401,7 @@ Void jobTask(UArg arg0, UArg arg1) JobResumed = false; setmachineActive(false); SetMachineStatus(MACHINE_STATE__Ready); + IDS_Dispenser_Store_Data(); resetIdleCounter(); CurrentJob = NULL; if (IFS_Clearing_SuctionWaiting == true) |
