aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-03-18 10:03:11 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-03-18 10:03:11 +0200
commitada2ce25bd36b6f7b3c8aa01039cc9611b22e55c (patch)
tree0684b4e94a807188d2d92f46c33ed36b724692bc /Software/Embedded_SW/Embedded/Modules
parent2cd94c78ab9de58fc1f8525e69ab5fa563d0ff75 (diff)
parentcb7fff096f2fe6812184a286290eaad193c7c2df (diff)
downloadTango-ada2ce25bd36b6f7b3c8aa01039cc9611b22e55c.tar.gz
Tango-ada2ce25bd36b6f7b3c8aa01039cc9611b22e55c.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/AlarmHandling/AlarmHandling.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c15
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c26
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c8
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c49
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/Safety.c18
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c29
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c49
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c82
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c33
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c24
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c13
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c71
20 files changed, 352 insertions, 101 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index add3a3800..25022ab67 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -584,7 +584,7 @@ void AlarmHandlingSetCurrentLimits(double currentalarmhighlimit,double curre
uint32_t AlarmhandlingFlags = 0;
void AlarmHandlingLoadFlags(void)
{
- MCU_E2PromRead(ALARM_SUPPORT_ADDR,&AlarmhandlingFlags);
+ MCU_E2PromRead(EEPROM_ALARM_SUPPORT,&AlarmhandlingFlags);
CheckHardLimitAlarms = (AlarmhandlingFlags && 0x0001);
CheckCurrentAlarms = (AlarmhandlingFlags && 0x0002);
@@ -607,7 +607,7 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms
if (CheckMotorAlarms) flags |= 0x8;
if (AlarmhandlingFlags != flags)
{
- MCU_E2PromProgram(ALARM_SUPPORT_ADDR,flags);
+ MCU_E2PromProgram(EEPROM_ALARM_SUPPORT,flags);
AlarmhandlingFlags = flags;
}
}
@@ -1189,7 +1189,13 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
{
if (AlarmItem[Alarm_i].AlarmDirection == true)
{
- if ((doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit)))
+ if (doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit))
+ {
+ Status = true;
+ if (AlarmState[Alarm_i].Status == false)
+ ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0);
+ }
+ if ((doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))&&(isHeaterReady(AlarmItem[Alarm_i].DeviceId)==false))
{
Status = true;
if (AlarmState[Alarm_i].Status == false)
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 1cc8e766b..0e95f4053 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -59,6 +59,8 @@
#include <Drivers/I2C_Communication/WHS_Card/D_ADS122_PT100/WHS_PT100_ADC.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include "Modules/Heaters/Heaters_ex.h"
+#include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h>
Task_Handle Millisecond_Task_Handle;
/******************** Definitions ********************************************/
@@ -694,6 +696,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
if (O600Millisecond_Tick)
{
Trigger_WHSReadAllFanTacho ();
+ DrierHeaterVoltageSetup();
if (RapidPressureRead == false)
{
for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
@@ -704,8 +707,8 @@ uint32_t MillisecLowLoop(uint32_t tick)
}
if (Onesecond_Tick)
{
- char Lenstr[160];
- static int Counter = 0;
+ //char Lenstr[160];
+ //static int Counter = 0;
MachineUpdateResponseFunc();
//KeepAliveOneSecondCall();
@@ -725,8 +728,8 @@ uint32_t MillisecLowLoop(uint32_t tick)
if (WHS_Type == WHS_TYPE_NEW)
{
Trigger_WHS_PT100_Read_All();
- WHS_Blower_Avarege_ORF1(); //drier
- WHS_Blower_Avarege_ORF3(); //head
+ WHS_Blower_Avarege(HEAD_FLOW_METER);
+ WHS_Blower_Avarege(DRIER_FLOW_METER);
WHS_Start_Blower_Control_Closed_Loop ();
}
}
@@ -928,7 +931,7 @@ void HundredMicroTimerInterrupt(int ARG0)
StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer2;
StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer3;
/*-----------------------*/
- //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "\r\n%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]);
+ //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]);
//StoreBufferCounter+=(len+1);
/*-----------------------*/
dancer1sum+=dancer1;
@@ -977,7 +980,7 @@ void MillisecLogInit(void)
if (FileHandle == 0)
Fresult = FR_DENIED;
else
- Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS);
+ Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS);
ROM_IntMasterEnable();
return ;
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index bea68e314..0f9848ba1 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -51,6 +51,7 @@
#include <PMR/Diagnostics/EventType.pb-c.h>
+#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h"
#include "drivers/adc_sampling/adc.h"
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "drivers/FPGA/FPGA_SPI_Comm.h"
@@ -181,19 +182,22 @@ uint32_t ControlActivityLed( uint32_t Parameter1)
ACTIVITY_RED_LED_OFF; // Heaters indication - all the Heaters OFF
if(FPGA_WD_Occurred == true)
{
- FPGA_WD_Occurred = false;
- AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true);
- if (JobIsActive())
+ if (FPGABurningActive == false)
{
- JobEndReason = JOB_MOTOR_ALARM;
- SendJobProgress(0.0,0,false, "Hardware Failure Error");
- AbortJob("FPGA Watchdog Error");
- }
- ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
+ FPGA_WD_Occurred = false;
+ AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true);
+ if (JobIsActive())
+ {
+ JobEndReason = JOB_MOTOR_ALARM;
+ SendJobProgress(0.0,0,false, "Hardware Failure Error");
+ AbortJob("FPGA Watchdog Error");
+ }
+ 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
ACTIVITY_GREEN_LED_OFF;
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
index 41f6b2334..42739f20f 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
@@ -371,9 +371,9 @@ uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer)
if (Head_Type == HEAD_TYPE_STAPLE_SPUN)
{
if ((request->has_voltage)&&(request->isactive == true))
- status = Head_Fan_PWM_Control(0,request->voltage);
+ Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,request->voltage);
else if (request->isactive == false)
- status = Head_Fan_PWM_Control(0,0);
+ Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,0);
}
else
status = NOT_SUPPORTED;
@@ -383,9 +383,9 @@ uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer)
if (Head_Type == HEAD_TYPE_STAPLE_SPUN)
{
if ((request->has_voltage)&&(request->isactive == true))
- status = Head_Fan_PWM_Control(1,request->voltage);
+ Trigger_Head_Fan_Control(HEAD_FAN_LEFT,request->voltage);
else if (request->isactive == false)
- status = Head_Fan_PWM_Control(1,0);
+ Trigger_Head_Fan_Control(HEAD_FAN_LEFT,0);
}
else
status = NOT_SUPPORTED;
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index 8ee9b06ae..bfcf379d0 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -314,6 +314,7 @@ uint32_t DiagnosticsLoadDigitalValues(void)
DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE_SSR13_CTRL;
DigitalOutputState[index++].value = ReadHeadMagnetBit();
+ // indication of movement cause the switch in the tech board to change, also doesn't go through the task
/*if (Head_Type == HEAD_TYPE_SYLKO) //rapid/pp machines
{
DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED3;
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
index be8e84f3e..bdbf1b33e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
@@ -39,11 +39,21 @@ char HomingToken[NUM_OF_MOTORS][36+1]={0};
/********************************************************************************
* Motor Homing
********************************************************************************/
+//int32_t keepkvalright,keepkvalleft;
+
uint32_t MotorHomingRequestCallback(uint32_t deviceID, uint32_t ReadValue)
{
MessageContainer responseContainer;
MotorHomingResponse response = MOTOR_HOMING_RESPONSE__INIT;
+ if(deviceID == HARDWARE_MOTOR_TYPE__MOTO_RLOADING)
+ {
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 24);
+ }
+ if(deviceID == HARDWARE_MOTOR_TYPE__MOTO_LLOADING)
+ {
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 24);
+ }
responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[deviceID], true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size);
responseContainer.has_continuous = true;
responseContainer.continuous = true;
@@ -82,7 +92,14 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer)
{
if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID)
{
- MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_OPEN, GPI_LS_DRYER_LID_OPEN, MotorHomingRequestCallback,10000);
+ if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver)
+ {
+ MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_CLOSE, GPI_LS_DRYER_LID_CLOSED, MotorHomingRequestCallback,4000);
+ }
+ else
+ {
+ MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_OPEN, GPI_LS_DRYER_LID_OPEN, MotorHomingRequestCallback,4000);
+ }
return OK;
}
else
@@ -100,6 +117,16 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer)
}
if ( Motor_Id_to_LS_IdDown[MotorId] != MAX_GPI)
{
+ if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING)
+ {
+ //keepkvalright = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun;
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70);
+ }
+ if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING)
+ {
+ //keepkvalleft = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].kvalrun;
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70);
+ }
MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdUp[MotorId], MotorHomingRequestCallback,30000);
return OK;
}
@@ -110,7 +137,14 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer)
{
if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID)
{
- MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_CLOSE, GPI_LS_DRYER_LID_CLOSED, MotorHomingRequestCallback,4000);
+ if (MotorDriverResponse[HARDWARE_MOTOR_TYPE__MOTO_RLOADARM].DriverType == CombinrdMotDriver)
+ {
+ MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_OPEN, GPI_LS_DRYER_LID_OPEN, MotorHomingRequestCallback,4000);
+ }
+ else
+ {
+ MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_CLOSE, GPI_LS_DRYER_LID_CLOSED, MotorHomingRequestCallback,4000);
+ }
return OK;
}
else
@@ -132,6 +166,16 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer)
}
if ( Motor_Id_to_LS_IdUp[MotorId] != MAX_GPI)
{
+ if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING)
+ {
+ keepkvalright = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun;
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70);
+ }
+ if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING)
+ {
+ keepkvalleft = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].kvalrun;
+ MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70);
+ }
MotorMovetoLimitSwitch (MotorId,MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdDown[MotorId], MotorHomingRequestCallback,10000);
return OK;
}
@@ -139,6 +183,7 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer)
}
}
}
+ responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID;
responseContainer.errormessage = "Job Active or incorrect motor ID";
responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, requestContainer->token, true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size);
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c
index e2eb264a7..a1a0c96c1 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c
@@ -90,6 +90,7 @@ uint32_t MotorJoggingRequestFunc(MessageContainer* requestContainer)
responseContainer = createContainer(MESSAGE_TYPE__MotorJoggingResponse, requestContainer->token, false, &response, &motor_jogging_response__pack, &motor_jogging_response__get_packed_size);
if (status!= OK)
{
+ responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID;
responseContainer.errormessage = "JOb Active or incorrect parameters";
}
@@ -191,6 +192,7 @@ uint32_t DispenserJoggingRequestFunc(MessageContainer* requestContainer)
responseContainer = createContainer(MESSAGE_TYPE__DispenserJoggingResponse, requestContainer->token, false, &response, &dispenser_jogging_response__pack, &dispenser_jogging_response__get_packed_size);
if (status!= OK)
{
+ responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID;
responseContainer.errormessage = "JOb Active or incorrect parameters";
}
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index ec59385ab..618d4569c 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -53,6 +53,7 @@
#include "Modules/Waste/Waste.h"
#include "Drivers/I2C_Communication/Main_Board_EEPROM/Main_EEPROM.h"
#include <Modules/Waste/newWHS_init.h>
+#include <Drivers/I2C_Communication/I2C_Task.h>
uint32_t EmbeddedParametersInit(void);
uint32_t EmbeddedParametersWrite(void * buffer, uint16_t size);
@@ -367,7 +368,7 @@ uint32_t EmbeddedParametersInit(void)
return Fresult;
}
-uint32_t GenHWControlId;
+/*uint32_t GenHWControlId;
uint32_t GenHWInitCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
{
@@ -380,7 +381,7 @@ uint32_t GenHWInitCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
Disable_MidTank_Pressure_Reading(Dispenser_i);
}
return OK;
-}
+}*/
uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
{
@@ -556,8 +557,8 @@ uint32_t MachineCalibrationDataRequestFunc(MessageContainer* requestContainer)
MidTankInfo[i].has_slopeb = true;
MidTankInfo[i].slopeb = MCU_E2PromReadMidtank_B(i);
}
- memset (Serial,0,20);
- MCU_E2PromSerialNumRead(&Serial);
+ //memset (Serial,0,20);
+ //MCU_E2PromSerialNumRead(&Serial);
MachineCalibrationDataResponse response = MACHINE_CALIBRATION_DATA_RESPONSE__INIT;
machine_calibration_data__init(&response.machinecalibrationdata);
@@ -648,6 +649,7 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer)
responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size);
if (status!= OK)
{
+ responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__INVALID_PARAMETER;
responseContainer.errormessage = "JOb Active or incorrect parameters";
}
@@ -726,7 +728,6 @@ uint32_t LoadConfigurationParamsFromFile(bool Initialize)
}
void HWConfigurationLoadFile(void)
{
- FRESULT Fresult = FR_OK;
uint8_t* buffer = NULL;
uint32_t Bytes = 0;
buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config
diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
index 3f557496c..146c62bb6 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c
@@ -27,7 +27,7 @@
#include "Modules/Control/MillisecTask.h"
#include "modules/ids/ids_ex.h"
-MachineState StoredMachineStatus = MACHINE_STATE__Ready;
+MachineState StoredMachineStatus = MACHINE_STATE__PowerUp;
void SetMachineStatus (MachineState State)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
index 139763c75..9680e11d0 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
@@ -47,6 +47,11 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
bool mAirFlowAlarmState = false;
bool mAirFilterAlarmState = false;
bool mWasteOverflowAlarmState = false;
+#ifdef CONTROL_DEBUG
+ uint32_t tempp,tempq,delta;
+ uint32_t sys_ticks_start = msec_millisecondCounter,sys_ticks_end,max = 0,dev = 0;
+ tempp = HibernateRTCSSGet();
+#endif
for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
{
if (isMotorConfigured(Disp_i + HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)==true)
@@ -194,6 +199,19 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false);
WasteOverflowAlarmState = mWasteOverflowAlarmState;
}
+#ifdef CONTROL_DEBUG
+ tempq = HibernateRTCSSGet();
+ if (tempq < tempp)
+ {
+ delta = (32768 - tempp) + tempq + 1;
+ }
+ else
+ delta = tempq - tempp;
+ if (delta>1000)
+ {
+ ReportWithPackageFilter(GeneralFilter,"------ Safety Delta ------------", __FILE__,delta,tempq, RpMessage,tempp, 0);
+ }
+#endif
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c
index c270c9828..4cb35d488 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.c
@@ -25,7 +25,7 @@
#include "StateMachines/Initialization/InitSequence.h"
#include "drivers/Flash_ram/FlashProgram.h"
-
+#include <Drivers/I2C_Communication/I2C_Task.h>
double dyeingspeed = 0;
double dryerbufferlength = 0;
@@ -81,6 +81,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
if (ProcessParams==NULL)
{
status = ERROR_CODE__INVALID_PARAMETER;
+ ReportWithPackageFilter(InitFilter,"HandleProcessParameters NULL",__FILE__,(int)__LINE__,(int)0,RpWarning,(int)0,0);
return status;
}
if (ProcessParams->dryerzone1temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER;
@@ -94,9 +95,13 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
if (ProcessParams->headzone5temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER;
if (ProcessParams->headzone6temp > MAX_ALLOWED_TEMPERATURE) status = ERROR_CODE__INVALID_PARAMETER;
if (status != 0)
+ {
+ ReportWithPackageFilter(InitFilter,"HandleProcessParameters Temperature too high",__FILE__,(int)__LINE__,(int)status,RpWarning,(int)0,0);
return status;
+ }
if (GetMachineState()<MACHINE_STATE_NO_PROCESS_PARAMS)
{
+ ReportWithPackageFilter(InitFilter,"HandleProcessParameters Init not ready",__FILE__,(int)__LINE__,(int)status,RpWarning,(int)GetMachineState(),0);
status = ERROR_CODE__GENERAL_ERROR;
return status;
}
@@ -116,6 +121,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
REPORT_MSG(Bytes,"Bytes write to flash");
}
}
+
if (ProcessParams->mixertemp>1)
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__MixerHeater, true,ProcessParams->mixertemp);
else
@@ -228,31 +234,38 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
}
if(Head_Type == HEAD_TYPE_STAPLE_SPUN)
{
- if (ProcessParams->stspzone1temp>1)
+ if (ProcessParams->rblowertemp>1)
{
- status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->stspzone1temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->rblowertemp);
}
else
{
- status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->stspzone1temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->rblowertemp);
}
- if (ProcessParams->stspzone2temp>1)
+ if (ProcessParams->lblowertemp>1)
{
- status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->stspzone2temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->lblowertemp);
}
else
{
- status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->stspzone2temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->lblowertemp);
}
+ Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,ProcessParams->rblowerflow);
+ Trigger_Head_Fan_Control(HEAD_FAN_LEFT,ProcessParams->lblowerflow);
}
+ if (status)
+ {
+ ReportWithPackageFilter(InitFilter,"HandleProcessParameters start heaters error",__FILE__,(int)__LINE__,(int)status,RpWarning,(int)GetMachineState(),0);
+ }
HeatersStopControlOnHeatersOff(ProcessParams);
dyeingspeed = ProcessParams->dyeingspeed;
dryerbufferlength = ProcessParams->dryerbufferlength;
dryerbufferMeters = dryerbufferlength*0.76+0.9;
dryerbufferCentimeters = dryerbufferlength*76+90;
- Report("drier buffer length",__FILE__,(int)dryerbufferlength,(int)dryerbufferMeters*100,RpWarning,(int)dryerbufferCentimeters,0);
+ //Report("drier buffer length",__FILE__,(int)dryerbufferlength,(int)dryerbufferMeters*100,RpWarning,(int)dryerbufferCentimeters,0);
+ ReportWithPackageFilter(InitFilter,"HandleProcessParameters Head type",__FILE__,(int)__LINE__,(int)Head_Type,RpWarning,(int)dryerbufferCentimeters,0);
mininkuptake = ProcessParams->mininkuptake;
feedertension = ProcessParams->feedertension;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h
index 97d28f1ef..a546ffdbe 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.h
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.h
@@ -26,6 +26,7 @@ extern ProcessParameters ProcessParametersKeep;
extern void ProcessRequestFunc(MessageContainer* requestContainer);
extern uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData);
+uint32_t LoadProcessParamsFromFile(void);
uint32_t ProcessParamsInit(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
index 0c6ee94ee..aeec7d696 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
@@ -23,6 +23,7 @@ void HeatingTestRequest(MessageContainer* requestContainer);
void HeatingTestPollRequest(MessageContainer* requestContainer);
bool HeaterCheckReady(void);
+bool isHeaterReady(uint8_t HeaterId);
bool HeaterGetOverTemperatureState(uint8_t HeaterId);
@@ -33,7 +34,9 @@ uint32_t LoadHeaterSetPoint(HeaterType HeaterType);
void Heaters_SetOverHeatTimeOutValues(uint32_t OverHeatTimeout, uint32_t UnderHeatTimeout);
void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersupperoperationlimit,int dcheatersloweroperationlimit,int dcheatersupperoperationlimit);
+uint32_t DrierHeaterVoltageSetup(void);
uint32_t HeatersEnd(void);
+void HeatersControlStart(void);
void HeatersControlStop(void);
uint32_t Heaters_Init(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 06da53823..ca4255a95 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -24,6 +24,7 @@
#include "../control/pidalgo.h"
#include "../control/MillisecTask.h"
#include "../Ids/Ids_ex.h"
+#include "../General/process.h"
#include <ti/sysbios/knl/Task.h>
#include <driverlib/timer.h>
@@ -37,6 +38,7 @@
#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
#include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h"
#include "Drivers/I2C_Communication/I2C.h"
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
#include "StateMachines/Printing/PrintingSTM.h"
#include "StateMachines/Initialization/PowerIdle.h"
@@ -320,7 +322,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu
}
readValue = MillisecGetTemperatures(InternalId2PT100Id[index]);
- if((MINIMUM_HEATER_READ*100>=readValue)||(270.00*100 < readValue))
+ if((MINIMUM_HEATER_READ*100>=readValue)||(200.00*100 < readValue))
{
//ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0);
return ERROR;
@@ -662,7 +664,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue)
DeActivateHeater(HeaterId);
HeaterCmd[HeaterId].targettemperatue = 0;
#warning PT100 error is misidentified as overheat in alarms
- AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true);
+ AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
return;
}
@@ -699,13 +701,12 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue)
HeaterAtTemp[HeaterId] = false;
if (BlowerCfg.enabled == true)
{
- //WHS_Start_Blower_Control_Closed_Loop(2.5);
Turn_the_Blower_On();//Turn on with the Default_Voltage
if (BlowerCfg.heatingvoltage)
Control_Voltage_To_Blower(BlowerCfg.heatingvoltage);
else
Control_Voltage_To_Blower(BlowerCfg.voltage-500);
-
+ WHS_Set_SetPoint_Q_value(headairflow/2);
}
if (SetTemperatue)
{
@@ -738,7 +739,7 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue)
ControlIdtoHeaterId [HeaterId] = 0xFF;
}
DeActivateHeater(HeaterId);
- AlarmHandlingSetAlarm(HeaterEventType[HeaterId], true);
+ AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
HeaterCmd[HeaterId].targettemperatue = 0;
return ERROR;
@@ -833,6 +834,13 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
}
return OK;
}
+bool isHeaterReady(uint8_t HeaterId)
+{
+ if (HeaterId<HEATER_TYPE_MAX_HEATERS)
+ return HeaterReady[HeaterId];
+ else
+ return false;
+}
bool HeaterCheckReady(void)
{
int i;
@@ -900,6 +908,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
}
else
{
+ ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
HeaterPreviousRead[index] = HeaterSpikeRead[index];
HeaterSpikeRead[index] = 0;
}
@@ -1080,7 +1089,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
ReportWithPackageFilter(HeatersFilter,"AC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index);
if (readValue > HeaterCmd[index].targettemperatue)
{
- if (HeaterSpikeRead[index] == 0)
+ /*if (HeaterSpikeRead[index] == 0)
{
HeaterSpikeRead[index] = readValue;
}
@@ -1088,7 +1097,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
{
HeaterPreviousRead[index] = HeaterSpikeRead[index];
HeaterSpikeRead[index] = 0;
- }
+ }*/
DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater);
DeActivateHeater(HEATER_TYPE__DryerMainHeater);
HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0);
@@ -1170,11 +1179,11 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
AlarmHandlingSetAlarm(HeaterUnderEventType[index], false);
if (BlowerCfg.enabled == true)
{
- //WHS_Start_Blower_Control_Closed_Loop(5.0);
Turn_the_Blower_On();//Turn on with the Default_Voltage
if (BlowerCfg.voltage)
//Gradual_Increase_Blower(BlowerCfg.heatingvoltage,BlowerCfg.voltage);
Control_Voltage_To_Blower(BlowerCfg.voltage);
+ WHS_Set_SetPoint_Q_value(headairflow);
}
HeaterReady[index] = true;
//Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater]);
@@ -1294,6 +1303,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
}
else
{
+ ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
HeaterPreviousRead[index] = HeaterSpikeRead[index];
HeaterSpikeRead[index] = 0;
}
@@ -1503,13 +1513,16 @@ double TotalCurrentLimit(double VAC)
}
}
-uint32_t DrierHeaterVoltageSetup(double voltage)
+uint32_t DrierHeaterVoltageSetup(void)
{
double DrierAcVoltage = 0.0;
char str[100];
bool tempDrier2 = UseSecondaryDrierHeater;
+ double Z1Current,Z2AssumedCurrent,LimitCurrent;
+#ifndef VAC_TEST
if (Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) //rapid/pp machines
+#endif
{
DrierAcVoltage = ReadVAC();
if (DrierAcVoltage<=180)
@@ -1536,7 +1549,10 @@ uint32_t DrierHeaterVoltageSetup(double voltage)
}
else
{
- if ((GetZone2RMSCurrent(DrierAcVoltage)+Get_Heaters_Current(HEATER_DRYER_CURRENT_1))>TotalCurrentLimit(DrierAcVoltage))
+ Z1Current = Get_Heaters_Current(HEATER_DRYER_CURRENT_1);
+ Z2AssumedCurrent = GetZone2RMSCurrent(DrierAcVoltage);
+ LimitCurrent = TotalCurrentLimit(DrierAcVoltage);
+ if ((Z2AssumedCurrent+Z1Current)>LimitCurrent)
{
UseSecondaryDrierHeater = false;
}
@@ -1546,15 +1562,22 @@ uint32_t DrierHeaterVoltageSetup(double voltage)
}
}
}
+#ifndef VAC_TEST
else
{
UseSecondaryDrierHeater = true;
}
+#endif
if (tempDrier2 != UseSecondaryDrierHeater)
{
- usnprintf(str, 100, "\r\n Changing Drier 2 setting VAC %d D1 Current %d D2 assumed current %d limit %d"
- ,DrierAcVoltage,(int)(GetZone2RMSCurrent(DrierAcVoltage)*100),(int)(Get_Heaters_Current(HEATER_DRYER_CURRENT_1)*100),(int)(TotalCurrentLimit(DrierAcVoltage)*100));
+ usnprintf(str, 100, "Changing Drier 2 from %d to %d VAC %d D1 Current %d D2 assumed current %d limit %d" ,tempDrier2,UseSecondaryDrierHeater
+ ,(int)DrierAcVoltage,(int)(Z1Current*100),(int)(Z2AssumedCurrent*100),(int)(LimitCurrent*100));
ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,DrierAcVoltage, RpMessage, UseSecondaryDrierHeater, 0);
+ if (UseSecondaryDrierHeater == false)
+ {
+ DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater);
+ }
+
}
return OK;
}
@@ -1565,7 +1588,7 @@ uint32_t HeatersControlLoop(uint32_t tick)
int DcHeaterId;
bool AcHeaterDisaster = false;
- /*len = usnprintf(str, 100, "\r\n EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d"
+ /*len = usnprintf(str, 100, " EightMilliSecondHeatersInterrupt SliceCounter %d Owner %d H1000 %d H2000 %d"
,SliceCounter,TimeSliceAllocation[SliceCounter],HeatersRestart,NumberOFSlicesInUse);
ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]);
*/
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index ccd051c71..76a92bd89 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -33,7 +33,7 @@
#include "modules/heaters/heaters_ex.h"
#include <Drivers/I2C_Communication/I2C.h>
#include <Drivers/I2C_Communication/Head_Card/I2C_Head_Mux.h>
-#include <Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h>
+#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h"
#include "drivers/adc_sampling/adc.h"
#include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h>
#include <Drivers/I2C_Communication/WHS_Card/WHS_data.h>
@@ -43,7 +43,10 @@
#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
#include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h>
-#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h"
+
+#include "Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h"
+
+
extern float NumberOfRotationPerPassage; // how many rotations per spool passage
@@ -109,11 +112,12 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
}
}
else
- if((request->amount == 0x3E8) && (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff
+ if(request->amount == 0x3E8) //&& (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff
{
if (WHS_Type == WHS_TYPE_NEW)
{
- Trigger_SetWHSBlowerVoltage (request->delay);
+ WHS_enable_control_loop( request->delay & 0x1000);//disable control loop: 0=disable 1= enable
+ Trigger_SetWHSBlowerVoltage (request->delay & 0x0FFF);
response.progress = 0;
response.has_progress = false;
}
@@ -144,9 +148,38 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
{
uint16_t tempu16 = 0;
double temp_double = 0.0;
+ uint8_t display_byte = 0;
+ uint16_t A2D_data = 0;
+
if (WHS_Type == WHS_TYPE_NEW)
{
- switch(request->delay )// get A2D
+ display_byte = ((request->delay & 0x3000)>>12);
+ switch (display_byte)
+ {
+ case 0:
+ //stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EA, /*DisplayView =*/0x0000); //
+ SetLeftDisplayView (HeadAVERAGE);
+ SetWriteDisplayView(DrierAVERAGE);
+ break;
+ case 1:
+ //stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EA, /*DisplayView =*/0x1000); //
+ SetLeftDisplayView (HeadAVERAGE);
+ SetWriteDisplayView(HeadCURRENT);
+ break;
+ case 2:
+ //stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EA, /*DisplayView =*/0x2000); //
+ SetLeftDisplayView (DrierAVERAGE);
+ SetWriteDisplayView(DrierCURRENT);
+ break;
+ case 3:
+ //stubManager.Run<ProgressResponse>("ProgressRequest" ,0x3EA, /*DisplayView =*/0x3000); //
+ SetLeftDisplayView (HeadCURRENT);
+ SetWriteDisplayView(DrierCURRENT);
+ break;
+ }
+
+ A2D_data = (request->delay & 0x0FFF);
+ switch(A2D_data )// get A2D
{
case 0:
get_orf_1(&tempu16);
@@ -176,16 +209,16 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
tempu16 = 0; //get_cur_vlv2(&tempu16);
break;
case 10:
- temp_double = get_ORF1_Q();
+ temp_double = get_Q(HEAD_FLOW_METER);
break;
case 12:
- temp_double = get_ORF3_Q();
+ temp_double = get_Q(DRIER_FLOW_METER);
break;
case 20:
- temp_double = get_average_ORF1_Q();
+ temp_double = get_average_Q(HEAD_FLOW_METER); //HEAD
break;
case 22:
- temp_double = get_average_ORF3_Q();
+ temp_double = get_average_Q(DRIER_FLOW_METER); //Drier
break;
case 11:
@@ -236,7 +269,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
}
else
{
- Trigger_WHS_set_Rheostat_to_CLEAN_AIR();
+ //Trigger_WHS_set_Rheostat_to_CLEAN_AIR();
}
get_gas_out(&tempu16);
}
@@ -464,6 +497,12 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
else
HeadCard_Control_Heaters((request -> delay & 0xFF00)>>8, FALSE);
}
+ else
+ if(request -> delay == 0x0)//return head type
+ {
+ response.progress = Head_Type;
+ response.has_progress = true;
+ }
}
else
@@ -472,7 +511,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
//Head_Fan_PWM_Command[0] = (request->delay & 0xFF) ;
//Test_Head_fan_Click();
- Head_Fan_PWM_Control(0, request->delay & 0xFF);
+ Trigger_Head_Fan_Control(HEAD_FAN_RIGHT, request->delay & 0xFF);
Task_sleep(2000);
//response.progress = Fan_Click_Info.Product_ID;
@@ -483,7 +522,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
else
if((request->amount == 0xFAC1) /*&& (request->delay == 0xFAC)*/) //Head Fan control
{
- Head_Fan_PWM_Control(1, request->delay & 0xFF);
+ Trigger_Head_Fan_Control(HEAD_FAN_LEFT, request->delay & 0xFF);
Task_sleep(2000);
response.progress = Head_Fan_Tach[1];
response.has_progress = true;
@@ -528,6 +567,13 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
+ if((request->amount == 0x0D) && (request->delay == 0xEE)) //Dispenser EEprom
+ {
+ test_disp_eeprom(0x01,0xA0);
+ response.progress = OK;
+ response.has_progress = true;
+ }
+ else
if((request->amount == 0xCF) && (request->delay == 0xCF)) //Create File System on the Drive
{
#ifdef WATCHDOG
@@ -654,6 +700,18 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
+#ifdef VAC_TEST
+ else
+ if(request->amount == 0xB6) //fast refresh for pressure
+ {
+ LOG_ERROR(request->delay,"set vac read test");
+ VAC_Test = (double)request->delay;
+ response.progress = request->delay;
+ response.has_progress = true;
+
+ }
+#endif
+
else
if(request->amount == 0xC3) //suspend I2C task
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c
index 0fab4fdec..aa7e2b6cc 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c
@@ -40,7 +40,7 @@ void Stub_MidTankPressureSensorRequest(MessageContainer* requestContainer)
- if((MidTank_t)request->midtankid < NUM_OF_MIDTANKS)
+ if(/*(MidTank_t)*/request->midtankid < NUM_OF_MIDTANKS)
{
response.midtankid = request->midtankid;
response.has_midtankid = true;
@@ -50,7 +50,7 @@ void Stub_MidTankPressureSensorRequest(MessageContainer* requestContainer)
{
response.midtankid = request->midtankid - 0x8000;
response.has_midtankid = true;
- response.pressure = Read_Head_ADC(response.midtankid); // Head Current
+ response.pressure = Head_ADC[response.midtankid];//Read_Head_ADC(response.midtankid); // Head Current
}
response.has_pressure = true;
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c
index 2baa6bb2d..1c39385d4 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c
@@ -190,9 +190,9 @@ void Stub_MotorRunRequest(MessageContainer* requestContainer)
Run_Value = /*SpdCalc*/(temp);
Direction = request->direction;
- #ifdef TEST_POWERSTEP01
+ /*#ifdef TEST_POWERSTEP01
Direction = Direction^1;
- #endif
+ #endif*/
#ifdef EVALUATION_BOARD
//SPI_Control(SKIP_INIT);
@@ -208,6 +208,11 @@ void Stub_MotorRunRequest(MessageContainer* requestContainer)
//FPGA_GetBusy();
+ if (MotorDriverResponse[Motor_Id].DriverType == CombinrdMotDriver)
+ {
+ Direction = Direction^1;
+ }
+
MotorSetDirection(Motor_Id,Direction);
MotorSetSpeed(Motor_Id, Run_Value);
if ((Motor_Id >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(Motor_Id <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8))
@@ -549,9 +554,9 @@ void Stub_MotorMovRequest(MessageContainer* requestContainer)
Pos_Value = request->position;
Direction = request->direction;
- #ifdef TEST_POWERSTEP01
+/* #ifdef TEST_POWERSTEP01
Direction = Direction^1;
- #endif
+ #endif*/
MotorGetnBusyFromFPGA(); //temporary -
@@ -560,15 +565,19 @@ void Stub_MotorMovRequest(MessageContainer* requestContainer)
#else
TimerMotors_t Motor_Id = (TimerMotors_t)request->motor_id; //to remove warning
+ if (MotorDriverResponse[Motor_Id].DriverType == CombinrdMotDriver)
+ {
+ Direction = Direction^1;
+ }
- if(GoTo_Flag)
- {
- MotorGoTo(Motor_Id, Pos_Value );
- }
- else
- {
- MotorMove(Motor_Id, Direction, Pos_Value );
- }
+ if(GoTo_Flag)
+ {
+ MotorGoTo(Motor_Id, Pos_Value );
+ }
+ else
+ {
+ MotorMove(Motor_Id, Direction, Pos_Value );
+ }
#endif
StubMotorMovResponse response = STUB_MOTOR_MOV_RESPONSE__INIT;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index 128564586..698852f00 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -32,6 +32,9 @@
#include "drivers/motors/motor.h"
#include "drivers/Flash_ram/MCU_E2Prom.h"
#include "Drivers/I2C_Communication/I2C.h"
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include <Drivers/I2C_Communication/I2C_Task.h>
+
#include "PMR/Stubs/StubHeatingTestRequest.pb-c.h"
#include "PMR/Stubs/StubHeatingTestResponse.pb-c.h"
#include "PMR/Stubs/StubHeatingTestPollRequest.pb-c.h"
@@ -186,8 +189,10 @@
ProcessParametersClear.headzone10temp = 0;
ProcessParametersClear.headzone11temp = 0;
ProcessParametersClear.headzone12temp = 0;
- ProcessParametersClear.stspzone1temp = 0;
- ProcessParametersClear.stspzone2temp = 0;
+ ProcessParametersClear.rblowertemp = 0;
+ ProcessParametersClear.lblowertemp = 0;
+ ProcessParametersClear.rblowerflow = 0;
+ ProcessParametersClear.lblowerflow = 0;
ProcessParametersClear.dyeingspeed = 40;
ProcessParametersClear.dryerbufferlength = ProcessParametersKeep.dryerbufferlength;
if (HandleProcessParameters(&ProcessParametersClear,false)!= OK)
@@ -199,7 +204,7 @@
}
else
{
- //WHS_Start_Blower_Control_Closed_Loop(2.5);
+ WHS_Set_SetPoint_Q_value(headairflow/2);
Turn_the_Blower_On();//Turn on with the Default_Voltage
if (BlowerCfg.heatingvoltage)
Control_Voltage_To_Blower(BlowerCfg.heatingvoltage);
@@ -410,7 +415,8 @@
CallbackCounter++;
//MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000);
MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 0, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000);
- Trigger_Head_Actuators_Control(ACTOT, LOW,true);
+ Trigger_Head_Actuators_Control(ACTOT, LOW,false);
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
return OK;
}
uint32_t Thread_Load_Lift_Dancers(void)
@@ -422,6 +428,8 @@
MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000);*/
CallbackCounter++;
MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000);
+ CallbackCounter++;
+ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER2,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER2].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER2], Thread_Load_HomingCallback,25000);
return OK;
}
@@ -504,6 +512,11 @@
// MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000);
MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, (5000*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].microstep), Thread_Load_HomingCallback,20000);
+ CallbackCounter++;
+ MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_LDANCER2, 500);
+
+// MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000);
+ MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_LDANCER2, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER2].directionthreadwize, (5000*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER2].microstep), Thread_Load_HomingCallback,20000);
return OK;
}
@@ -518,7 +531,8 @@
CallbackCounter++;
// MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000);
MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 2, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000);
- Trigger_Head_Actuators_Control(ACTOT, LOW,false);
+ Trigger_Head_Actuators_Control(ACTOT, LOW,true);
+ Trigger_Head_Actuators_Control(ACTIN, LOW,true);
return OK;
}
uint32_t Thread_Load_Resume_Heating(void)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index 78092ae2b..78150e9f9 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -213,9 +213,16 @@ uint32_t Winder_PrepareStage2(uint32_t deviceID, uint32_t ReadValue)
REPORT_MSG(millisecondCounter/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].maxfrequency*/, "Winder_PrepareStage2");
if (ReadValue != LIMIT)
{
- LOG_ERROR(ReadValue,"Screw failed to reach the limit switch!!");
- //returned with a timeout
- Winder_ScrewAtOffsetCallback(0,0);
+ if (JobIsActive()==true)
+ {
+ LOG_ERROR(ReadValue,"Screw failed to reach the limit switch!!");
+ //returned with a timeout
+ Winder_ScrewAtOffsetCallback(0,0);
+ }
+ else //short jog, etc
+ {
+ AlarmHandlingSetAlarm (EVENT_TYPE__SCREW_MOTOR_LIMIT_TIMEOUT,OFF); //on a short jog, this callback will be called without need
+ }
}
else
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 1dd101f82..be6644067 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -15,6 +15,7 @@
#include "PMR/Hardware/HardwareDancerType.pb-c.h"
#include "PMR/Printing/JobSegment.pb-c.h"
#include "PMR/Printing/JobTicket.pb-c.h"
+#include "PMR/Printing/ThreadParameters.pb-c.h"
#include <PMR/Diagnostics/EventType.pb-c.h>
#include <utils/ustdlib.h>
@@ -71,10 +72,12 @@ double TempTotalProcessedLength = 0.0;
bool InitialProcess = false;
bool PrepareState = false;
+
// job parameters
bool EnableLubrication = false;
bool EnableIntersegment = false;
double IntersegmentLength = 0;
+bool Thread_Rockers_Bypass = false;
int CurrentSegmentId = 0;
@@ -442,7 +445,6 @@ void testDancersControl()
ThreadControlActive = false;
}
#endif
-bool dancerinvalid = false;
int MotorFailedSample[MAX_THREAD_MOTORS_NUM] = {0,0,0,0,0};
char TMessage[150];
//char time[150];
@@ -456,7 +458,8 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
//extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM];
//read value is the dancer angle
- int i,index=MAX_THREAD_MOTORS_NUM,len;
+ int i,index=MAX_THREAD_MOTORS_NUM;
+ int len;
int DancerId;
int32_t TranslatedReadValue, avreageSampleValue = 0;//,avreageMotorSampleValue = 0;
//double tempcalcspeed = 0;
@@ -481,21 +484,20 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
//if (MotorDriverResponse[ThreadMotorIdToMotorId[index]].Busy == true)
// return OK;
DancerId = ThreadMotorIdToDancerId[index];
- if (ReadValue < 10)
+/* if (ReadValue < 10)
{
MotorFailedSample[index]++;
ReportWithPackageFilter(ThreadFilter,"Dancer value read too small.",__FILE__,__LINE__,DancerId,RpError,ReadValue,0);
return OK;
- }
+ }*/
if (ReadValue == 0x3FFF)
{
- MotorFailedSample[index]++;
- if (dancerinvalid == false)
+ if (Read_Dryer_Status(DancerId) != OK)
{
- dancerinvalid = true;
- ReportWithPackageFilter(ThreadFilter,"Dancer value invalid.",__FILE__,__LINE__,(int)IfIndex,RpError,(int)ReadValue,0);
+ ReportWithPackageFilter(ThreadFilter,"Dancer value invalid.",__FILE__,ReadValue,(int)DancerId,RpError,(int)Read_Dryer_Status(DancerId),0);
+ MotorFailedSample[index]++;
+ return OK;
}
- return OK;
}
KeepReadValue = ReadValue;
TranslatedReadValue = ReadValue - DancersCfg[DancerId].zeropoint;
@@ -746,7 +748,47 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
ThreadPreSegmentState(request,0);
return OK;
}
+uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
+{
+ /*
+ FEEDER_MOTOR,
+ DRYER_MOTOR,
+ POOLER_MOTOR,
+ WINDER_MOTOR,
+ MotorControlConfig[Motor_i].m_params.Kd = MotorsControl[Pid_Id].derivativetime;
+ MotorControlConfig[Motor_i].m_params.Kp = MotorsControl[Pid_Id].proportionalgain;
+ MotorControlConfig[Motor_i].m_params.Ki = MotorsControl[Pid_Id].integraltime;
+ */
+ if (ThreadParams == NULL)
+ {
+ return OK;
+ }
+ if(ThreadParams->feederp)
+ MotorControlConfig[FEEDER_MOTOR].m_params.Kd = 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;
+ 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;
+ if(ThreadParams->winderi)
+ MotorControlConfig[WINDER_MOTOR].m_params.Ki = ThreadParams->winderi;
+ if(ThreadParams->winderd)
+ MotorControlConfig[WINDER_MOTOR].m_params.Kd = ThreadParams->winderd;
+ if(ThreadParams->bypassrockers)
+ Thread_Rockers_Bypass = true;
+
+ return OK;
+}
//********************************************************************************************************************
uint32_t ThreadPrepareState(void *JobDetails)
{
@@ -826,10 +868,10 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
//////////////////////////////////////////////////
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
+ //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
- else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR))
- MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint;
+ // else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR))
+ // MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint;
//MotorSpeedSamples[Motor_i][i] = 0;
}
MotorSamplePointer[Motor_i] = 0;
@@ -907,6 +949,8 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
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();
#endif
@@ -965,7 +1009,6 @@ uint32_t ThreadDryerRampUp(uint32_t IfIndex, uint32_t BusyFlag)
return OK;
}
-bool Thread_Rockers_Bypass = false;
bool Set_Thread_Rockers_Bypass (int value)
{
if (value == 0)
@@ -1146,7 +1189,7 @@ char Endstr[150];
if (PoolerSpeedControlId != 0xFF)
{
if(RemoveControlCallback(PoolerSpeedControlId,PoolerThreadLengthCBFunction)!=OK)
- ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0);
+ ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)PoolerThreadLengthCBFunction,RpError,(int)PoolerSpeedControlId,0);
PoolerSpeedControlId = 0xFF;
}