aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-01-26 16:28:56 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-01-26 16:28:56 +0200
commit6d0d04a9f1d3ebbc679190ff49df69406eabe24a (patch)
tree697ec870789091d0b26075696915120713270388 /Software/Embedded_SW/Embedded/Modules
parent494d0f61b0800d96b1694930388397d9d9318d58 (diff)
downloadTango-6d0d04a9f1d3ebbc679190ff49df69406eabe24a.tar.gz
Tango-6d0d04a9f1d3ebbc679190ff49df69406eabe24a.zip
updating : special dispensers handling (for Moti), new process parameters, bugs and features. merged with Shai
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c81
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c18
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c26
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c69
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c34
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c34
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c67
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c13
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c82
13 files changed, 396 insertions, 46 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 6b8f0716d..c432edba0 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -823,7 +823,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
{
if (AlarmState[Alarm_i].Status == true)
{
- status = JOB_OK;
+ status = JOB_LS_ALARM;
AlarmId = Alarm_i;
break;
}
@@ -922,8 +922,9 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
//AbortJob(AlarmReasonStr);
//PrepareReady(Module_Alarms,ModuleFail);
ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0);
+ return (JobEndReason);
}
- return JobEndReason;
+ return JOB_OK;
}
uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue)
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 392f36643..d3376c400 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -737,9 +737,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
static int Counter = 0;
MachineUpdateResponseFunc();
KeepAliveOneSecondCall();
+#ifdef Use_Head_Card
TemperatureListString(Lenstr);
ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0);
-#ifdef Use_Head_Card
+//#ifdef Use_Head_Card
for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
#else
for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
index e01cd5508..2fbc60f09 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
@@ -20,10 +20,14 @@
#include <PMR/Diagnostics/SetValveStateResponse.pb-c.h>
#include <PMR/Diagnostics/ValveType.pb-c.h>
#include <PMR/Diagnostics/ValveStateCode.pb-c.h>
+#include <PMR/Diagnostics/SetBlowerStateRequest.pb-c.h>
+#include <PMR/Diagnostics/SetBlowerStateResponse.pb-c.h>
+#include <PMR/Hardware/HardwareBlowerType.pb-c.h>
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "drivers/I2C_Communication/DAC/blower.h"
#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
+#include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h"
#include "drivers/Valves/Valve.h"
#include "drivers/Heater/Heater.h"
#include "modules/waste/waste.h"
@@ -330,6 +334,83 @@ uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer)
return status;
}
+/********************************************************************************
+ *Blower Setting
+ ********************************************************************************/
+uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer)
+{
+ MessageContainer responseContainer;
+ uint8_t* container_buffer;
+ uint32_t status = OK;
+ uint32_t blower;
+ SetBlowerStateRequest* request = set_blower_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+
+ SetBlowerStateResponse response = SET_BLOWER_STATE_RESPONSE__INIT;
+
+ responseContainer = createContainer(MESSAGE_TYPE__SetBlowerStateResponse, requestContainer->token, true, &response, &set_blower_state_response__pack, &set_blower_state_response__get_packed_size);
+ container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
+
+ if (request->has_blowertype)
+ {
+ switch (request->blowertype)
+ {
+ case HARDWARE_BLOWER_TYPE__DefaultBlower:
+ if ((request->has_voltage)&&(request->isactive == true))
+ {
+ Turn_the_Blower_On();//Turn on with the Default_Voltage
+ Control_Voltage_To_Blower(request->voltage);
+ }
+ else
+ Turn_the_Blower_Off();
+ break;
+ case HARDWARE_BLOWER_TYPE__HeadBlower1:
+#ifdef Use_Head_Card
+ if ((request->has_voltage)&&(request->isactive == true))
+ status = Head_Fan_PWM_Control(0,request->voltage);
+ else if (request->isactive == false)
+ status = Head_Fan_PWM_Control(0,0);
+#else
+ status = NOT_SUPPORTED;
+#endif
+ break;
+ case HARDWARE_BLOWER_TYPE__HeadBlower2:
+#ifdef Use_Head_Card
+ if ((request->has_voltage)&&(request->isactive == true))
+ status = Head_Fan_PWM_Control(1,request->voltage);
+ else if (request->isactive == false)
+ status = Head_Fan_PWM_Control(1,0);
+#else
+ status = NOT_SUPPORTED;
+#endif
+ break;
+ case HARDWARE_BLOWER_TYPE__WHSBlower2:
+#ifdef Use_WHS_Card
+#else
+ status = NOT_SUPPORTED;
+#endif
+ break;
+ default:
+ status = NOT_SUPPORTED;
+ break;
+
+ }
+ }
+ else
+ status = NOT_SUPPORTED;
+ if (status != OK)
+ {
+ status = ERROR;
+ responseContainer.has_error = true;
+ responseContainer.error = ERROR_CODE__GENERAL_ERROR;
+ }
+ size_t container_size = message_container__pack(&responseContainer, container_buffer);
+ my_free(responseContainer.data.data);
+ SendChars(container_buffer, container_size);
+ set_blower_state_request__free_unpacked(request,NULL);
+
+ return status;
+}
+
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index 98ab6f9a3..9fc851319 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -109,6 +109,8 @@ double dispenserspressure[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1];
double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1];
double midtankinklevel[MAX_SYSTEM_DISPENSERS][1];
double MidTankpressure[MAX_SYSTEM_DISPENSERS][1];
+double HeadFlowMeter;
+double DrierFlowMeter;
double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1];
double VOC_Sensor;
double OverallTemperature;
@@ -504,6 +506,19 @@ void DiagnosticOneMinuteCollection(void)
DiagnosticsMonitor.n_filterdeltapressure = 1;
DiagnosticsMonitor.filterdeltapressure = &VOC_Sensor;
+ DiagnosticsMonitor.n_blowervoltage = 1;
+ diagvoltage = getBlowerState();
+ DiagnosticsMonitor.blowervoltage = &diagvoltage;
+
+ DrierFlowMeter = GetWHSAirFlow(0);
+ DiagnosticsMonitor.n_dryerairflow = 1;
+ DiagnosticsMonitor.dryerairflow = &DrierFlowMeter;
+ HeadFlowMeter = GetWHSAirFlow(2);
+ DiagnosticsMonitor.n_headairflow = 1;
+ DiagnosticsMonitor.headairflow = &HeadFlowMeter;
+
+
+
}
void DiagnosticOneSecCollection(void)
{
@@ -726,9 +741,6 @@ void SendDiagnostics(void)
DiagnosticsMonitor.n_dryerzone1temperature = HeaterCounterIndex[HEATER_TYPE__DryerAirHeater];
DiagnosticsMonitor.n_dryerzone2temperature = HeaterCounterIndex[HEATER_TYPE__DryerMainHeater];
DiagnosticsMonitor.n_dryerzone3temperature = HeaterCounterIndex[HEATER_TYPE__DryerSecondaryHeater];
- DiagnosticsMonitor.n_blowervoltage = 1;
- diagvoltage = getBlowerState();
- DiagnosticsMonitor.blowervoltage = &diagvoltage;
int i;
DiagnosticsMonitor.n_dispensersmotorsfrequency = 0;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 92ed70b1e..500f03c25 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -103,7 +103,7 @@ uint32_t HWConfigurationInit(void)
Report("HWConfigurationInit from flash", __FILE__,__LINE__,Bytes, RpMessage, UploadRequest->hardwareconfiguration->n_dancers, 0);
}
}
- else
+ if (UploadRequest = NULL)
{
buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config
if (buffer)
@@ -274,6 +274,7 @@ uint32_t EmbeddedParametersInit(void)
{
FRESULT Fresult = FR_OK;
uint32_t Bytes = 0;
+ uint8_t* buffer = NULL;
ConfigurationParameters *Params;
@@ -281,9 +282,21 @@ uint32_t EmbeddedParametersInit(void)
if ((Bytes)&&(Bytes < 1000))
{
- Params = configuration_parameters__unpack(NULL, Bytes, (void *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4));
- LoadConfigurationParameters(Params);
- Report("LoadConfigurationParameters from flash", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0);
+ buffer = my_malloc (Bytes);
+ if (buffer)
+ {
+ memcpy(buffer, (void *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4),Bytes);
+
+ Params = configuration_parameters__unpack(NULL, Bytes, buffer);
+ LoadConfigurationParameters(Params);
+ Report("LoadConfigurationParameters from flash", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0);
+ free(buffer);
+ }
+ else
+ {
+ LoadConfigurationParameters(0);
+ Report("LoadConfigurationParameters default", __FILE__,__LINE__,0, RpMessage, Fresult, 0);
+ }
}
else
{
@@ -634,6 +647,10 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer)
responseContainer.error = ERROR_CODE__INVALID_PARAMETER;
responseContainer.errormessage = "JOb Active or incorrect parameters";
}
+ else
+ {
+ AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_NO_CFG_FILE,OFF);
+ }
uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
size_t container_size = message_container__pack(&responseContainer, container_buffer);
my_free(responseContainer.data.data);
@@ -698,6 +715,7 @@ uint32_t LoadConfigurationParamsFromFile(void)
EraseFlashSection(EMBEDDED_PARAMETERS_MAP_IN_FLASH,Bytes+4);
ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes);
ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, buffer);
+ EmbeddedParametersInit();
}
return Fresult;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c
index e376a99fe..cadfb3707 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.c
@@ -112,21 +112,25 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true,ProcessParams->headzone1temp);
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone1temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->headzone1temp);
}
else
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false,ProcessParams->headzone1temp);
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone1temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->headzone1temp);
}
if (ProcessParams->headzone2temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true,ProcessParams->headzone2temp);
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone2temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->headzone2temp);
}
else
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false,ProcessParams->headzone2temp);
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone2temp);
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->headzone2temp);
}
if (ProcessParams->headzone3temp>1)
{
@@ -193,6 +197,71 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, false,
ProcessParams->dryerzone3temp);
*/
+ /* if (ProcessParams->headzone7temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone7temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp);
+ }
+ if (ProcessParams->headzone8temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone8temp);
+ }
+ if (ProcessParams->headzone9temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone9temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone9temp);
+ }
+ if (ProcessParams->headzone10temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone10temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp);
+ }
+ if (ProcessParams->headzone11temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone11temp);
+ }
+ if (ProcessParams->headzone12temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone12temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone12temp);
+ }
+ if (ProcessParams->stspzone1temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->stspzone1temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->stspzone1temp);
+ }
+ if (ProcessParams->stspzone2temp>1)
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->stspzone2temp);
+ }
+ else
+ {
+ status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->stspzone2temp);
+ }
+*/
HeatersStopControlOnHeatersOff(ProcessParams);
dyeingspeed = ProcessParams->dyeingspeed;
dryerbufferlength = ProcessParams->dryerbufferlength;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 9415d9737..3baa81193 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -96,10 +96,10 @@ uint32_t DisasterControlId = 0xFF;
#ifdef Use_Head_Card
uint32_t HeaterId2PT100Id[HEATER_TYPE_MAX_HEATERS] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,HEAD_PT100_ZONE_1_0X80_0, HEAD_PT100_ZONE_2_0X80_1, HEAD_PT100_ZONE_3_0X82_0,
HEAD_PT100_ZONE_4_0X82_1, HEAD_PT100_ZONE_5_0X84_0, HEAD_PT100_ZONE_6_0X84_1,HEAD_PT100_MIXER_0X8E_0, HEAD_PT100_ZONE_7_0X86_0, HEAD_PT100_ZONE_8_0X86_1,
- HEAD_PT100_ZONE_9_0X88_0, HEAD_PT100_ZONE_10_0X88_1, HEAD_PT100_ZONE_11_0X8A_0, HEAD_PT100_ZONE_12_0X8A_1 };
+ HEAD_PT100_ZONE_9_0X88_0, HEAD_PT100_ZONE_10_0X88_1, HEAD_PT100_ZONE_11_0X8A_0, HEAD_PT100_ZONE_12_0X8A_1,HEAD_PT100_AIR_HEATER_1_0X8C_0,HEAD_PT100_AIR_HEATER_2_0X8C_1 };
HEATERS_CURRENT HeaterId2CurrentId[HEATER_TYPE_MAX_HEATERS] = {NUM_OF_CURRENT_HEATERS,HEATER_DRYER_CURRENT_1,HEATER_DRYER_CURRENT_2,HEAD_CURRENT_ZONE_1, HEAD_CURRENT_ZONE_2,
HEAD_CURRENT_ZONE_3, HEAD_CURRENT_ZONE_4, HEAD_CURRENT_ZONE_5, HEAD_CURRENT_ZONE_6, HEAD_CURRENT_MIXER, HEAD_CURRENT_ZONE_7,
- HEAD_CURRENT_ZONE_8, HEAD_CURRENT_ZONE_9, HEAD_CURRENT_ZONE_10, HEAD_CURRENT_ZONE_11, HEAD_CURRENT_ZONE_12};
+ HEAD_CURRENT_ZONE_8, HEAD_CURRENT_ZONE_9, HEAD_CURRENT_ZONE_10, HEAD_CURRENT_ZONE_11, HEAD_CURRENT_ZONE_12,HEAD_CURRENT_HTIN_1,HEAD_CURRENT_HTOT_1};
#else
uint32_t HeaterId2PT100Id[HEATER_TYPE_MAX_HEATERS] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HEAD6_PT100,MIXER_PT100,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
HEATERS_CURRENT HeaterId2CurrentId[HEATER_TYPE_MAX_HEATERS] = {NUM_OF_CURRENT_HEATERS,HEATER_DRYER_CURRENT_1,HEATER_DRYER_CURRENT_2,HEATER_HEAD_CURRENT_ZONE_1,HEATER_HEAD_CURRENT_ZONE_2,HEATER_HEAD_CURRENT_ZONE_3,HEATER_HEAD_CURRENT_ZONE_4,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_MIXCHIP_CURRENT};
@@ -340,7 +340,7 @@ uint32_t HeatersSingleHeaterEnd(int HeaterId)
int status = OK;
assert(HeaterId < HEATER_TYPE_MAX_HEATERS);
//HEATER_TYPE_ENUM HeaterId = HeaterPidtoHeaterId(HeaterPID_Id);
- ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0);
+ ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, HeaterPIDConfig[HeaterId].m_SetParam, 0);
if (HeaterId >= MAX_AC_HEATERS) //DC Heaters
{
if (ControlIdtoHeaterId [HeaterId]!=0xFF)
@@ -356,6 +356,7 @@ uint32_t HeatersSingleHeaterEnd(int HeaterId)
HeaterRecalculateHeaterParams(HeaterId, 0);
DeActivateHeater(HeaterId);
HeaterPIDConfig[HeaterId].m_SetParam = 0;
+ HeaterCmd[HeaterId].targettemperatue = 0;
HeaterReady[HeaterId] = true;
HeaterAtTemp[HeaterId] = true;
Disable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]);
@@ -389,6 +390,7 @@ uint32_t HeatersSingleHeaterEnd(int HeaterId)
Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater]);
Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater]);
HeaterPIDConfig[HeaterId].m_SetParam = 0;
+ HeaterCmd[HeaterId].targettemperatue = 0;
HeaterReady[HeaterId] = true;
HeaterAtTemp[HeaterId] = true;
}
@@ -458,7 +460,7 @@ int GetFilteredHeaterRead(int HeaterId)
* called by: Communication from host
* initialized all global data
*************************************************************************************/
-bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false};
+bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false};
uint32_t HeaterCommandRequestMessage(int HeaterNum, bool OnOff, int Temperature)
{
//uint32_t status = NOT_SUPPORTED;
@@ -729,12 +731,13 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
}
if (HeaterId >= MAX_AC_HEATERS) //DC Heaters
{
- ReportWithPackageFilter(HeatersFilter,"call PrepareDCHeater",__FILE__,HeaterId,Frequency,RpWarning,HeaterPIDConfig[HeaterId].m_params.dt, 0);
+ ReportWithPackageFilter(HeatersFilter,"call PrepareDCHeater",__FILE__,HeaterId,SetTemperatue,RpWarning,HeaterPreviousRead[HeaterId], 0);
if (PrepareDCHeater(HeaterId,Frequency,SetTemperatue)!=OK)
return ERROR;
}
else if (HeaterId == HEATER_TYPE__DryerAirHeater) //AC Heaters
{
+ ReportWithPackageFilter(HeatersFilter,"call PrepareACHeater",__FILE__,HeaterId,SetTemperatue,RpWarning,HeaterPreviousRead[HeaterId], 0);
PrepareACHeater(HeaterId,Frequency,SetTemperatue);
}
return OK;
@@ -779,11 +782,17 @@ bool HeaterGetOverTemperatureState(uint8_t HeaterId)
return HeaterMaxTempFlag[HeaterId];
}
uint32_t MainPT100Read = 0,SecondaryPT100Read = 0;
+int MinuteCallerMaxAc = 0,MinuteCallerMaxDc = 0,MinuteCallerAc = 0,MinuteCallerDc = 0;
uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=HEATER_TYPE_MAX_HEATERS;
int32_t MaxreadValue;
+ if (MinuteCallerMaxAc++ >= 60)
+ {
+ MinuteCallerMaxAc = 0;
+ ReportWithPackageFilter(HeatersFilter, "MinuteCallerMaxAc",__FILE__,__LINE__,IfIndex,RpError, readValue,0);
+ }
if (IfIndex>>8 != IfTypeHeaters)
{
ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0);
@@ -857,6 +866,11 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=HEATER_TYPE_MAX_HEATERS;
+ if (MinuteCallerMaxDc++ >= 60*10)
+ {
+ MinuteCallerMaxDc = 0;
+ ReportWithPackageFilter(HeatersFilter, "MinuteCallerMaxDc",__FILE__,__LINE__,IfIndex,RpError, readValue,0);
+ }
if (IfIndex>>8 != IfTypeHeaters)
{
ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0);
@@ -951,6 +965,11 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=HEATER_TYPE_MAX_HEATERS;
//uint8_t len = 0;
+ if (MinuteCallerAc++ >= 60)
+ {
+ MinuteCallerAc = 0;
+ ReportWithPackageFilter(HeatersFilter, "MinuteCallerAc",__FILE__,__LINE__,IfIndex,RpError, readValue,0);
+ }
if (IfIndex>>8 != IfTypeHeaters)
{
ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0);
@@ -1150,6 +1169,11 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
int index=HEATER_TYPE_MAX_HEATERS;
//int len;
//uint8_t len = 0;
+ if (MinuteCallerDc++ >= 60*10)
+ {
+ MinuteCallerDc = 0;
+ ReportWithPackageFilter(HeatersFilter, "MinuteCallerDc",__FILE__,__LINE__,IfIndex,RpError, readValue,0);
+ }
if (IfIndex>>8 != IfTypeHeaters)
{
ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
index a183ec996..1984420f3 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
@@ -25,8 +25,8 @@
#define CloseValve MidTank_Dispenser
#define OpenValve Dispenser_Mixer
-uint32_t CloseValveTimeout = 250;
-uint32_t OpenValveTimeout = 250;
+uint32_t CloseValveTimeout = 10;
+uint32_t OpenValveTimeout = 10;
#define DISPENSER_BUILD_PRESSURE_SPEED 900
#define DISPENSER_BUILD_PRESSURE_LIMIT 1.5
#define DISPENSER_BUILD_PRESSURE_TIMEOUT 60000
@@ -54,8 +54,10 @@ void IDS_Dispenser_SetPrepareValues( uint32_t DispenserBuildPressureSpeed,
}
void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout)
{
+#ifndef SPECIAL_DISPENSERS
CloseValveTimeout = CloseTimeout;
OpenValveTimeout = OpenTimeout;
+#endif
Report("IDS_Dispenser_SetTimeOutValues ",__FILE__,__LINE__,OpenValveTimeout,RpWarning,(int)CloseValveTimeout,0);
}
@@ -249,10 +251,16 @@ void IDS_Dispenser_Content_Init (void)
memcpy(&Bytes,(void *)DISPENSERS_MAP_IN_FLASH,sizeof(Bytes));
bool havedata = false;
DispenserData* StoredDispenserData;
- if ((Bytes)&&(Bytes < 4000))
+ if ((Bytes)&&(Bytes < 500))
{
- StoredDispenserData = dispenser_data__unpack(NULL,Bytes,(DISPENSERS_MAP_IN_FLASH+4));
- havedata = true;
+ buffer = my_malloc (Bytes);
+ if (buffer)
+ {
+ memcpy(buffer, (void *)(DISPENSERS_MAP_IN_FLASH+4),Bytes);
+ StoredDispenserData = dispenser_data__unpack(NULL,Bytes,buffer);
+ havedata = true;
+ free(buffer);
+ }
}
/*else
{
@@ -267,18 +275,25 @@ void IDS_Dispenser_Content_Init (void)
{
for(i=0;i<MAX_SYSTEM_DISPENSERS;i++)
{
- memcpy (&IDS_Dispenser_Data[i],&StoredDispenserData->dispenserinfo[i],sizeof(DispenserRunningData));
+ //memcpy (&IDS_Dispenser_Data[i],&StoredDispenserData->dispenserinfo[i],sizeof(DispenserRunningData));
IDS_Dispenser_Data[i].has_consumedinnanolitter = true;
IDS_Dispenser_Data[i].has_totalconsumedinnanolitter = true;
IDS_Dispenser_Data[i].has_direction = true;
IDS_Dispenser_Data[i].has_microsteps = true;
IDS_Dispenser_Data[i].has_numberofrefills = true;
IDS_Dispenser_Data[i].has_nanolitterperpulse = true;
+ IDS_Dispenser_Data[i].consumedinnanolitter = StoredDispenserData->dispenserinfo[i]->consumedinnanolitter;
+ IDS_Dispenser_Data[i].totalconsumedinnanolitter = StoredDispenserData->dispenserinfo[i]->totalconsumedinnanolitter;
+ IDS_Dispenser_Data[i].direction = StoredDispenserData->dispenserinfo[i]->direction;
+ IDS_Dispenser_Data[i].microsteps = StoredDispenserData->dispenserinfo[i]->microsteps;
+ IDS_Dispenser_Data[i].numberofrefills = StoredDispenserData->dispenserinfo[i]->numberofrefills;
+ IDS_Dispenser_Data[i].nanolitterperpulse = StoredDispenserData->dispenserinfo[i]->nanolitterperpulse;
+ Report("IDS_Dispenser load data ",__FILE__,i,(int)IDS_Dispenser_Data[i].totalconsumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[i].consumedinnanolitter,0);
}
dispenser_data__free_unpacked(StoredDispenserData,NULL);
free (buffer);
}
- Report("IDS_Dispenser load data ",__FILE__,__LINE__,(int)Bytes,RpWarning,(int)IDS_Dispenser_Data[0].nanolitterperpulse*100,0);
+ //Report("IDS_Dispenser load data ",__FILE__,__LINE__,(int)Bytes,RpWarning,(int)IDS_Dispenser_Data[0].nanolitterperpulse*100,0);
return;
//==================================
@@ -299,6 +314,7 @@ uint32_t IDS_Dispenser_Store_Data (void)
for(i=0;i<MAX_SYSTEM_DISPENSERS;i++)
{
StoreDispenserData.dispenserinfo[i] = &IDS_Dispenser_Data[i];
+ Report("IDS_Dispenser store data ",__FILE__,i,(int)IDS_Dispenser_Data[i].totalconsumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[i].consumedinnanolitter,0);
}
// Report("IDS_Dispenser_Store_Data 0",__FILE__,(int)IDS_Dispenser_Data[0].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[0].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[0].microsteps,0);
@@ -310,7 +326,7 @@ uint32_t IDS_Dispenser_Store_Data (void)
EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4);
ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size);
ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, dispensers_container_buffer);
- Report("IDS_Dispenser_Store ",__FILE__,__LINE__,(int)response_size,RpWarning,(int)StoreDispenserData.dispenserinfo[4]->nanolitterperpulse *100,0);
+ //Report("IDS_Dispenser_Store ",__FILE__,__LINE__,(int)response_size,RpWarning,(int)StoreDispenserData.dispenserinfo[4]->nanolitterperpulse *100,0);
/*Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT);
if (Status == FR_OK)
@@ -350,7 +366,7 @@ void IDS_Dispenser_Content_Calculation (char DispenserId)
}
if (DispenserId == 0)
{
- if ((seconds_counter++>=90000)&&(DispenserDataUpdated == true))//90000)// - one hour)
+ if ((seconds_counter++>=900)&&(DispenserDataUpdated == true))//9000)// - one hour)
{
seconds_counter = 0;
if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter)
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
index 41452cbad..1ea37a07e 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
@@ -489,6 +489,12 @@ uint32_t IDS_Dispenser_Alarm_Off (uint8_t DispenserId)
Report("IDS_Dispenser_Alarm_Off",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0);
return status;
}
+uint32_t IDS_ReCheck_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue)
+{
+ Report("Pulling dispenser down result",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,200,0);
+ SafeRemoveControlCallback(GetControlLowDevice_i(), IDS_ReCheck_Pressure_Callback );
+
+}
uint32_t IDS_Check_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue)
{
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId];
@@ -510,6 +516,7 @@ uint32_t IDS_Check_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue)
{
Report("Pulling dispenser down to reduce pressure",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,200,0);
MotorMove(HW_Motor_Id,1-MotorsCfg[HW_Motor_Id].directionthreadwize,200*MotorsCfg[HW_Motor_Id].microstep);
+ AddControlCallback("IDS_ReCheck_Pressure", IDS_ReCheck_Pressure_Callback, eOneSecond*4,TemplateDataReadCBFunction ,DispenserId, 0, 0 );
}
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 05676dd9e..ad9d75941 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -497,11 +497,13 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
if (pressureReady == false)
{
+#ifndef SPECIAL_DISPENSERS
if (DispenserBuildTimeCounter<(2*eOneSecond))
{
//REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes");
return OK;
}
+#endif
for (i = 0; i < MAX_DYE_DISPENSERS; i++)
{
//IDS_StopHomeDispenser(i);
@@ -511,19 +513,33 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
if (GetDispenserPressure(i) > DispenserPreparePressure)
{
NumofReadyDispensers++;
+ CurrentDispenserSpeed[i] = 0;
+#ifdef SPECIAL_DISPENSERS
+ MotorStop(HW_Motor_Id, Hard_Hiz);
+ //Report("IDS stopped ready",__FILE__,i,(int)(DispenserPreparePressure*100),RpWarning,(int)NumofReadyDispensers,0);
+#else
tempSpeed = CurrentDispenserSpeed[i];
updatedSpeed = (tempSpeed*0.985>100)?tempSpeed*0.985:100;
MotorSetSpeed(HW_Motor_Id, updatedSpeed);
CurrentDispenserSpeed[i] = updatedSpeed;
//Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0);
+#endif
}
else
{
+#ifdef SPECIAL_DISPENSERS
+ tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed;
+ if (tempSpeed<300)
+ tempSpeed = 300;
+#else
tempSpeed = CurrentDispenserSpeed[i];
+#endif
updatedSpeed = (tempSpeed*1.02<InitialDispenserSpeed)?tempSpeed*1.02:InitialDispenserSpeed;
MotorSetSpeed(HW_Motor_Id, updatedSpeed);
CurrentDispenserSpeed[i] = updatedSpeed;
+#ifdef SPECIAL_DISPENSERS
//Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0);
+#endif
}
}
}
@@ -544,6 +560,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
Report("pressureReady = true or timeout;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
}
}
+#ifndef SPECIAL_DISPENSERS
else if (endOfPrepareWCF == false)
{
if ((DispenserBuildTimeCounter == PRESSURE_READ_TIME_GAP)&&(FirstBrushStop))
@@ -631,8 +648,13 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
}
}
- //start new stage
+#endif
+#ifdef SPECIAL_DISPENSERS
+ if (pressureReady == true)
+#else
+ //start new stage
if (endOfPrepareWCF == true)
+#endif
{
SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback );
DispenserPrepareControlId = 0xFF;
@@ -762,7 +784,11 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
{
Report("Prepare Speed",__FILE__,HomingActive[i],i,RpWarning,(int)dispenserspeed,0);
MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); //set the dispenser to the
+#ifdef SPECIAL_DISPENSERS
+ MotorSetSpeed((TimerMotors_t)HW_Motor_Id,dispenserspeed); //set the dispenser to the
+#else
IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL);
+#endif
}
/*else
{
@@ -899,7 +925,11 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
{
if (DispenserUsedInJob[DispenserId] == true)
{
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);
+#else
MotorStop(HW_Motor_Id, Hard_Hiz);
+#endif
CurrentDispenserSpeed[Dispenser_i] = 0;
usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed);
Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0);
@@ -1019,7 +1049,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
//cleaning
return OK;
}
-
+#ifndef SPECIAL_DISPENSERS
if ((InterSegmentStartWFCFDispensers > 12000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000)))
{
//start prepare 4 seconds before wcf
@@ -1100,6 +1130,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
//close waste valve one second before segment - trial
Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head);
}
+#endif
return OK;
}
uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId)
@@ -1177,7 +1208,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId)
Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0);
return ERROR;
}
- Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)IntersegmentLength,0);
+ Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)lInterSegmentLength,0);
/*if (EnableCleaning == true)
{
InterSegmentStartSprayCleaner = 500;
@@ -1285,7 +1316,11 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId)
{
if (DispenserUsedInJob[DispenserId] == true)
{
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);
+#else
MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves
+#endif
CurrentDispenserSpeed[DispenserId] = 0;
//MotorSetSpeed(HW_Motor_Id, 5);
//CurrentDispenserSpeed[Dispenser_i] = 5;
@@ -1351,7 +1386,11 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers)
segmentfirst_speed,
NULL);*/
//Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL);
+#else
MotorSetSpeed(HW_Motor_Id, segmentfirst_speed);
+#endif
CurrentDispenserSpeed[DispenserId] = segmentfirst_speed;
usnprintf(IdsMessage, 80,
"Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d steps %d/%d",
@@ -1370,7 +1409,11 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers)
//IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/
if (DispenserUsedInJob[DispenserId] == true)
{
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);
+#else
MotorStop(HW_Motor_Id, Hard_Hiz);
+#endif
CurrentDispenserSpeed[DispenserId] = 0;
}
//Report("inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0);
@@ -1481,6 +1524,14 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
LOG_ERROR(FileBrushStop,"BrushStopReadError");
}
}
+//handle ending of presegment
+ if (DispenserPreSegmentControlId != 0xFF)
+ {
+ Report("IDS presegment not yet ended!!",__FILE__,__LINE__,(int)InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
+ IDS_Cleaning_Stop_Cleaning_Solution (NULL);
+ RemoveControlCallback(DispenserPreSegmentControlId, IDSPreSegmentStateCallbackRunner );
+ DispenserPreSegmentControlId = 0xFF;
+ }
IDS_StartBrushStop(n_dispensers, Dispensers);
JobBrushStopId++;
@@ -1544,7 +1595,11 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
if (DispenserUsedInJob[Dispenser_i]==false)//unconfigured dispenser
continue;
DispenserDistanceToSpoolReady[Dispenser_i] = false;
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL);
+#else
MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz);
+#endif
Control3WayValvesWithCallback ((Valves_t)Dispenser_i, MidTank_Dispenser, IDS_Valve_DistanceToSpoolValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer
CurrentDispenserSpeed[Dispenser_i] = 0;
//IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady);
@@ -1618,11 +1673,17 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
DispenserPreSegmentControlId = 0xFF;
}
+ IDS_Dispenser_Store_Data ();
+
for ( Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++)
{
if (DispenserUsedInJob[Dispenser_i] == true)
{
+#ifdef SPECIAL_DISPENSERS
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL);
+#else
MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz);
+#endif
Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer
CurrentDispenserSpeed[Dispenser_i] = 0;
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index 98a67f561..cef7e5af0 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -413,12 +413,21 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
if(request->amount == 0xB3) //fast refresh for pressure
{
LOG_ERROR(request->amount,"keep alive test");
-
- keepalivetest = true;
+ //keepalivetest = true;
response.progress = keepalivetest;
response.has_progress = true;
}
+ else
+ if(request->amount == 0xB4) //fast refresh for pressure
+ {
+ LOG_ERROR(request->amount,"IDS_Dispenser_Content_Init");
+ IDS_Dispenser_Content_Init();
+ //keepalivetest = true;
+ response.progress = keepalivetest;
+ response.has_progress = true;
+
+ }
else
if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index 049e64a64..b9bbf3aab 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -401,6 +401,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);
+ HeadCard_Actuators_Control(ACTOT, LOW,true);
+
return OK;
}
uint32_t Thread_Load_Lift_Dancers(void)
@@ -508,6 +510,7 @@
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);
+ HeadCard_Actuators_Control(ACTOT, LOW,false);
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 1c3326336..2484b9444 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -446,6 +446,7 @@ 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)
{
//#define MAX_CONTROL_SAMPLES 6
@@ -453,7 +454,7 @@ 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;
+ int i,index=MAX_THREAD_MOTORS_NUM,len;
int DancerId;
int32_t TranslatedReadValue, avreageSampleValue = 0;//,avreageMotorSampleValue = 0;
//double tempcalcspeed = 0;
@@ -604,14 +605,15 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
return OK;
}
NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index];
+ if ((index != FEEDER_MOTOR)||(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)) //feeder unit handles errors opposite to left unit
+ {
+ NormalizedError = (-1*NormalizedError);
+ }
+
MotorControlConfig[index].m_mesuredParam = NormalizedError;
DancerError[DancerId] = NormalizedError;
MotorControlConfig[index].m_calculatedError = PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
&MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral);
- if ((index != FEEDER_MOTOR)||(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)) //feeder unit handles errors opposite to left unit
- {
- MotorControlConfig[index].m_calculatedError = (-1*MotorControlConfig[index].m_calculatedError);
- }
/*else
{
//KeepNormalizedError = NormalizedError;
@@ -637,14 +639,37 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}*/
calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index];
//calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*CurrentControlledSpeed[index];
+ if (FirstCalcInJob == true)
+ {
+ if (index == FEEDER_MOTOR)
+ {
+ FirstCalcInJob = false;
+ len = usnprintf(TMessage, 150, "read %d avg %d error(6) %d integral(9) %d,delta(9) %d, calc(3) %d speed %d",
+ ReadValue,avreageSampleValue,(int)(MotorControlConfig[index].m_mesuredParam*1000000),
+ (int)(MotorControlConfig[index].m_integral*1000000000),(int)((MotorControlConfig[index].m_mesuredParam*MotorControlConfig[index].m_params.dt)*1000000000),
+ (int)(MotorControlConfig[index].m_calculatedError*1000),(int)calculated_speed);
+ ReportWithPackageFilter(ThreadFilter,TMessage,__FILE__,__LINE__,DancerId,RpError,ReadValue,0);
+
+ }
+ }
+
#ifndef TEST_PID_THREAD
if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue)
#else
if (index == FEEDER_MOTOR) //feeder unit handles errors opposite to left unit
#endif
{
- CurrentControlledSpeed[index] = calculated_speed;
- MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed);
+ if (calculated_speed>5.0)
+ {
+ CurrentControlledSpeed[index] = calculated_speed;
+ MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed);
+ }
+ else
+ {
+ if (calculated_speed<0)
+ ReportWithPackageFilter(ThreadFilter,"Negative speed",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0);
+ }
+
/*if (((JobCounter % 2000) == index*100)&&(index == WINDER_MOTOR)) //feeder unit handles errors opposite to left unit
{
ReportWithPackageFilter(ThreadFilter,"MotorSpeedUpdated",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0);
@@ -719,7 +744,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
//********************************************************************************************************************
uint32_t ThreadPrepareState(void *JobDetails)
{
- int Motor_i, HW_Motor_Id, Pid_Id;
+ int Motor_i,i, HW_Motor_Id, Pid_Id;
JobTicket* JobTicket = JobDetails;
CurrentSegmentId = 0;
@@ -742,6 +767,7 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
EnableIntersegment = JobTicket->enableintersegment;
IntersegmentLength = JobTicket->intersegmentlength;
+ FirstCalcInJob = true;
if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)
{
ThreadMotorIdToMotorId[FEEDER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING;
@@ -791,7 +817,17 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request)
MotorControlConfig[Motor_i].m_mesuredParam = 0;
MotorControlConfig[Motor_i].m_preError = 0;
MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage
-
+//////////////////////////////////////////////////
+ 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
+ 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;
+/////////////////////////////////////////////////////
MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize);
if (Motor_i == FEEDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled
@@ -888,10 +924,11 @@ void SetOriginMotorSpeed(float process_speed)
OriginalMotorSpd_2PPS[Motor_i] = (int) motor_speed;
InitialDryerSpeed = 0.0;
CurrentControlledSpeed[Motor_i] = (int) motor_speed;
- //ReportWithPackageFilter(ThreadFilter,"Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0);
+ if (process_speed > 1)
+ ReportWithPackageFilter(ThreadFilter,"Original Speed",__FILE__,Motor_i,(int)motor_speed,RpWarning,process_speed,0);
- for (i = 0; i <= MAX_CONTROL_SAMPLES; i++)
- MotorSpeedSamples[Motor_i][i] = motor_speed;
+ // for (i = 0; i <= MAX_CONTROL_SAMPLES; i++)
+ // MotorSpeedSamples[Motor_i][i] = motor_speed;
}
}
void ThreadPreSegmentEnded(void)
@@ -900,7 +937,7 @@ void ThreadPreSegmentEnded(void)
REPORT_MSG (0,"First ThreadPreSegmentEnded");
PreSegmentReady(Module_Thread,ModuleDone);
}
-int DrierDivider = 10;
+int DrierDivider = 20;
uint32_t ThreadDryerRampUp(uint32_t IfIndex, uint32_t BusyFlag)
{
InitialDryerSpeed += (OriginalMotorSpd_2PPS[DRYER_MOTOR]/DrierDivider);
@@ -943,7 +980,14 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId)
PrepareState = false;
#ifndef TEST_PID_THREAD
// set the new speed in the dryer motor to the speed of the new segment
- DrierDivider = dyeingspeed/5; //ramp up drier in 5 cm/sec steps
+ if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)
+ {
+ DrierDivider = dyeingspeed/3; //ramp up drier in 5 cm/sec steps
+ }
+ else
+ {
+ DrierDivider = dyeingspeed/5; //ramp up drier in 5 cm/sec steps
+ }
ReportWithPackageFilter(ThreadFilter,"Drier ramp up",__FILE__,__LINE__,(int)dyeingspeed,RpWarning,(int)DrierDivider,0);
InitialDryerSpeed = OriginalMotorSpd_2PPS[DRYER_MOTOR]/DrierDivider;
MotorSetSpeed(ThreadMotorIdToMotorId[DRYER_MOTOR],InitialDryerSpeed );
@@ -1065,7 +1109,7 @@ char Endstr[150];
{
int Motor_i;
ThreadControlActive = false;
-
+ uint32_t status = OK,tempCtl;
usnprintf(Endstr, 100, "Total _processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength);
SendJobProgress(0.0,0,false, Endstr);
ReportWithPackageFilter(ThreadFilter,Endstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0);
@@ -1091,15 +1135,19 @@ char Endstr[150];
for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++)
{
+ tempCtl = ControlIdtoMotorId[Motor_i];
if (ControlIdtoMotorId[Motor_i] != 0xFF)
{
- if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction) == OK)
+ status = RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction);
+ if(status == OK)
ControlIdtoMotorId[Motor_i] = 0xFF;
else
ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)ControlIdtoMotorId[Motor_i],0);
}
+ //ReportWithPackageFilter(ThreadFilter,"Remove Control",__FILE__,Motor_i,(int)status,RpError,(int)tempCtl,0);
+
}
- Task_sleep(10);
+ Task_sleep(100);
for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++)
{
MotorStop(ThreadMotorIdToMotorId[Motor_i],Hard_Hiz);