aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h9
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c35
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c61
4 files changed, 104 insertions, 8 deletions
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index d8655296d..6806d0989 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -36,7 +36,14 @@
#endif
//#define BTSR_ROTATED_WINDER_TFU
-//#define USE_UART4_FOR_BTSR // need change in FRPGA FPGA_1 yy > 0x20 + jumpers in main board need to read HW Version - no need when working only with stubs
+//#define UFEEDER_BTSR
+#ifdef UFEEDER_BTSR
+#define BTSR_NO_FEEDER_TFU
+#define BTSR_NO_PULLER_TFU
+#define BTSR_ROTATED_WINDER_TFU
+#endif
+
+//#define USE_UART4_FOR_BTSR // need change in FRPGA FPGA_1 yy > 0x20 + jumpers in main board need to read HW Version
//#define USE_RFID_STUB //stub only. to use it undef USE_RFID_LOGIC
//#define RFID_READ_ONLY //
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
index aee812973..cffdea68b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
@@ -47,6 +47,13 @@ typedef enum {
EEPROM_PRESSURE_SENSOR_V0_0,
EEPROM_PRESSURE_SENSOR_V0_1,
EEPROM_DRIER_LOADING_ARM_ANGLE,
+ EEPROM_BTSR_FEEDING_TENSION,
+ EEPROM_BTSR_EXIT_TENSION,
+ EEPROM_BTSR_TYPE,
+ EEPROM_BTSR_APPLICATION,
+ EEPROM_BTSR_TENSION_ERROR,
+ EEPROM_BTSR_LENGTH_OFFSET,
+ EEPROM_BTSR_SPOOL_TENSION,
MAX_EEPROM_STORAGE
}EEPROM_STORAGE_USAGE_ENUM;
#define MAX_SERIAL_NUM_LEN 5 //5*4 bytes
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 87ad612ba..697f1bd5d 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -36,7 +36,7 @@
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "Control/MillisecTask.h"
#include "drivers/Flash_ram/MCU_E2Prom.h"
-
+#include "Drivers/Uart_Comm/BTSR/BTSR.h"
#include "drivers/SSI_Comm/SSI_Comm.h"
////////////////////////////////State machine operation////////////////////////////////////
@@ -79,6 +79,7 @@ double LengthCalculationMultiplier;
uint32_t PoolerPreviousPosition = 0, PoolerCurrentPosition = 0;
double PoolerTotalProcessedLength = 0.0;
double PoolerLengthCalculationMultiplier;
+double threadlengthfactor = 1.0;
double TempPoolerTotalProcessedLength = 0.0;
double TempTotalProcessedLength = 0.0;
@@ -109,6 +110,7 @@ void SendSegmentFail(void);
double KeepNormalizedError = 0;
bool ThreadControlActive = false;
+extern BTSR_t BTSR[MaxUFeeders];
////////////////////////Slow Motor State////////////////////////////////////
//uint32_t ThreadPreSegmentState(void *JobDetails);
@@ -337,9 +339,13 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}**/
//}
-#ifdef BTSR_NO_PULLER_TFU
- if (CurrentControlledSpeed[WINDER_MOTOR]>100)
- length = dyeingspeed/10;
+#ifdef UFEEDER_BTSR
+ length = BTSR[RUFeeder1].LengthInMeter * threadlengthfactor;
+#else
+ #ifdef BTSR_NO_PULLER_TFU
+ if (CurrentControlledSpeed[WINDER_MOTOR]>100)
+ length = dyeingspeed/10;
+ #endif
#endif
PoolerTotalProcessedLength+= (length/100);
TempPoolerTotalProcessedLength = PoolerTotalProcessedLength;
@@ -1080,6 +1086,16 @@ uint32_t ThreadPrepareState(void *JobDetails)
initialpos = 0xFFFF;
Poolerinitialpos = 0xFFFF;
PrepareState = true;
+
+#ifdef UFEEDER_BTSR
+ int application = JobTicket->btsrparameters->btsrapplicationtype;
+ int type = JobTicket->btsrparameters->btsryarntype;
+ uint16_t tension = (uint16_t)(JobTicket->btsrparameters->feedingtension*10);
+ uint16_t tension_err = (uint16_t)(JobTicket->btsrparameters->tensionerror*10);
+ uint16_t alarm_time = 5; //no parameter
+ threadlengthfactor = JobTicket->btsrparameters->threadlengthfactor;
+#endif
+
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,false);
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,false);
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,false);
@@ -1097,8 +1113,18 @@ uint32_t ThreadPrepareState(void *JobDetails)
IntersegmentLength = JobTicket->intersegmentlength;
PrepareWaitCount = 0;
+
+#ifdef UFEEDER_BTSR
+ status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, JobTicket->btsrparameters->exittension);
+ ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)JobTicket->btsrparameters->exittension,0);
+ BTSR_RML_Settings(RUFeeder1, application, type, tension, tension_err, alarm_time);
+ BTSR_Reset_Length(RUFeeder1, HIGHEST);
+ BTSR_Read_Length(RUFeeder1, HIGHEST);
+ ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension BTSR",__FILE__,application,type,RpError,tension,tension_err);
+#else
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, windertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)windertension,0);
+#endif
#ifndef BTSR_NO_PULLER_TFU
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__MiddleDancer, pullertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Puller",__FILE__,HARDWARE_DANCER_TYPE__MiddleDancer,PrepareWaitCount,RpWarning,(int)pullertension,0);
@@ -1107,6 +1133,7 @@ uint32_t ThreadPrepareState(void *JobDetails)
status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__RightDancer, feedertension);
ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Feeder",__FILE__,HARDWARE_DANCER_TYPE__RightDancer,PrepareWaitCount,RpWarning,(int)feedertension,0);
#endif
+
FirstCalcInJob = true;
if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)
{
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index bbb75328b..ab5e68b46 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -81,7 +81,7 @@
#include "modules/ids/ids_ex.h"
#include "Modules/heaters/heaters_ex.h"
#include "Modules/control/control.h"
-
+#include "drivers/Flash_ram/MCU_E2Prom.h"
#define MAX_TICKET_SIZE 10000
@@ -106,6 +106,7 @@ JobBrushStop *TbrushStop;
JobDispenser *Tdispenser;
JobSpool *Tspool;
HeadCleaningParameters *CleaningParameters = NULL;
+BTSRParameters *BtsrPrameters = NULL;
bool CopyConfigured[MAX_SYSTEM_MODULES];
bool CleaningJobActive = false, JoggingJobActive = false;
char ErrorMsg[100];
@@ -133,7 +134,8 @@ static ReturnCode ExitState(void *JobDetails);
//static ReturnCode (* state[])(void *JobDetails) = { IdleState, ValidateState, PrepareState, PrintState, CleanState};
void AbortJob(char *Msg);
void HandleJobEnd(JobEndReasonEnum JobEndReason);
-
+uint32_t BtsrSaveParamsToEeprom(BTSRParameters *BtsrPrameters);
+uint32_t BtsrReadParamsFromEeprom(BTSRParameters *BtsrPrameters);
typedef enum
{
@@ -483,6 +485,9 @@ uint32_t ThreadJoggingFunc(int speed)
Tspool->has_limitswitchstartpointoffset = false;
Ticket.spool = Tspool;
Ticket.threadparameters = &SavedThreadParameters;
+#ifdef UFEEDER_BTSR
+ BtsrReadParamsFromEeprom(Ticket.btsrparameters);
+#endif
CurrentJob = &Ticket;
InternalWindingConfigMessage(Tspool);
JoggingJobActive = true;
@@ -681,6 +686,9 @@ uint32_t ThreadCleaningJob(int speed)
Tspool->has_limitswitchstartpointoffset = false;
Ticket.spool = Tspool;
Ticket.threadparameters = &SavedThreadParameters;
+#ifdef UFEEDER_BTSR
+ BtsrReadParamsFromEeprom(Ticket.btsrparameters);
+#endif
CurrentJob = &Ticket;
job_length = CurrentJob->length + dryerbufferMeters;
@@ -923,7 +931,7 @@ void Stub_AbortJobRequest(MessageContainer* requestContainer)
//********************************************************************************************************************
void JobRequestFunc(MessageContainer* requestContainer)
{
- uint32_t status = NOT_SUPPORTED;
+ uint32_t rc, status = NOT_SUPPORTED;
MessageContainer responseContainer;
uint8_t* container_buffer;
ErrorCode error = ERROR_CODE__NONE;
@@ -1029,7 +1037,16 @@ void JobRequestFunc(MessageContainer* requestContainer)
Report("Save job cleaning parameters", __FILE__, __LINE__, CleaningParameters->cleanerflow, RpWarning, CleaningParameters->archeadcleaningmotorspeed, 0);
}
+ if (Ticket->btsrparameters)
+ {
+ ///store last updated BTSR parameters
+ if (BtsrPrameters == NULL)
+ BtsrPrameters = my_malloc(sizeof(BTSRParameters));
+ memcpy(BtsrPrameters, Ticket->btsrparameters, sizeof(BTSRParameters));
+ rc = BtsrSaveParamsToEeprom(BtsrPrameters);
+ Report("Save job BTSR parameters", __FILE__, __LINE__, BtsrPrameters->feedingtension, RpWarning, rc, 0);
+ }
}
else
{
@@ -1431,6 +1448,44 @@ uint32_t ResumeCurrentJobRequestFunc(MessageContainer* requestContainer)
return OK;
}
+uint32_t BtsrSaveParamsToEeprom(BTSRParameters *BtsrPrameters)
+{
+ uint32_t status = 0;
+
+ status |= MCU_E2PromProgram(EEPROM_BTSR_FEEDING_TENSION, (uint32_t)(BtsrPrameters->feedingtension*10));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_TYPE, (uint32_t)(BtsrPrameters->btsryarntype));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_APPLICATION, (uint32_t)(BtsrPrameters->btsrapplicationtype));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_LENGTH_OFFSET, (uint32_t)(BtsrPrameters->threadlengthfactor));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_TENSION_ERROR, (uint32_t)(BtsrPrameters->tensionerror*10));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_SPOOL_TENSION, (uint32_t)(BtsrPrameters->spooltension));
+ status |= MCU_E2PromProgram(EEPROM_BTSR_EXIT_TENSION, (uint32_t)(BtsrPrameters->exittension));
+ return status;
+}
+
+uint32_t BtsrReadParamsFromEeprom(BTSRParameters *BtsrPrameters)
+{
+ uint32_t status = 0;
+ uint32_t feedingtension, type, application, lengthoffset;
+ uint32_t tensionerror, spooltension, exittension;
+
+ status |= MCU_E2PromRead(EEPROM_BTSR_FEEDING_TENSION, &feedingtension);
+ BtsrPrameters->feedingtension = ((double)feedingtension)/10;
+ status |= MCU_E2PromRead(EEPROM_BTSR_TYPE, &type);
+ BtsrPrameters->btsryarntype = type;
+ status |= MCU_E2PromRead(EEPROM_BTSR_APPLICATION, &application);
+ BtsrPrameters->btsrapplicationtype = application;
+ status |= MCU_E2PromRead(EEPROM_BTSR_LENGTH_OFFSET, &lengthoffset);
+ BtsrPrameters->threadlengthfactor = lengthoffset;
+ status |= MCU_E2PromRead(EEPROM_BTSR_TENSION_ERROR, &tensionerror);
+ BtsrPrameters->tensionerror = ((double)tensionerror)/10;
+ status |= MCU_E2PromRead(EEPROM_BTSR_SPOOL_TENSION, &spooltension);
+ BtsrPrameters->spooltension = spooltension;
+ status |= MCU_E2PromRead(EEPROM_BTSR_EXIT_TENSION, &exittension);
+ BtsrPrameters->exittension = exittension;
+ Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(feedingtension),RpWarning,(int)(tensionerror),(int)exittension);
+ Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(application),RpWarning,(int)(type),(int)lengthoffset);
+ return status;
+}
void StartJob(void *JobDetails)
{