aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-12-24 16:20:59 +0200
committerAvi Levkovich <avi@twine-s.com>2020-12-24 16:20:59 +0200
commit71f7f59a5345c2df5d2fa8c641a88bf1d12bf063 (patch)
treebea86c782bb1a56cef3c824468680e8f0b9df476 /Software/Embedded_SW/Embedded/Modules
parent49251db3f95a2c3146fc94ef2d487042891a6220 (diff)
parenta7d02907a37ba35da13b03264ba5110bd08f83c1 (diff)
downloadTango-71f7f59a5345c2df5d2fa8c641a88bf1d12bf063.tar.gz
Tango-71f7f59a5345c2df5d2fa8c641a88bf1d12bf063.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c21
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c37
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c22
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IFS/ifs.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IFS/ifs.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread.h10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h14
11 files changed, 111 insertions, 14 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 13cd797a7..fd861a985 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -22,6 +22,10 @@
#include "MillisecTask.h"
#include <driverlib/timer.h>
+#include <time.h>
+#include "Common/Utilities/Utils.h"
+#include "driverlib/hibernate.h"
+
#include <Drivers/SSI_Comm/SSI_Comm.h>
#include <Drivers/SSI_Comm/Speed_Sensor/Speed_Sensor.h>
#include <Drivers/SSI_Comm/Dancer/Dancer.h>
@@ -741,6 +745,11 @@ uint32_t MillisecLowLoop(uint32_t tick)
DispensersCollectionCall();
if (O200Millisecond_Tick)
{
+
+ ulocaltime(umktime(&LocalTime)+1,&LocalTime);
+ HibernateCalendarSet(&LocalTime);
+ //ReportWithPackageFilter(ThreadFilter,"Time: ",__FILE__,LocalTime.tm_min,LocalTime.tm_sec,RpWarning,(int) msec_millisecondCounter,0);
+
Trigger_WHS_MAX11614_Read_allADC();
FPGA_GetAllDispensersValveBusyOCD();
Read_Dryer_Fan_Tacho();
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
index 7c11b12bf..7e3f6252f 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
@@ -40,6 +40,8 @@ void Heaters_SetOverHeatTimeOutValues(uint32_t OverHeatTimeout, uint32_t UnderHe
void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersupperoperationlimit,int dcheatersloweroperationlimit,int dcheatersupperoperationlimit);
uint32_t DrierHeaterVoltageSetup(void);
+//this function returns preparation ratio for the most cool heater (current temperature/ target temerature)
+double HeatersPrepareProgress(void);
uint32_t HeatersEnd(void);
void HeatersControlStart(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index db7261090..d48139255 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -574,6 +574,27 @@ uint32_t HeatersSingleHeaterEnd(int HeaterId)
return status;
}
+//this function returns preparation ratio for the most cool heater (current temperature/ target temerature)
+double HeatersPrepareProgress(void)
+{
+ HardwarePidControlType i;
+ double MaxDifference = 1.00,temp = 0;
+ for (i=0;i<HEATER_TYPE_MAX_HEATERS;i++)
+ {
+ if(HeaterCmd[i].targettemperatue)
+ {
+ if (MillisecGetTemperatures(HeaterId2PT100Id[i])>=HeaterCmd[i].targettemperatue)
+ continue;
+ temp = MillisecGetTemperatures(HeaterId2PT100Id[i])/HeaterCmd[i].targettemperatue;
+ if (temp<MaxDifference)
+ MaxDifference = temp;
+ }
+ }
+ Report("HeatersPrepareProgress" ,__FILE__,__LINE__,(int)(MaxDifference*100),RpWarning,0,0);
+
+ return MaxDifference;
+
+}
uint32_t HeatersEnd(void)
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
index 4ee94dae4..4d103395c 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
@@ -33,6 +33,29 @@ uint32_t OpenValveTimeout = 10;
#define DISPENSER_BUILD_PRESSURE_TIMEOUT 120000
#define DISPENSER_BUILD_PRESSURE_LAG 50
#define DEFAULT_NANOLITER_PER_PULSE 2.34
+
+FPGA_GPI_ENUM Dispenser_Id_to_LS_50_Id[MAX_SYSTEM_DISPENSERS] = {
+ GPI_LS_DISPENSER_50_1, //MOTO_DISPENSER_1 = 6,
+ GPI_LS_DISPENSER_50_2, //MOTO_DISPENSER_2 = 7,
+ GPI_LS_DISPENSER_50_3, //MOTO_DISPENSER_3 = 8,
+ GPI_LS_DISPENSER_50_4, //MOTO_DISPENSER_4 = 9,
+ GPI_LS_DISPENSER_50_5, //MOTO_DISPENSER_5 = 10,
+ GPI_LS_DISPENSER_50_6, //MOTO_DISPENSER_6 = 11,
+ GPI_LS_DISPENSER_50_7, //MOTO_DISPENSER_7 = 12,
+ GPI_LS_DISPENSER_50_8, //MOTO_DISPENSER_8 = 13,
+};
+FPGA_GPI_ENUM Dispenser_Id_to_LS_25_Id[MAX_SYSTEM_DISPENSERS] = {
+ GPI_LS_DISPENSER_25_1, //MOTO_DISPENSER_1 = 6,
+ GPI_LS_DISPENSER_25_2, //MOTO_DISPENSER_2 = 7,
+ GPI_LS_DISPENSER_25_3, //MOTO_DISPENSER_3 = 8,
+ GPI_LS_DISPENSER_25_4, //MOTO_DISPENSER_4 = 9,
+ GPI_LS_DISPENSER_25_5, //MOTO_DISPENSER_5 = 10,
+ GPI_LS_DISPENSER_25_6, //MOTO_DISPENSER_6 = 11,
+ GPI_LS_DISPENSER_25_7, //MOTO_DISPENSER_7 = 12,
+ GPI_LS_DISPENSER_25_8, //MOTO_DISPENSER_8 = 13,
+};
+bool DispenserDirectionFlag_50[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0};
+bool DispenserDirectionFlag_25[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0};
uint32_t DispenserPrepareSpeed = DISPENSER_BUILD_PRESSURE_SPEED;
double DispenserPreparePressure = DISPENSER_BUILD_PRESSURE_LIMIT;
uint32_t DispenserPrepareTimeout = DISPENSER_BUILD_PRESSURE_TIMEOUT;
@@ -380,6 +403,16 @@ void IDS_Dispenser_Content_Calculation (char DispenserId)
{
ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0);
}
+ if ((Dispenser_Id_to_LS_50_Id[DispenserId])&&(DispenserDirectionFlag_50[DispenserId]==false))
+ {
+ DispenserDirectionFlag_50[DispenserId]= true;
+ ReportWithPackageFilter(IDSFilter,"Dispenser at 50% ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)65000000,0);
+ }
+ if ((Dispenser_Id_to_LS_25_Id[DispenserId])&&(DispenserDirectionFlag_25[DispenserId]==false))
+ {
+ DispenserDirectionFlag_25[DispenserId]= true;
+ ReportWithPackageFilter(IDSFilter,"Dispenser at 25% ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)32500000,0);
+ }
}
if (DispenserId == 0)
{
@@ -410,6 +443,8 @@ void IDS_Dispenser_RefillStarted (char DispenserId,char MicroSteps)
IDS_Dispenser_Data[DispenserId].nanolitterperpulse = assumedFlow;
IDS_Dispenser_Data[DispenserId].microsteps = 1;
IDS_Dispenser_Data[DispenserId].direction = 0;*/
+ DispenserDirectionFlag_50[DispenserId] = false;
+ DispenserDirectionFlag_25[DispenserId] = false;
ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_RefillStarted",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)(CurrentDispenserSpeed[DispenserId]),0);
}
void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps)
@@ -419,6 +454,8 @@ void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps)
IDS_Dispenser_Data[DispenserId].numberofrefills++;
//IDS_Dispenser_Data[DispenserId].direction = 1;
IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0;
+ DispenserDirectionFlag_50[DispenserId] = false;
+ DispenserDirectionFlag_25[DispenserId] = false;
ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_RefillEnded",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)IDS_Dispenser_Data[DispenserId].numberofrefills,0);
}
void DispenserDataRequestFunc(MessageContainer* requestContainer)
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index 0a8060496..ceb504099 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -60,6 +60,9 @@ void IDS_Dispenser_Content_Init (void);
uint32_t IDSPrepareState(void *JobDetails);
void IDSPrepareStart(void);
+//this function returns preparation ratio for the most cool heater (current temperature/ target temerature)
+double IdsPrepareProgress(void);
+
uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId);
uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId);
uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
index 1528a9a3b..9c422444f 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
@@ -195,6 +195,7 @@ uint32_t IDS_Honing_Timeout_Callback(uint32_t DispenserId, uint32_t ReadValue)
ReportWithPackageFilter(IDSFilter,"IDS_Honing_Timeout_Callback",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,2000,0);
SafeRemoveControlCallback(DispenserHomingTimeoutControlId[DispenserId], IDS_Honing_Timeout_Callback );
AlarmHandlingSetAlarm (DispenserId+EVENT_TYPE__DISPENSER_1_REFILL_FAILURE,true);
+ return OK;
}
uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue)
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 2d371595c..aaa371aac 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -459,11 +459,31 @@ c. Go to step 2.a x Segment.BrushStopsCount.
uint32_t DispenserPrepareControlId = 0xFF;
int NumOfActiveDispensers = 0;
int DispenserBuildTimeCounter = 0;
- double TargetNumberOfStepsPreRun,MaximalPressurePreRun;
+ double TargetNumberOfStepsPreRun = 120000,MaximalPressurePreRun = 4;
int DispenserTotalPrepareSteps[MAX_SYSTEM_DISPENSERS];
bool DispenserLastMovementDown[MAX_SYSTEM_DISPENSERS];
#define PRESSURE_READ_TIME_GAP 100
+ //this function returns preparation ratio for the most cool heater (current temperature/ target temerature)
+ double IdsPrepareProgress(void)
+ {
+ HardwarePidControlType i;
+ double MaxDifference = 1.00,temp = 0;
+ if (TargetNumberOfStepsPreRun == 0)
+ return 1.00;
+ for (i = 0; i < MAX_DYE_DISPENSERS; i++)
+ {
+ if (DispenserUsedInJob[i] == false) //we actually should check for all dispensers
+ continue;
+ if (DispenserTotalPrepareSteps[i]>TargetNumberOfStepsPreRun)
+ continue;
+ temp = DispenserTotalPrepareSteps[i]/TargetNumberOfStepsPreRun;
+ if (temp<MaxDifference)
+ MaxDifference = temp;
+ }
+ Report("IdsPrepareProgress" ,__FILE__,__LINE__,(int)(MaxDifference*100),RpWarning,0,0);
+ return MaxDifference;
+ }
uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
index 469e82aa8..2c67a623b 100644
--- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
+++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c
@@ -157,6 +157,7 @@ bool CartridgeInkFull()
int GetCartridgeFillPercent()
{
double MidTank_Pressure = 0;
+ double percent;
#ifdef IFS_DEBUG
static int percent = 0;
if (midTankState == MidTankStateFilling) {
@@ -169,7 +170,8 @@ int GetCartridgeFillPercent()
return percent;
#else
MidTank_Pressure = Read_MidTank_Pressure_Sensor(midTankCartColor);
- return (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY);
+ percent = (((MidTank_Pressure - midTankCapacity)* 100) / CARTRIDGE_CAPATICY);
+ return percent;
#endif
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h
index 0f95fb2e2..7d68621e9 100644
--- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h
+++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h
@@ -13,7 +13,7 @@
#define CARTRIDGE_INK_TIMEOUT 420
#define MidTank_Pressure_EMPTY 0.3
-#define CARTRIDGE_CAPATICY 1500
+#define CARTRIDGE_CAPATICY 1.5
typedef enum{
MidTankStateIdle,
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
index 13032f49d..aedb49a62 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
@@ -22,16 +22,6 @@
#define NORMAL_COEF_DIVIDER 100
typedef struct
{
- uint32_t startoffsetpulses;
- uint32_t spoolbackingrate;
- uint32_t segmentoffsetpulses;// the spool winding initial length in mm
- uint32_t milimetersperrotation;
- uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool
- double NumberOfRotationPerPassage; // how many rotations per spool passage
- double diameter;
-}InternalWinderConfigStruc;
-typedef struct
-{
bool m_isEnabled;
int32_t m_SetParam;
float m_mesuredParam;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
index 4ce48a639..05cacd20e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
@@ -14,7 +14,18 @@
#define WINDER_4_DANCER HARDWARE_DANCER_TYPE__RightDancer
#define NUM_OF_DANCERS NUM_OF_ROTENC
-//} DANCER_ENUM;
+
+typedef struct
+{
+ uint32_t startoffsetpulses;
+ uint32_t spoolbackingrate;
+ uint32_t segmentoffsetpulses;// the spool winding initial length in mm
+ uint32_t milimetersperrotation;
+ uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool
+ double NumberOfRotationPerPassage; // how many rotations per spool passage
+ double diameter;
+}InternalWinderConfigStruc;
+
typedef enum threadMotorsEnum
{
FEEDER_MOTOR,
@@ -55,6 +66,7 @@ uint32_t LoadDancerConfigMessage(void);
//uint32_t MotorPidRequestMessage(HardwarePidControl* request);
extern float NumberOfRotationPerPassage; //debug for rotation per passage trials
+extern InternalWinderConfigStruc InternalWinderCfg;
uint32_t Winder_Init(void);
uint32_t Winder_Check_Cone(void);