diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-10-22 09:57:56 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-10-22 09:57:56 +0300 |
| commit | e64ec3bb6dd7294f9765bf4ca032e4aea42509e8 (patch) | |
| tree | f46a2564394361a1b6f0ab1c42cfd0b61f8b60ff /Software/Embedded_SW/Embedded/Modules/IDS | |
| parent | 62c58ec1e5496c2e6a12be1179ee8ed5ee2890f3 (diff) | |
| download | Tango-e64ec3bb6dd7294f9765bf4ca032e4aea42509e8.tar.gz Tango-e64ec3bb6dd7294f9765bf4ca032e4aea42509e8.zip | |
IDS - do not switch off valve between segments if used in the next segment. SCREW - preparations for interrupts. Alarm Handling - low temperature. Homing - bi-directional.
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/IDS')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 1 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 38 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 29 |
3 files changed, 65 insertions, 3 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index 06e45d1b8..2b8779207 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -41,6 +41,7 @@ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); +uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 2fbc90c69..b90ed3a1f 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -28,6 +28,16 @@ FPGA_GPI_ENUM Dispenser_Id_to_LS_Id[MAX_SYSTEM_DISPENSERS] = { GPI_LS_DISPENSER_DOWN_7, //MOTO_DISPENSER_7 = 12, GPI_LS_DISPENSER_DOWN_8, //MOTO_DISPENSER_8 = 13, }; +FPGA_GPI_ENUM Dispenser_Id_to_LS_Empty_Id[MAX_SYSTEM_DISPENSERS] = { + GPI_LS_DISPENSER_UP_1, //MOTO_DISPENSER_1 = 6, + GPI_LS_DISPENSER_UP_2, //MOTO_DISPENSER_2 = 7, + GPI_LS_DISPENSER_UP_3, //MOTO_DISPENSER_3 = 8, + GPI_LS_DISPENSER_UP_4, //MOTO_DISPENSER_4 = 9, + GPI_LS_DISPENSER_UP_5, //MOTO_DISPENSER_5 = 10, + GPI_LS_DISPENSER_UP_6, //MOTO_DISPENSER_6 = 11, + GPI_LS_DISPENSER_UP_7, //MOTO_DISPENSER_7 = 12, + GPI_LS_DISPENSER_UP_8, //MOTO_DISPENSER_8 = 13, +}; FPGA_GPI_ENUM Dispenser_Id_to_Alarm_LS_Id[MAX_SYSTEM_DISPENSERS*2] = { GPI_LS_DISPENSER_UP_1, //MOTO_DISPENSER_1 = 6, GPI_LS_DISPENSER_UP_2, //MOTO_DISPENSER_2 = 7, @@ -128,3 +138,31 @@ uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id) else return FPGA_Read_limit_Switches(Dispenser_Id_to_Alarm_LS_Id[LS_Id]); } + +uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback) +{ + assert(deviceID < MAX_SYSTEM_DISPENSERS); + + if (HomingActive[deviceID] == true) + return ERROR; + else + HomingActive[deviceID] = true; + + HomingRequestCallback[deviceID] = callback; + + TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + deviceID; + if ( Dispenser_Id_to_LS_Empty_Id[deviceID] != MAX_GPI) + { + //open dispenser valve dispenser to midtank direction + Control3WayValvesWithCallback ((Valves_t)deviceID, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + //Valve_Set((Valves_t) request->index, MidTank_Dispenser); + MotorSetMicroStep(deviceID, 1); + //open dry air valve in the dispenser + Valve_Set(IDS_Id_to_AirValve[deviceID], Atm_MidTank_ON); + + + MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Empty_Id[deviceID], IDS_HomeDispenserCallback); + return OK; + } + return ERROR; +} diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index acd8a8983..3a86bab44 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -151,7 +151,28 @@ void DispenserPrepareReady(void) DispenserPrepareReady(); return OK; } +bool IDS_isDispenserUsedNextSegment(void *JobDetails,int DispenserId, int SegmentId) +{ + JobTicket* JobTicket = JobDetails; + int NextSegment = SegmentId+1; + int Dispenser_i,n_dispensers; + if (JobTicket->n_segments == 0) + return false; + if (JobTicket->n_segments <= NextSegment) + return false; + if (JobTicket->segments[NextSegment]->brushstops[0]->n_dispensers) + { + n_dispensers = JobTicket->segments[NextSegment]->brushstops[0]->n_dispensers; + for (Dispenser_i = 0;Dispenser_i < n_dispensers;Dispenser_i++) + { + if (DispenserId == JobTicket->segments[NextSegment]->brushstops[0]->dispensers[Dispenser_i]->index) //dispenser is in use next segment + return true; + } + } + + return false; +} //******************************************************************************************************************** uint32_t IDS_Valve_PresegmentReady(uint32_t deviceID, uint32_t ReadValue) { @@ -209,14 +230,16 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) if (MotorsCfg[HW_Motor_Id].hardwaremotortype != DispenserIdToMotorId[DispenserId])//unconfigured dispenser continue; DispenserPreSegmentReady[DispenserId] = false; - Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, IDS_Valve_PresegmentReady); //direction: MidTank_Dispenser or Dispenser_Mixer - + if (IDS_isDispenserUsedNextSegment(JobDetails,DispenserId,SegmentId) == false) + { + Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, IDS_Valve_PresegmentReady); //direction: MidTank_Dispenser or Dispenser_Mixer + } MotorStop(HW_Motor_Id,Hard_Hiz); /*if (JobTicket->segments[SegmentId]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->has_dispenserstepdivision) MotorSetMicroStep(HW_Motor_Id,JobTicket->segments[SegmentId]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->dispenserstepdivision); else*/ - MotorSetMicroStep(HW_Motor_Id,MotorsCfg[HW_Motor_Id].microstep); + MotorSetMicroStep(HW_Motor_Id,MotorsCfg[HW_Motor_Id].microstep); } } |
