aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-06-29 21:50:42 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-06-29 21:50:42 +0300
commitadebfb6bccfc75ae2057a538f5b028b45ac2d8b4 (patch)
treeddb9fb2c1147f7e7aedcb403405fcf5d31f01f56 /Software/Embedded_SW/Embedded
parent7707bbff3cf8d37d9cab419353ce8d6f28a482b0 (diff)
downloadTango-adebfb6bccfc75ae2057a538f5b028b45ac2d8b4.tar.gz
Tango-adebfb6bccfc75ae2057a538f5b028b45ac2d8b4.zip
Embedded SW Release note - Version 1.4.6.34 - Pack 2+
============================================================= Validate IFS and cartridge location on manual waste handling - bug #3033 better handling of powerstep01 configuration and motors clocks waste level: logs, fixed reading during waste filling, fix PT100 reading in WHS //important, OK improve diespensers reading in I2C timing //important OK alarm handling: fix report (mid tank empty) diagnostics - waste level in liters Heating and process - avoid activating all heaters at once. tested for flat head. Heating - remove alarms when colling dwn due to change of RML or idle mode Thread - improve feeder tension handling system: hold initalization process after 3 failures to enable code / parameters change and debugging
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c48
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c132
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c12
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c25
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c46
-rw-r--r--Software/Embedded_SW/Embedded/Software Release Notes.txt14
15 files changed, 146 insertions, 179 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index 60707d0cb..4b1fec423 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,7 +20,7 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,4,6,33};
+TangoVersion_t _gTangoVersion = {1,4,6,34};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index 4c74839a1..4b6bdc129 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -20,7 +20,7 @@
#define NO_INITIAL_HEATING
#define MAX_STRING_LEN 255 //Embedded version + filter.c
-//#define WATCHDOG
+#define WATCHDOG
//#define DISPESER_TEST
//#define FPGA_WATCHDOG_DISABLE
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
index d7f0c8277..0d767b864 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
@@ -121,7 +121,7 @@ uint32_t Check_Head_Type_Via_EEPROM()
if (status == 0xFF)
{
ACTIVITY_RED_LED_ON;
- AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
+ //AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
}
if((Head_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF))
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
index 8bd21b9b4..7c98b53da 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
@@ -22,9 +22,9 @@
#include "i2c_fifo.h"
#include "i2c.h"
-
-
-
+uint32_t LastReadI2C_BASE; unsigned char LastReadaddr; unsigned char* LastReaddata; unsigned int LastReadlen;
+uint32_t LastWriteI2C_BASE; unsigned char LastWriteaddr; unsigned char *LastWritedata; unsigned int LastWritelen;
+Task_Handle TaskId;
uint32_t Arb_Loss_Count = 0;
//*****************************************************************************
//! Indicates whether or not the I2C bus has timed out.
@@ -50,6 +50,7 @@ bool I2CMasterTimeout(uint32_t ui32Base)
}
}
+char I2CErrMsg[181];
uint32_t I2C_WriteBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data, unsigned int len)
{
uint32_t status = OK;
@@ -212,11 +213,31 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf,
//Byte2Write = Byte2Write & 0xFF;
- /*if(No_BytesToWrite <= 2) {
+ status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
+ //status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite);
+ /*if(No_BytesToWrite <= 2)
+ {
status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
- } else {
+ }
+ else
+ {
status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite);
}*/
+ if (status == OK)
+ {
+ //LastWriteI2C_BASE = I2C_BASE;
+ LastWriteaddr = Slave_Add;
+ LastWritedata = buff;
+ LastWritelen = No_BytesToWrite;
+ TaskId = Task_self();
+ }
+ else
+ {
+ usnprintf(I2CErrMsg, 180, "I2C Err write 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add,
+ LastReadaddr, LastReadlen,
+ LastWriteaddr, LastWritelen, Task_self(),TaskId);
+ Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0);
+ }
//uint32_t I2C_W_buf[256] = {0},i;
@@ -225,7 +246,6 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Write_buf,
// I2C_W_buf[i] = request->bytestwrite[i];
// }
- status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
if (status)
{
if (Arb_Loss_Count++ >= 5)
@@ -289,6 +309,22 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint32_t *I2C_Read_buf, u
}
}
+ if (status == OK)
+ {
+ //LastReadI2C_BASE = I2C_BASE;
+ LastReadaddr = Slave_Add;
+ LastReaddata = buff;
+ LastReadlen = No_BytesToRead;
+ TaskId = Task_self();
+ }
+ else
+ {
+ usnprintf(I2CErrMsg, 180, "I2C Err read 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add,
+ LastReadaddr, LastReadlen,
+ LastWriteaddr, LastWritelen, Task_self(),TaskId);
+ Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0);
+ }
+
/*else
{
if (Arb_Loss_Count)
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
deleted file mode 100644
index 8d11589be..000000000
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Cartridges.c
- *
- * Created on: Jun 29, 2020
- * Author: avi
- */
-#include "include.h"
-#include "DataDef.h"
-#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
-
-typedef enum
-{
- UPPER_CART,
- LOWER_CART,
- UNKNOWN_CART,//at power up
- NONE_CART,//NA
-}WASTE_ID;
-
-//WASTE_ID Waste_Id;
-
-typedef enum
-{
- CART_UNKNOWN,//after power-up...
- CART_OUT,
- CART_IN,
- CART_SELECTED,
-}CART_STATE;
-
-typedef enum
-{
- CART_INIT,//unknown, acquire info, decide
- CART_IDLE,//empty + valid (RFID tag OK), ready to use
- CART_FULL,
- CART_EMPTYING,
- CART_EMPTYING_PAUSED,
- CART_BLOCKED,//RFID FAILED ...
-}CART_STATUS;// mode
-
-typedef struct
-{
- CART_STATE State;
- uint8_t RFID_Legality;
- double Leval;//waste tank level mili litters
- uint8_t Warnings;//empty / full / overflow
- bool Emptying_Process;// YES / NO
- uint8_t Emptying_Duration; //if Emptying_Process YES
-}WASTE_HANDLING;
-
-typedef struct
-{
- uint8_t Door; // OPEN / CLOSE / unknown
- uint8_t Waste_Active; // CART_2 / CART_3 / NONE
- WASTE_HANDLING Waste_Handling[2];
-}CART_HANDLING;
-
-CART_HANDLING Cart_Handling;
-
-void cartWaste_Init()
-{
- //Initial state - OUT
- Cart_Handling.Waste_Handling[UPPER_CART].State = CART_UNKNOWN;
- Cart_Handling.Waste_Handling[LOWER_CART].State = CART_UNKNOWN;
-
- Pannel_Leds(CART_2,MODE_OFF);
- Pannel_Leds(CART_3,MODE_OFF);
-
- Cart_Handling.Door = UNKNOWN;
- Cart_Handling.Waste_Active = NONE_CART;
-}
-
-void cartCart_door()//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
-{
- if(Get_COVER_1_State(CartridgesDoor))//to check the polarity
- {
- Cart_Handling.Door = OPEN;
- }
- else
- {
- Cart_Handling.Door = CLOSE;
- }
-}
-
-void cartCART_INSERTED(WASTE_ID CartId) //every 1 sec.
-{
- switch(CartId)
- {
- case UPPER_CART:
- if(Is_Cartridge_Present(CART_2) == true)
- {
- Cart_Handling.Waste_Handling[UPPER_CART].State = CART_IN;
- Pannel_Leds(CART_2,MODE_ON);
- }
- break;
- case LOWER_CART:
- if(Is_Cartridge_Present(CART_3) == true)
- {
- Cart_Handling.Waste_Handling[LOWER_CART].State = CART_IN;
- Pannel_Leds(CART_3,MODE_ON);
- }
- break;
- default:
- break;
- }
-}
-
-void cartCART_EXTRACTED(WASTE_ID CartId)
-{
- if(Cart_Handling.Waste_Active == CART_SELECTED)
- {
- #warning notify waste module
- }
-
- Cart_Handling.Waste_Handling[CartId].State = CART_OUT;
-
- switch(CartId)
- {
- case UPPER_CART:
- if(Is_Cartridge_Present(CART_2) == false)
- {
- Pannel_Leds(CART_2,MODE_OFF);
- }
- break;
- case LOWER_CART:
- if(Is_Cartridge_Present(CART_3) == false)
- {
- Pannel_Leds(CART_3,MODE_OFF);
- }
- break;
- default:
- break;
- }
-}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
index 3671ff4e0..db9ee1053 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
@@ -554,7 +554,7 @@ double CalculateWHSWasteTankLevelMiliLiter()
waste_volume_milliliter = Vm_ml -LocalV0_ml;
}
//ReportWithPackageFilter(WasteFilter,"------------ waste_volume_ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0);
- Report("------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0);
+ Report("------------ get waste level in ml -----------------", __FILE__, LocalV0_ml, Vm_ml, RpMessage, (int)(waste_volume_milliliter), 0);
return waste_volume_milliliter;
}
@@ -578,13 +578,13 @@ bool waste_seq_cont()
case Open_Valve:
Set_WHS_valve(VOC_VALVE, OPEN, 0);
Write_WHS_Valve_reg();
- Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ //Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
OpenClose = Close_Valve;
break;
case Close_Valve:
Set_WHS_valve(VOC_VALVE, CLOSE, 0);
Write_WHS_Valve_reg();
- Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ //Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
OpenClose = Read_Waste;
break;
case Read_Waste:
@@ -607,7 +607,7 @@ bool waste_seq_cont()
WasteCounter = 0;
waste_level_ml = avg/8;
- Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, avg, RpMessage, (int)(waste_level_ml), 0);
}
return status;
}
@@ -673,7 +673,7 @@ bool waste_seq_step1_cont()
Trigger_SetWHS_VOC_Valve(OPEN);
- //WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 );
+ WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 );
Report("------------ waste_seq_step1_cont -----------------", __FILE__, __LINE__, WasteControlId, RpMessage, 0, 0);
return status;
@@ -704,7 +704,7 @@ bool waste_seq_step1()
WasteCounter = 0;
OpenClose = CLOSE;
- ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ Report("------------ open waste level Air valve -----------------", __FILE__, __LINE__, WHS_Eeprom.bytes.Orifice_Waste_Level_V0_ml, RpMessage, 0, 0);
Trigger_SetWHS_VOC_Valve(OPEN);
ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index c5f8037aa..8618524d9 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -470,6 +470,7 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value)
Valve_Set(IDS_Id_to_AirValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
Valve_Set(IDS_Id_to_CartrideValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
}
+ return OK;
}
else
{
@@ -634,9 +635,9 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam)
calculated_speed = volt + 100;
if (calculated_speed < (volt - 100))
calculated_speed = volt - 100;*/
- usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d",
+ /*usnprintf(whs_str, 150, "WHS_Pid_Testing_Func meas %d avg %d set %d error %d integral %d blower %d",
(int)(measuredParam*100),(int)(avreageSampleValue*100),(int)(setParam*100),(int)(WHS_ControlData.m_calculatedError*100),(int)(WHS_ControlData.m_integral*100),(int)(calculated_speed));
- Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0);
+ Report(whs_str, __FILE__,__LINE__, (int)(calculated_speed), RpMessage, (int)(volt), 0);*/
/*if (fabs(WHS_ControlData.m_calculatedError)>(WHS_ControlData.m_params.MAX/2))
{
close_loop_time = 1;
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 356f192a3..1c2b6662d 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -652,6 +652,9 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId)
usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType);
return JOB_OTHER_ALARM;
}
+ case ALARM_SOURCE_TYPE__FluidLevelAlarm:
+ usnprintf(AlarmReasonStr, 100, "Midtank %d is empty",AlarmItem[AlarmId].DeviceId);
+ return JOB_OUT_OF_DYE;
default:
usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType);
return JOB_OTHER_ALARM;
@@ -993,6 +996,8 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
if (FoundReason != JOB_OK)
{
JobEndReason = getEndReason(AlarmId);
+ if (JobEndReason!=FoundReason)
+ ReportWithPackageFilter(AlarmFilter,"end reason mismatch!!!", __FILE__,AlarmId,JobEndReason, RpMessage, FoundReason, 0);
//AbortJob(AlarmReasonStr);
//PrepareReady(Module_Alarms,ModuleFail);
ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index 849d1cd9b..8e01fe18e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -115,7 +115,7 @@ double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1];
double midtankinklevel[MAX_SYSTEM_DISPENSERS][1];
double MidTankpressure[MAX_SYSTEM_DISPENSERS][1];
double HeadFlowMeter;
-double tempFlow = 0.0;
+//double tempFlow = 0.0;
double DrierFlowMeter;
double AcVoltage;
double WasteLevel = 0.0;
@@ -819,11 +819,11 @@ void DiagnosticOneMinuteCollection(void)
DiagnosticsMonitor.dryerairflow = &DrierFlowMeter;
HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER);
- if (fabs(tempFlow - HeadFlowMeter)>0.05)
+ /*if (fabs(tempFlow - HeadFlowMeter)>0.05)
{
Report("Head flow change 1m",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0);
tempFlow = HeadFlowMeter;
- }
+ }*/
DiagnosticsMonitor.n_headairflow = 1;
DiagnosticsMonitor.headairflow = &HeadFlowMeter;
@@ -858,11 +858,11 @@ void DiagnosticOneSecCollection(void)
HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER);
DiagnosticsMonitor.n_headairflow = 1;
DiagnosticsMonitor.headairflow = &HeadFlowMeter;
- if (fabs(tempFlow - HeadFlowMeter)>0.25)
+ /*if (fabs(tempFlow - HeadFlowMeter)>0.25)
{
Report("Head flow change 1s",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0);
tempFlow = HeadFlowMeter;
- }
+ }*/
WasteLevel = GetWHSWasteTankLevelMiliLiter()/1000;//change from ml to litter
static double InitCounter = 0;
if (GetMachineState()<MACHINE_STATE_NO_PROCESS_PARAMS)
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c
index 968522e48..bf7d761dd 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.c
@@ -200,6 +200,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
}
if(Head_Type != HEAD_TYPE_STAPLE_SPUN)
{
+ Trigger_HeaterWriting();
if (ProcessParams->headzone4temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp);
@@ -239,6 +240,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->headzone8temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp);
@@ -263,6 +265,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->headzone11temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp);
@@ -282,6 +285,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
}
if(Head_Type == HEAD_TYPE_STAPLE_SPUN)
{
+ Trigger_HeaterWriting();
if (ProcessParams->rblowertemp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->rblowertemp);
@@ -290,6 +294,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->rblowertemp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->lblowertemp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->lblowertemp);
@@ -298,6 +303,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->lblowertemp);
}
+ Trigger_HeaterWriting();
Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,ProcessParams->rblowerflow);
Trigger_Head_Fan_Control(HEAD_FAN_LEFT,ProcessParams->lblowerflow);
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 309eada85..73da7924b 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -1110,6 +1110,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
}
return ERROR;
}
+bool IncreaseBlower = false;
uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=HEATER_TYPE_MAX_HEATERS;
@@ -1259,23 +1260,29 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
ReportWithPackageFilter(HeatersFilter,"AC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0);
HeaterAtTemp[index] = true;
HeaterPrepareReady();
+ IncreaseBlower = false;
}
}
if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband+2)/100)))
&& (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100))))
{
- if (BlowerCfg.enabled == true)
+ if (IncreaseBlower == false)
{
- if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
- {
- WHS_Set_SetPoint_Q_value(headairflow);
- }
- else
+ IncreaseBlower = true;
+ if (BlowerCfg.enabled == true)
{
- Turn_the_Blower_On();//Turn on with the Default_Voltage
- if (BlowerCfg.voltage)
- Control_Voltage_To_Blower(BlowerCfg.voltage);
+ if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
+ {
+ WHS_Set_SetPoint_Q_value(headairflow);
+ }
+ else
+ {
+ Turn_the_Blower_On();//Turn on with the Default_Voltage
+ if (BlowerCfg.voltage)
+ Control_Voltage_To_Blower(BlowerCfg.voltage);
+ }
}
+
}
}
if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0))
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index 965ea30da..2b65ca806 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -863,7 +863,7 @@
uint32_t Thread_Load_Dryer_UnLoading(void)
{
uint32_t temp;
- REPORT_MSG(LoadStages, "Thread UnLoad State Machine step");
+ REPORT_MSG(LoadStages, "Thread Load State Machine step Dryer Unloading");
//LoadArmRounds = 0;
//uint32_t numberOfSteps = 0;
//Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40
@@ -1258,7 +1258,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
bool ThreadLoaded(void)
{
- uint32_t ReadValue;
+ /* uint32_t ReadValue;
int32_t PoolerValue,WinderValue,FeederValue;
//this function tests if there is a thread in the machine. all dancers are in lowermost position then there is no thread.
@@ -1280,7 +1280,7 @@ bool ThreadLoaded(void)
Report("Thread is out",__FILE__,(-1*PoolerValue),(-1*WinderValue),RpWarning,(-1*FeederValue),0);
return true;
}
- else
+ else*/
return false;
}
void ThreadLoadRequest(MessageContainer* requestContainer)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 8a4960433..d762e507f 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -217,7 +217,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
}
- FeederSpeedStore[FeederSpeedIndex++] = length;
+ /*FeederSpeedStore[FeederSpeedIndex++] = length;
if (FeederSpeedIndex>=SPEED_STORE_SIZE)
{
FeederSpeedIndex = 0;
@@ -225,8 +225,8 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
for (Speed_i = 0;Speed_i<SPEED_STORE_SIZE;Speed_i++)
FeederSpeedAverage+=FeederSpeedStore[Speed_i];
FeederSpeedAverage = FeederSpeedAverage/SPEED_STORE_SIZE;
- ReportWithPackageFilter(ThreadFilter,"Average Speed 2 second",__FILE__,__LINE__,(int)(FeederSpeedAverage*100),RpWarning,(int)(PullerSpeedAverage*100),0);
- }
+ ReportWithPackageFilter(ThreadFilter,"Avg len 100ms last 2 sec",__FILE__,(int)PoolerTotalProcessedLength,(int)(FeederSpeedAverage*1000),RpWarning,(int)(PullerSpeedAverage*1000),0);
+ }*/
TotalProcessedLength += (length/100);
TempTotalProcessedLength = TotalProcessedLength;
#ifdef FEEDER_LENGTH_CALCULATION
@@ -317,7 +317,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
length = 0;
}
- PullerSpeedStore[PullerSpeedIndex++] = length;
+ /*PullerSpeedStore[PullerSpeedIndex++] = length;
if (PullerSpeedIndex>=SPEED_STORE_SIZE)
{
PullerSpeedIndex = 0;
@@ -326,7 +326,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
PullerSpeedAverage+=PullerSpeedStore[Speed_i];
PullerSpeedAverage = PullerSpeedAverage/SPEED_STORE_SIZE;
//ReportWithPackageFilter(ThreadFilter,"Average Speed 2 second",__FILE__,__LINE__,(int)(FeederSpeedAverage*100),RpWarning,(int)(PullerSpeedAverage*100),0);
- }
+ }**/
//}
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
index cf9fb3b7b..03ee73daf 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
@@ -20,6 +20,7 @@
#include <Drivers/I2C_Communication/I2C_Task.h>
#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
//
//#define CARTRIDGE_INK_TIMEOUT 60
//#define CARTRIDGE_INK_TIMEOUTx2 120
@@ -231,11 +232,11 @@ bool RdCartridgeParam(cartridge_name cart_name)
{
case waste_cartridge1:
WHS_info.cartridge_1.serial_number = temp_funcion; //to do
- WHS_info.cartridge_1.status = temp_funcion; // to do
+ WHS_info.cartridge_1.status = WasteEmpty; // to do
break;
case waste_cartridge2:
WHS_info.cartridge_2.serial_number = temp_funcion;
- WHS_info.cartridge_2.status = temp_funcion;
+ WHS_info.cartridge_2.status = WasteEmpty;
break;
case INK_cartridge:
ReadCartridgeData(cart_name);
@@ -313,6 +314,12 @@ U8 set_cartridge_2(U8 cartridge_status)
bool SetWastePump( bool power)
{
+ if ((IFS_Availability[1] == IFS_RECOGNIZED)&&(IFS_Availability[2] == IFS_RECOGNIZED)) //ifs installed -check cartridges
+ {
+ if ((WHS_WasteCartridgeLowerPresent() == false)&&(WHS_WasteCartridgeMiddlePresent() == false))
+ return ERROR;
+ }
+
/*
set the waste pump on/off
off - :
@@ -415,6 +422,29 @@ U8 CartridgeWasteFilling(bool status)
SetWasteLevelEmptyingLimit(GetWHSWasteTankLevelMiliLiter());
waste_seq_step1_cont();
}
+ switch (WHS_info.active_cartridge)
+ {
+ case waste_cartridge1:
+ Pannel_Leds( CART_2, MODE_ON); //set led color
+ cart2.color = BLINK;
+ ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge1 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ case waste_cartridge2:
+ Pannel_Leds( CART_3, MODE_ON); //set led color
+ cart3.color = BLINK;
+ ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge2 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ case no_waste_cartridge:
+ ReportWithPackageFilter(WasteFilter,"------------ !!!!!WHS No waste cartridge !!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ ReportWithPackageFilter(WasteFilter,"------------ !!!! WHS insert cartridge!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ SetWastePump(CLOSE);
+ //WHS_info.WHS_pump.time = 0;
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
+ ret = ERROR;
+ break;
+ default:
+ break;
+ }
ret=OK;
}
else // stop Waste cartridge filling
@@ -460,9 +490,9 @@ U8 CartridgeWasteFilling(bool status)
/* ------read waste tank sensors ----------- */
#define WASTE_CARTRIDGE_SIZE 1500
-#define WASTE_LEVEL_OVERFLOW 4000
-#define WASTE_LEVEL_FULL 3500
-#define WASTE_LEVEL_EMPTY 2100
+#define WASTE_LEVEL_OVERFLOW 2700
+#define WASTE_LEVEL_FULL 2300
+#define WASTE_LEVEL_EMPTY 900
double WasteLevelOverflow = WASTE_LEVEL_OVERFLOW;
double WasteLevelFull = WASTE_LEVEL_FULL;
double WasteLevelEmpty = WASTE_LEVEL_EMPTY;
@@ -727,7 +757,7 @@ bool WasteTankCBFunction()
ReportWithPackageFilter(WasteFilter,"------------ WHS, Cartridge cover open -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);//popup message :"Cartridge cover open" //todo
if ( WHS_info.WHS_pump.status == OPEN)
{
- CartridgeWasteFilling(CLOSE);
+ CartridgeWasteFilling(OFF);
pump_on_flag = OPEN;
}
@@ -759,12 +789,12 @@ bool WasteTankCBFunction()
}
else // CLOSE
{
- //if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(OPEN);
+ if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(ON);
SetActiveWastCartridge();
if (pump_on_flag == OPEN )
{
WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; // todo
- // CartridgeWasteFilling(OPEN);
+ CartridgeWasteFilling(OPEN);
pump_on_flag = CLOSE;
}
IFS_info.Cartridge_Ink_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_device_Id , WasteTankCBFunction );
diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt
index b53a7016f..a090a9612 100644
--- a/Software/Embedded_SW/Embedded/Software Release Notes.txt
+++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt
@@ -1,3 +1,17 @@
+Embedded SW Release note - Version 1.4.6.34 - Pack 2+
+=============================================================
+Validate IFS and cartridge location on manual waste handling - bug #3033
+better handling of powerstep01 configuration and motors clocks
+waste level: logs, fixed reading during waste filling,
+fix PT100 reading in WHS //important, OK
+improve diespensers reading in I2C timing //important OK
+alarm handling: fix report (mid tank empty)
+diagnostics - waste level in liters
+Heating and process - avoid activating all heaters at once. tested for flat head.
+Heating - remove alarms when colling dwn due to change of RML or idle mode
+Thread - improve feeder tension handling
+system: hold initalization process after 3 failures to enable code / parameters change and debugging
+
Embedded SW Release note - Version 1.4.6.33 - Pack 2+
=============================================================
remove logs from I2C errors - show only summary.