aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-07-06 16:52:05 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-07-06 16:52:05 +0300
commita52e0e1b4f0b981af32427cb7b2044f5cedd9829 (patch)
tree7ac5ec2ac6ceb7d8f4621cc693822a56ffce855b /Software
parentcfa09b21e9ea44b2276d261238b6c999bdebc4c3 (diff)
downloadTango-a52e0e1b4f0b981af32427cb7b2044f5cedd9829.tar.gz
Tango-a52e0e1b4f0b981af32427cb7b2044f5cedd9829.zip
Version 1.4.6.35 - Pack Mid alpha
============================ Arc head - activate arc heaters gradually stop FPGA Reinit after 20 trials Head cleaning - move actuators (with stub - 0xAD7) fix RML PID support head open prevent job - (with stub - 0xAD6) add stub to overrule cone missing - 0xAD8
Diffstat (limited to 'Software')
-rw-r--r--Software/Embedded_SW/Embedded/.cproject2
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c88
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/buttons.c28
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS.h4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c81
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c24
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c13
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c170
-rw-r--r--Software/Embedded_SW/Embedded/Software Release Notes.txt9
-rw-r--r--Software/Stubs Collection/stubs/technician view files/new head.tpf360
21 files changed, 505 insertions, 321 deletions
diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject
index 26bee6013..388976f56 100644
--- a/Software/Embedded_SW/Embedded/.cproject
+++ b/Software/Embedded_SW/Embedded/.cproject
@@ -441,7 +441,7 @@
</toolChain>
</folderInfo>
<sourceEntries>
- <entry excluding="Drivers/I2C_Communication/Head_Card/ADC/Head_ADC_old.c|EmbParam.cfg|JigCommands.c|PWM.c|USBCDCD.c|Message.c|Pin_config.c|src|Configuration.c|SlowMotors.c|Timer.c|Communication.c|FastMotors.c|ADCUtils.c|Drivers/L6470|Pin.c|ADCLogger.c|Flashstore.c|Profile.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ <entry excluding="EmbParam.cfg|Drivers/Uart_Comm/Uart.c|JigCommands.c|PWM.c|USBCDCD.c|Message.c|Pin_config.c|src|Configuration.c|SlowMotors.c|Timer.c|Communication.c|FastMotors.c|ADCUtils.c|Drivers/L6470|Pin.c|ADCLogger.c|Flashstore.c|Profile.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index 4b1fec423..beeb86c92 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,7 +20,7 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,4,6,34};
+TangoVersion_t _gTangoVersion = {1,4,6,35};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
index a5c9376d2..d73fbcdba 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
@@ -13,6 +13,7 @@
bool HeaterMap[HEADCARD_HIT_MIXER+1] = {0};
+uint8_t OT_Heater_Index = 0;IN_Heater_Index = 0;
uint32_t Activate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID)
{
uint32_t status= OK;
@@ -40,15 +41,15 @@ uint32_t Deactivate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID)
HeaterMap[Head_Heater_ID] &= ~(1 << Head_Heater_ID);
if(Head_Heater_ID <= HEADCARD_UPPER_HIT_IN4)
- {
- Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID);
- }
- else if(Head_Heater_ID <= HEADCARD_HIT_MIXER)
- {
- Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16));
- }
- else
- status = ERROR;
+ {
+ Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID);
+ }
+ else if(Head_Heater_ID <= HEADCARD_HIT_MIXER)
+ {
+ Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16));
+ }
+ else
+ status = ERROR;
return status;
}
@@ -66,6 +67,38 @@ uint32_t Write_Head_Card_Heaters_Commands()
Report(" Write_Head_Card_Heaters",__FILE__,__LINE__,255,RpWarning,0,0);
if (status)
ReadFailures++;
+ if ((IN_Heater_Index)&&(IN_Heater_Index<=4))
+ {
+ switch (IN_Heater_Index)
+ {
+ case 2:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = true;
+ break;
+ case 3:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = true;
+ break;
+ case 4:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = true;
+ break;
+ }
+ IN_Heater_Index++;
+ }
+ if ((OT_Heater_Index)&&(OT_Heater_Index<=4))
+ {
+ switch (OT_Heater_Index)
+ {
+ case 2:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = true;
+ break;
+ case 3:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = true;
+ break;
+ case 4:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = true;
+ break;
+ }
+ OT_Heater_Index++;
+ }
return status;
}
@@ -137,34 +170,65 @@ uint32_t HeadCard_Control_Heaters(HEADCARD_HEATERS_ENUM Heater_ID, bool Pwr_Cmd)
break;
case HEADCARD_UPPER_HIT_IN1:
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN1 = Pwr_Cmd;
+ IN_Heater_Index = (Pwr_Cmd)?1:0;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN2:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN3:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false;
+ //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN4:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false;
+ //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
break;
case HEADCARD_UPPER_HIT_OUT1:
Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT1 = Pwr_Cmd;
+ OT_Heater_Index = (Pwr_Cmd)?1:0;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT2:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT3:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT4:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
break;
case HEADCARD_HIT_MIXER:
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index 8618524d9..211d7cbef 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -635,9 +635,9 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam)
calculated_speed = volt + 100;
if (calculated_speed < (volt - 100))
calculated_speed = volt - 100;*/
- /*usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d",
+ usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d",
(int)(measuredParam*100),(int)(avreageSampleValue*100),(int)(setParam*100),(int)(WHS_ControlData.m_calculatedError*100),(int)(WHS_ControlData.m_integral*100),(int)(calculated_speed));
- Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0);*/
+ Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0);
/*if (fabs(WHS_ControlData.m_calculatedError)>(WHS_ControlData.m_params.MAX/2))
{
close_loop_time = 1;
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 5f9c3130b..dc15202a6 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -658,7 +658,6 @@ uint32_t MillisecLowLoop(uint32_t tick)
#ifndef EVALUATION_BOARD
Read_Buttons_Reg();
#endif
- //Ink_Cart_Led();
///////////////////////////////////////////////////////////////////
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index 0f9848ba1..26fba0194 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -170,6 +170,7 @@ void ControlStop(void)
ControlRestart = false;
ADCAcquireStop();
}
+int FPGA_ReInit_Count = 0; ///avoid too many reinitializations of motors as happens when FPGA is corrupted
uint32_t ControlActivityLed( uint32_t Parameter1)
{
static bool flag = false;
@@ -192,11 +193,14 @@ uint32_t ControlActivityLed( uint32_t Parameter1)
SendJobProgress(0.0,0,false, "Hardware Failure Error");
AbortJob("FPGA Watchdog Error");
}
- ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
+ if (FPGA_ReInit_Count++<20)
+ {
+ ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
- ACTIVITY_GREEN_LED_ON;
- FPGA_SetMotorsInit();
- Motor_ReconfigAllMotors();
+ ACTIVITY_GREEN_LED_ON;
+ FPGA_SetMotorsInit();
+ Motor_ReconfigAllMotors();
+ }
}
}
else
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 6d4d1c668..e2ade95c3 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -554,7 +554,6 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
}
ControlStart();
AlarmHandlingStart();
- //ThreadInitialTestStub(request);
GeneralHwReady = true;
STATUS_RED_LED_OFF;
return OK;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
index f81cfb88f..328ff3203 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
@@ -691,34 +691,6 @@ return OK;
return OK;
}*/
-void Ink_Cart_Led()//temporary for ITMA
-{
- if(Is_Cartridge_Present(CART_1) == true)
- {
- Pannel_Leds( CART_1, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_1, MODE_OFF);
- }
- if(Is_Cartridge_Present(CART_2) == true)
- {
- Pannel_Leds( CART_2, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_2, MODE_OFF);
- }
- if(Is_Cartridge_Present(CART_3) == true)
- {
- Pannel_Leds( CART_3, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_3, MODE_OFF);
- }
-}
-
void test_avi()
{
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
index 41e729b9b..647797b69 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
@@ -28,6 +28,9 @@ extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS];
extern bool HomingActive[MAX_SYSTEM_DISPENSERS];
extern bool PrimingActive[MAX_SYSTEM_DISPENSERS];
+extern uint32_t LeftRockerSpeed;
+extern uint32_t RightRockerSpeed;
+
uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue);
/*typedef struct
@@ -45,6 +48,7 @@ void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps);
//uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback);
+uint32_t IDS_Cleaning_Move_Actuators(void);
uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed);
uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback);
uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
index bdde05b43..8f10a0e5d 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
@@ -13,11 +13,73 @@
#include "PMR/Hardware/Hardwaremotor.pb-c.h"
#include "PMR/Hardware/HardwareDispenser.pb-c.h"
#include "StateMachines/Printing/printingSTM.h"
+#include <Drivers/I2C_Communication/I2C_Task.h>
+
#include "drivers/motors/motor.h"
#include "drivers/valves/valve.h"
+#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h"
int SaveLeftRockerSpeed = 50, SaveRightRockerSpeed = 50;
+typedef enum
+{
+ CleaningStageIdle,
+ CleaningStageActuatorUp = 1,
+ CleaningStageDelay1,
+ CleaningStageActuatorDown,
+ CleaningStageDelay2,
+}CleaningStageEnum;
+
+/*
+ *Cleaning sequence:
+
+
+t up – time actuator goes up
+t delay1 – time actuator stays in position (up position – not limit switch)
+Down to limit - actuator goes to lower limit switch
+t delay2 – time actuator stays in lower limit switch position
+
+Values for start:
+t up – 300 msec
+t delay1 – 500 msec
+t delay2 – 2 sec
+
+ */
+
+CleaningStageEnum CleaningStage = CleaningStageIdle;
+int CleaningStageCounter = 0;
+int Tup = 4,Tdelay1 = 9,Tdelay2 = 29;
+
+uint32_t IDS_Cleaning_Move_Actuators()
+{
+ if(Head_Type != HEAD_TYPE_SYLKO)
+ return OK;
+ if (CleaningStageCounter == 1)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,true);
+ Report("IDS_Cleaning_Move_ActuatorUp", __FILE__, __LINE__, 1, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tup)
+ {
+ Trigger_Head_Actuators_Disable();
+ Report("IDS_Cleaning_Stop_Actuator", __FILE__, __LINE__, Tup, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tdelay1)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ Report("IDS_Cleaning_MoveDown", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tdelay2)
+ {
+ CleaningStageCounter = 0;
+ Report("IDS_Cleaning_Stop_delay", __FILE__, __LINE__, Tdelay2, RpWarning, CleaningStageCounter, 0);
+ }
+
+
+ CleaningStageCounter++;
+
+ return OK;
+}
uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed)
{
uint32_t status = OK;
@@ -34,17 +96,25 @@ uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed)
uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback)
{
uint32_t status = OK;
- status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout);
- status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout);
- Report("IDS_Cleaning_Center_And_Stop_Rockers", __FILE__, __LINE__, timeout, RpWarning, 123456, 0);
+ //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout);
+ //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout);
+ Trigger_Head_Actuators_Disable();
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ CleaningStageCounter = 0;
+ CleaningStage = CleaningStageIdle;
+ Report("IDS_Cleaning_Center_And_Stop_Rockers actuator down", __FILE__, __LINE__, timeout, RpWarning, 123456, 0);
return status;
}
uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback)
{
uint32_t status = OK;
+ Tup = LeftRockerSpeed/100;
+ Tdelay1 = LeftRockerSpeed%100;
+ Tdelay2 = RightRockerSpeed;
status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANER_DISPENSER, dispenserSpeed, callback);
Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, dispenserSpeed, 0);
+ Report("IDS_Cleaning parameters", __FILE__, Tup*100, Tdelay1*100, RpWarning, Tdelay2*100, 0);
return status;
@@ -54,6 +124,11 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback)
uint32_t status = OK;
status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANER_DISPENSER,callback);
Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, status, 0);
+ if(Head_Type == HEAD_TYPE_SYLKO)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ Report("IDS_Cleaning_MoveDown cleaning stop", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0);
+ }
return status;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index b3f21e187..831fa18cd 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -45,6 +45,8 @@ extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS];
//extern DispenserData IDSDispenserData;
extern DispenserRunningData **dispenserdata;
+extern bool ActuatorsCleaningSequence;
+
extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS];
extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS];
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index a76453f95..b4442c996 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -51,6 +51,7 @@ HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = {
JobUploadStrategy uploadstrategy = JOB_UPLOAD_STRATEGY__Default;
bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true};
bool IDS_Active = false;
+bool ActuatorsCleaningSequence = true;
bool Special_Dispensers = false;
/******************** STRUCTURES AND ENUMs ********************************************/
@@ -78,7 +79,7 @@ int lInterSegmentLength = 0;
uint32_t InterSegmentStartRocking = 0;
uint32_t InterSegmentCenterRockers = 0;
uint32_t LeftRockerSpeed = 20;
- uint32_t RighttRockerSpeed = 20;
+ uint32_t RightRockerSpeed = 20;
uint32_t CleaningDispenserSpeed = 40;
uint32_t InterSegmentStartWFCFDispensers;
uint32_t WFCF = 80;
@@ -115,7 +116,7 @@ void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, doubl
if ( ids_leftcleaningmotorspeed)
LeftRockerSpeed = ids_leftcleaningmotorspeed;
if ( ids_rightcleaningmotorspeed)
- RighttRockerSpeed = ids_rightcleaningmotorspeed;
+ RightRockerSpeed = ids_rightcleaningmotorspeed;
Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,CleaningDispenserSpeed,RpWarning,(int)LeftRockerSpeed,0);
Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0);
@@ -1089,6 +1090,12 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
Report("Start cleaning rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
//IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed);
}*/
+ if (( InterSegmentStartSprayCleaner )&&
+ ((InterSegmentStepsCount>InterSegmentStartSprayCleaner)&&(InterSegmentStepsCount<(lInterSegmentLength-InterSegmentCenterRockers) )))
+ {
+ if (ActuatorsCleaningSequence)
+ IDS_Cleaning_Move_Actuators();
+ }
if (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == (lInterSegmentLength-InterSegmentStepsCount)))
{
Report("Stop spray and center rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index cbdab01d1..fd9c5b404 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -500,6 +500,30 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
+ if(request->amount == 0xAD6) //Set skip open lids
+ {
+ LOG_ERROR(request->delay,"Set SkipOpenLids");
+ SkipOpenLids = request->delay;
+ response.progress = SkipOpenLids;
+ response.has_progress = true;
+ }
+ else
+ if(request->amount == 0xAD7) //Set actuators cleaning sequence
+ {
+ LOG_ERROR(request->delay,"Set actuators cleaning sequence");
+ ActuatorsCleaningSequence = request->delay;
+ response.progress = ActuatorsCleaningSequence;
+ response.has_progress = true;
+ }
+ else
+ if(request->amount == 0xAD8) //Set ignore cone missing
+ {
+ LOG_ERROR(request->delay,"Set ignore cone missing");
+ IgnoreConeMissing = request->delay;
+ response.progress = IgnoreConeMissing;
+ response.has_progress = true;
+ }
+ else
if((request->amount == 0x01) && ((request->delay &0x010000) == 0x010000)) //change mode powerset01
{
response.progress = Power_Step_01_Mode(((request->delay &0x00FF00)>>8), request->delay &0x0000FF);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
index d1d23598f..3a7045a6e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
@@ -76,7 +76,6 @@ extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM];
uint32_t InternalWinderConfigMessage(HardwareWinder* request);
uint32_t MotorsConfigMessage( HardwareConfiguration* HW_request);
uint32_t InternalWindingConfigMessage(JobSpool* request);
-uint32_t ThreadInitialTestStub(HardwareMotor * request);
uint32_t MotorPidRequestMessage(HardwarePidControl* request);
void SetKeepWindingCone(bool value);
void SetWinderBackToBaseTime(uint32_t value);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index 2b65ca806..f5bc45d85 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -204,6 +204,7 @@
strcpy(LoadErrorMsg,"Thread_Load_Reduce_Heat failed");
LoadStatus = ERROR;
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
else
{
@@ -300,6 +301,7 @@
LoadStatus = ERROR;
ThreadLoadingReport();
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
else
{
@@ -544,6 +546,7 @@
LoadStatus = ERROR;
ThreadLoadingReport();
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
}
@@ -647,6 +650,7 @@
Report("Total Feeder load",__FILE__,__LINE__,dryerbufferCentimeters,RpMessage,TotalLoadedLen,0);
ThreadLoadingReport();
+ //ThreadLoadButton(LoadStages);
}
return OK;
}
@@ -857,6 +861,7 @@
LoadStatus = ERROR;
TryAgain = true;
ThreadLoadingReport();
+ //ThreadLoadButton(LoadStages);
}
return OK;
}
@@ -971,7 +976,7 @@
uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue)
{
REPORT_MSG(ReadValue,"ThreadLoadStateMachine");
- ThreadLoaded();
+ //ThreadLoaded();
ThreadLoadingReport();
if (LoadStages!=ReadValue)
@@ -1089,7 +1094,7 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue)
Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0);
ThreadLoadStateMachine(LoadStages);
}
- else
+ else if (SecondTry == true)
{
SecondTry = false;
Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index 80ca05cb7..92b953db5 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -54,7 +54,7 @@ double ScrewRunningTime = 0;
uint32_t ScrewNumberOfSteps = 0; //holds the current number of steps for the next screw run - will be used to build the cone
bool SCREW_TimerActivated = false;
uint32_t ScrewControlId = 0xFF;
-
+bool IgnoreConeMissing = false;
static bool KeepWindingCone = false;
@@ -156,10 +156,13 @@ uint32_t Winder_Prepare(void *JobDetails)
REPORT_MSG(LIMIT, "No cone in winder");
if (Is_PP_Machine())
{
- JobEndReason = JOB_THREAD_BREAK;
- PrepareReady(Module_Winder,ModuleFail);
- AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true);
- return ERROR;
+ if (IgnoreConeMissing == false)
+ {
+ JobEndReason = JOB_THREAD_BREAK;
+ PrepareReady(Module_Winder,ModuleFail);
+ AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true);
+ return ERROR;
+ }
}
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
index 4081b53f2..4339c5312 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
@@ -24,6 +24,7 @@ typedef enum threadMotorsEnum
extern double TotalProcessedLength;
extern double PoolerTotalProcessedLength;
extern int SecondFeederCorrection;
+extern bool SkipOpenLids,IgnoreConeMissing;
void ThreadSetBreakSensorLimit(int limit);
@@ -37,7 +38,6 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId);
uint32_t ThreadSegmentState(void *SegmentDetails, int SegmentId);
uint32_t ThreadDistanceToSpoolState(void);
uint32_t ThreadEndState();
-uint32_t ThreadInitialTestStub();
bool Set_Thread_Rockers_Bypass (int value);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
index 760a0726b..e1f887303 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
@@ -112,8 +112,6 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest)
{
IDS_Dispenser_Init(Motor_i-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1);
}
-// if (Motor_i == MOTOR_RDRIVING)
-// ThreadInitialTestStub(request);
}
return status;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index d762e507f..42a56ae8a 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -423,7 +423,67 @@ uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue)
}
return OK;
}
+uint16_t BreakSensorCounter = 0;
+uint16_t BreakSensorLatchCounter = 0;
+char TMessage[150];
+uint32_t checkBreakSensor(uint32_t index)
+{
+ if (BreakSensorenabled == true)
+ {
+ if (JobCounter > eOneSecond)
+ {
+ if (ReadBreakSensor()==ERROR)
+ {
+ BreakSensorCounter++;
+ BreakSensorLatchCounter++;
+ if (BreakSensorCounter>=BreakSensordebouncetimemilli)
+ {
+ //consider applying the debouce parameters later
+ usnprintf(TMessage, 60, "ReadBreakSensor Error");
+ //BreakSensordebouncetimemilli
+ JobEndReason = JOB_THREAD_BREAK;
+ ThreadControlActive = false;
+ SendJobProgress(0.0,0,false, TMessage);
+ SendSegmentFail();
+ //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
+ //EndState(CurrentJob,"ReadBreakSensor Error" );
+ ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ return ERROR;
+ } //passed limit
+ }//ReadBreakSensor()==ERROR
+ else //reset counter - we are looking for consequent calls
+ {
+ if (BreakSensorCounter)
+ {
+ ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ }
+ BreakSensorCounter = 0;
+ }
+ if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3))
+ {
+ BreakSensorCounter++;
+ BreakSensorLatchCounter++;
+ if (BreakSensorCounter>=BreakSensordebouncetimemilli)
+ {
+ //consider applying the debouce parameters later
+ usnprintf(TMessage, 60, "thread speed too low");
+ JobEndReason = JOB_THREAD_BREAK;
+ ThreadControlActive = false;
+ SendJobProgress(0.0,0,false, TMessage);
+ SendSegmentFail();
+ //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
+ //EndState(CurrentJob,"ReadBreakSensor Error" );
+ ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ return ERROR;
+ }
+ }
+
+ }
+ }
+ return OK;
+
+}
int controlIndex = 0;
bool keepdata = true;
int32_t KeepReadValue = 0;
@@ -477,10 +537,7 @@ void testDancersControl()
}
#endif
int MotorFailedSample[MAX_THREAD_MOTORS_NUM] = {0,0,0,0,0};
-char TMessage[150];
//char time[150];
-uint16_t BreakSensorCounter = 0;
-uint16_t BreakSensorLatchCounter = 0;
bool FirstCalcInJob = true;
uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
{
@@ -510,6 +567,11 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
index = IfIndex&0xFF;
+ if (index == POOLER_MOTOR) //move break sensor handling up to ensure handling even if tiing control is > 1 msec
+ {
+ if (checkBreakSensor(index) == ERROR)
+ return OK;
+ }
if (MotorTiming[index]>1)
{
MotorTimer[index]++;
@@ -571,61 +633,6 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
avreageSampleValue += MotorSamples[index][i];
avreageSampleValue = avreageSampleValue / (int)MotorsControl[index].pvinputfilterfactormode;
- if (BreakSensorenabled == true)
- {
- if (index == POOLER_MOTOR)
- {
- if (JobCounter > eOneSecond)
- {
- if (ReadBreakSensor()==ERROR)
- {
- BreakSensorCounter++;
- BreakSensorLatchCounter++;
- if (BreakSensorCounter>=BreakSensordebouncetimemilli)
- {
- //consider applying the debouce parameters later
- usnprintf(TMessage, 60, "ReadBreakSensor Error");
- //BreakSensordebouncetimemilli
- JobEndReason = JOB_THREAD_BREAK;
- ThreadControlActive = false;
- SendJobProgress(0.0,0,false, TMessage);
- SendSegmentFail();
- //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
- //EndState(CurrentJob,"ReadBreakSensor Error" );
- ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- return OK;
- } //passed limit
- }//ReadBreakSensor()==ERROR
- else //reset counter - we are looking for consequent calls
- {
- if (BreakSensorCounter)
- {
- ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- }
- BreakSensorCounter = 0;
- }
- if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3))
- {
- BreakSensorCounter++;
- BreakSensorLatchCounter++;
- if (BreakSensorCounter>=BreakSensordebouncetimemilli)
- {
- //consider applying the debouce parameters later
- usnprintf(TMessage, 60, "thread speed too low");
- JobEndReason = JOB_THREAD_BREAK;
- ThreadControlActive = false;
- SendJobProgress(0.0,0,false, TMessage);
- SendSegmentFail();
- //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
- //EndState(CurrentJob,"ReadBreakSensor Error" );
- ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- return OK;
- }
- }
-
- }
- }
- }
//Stop Execution if the dancer moves too much
if ((abs(avreageSampleValue)> DancerStopActivityLimit[index])&&(JobCounter > eOneSecond))
@@ -783,15 +790,6 @@ double ThreadGetMotorCalculatedError(int DancerId)
}
//********************************************************************************************************************
-uint32_t ThreadInitialTestStub(HardwareMotor * request)
-{
-
-
- //MotorsConfigMessage(request);
- ThreadPrepareState(request);
- ThreadPreSegmentState(request,0);
- return OK;
-}
uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
{
if (ThreadParams == NULL)
@@ -799,21 +797,21 @@ uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
return OK;
}
if(ThreadParams->feederp)
- MotorControlConfig[FEEDER_MOTOR].m_params.Kd = ThreadParams->feederp;
+ MotorControlConfig[FEEDER_MOTOR].m_params.Kp = ThreadParams->feederp;
if(ThreadParams->feederi)
MotorControlConfig[FEEDER_MOTOR].m_params.Ki = ThreadParams->feederi;
if(ThreadParams->feederd)
MotorControlConfig[FEEDER_MOTOR].m_params.Kd = ThreadParams->feederd;
if(ThreadParams->pullerp)
- MotorControlConfig[POOLER_MOTOR].m_params.Kd = ThreadParams->pullerp;
+ MotorControlConfig[POOLER_MOTOR].m_params.Kp = ThreadParams->pullerp;
if(ThreadParams->pulleri)
MotorControlConfig[POOLER_MOTOR].m_params.Ki = ThreadParams->pulleri;
if(ThreadParams->pullerd)
MotorControlConfig[POOLER_MOTOR].m_params.Kd = ThreadParams->pullerd;
if(ThreadParams->winderp)
- MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderp;
+ MotorControlConfig[WINDER_MOTOR].m_params.Kp = ThreadParams->winderp;
if(ThreadParams->winderi)
MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi;
if(ThreadParams->winderd)
@@ -951,7 +949,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
return status;
}
//********************************************************************************************************************
- uint32_t ThreadPrepareState(void *JobDetails)
+bool SkipOpenLids = true;
+uint32_t ThreadPrepareState(void *JobDetails)
{
int Motor_i,i, HW_Motor_Id, Pid_Id;
JobTicket* JobTicket = JobDetails;
@@ -1016,22 +1015,30 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
//return ERROR;
}*/
- if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false))
+// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false))
+ if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) != LIMIT)&&(JoggingJobActive == false))
{
if(Head_Type != HEAD_TYPE_STAPLE_SPUN)
{
ReportWithPackageFilter(ThreadFilter,"Dyeing head is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpError,LIMIT,0);
- JobEndReason = JOB_LIDS_OPEN;
- PrepareReady(Module_Thread,ModuleFail);
- return ERROR;
+ if (SkipOpenLids == false)
+ {
+ JobEndReason = JOB_LIDS_OPEN;
+ PrepareReady(Module_Thread,ModuleFail);
+ return ERROR;
+ }
}
}
- if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false))
+// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false))
+ if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) != LIMIT)&&(JoggingJobActive == false))
{
ReportWithPackageFilter(ThreadFilter,"Dryer lid is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpError,LIMIT,0);
- JobEndReason = JOB_LIDS_OPEN;
- PrepareReady(Module_Thread,ModuleFail);
- return ERROR;
+ if (SkipOpenLids == false)
+ {
+ JobEndReason = JOB_LIDS_OPEN;
+ PrepareReady(Module_Thread,ModuleFail);
+ return ERROR;
+ }
}
//start thread control for all motors
@@ -1057,6 +1064,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
MotorControlConfig[Motor_i].m_preError = 0;
MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage
+ HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!!
+
temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001;
MotorTiming[Motor_i] = (int)temp_dt;
if (MotorTiming[Motor_i])
@@ -1068,7 +1077,7 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++)
{
//if (Motor_i == DRYER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled
- MotorSamples[Motor_i][i] = Control_Read_Dancer_Position(ThreadMotorIdToDancerId[Motor_i],0); //reset the samples value for control beginning
+ MotorSamples[Motor_i][i] = 0;
// else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR))
// MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint;
//MotorSpeedSamples[Motor_i][i] = 0;
@@ -1148,7 +1157,6 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
if (Motor_i == ThreadMotorIdToMotorId[DRYER_MOTOR]) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled
continue;
}
- HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!!
#ifdef TEST_PID_THREAD
testDancersControl();
diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt
index a090a9612..8857b69eb 100644
--- a/Software/Embedded_SW/Embedded/Software Release Notes.txt
+++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt
@@ -1,3 +1,12 @@
+Embedded SW Release note - Version 1.4.6.35 - Pack Mid alpha
+=============================================================
+Arc head - activate arc heaters gradually
+stop FPGA Reinit after 20 trials
+Head cleaning - move actuators (with stub - 0xAD7)
+fix RML PID support
+head open prevent job - (with stub - 0xAD6)
+add stub to overrule cone missing - 0xAD8
+
Embedded SW Release note - Version 1.4.6.34 - Pack 2+
=============================================================
Validate IFS and cartridge location on manual waste handling - bug #3033
diff --git a/Software/Stubs Collection/stubs/technician view files/new head.tpf b/Software/Stubs Collection/stubs/technician view files/new head.tpf
index 25215919f..2ae59d2ed 100644
--- a/Software/Stubs Collection/stubs/technician view files/new head.tpf
+++ b/Software/Stubs Collection/stubs/technician view files/new head.tpf
@@ -27,7 +27,7 @@
<HeaterState>
<HeaterType>DryerAirHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>69.85</CurrentValue>
+ <CurrentValue>176.1</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -46,8 +46,8 @@
<HeaterState>
<HeaterType>DryerMainHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>92.97</CurrentValue>
- <IsActive>false</IsActive>
+ <CurrentValue>208.58999999999998</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
@@ -65,8 +65,8 @@
<HeaterState>
<HeaterType>DryerSecondaryHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>92.94</CurrentValue>
- <IsActive>true</IsActive>
+ <CurrentValue>209.10999999999999</CurrentValue>
+ <IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
@@ -84,7 +84,7 @@
<HeaterState>
<HeaterType>HeaterZone3</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>39.55</CurrentValue>
+ <CurrentValue>96.71</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -103,7 +103,7 @@
<HeaterState>
<HeaterType>HeaterZone2</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>37.29</CurrentValue>
+ <CurrentValue>88.699999999999989</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -122,7 +122,7 @@
<HeaterState>
<HeaterType>HeaterZone1</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>34.27</CurrentValue>
+ <CurrentValue>76.08</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -141,7 +141,7 @@
<HeaterState>
<HeaterType>MixerHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>54.669999999999995</CurrentValue>
+ <CurrentValue>78.37</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -179,7 +179,7 @@
<HeaterState>
<HeaterType>HeaterZone5</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>43.389999999999993</CurrentValue>
+ <CurrentValue>0</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -289,7 +289,7 @@
<HeaterState>
<HeaterType>HeaterZone7</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>50.449999999999996</CurrentValue>
+ <CurrentValue>6.59</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -559,7 +559,7 @@
<HeaterState>
<HeaterType>HeadCoverHeater1</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>283.75</CurrentValue>
+ <CurrentValue>174.69</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -578,7 +578,7 @@
<HeaterState>
<HeaterType>HeadCoverHeater2</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>283.75</CurrentValue>
+ <CurrentValue>174.95999999999998</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -654,44 +654,44 @@
<ColorNumber>-1</ColorNumber>
</TechItem>
<TechItem xsi:type="ProcessParametersItem">
- <ID>38e5d1ac-40a5-4c5f-822c-51813cb15b7b</ID>
- <Left>31</Left>
- <Top>144.3584070796461</Top>
- <Width>310</Width>
- <Height>315.12831858407088</Height>
+ <ID>d2e09fbf-2ac8-4c32-a4f5-45e50e305098</ID>
+ <Left>1016</Left>
+ <Top>821.96460176991263</Top>
+ <Width>361</Width>
+ <Height>233.95575221238948</Height>
<Angle>0</Angle>
<ColorNumber>-14774017</ColorNumber>
<ProcessParameters>
<ID>0</ID>
- <Guid>ce709f03-59be-410d-a928-e942c0c46ce3</Guid>
- <LastUpdated>2020-02-09T12:45:24.1272815Z</LastUpdated>
- <Name>Process parameters 6</Name>
- <DyeingSpeed>50</DyeingSpeed>
+ <Guid>9b265a7c-cc48-4c5a-abed-dfa8c8e3099f</Guid>
+ <LastUpdated>2020-02-09T13:11:03.3185652Z</LastUpdated>
+ <Name>Process parameters 2</Name>
+ <DyeingSpeed>0</DyeingSpeed>
<MinInkUptake>0</MinInkUptake>
<MaxInkUptake>0</MaxInkUptake>
<FeederTension>0</FeederTension>
- <PullerTension>5000</PullerTension>
- <WinderTension>5000</WinderTension>
- <MixerTemp>80</MixerTemp>
- <HeadZone1Temp>80</HeadZone1Temp>
- <HeadZone2Temp>90</HeadZone2Temp>
- <HeadZone3Temp>110</HeadZone3Temp>
- <HeadZone4Temp>120</HeadZone4Temp>
- <HeadZone5Temp>120</HeadZone5Temp>
- <HeadZone6Temp>135</HeadZone6Temp>
- <DryerAirFlow>7</DryerAirFlow>
- <DryerZone1Temp>190</DryerZone1Temp>
+ <PullerTension>0</PullerTension>
+ <WinderTension>0</WinderTension>
+ <MixerTemp>0</MixerTemp>
+ <HeadZone1Temp>0</HeadZone1Temp>
+ <HeadZone2Temp>0</HeadZone2Temp>
+ <HeadZone3Temp>0</HeadZone3Temp>
+ <HeadZone4Temp>0</HeadZone4Temp>
+ <HeadZone5Temp>0</HeadZone5Temp>
+ <HeadZone6Temp>0</HeadZone6Temp>
+ <DryerAirFlow>0</DryerAirFlow>
+ <DryerZone1Temp>100</DryerZone1Temp>
<DryerZone2Temp>0</DryerZone2Temp>
<DryerZone3Temp>0</DryerZone3Temp>
<DryerBufferLength>0</DryerBufferLength>
- <HeadAirFlow>12</HeadAirFlow>
+ <HeadAirFlow>0</HeadAirFlow>
<TableIndex>0</TableIndex>
- <HeadZone7Temp>135</HeadZone7Temp>
- <HeadZone8Temp>125</HeadZone8Temp>
- <HeadZone9Temp>135</HeadZone9Temp>
- <HeadZone10Temp>135</HeadZone10Temp>
- <HeadZone11Temp>140</HeadZone11Temp>
- <HeadZone12Temp>140</HeadZone12Temp>
+ <HeadZone7Temp>0</HeadZone7Temp>
+ <HeadZone8Temp>0</HeadZone8Temp>
+ <HeadZone9Temp>0</HeadZone9Temp>
+ <HeadZone10Temp>0</HeadZone10Temp>
+ <HeadZone11Temp>0</HeadZone11Temp>
+ <HeadZone12Temp>0</HeadZone12Temp>
<RBlowerFlow>0</RBlowerFlow>
<RBlowerTemp>0</RBlowerTemp>
<LBlowerFlow>0</LBlowerFlow>
@@ -700,159 +700,166 @@
</ProcessParameters>
<ParametersIndices>
<ParameterIndex>
- <Name>Process Parameters Tables Group Guid</Name>
+ <Name>Name</Name>
<Index>0</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Name</Name>
+ <Name>Dyeing Speed</Name>
<Index>1</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Table Index</Name>
+ <Name>Min Ink Uptake</Name>
<Index>2</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dyeing Speed</Name>
+ <Name>Max Ink Uptake</Name>
<Index>3</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Min Ink Uptake</Name>
+ <Name>Feeder Tension</Name>
<Index>4</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Max Ink Uptake</Name>
+ <Name>Puller Tension</Name>
<Index>5</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Feeder Tension</Name>
+ <Name>Winder Tension</Name>
<Index>6</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Puller Tension</Name>
+ <Name>Mixer Temp</Name>
<Index>7</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Winder Tension</Name>
+ <Name>Head Zone 1 Temp</Name>
<Index>8</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Mixer Temp</Name>
+ <Name>Head Zone 2 Temp</Name>
<Index>9</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 1 Temp</Name>
+ <Name>Head Zone 3 Temp</Name>
<Index>10</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 2 Temp</Name>
+ <Name>Head Zone 4 Temp</Name>
<Index>11</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 3 Temp</Name>
+ <Name>Head Zone 5 Temp</Name>
<Index>12</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 4 Temp</Name>
+ <Name>Head Zone 6 Temp</Name>
<Index>13</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 5 Temp</Name>
+ <Name>Dryer Air Flow</Name>
<Index>14</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 6 Temp</Name>
+ <Name>Dryer Zone 1 Temp</Name>
<Index>15</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 7 Temp</Name>
+ <Name>Dryer Zone 2 Temp</Name>
<Index>16</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 8 Temp</Name>
+ <Name>Dryer Zone 3 Temp</Name>
<Index>17</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 9 Temp</Name>
+ <Name>Dryer Buffer Length</Name>
<Index>18</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 10 Temp</Name>
+ <Name>Head Air Flow</Name>
<Index>19</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 11 Temp</Name>
+ <Name>Process Parameters Tables Group Guid</Name>
<Index>20</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 12 Temp</Name>
+ <Name>Table Index</Name>
<Index>21</Index>
</ParameterIndex>
- <ParameterIndex>
- <Name>St Sp Zone 1 Temp</Name>
- <Index>22</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>St Sp Zone 2 Temp</Name>
- <Index>23</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 1 Temp</Name>
- <Index>24</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 2 Temp</Name>
- <Index>25</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 3 Temp</Name>
- <Index>26</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Air Flow</Name>
- <Index>27</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Head Air Flow</Name>
- <Index>28</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Buffer Length</Name>
- <Index>29</Index>
- </ParameterIndex>
</ParametersIndices>
</TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>11f4748e-ed30-48d6-a08a-afeaa0277e2e</ID>
+ <Left>330</Left>
+ <Top>12.154867256637203</Top>
+ <Width>205</Width>
+ <Height>90.181415929203524</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1778C1A7-AFB5-42F9-9E00-E80D30D9FC02</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>dcf78507-ea09-4529-b635-ec1eeed31141</ID>
+ <Left>145</Left>
+ <Top>842.58849557522137</Top>
+ <Width>357</Width>
+ <Height>215.82743362831855</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FE0D0A56-5795-4C5A-8E09-939FBB35C441</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <Duration>1275</Duration>
+ <Min>0</Min>
+ <Max>100</Max>
+ <UseAutoRange>true</UseAutoRange>
+ <DecimalPlaces>2</DecimalPlaces>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>85762a06-25d4-457a-9974-7eab916d65c5</ID>
+ <Left>540</Left>
+ <Top>4.0486725663717493</Top>
+ <Width>205</Width>
+ <Height>90.181415929203524</Height>
+ <Angle>0</Angle>
+ <ItemGuid>055D0A38-09BD-490D-9852-12B06A4B22F2</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
<TechItem xsi:type="ProcessParametersItem">
- <ID>d2e09fbf-2ac8-4c32-a4f5-45e50e305098</ID>
- <Left>1016</Left>
- <Top>821.96460176991263</Top>
- <Width>361</Width>
- <Height>233.95575221238948</Height>
+ <ID>36f69103-89b6-4076-b8f3-bf4a0806ba05</ID>
+ <Left>18.250000000000007</Left>
+ <Top>132.59405940594058</Top>
+ <Width>317.70833333333337</Width>
+ <Height>392.24752475247521</Height>
<Angle>0</Angle>
<ColorNumber>-14774017</ColorNumber>
<ProcessParameters>
<ID>0</ID>
- <Guid>9b265a7c-cc48-4c5a-abed-dfa8c8e3099f</Guid>
- <LastUpdated>2020-02-09T13:11:03.3185652Z</LastUpdated>
- <Name>Process parameters 2</Name>
- <DyeingSpeed>0</DyeingSpeed>
+ <Guid>0025b28d-1475-4af2-b50e-ecc344c3e43a</Guid>
+ <LastUpdated>2020-07-05T08:17:42.9870702Z</LastUpdated>
+ <Name>Process parameters 4</Name>
+ <DyeingSpeed>50</DyeingSpeed>
<MinInkUptake>0</MinInkUptake>
<MaxInkUptake>0</MaxInkUptake>
<FeederTension>0</FeederTension>
<PullerTension>0</PullerTension>
<WinderTension>0</WinderTension>
- <MixerTemp>0</MixerTemp>
- <HeadZone1Temp>0</HeadZone1Temp>
- <HeadZone2Temp>0</HeadZone2Temp>
- <HeadZone3Temp>0</HeadZone3Temp>
+ <MixerTemp>80</MixerTemp>
+ <HeadZone1Temp>80</HeadZone1Temp>
+ <HeadZone2Temp>90</HeadZone2Temp>
+ <HeadZone3Temp>100</HeadZone3Temp>
<HeadZone4Temp>0</HeadZone4Temp>
<HeadZone5Temp>0</HeadZone5Temp>
<HeadZone6Temp>0</HeadZone6Temp>
<DryerAirFlow>0</DryerAirFlow>
- <DryerZone1Temp>100</DryerZone1Temp>
+ <DryerZone1Temp>180</DryerZone1Temp>
<DryerZone2Temp>0</DryerZone2Temp>
<DryerZone3Temp>0</DryerZone3Temp>
<DryerBufferLength>0</DryerBufferLength>
- <HeadAirFlow>0</HeadAirFlow>
+ <HeadAirFlow>3</HeadAirFlow>
<TableIndex>0</TableIndex>
<HeadZone7Temp>0</HeadZone7Temp>
<HeadZone8Temp>0</HeadZone8Temp>
@@ -860,142 +867,147 @@
<HeadZone10Temp>0</HeadZone10Temp>
<HeadZone11Temp>0</HeadZone11Temp>
<HeadZone12Temp>0</HeadZone12Temp>
- <RBlowerFlow>0</RBlowerFlow>
- <RBlowerTemp>0</RBlowerTemp>
- <LBlowerFlow>0</LBlowerFlow>
- <LBlowerTemp>0</LBlowerTemp>
+ <RBlowerFlow>180</RBlowerFlow>
+ <RBlowerTemp>180</RBlowerTemp>
+ <LBlowerFlow>180</LBlowerFlow>
+ <LBlowerTemp>180</LBlowerTemp>
<PressureBuildUp>0</PressureBuildUp>
</ProcessParameters>
<ParametersIndices>
<ParameterIndex>
- <Name>Name</Name>
+ <Name>Process Parameters Tables Group Guid</Name>
<Index>0</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dyeing Speed</Name>
+ <Name>Name</Name>
<Index>1</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Min Ink Uptake</Name>
+ <Name>Table Index</Name>
<Index>2</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Max Ink Uptake</Name>
+ <Name>Dyeing Speed</Name>
<Index>3</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Feeder Tension</Name>
+ <Name>Min Ink Uptake</Name>
<Index>4</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Puller Tension</Name>
+ <Name>Max Ink Uptake</Name>
<Index>5</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Winder Tension</Name>
+ <Name>Feeder Tension</Name>
<Index>6</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Mixer Temp</Name>
+ <Name>Puller Tension</Name>
<Index>7</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 1 Temp</Name>
+ <Name>Winder Tension</Name>
<Index>8</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 2 Temp</Name>
+ <Name>Mixer Temp</Name>
<Index>9</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 3 Temp</Name>
+ <Name>Head Zone 1 Temp</Name>
<Index>10</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 4 Temp</Name>
+ <Name>Head Zone 2 Temp</Name>
<Index>11</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 5 Temp</Name>
+ <Name>Head Zone 3 Temp</Name>
<Index>12</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 6 Temp</Name>
+ <Name>Head Zone 4 Temp</Name>
<Index>13</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Air Flow</Name>
+ <Name>Head Zone 5 Temp</Name>
<Index>14</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 1 Temp</Name>
+ <Name>Head Zone 6 Temp</Name>
<Index>15</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 2 Temp</Name>
+ <Name>Head Zone 7 Temp</Name>
<Index>16</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 3 Temp</Name>
+ <Name>Head Zone 8 Temp</Name>
<Index>17</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Buffer Length</Name>
+ <Name>Head Zone 9 Temp</Name>
<Index>18</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Air Flow</Name>
+ <Name>Head Zone 10 Temp</Name>
<Index>19</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Process Parameters Tables Group Guid</Name>
+ <Name>Head Zone 11 Temp</Name>
<Index>20</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Table Index</Name>
+ <Name>Head Zone 12 Temp</Name>
<Index>21</Index>
</ParameterIndex>
+ <ParameterIndex>
+ <Name>R Blower Flow</Name>
+ <Index>22</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>R Blower Temp</Name>
+ <Index>23</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>L Blower Flow</Name>
+ <Index>24</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>L Blower Temp</Name>
+ <Index>25</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 1 Temp</Name>
+ <Index>26</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 2 Temp</Name>
+ <Index>27</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 3 Temp</Name>
+ <Index>28</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Air Flow</Name>
+ <Index>29</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Head Air Flow</Name>
+ <Index>30</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Buffer Length</Name>
+ <Index>31</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Pressure Build Up</Name>
+ <Index>32</Index>
+ </ParameterIndex>
</ParametersIndices>
</TechItem>
- <TechItem xsi:type="MonitorItem">
- <ID>11f4748e-ed30-48d6-a08a-afeaa0277e2e</ID>
- <Left>330</Left>
- <Top>12.154867256637203</Top>
- <Width>205</Width>
- <Height>90.181415929203524</Height>
- <Angle>0</Angle>
- <ItemGuid>1778C1A7-AFB5-42F9-9E00-E80D30D9FC02</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <UpdateInterval>10</UpdateInterval>
- <DecimalPoints>2</DecimalPoints>
- </TechItem>
- <TechItem xsi:type="SingleGraphItem">
- <ID>dcf78507-ea09-4529-b635-ec1eeed31141</ID>
- <Left>145</Left>
- <Top>842.58849557522137</Top>
- <Width>357</Width>
- <Height>215.82743362831855</Height>
- <Angle>0</Angle>
- <ItemGuid>FE0D0A56-5795-4C5A-8E09-939FBB35C441</ItemGuid>
- <ColorNumber>-14774017</ColorNumber>
- <Duration>1275</Duration>
- <Min>0</Min>
- <Max>100</Max>
- <UseAutoRange>true</UseAutoRange>
- <DecimalPlaces>2</DecimalPlaces>
- </TechItem>
- <TechItem xsi:type="MonitorItem">
- <ID>85762a06-25d4-457a-9974-7eab916d65c5</ID>
- <Left>540</Left>
- <Top>4.0486725663717493</Top>
- <Width>205</Width>
- <Height>90.181415929203524</Height>
- <Angle>0</Angle>
- <ItemGuid>055D0A38-09BD-490D-9852-12B06A4B22F2</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <UpdateInterval>10</UpdateInterval>
- <DecimalPoints>0</DecimalPoints>
- </TechItem>
</Items>
</MachineTechViewProjectTab>
<MachineTechViewProjectTab>