aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/IDS
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2018-10-22 09:57:56 +0300
committerShlomo Hecht <shlomo@twine-s.com>2018-10-22 09:57:56 +0300
commite64ec3bb6dd7294f9765bf4ca032e4aea42509e8 (patch)
treef46a2564394361a1b6f0ab1c42cfd0b61f8b60ff /Software/Embedded_SW/Embedded/Modules/IDS
parent62c58ec1e5496c2e6a12be1179ee8ed5ee2890f3 (diff)
downloadTango-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.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c38
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c29
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);
}
}