aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-09-06 15:24:39 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-09-06 15:24:39 +0300
commitdc3e9a8e3936f24d01d85652ff2fb9b8c320261c (patch)
treed58239e55ba1eaf0a27788c0d20f004c72fa6355 /Software/Embedded_SW/Embedded
parentb68b34d6247175678f76cc40bb60019685740dd9 (diff)
downloadTango-dc3e9a8e3936f24d01d85652ff2fb9b8c320261c.tar.gz
Tango-dc3e9a8e3936f24d01d85652ff2fb9b8c320261c.zip
some fixes in dispenser handling, implement setheaterstate, procedures and stubs updated
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/Communication/Container.c3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c9
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c36
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c8
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c19
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c19
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c1
10 files changed, 73 insertions, 30 deletions
diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c
index b14efbd55..307e4eecb 100644
--- a/Software/Embedded_SW/Embedded/Communication/Container.c
+++ b/Software/Embedded_SW/Embedded/Communication/Container.c
@@ -349,6 +349,9 @@ void receive_callback(char* buffer, size_t length)
case MESSAGE_TYPE__StartEventsNotificationRequest:
StartEventsNotificationRequestFunc(requestContainer);
break;
+ case MESSAGE_TYPE__SetHeaterStateRequest:
+ SetHeaterStateRequestFunc(requestContainer);
+ break;
case MESSAGE_TYPE__StopEventsNotificationRequest:
StopEventsNotificationRequestFunc(requestContainer);
break;
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index 8c12b4ea3..f33edee50 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -222,7 +222,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S
//SetMotorSpeed (deviceId, parameter);
MotorCallback[MotorId] = callback;
MotorTimeout[MotorId] = 0;
- MotorTimeLag[MotorId] = 40;
+ MotorTimeLag[MotorId] = 20;
MotorTimeLimit[MotorId] = timeout;
if (MotorId ==HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM)
{
@@ -233,7 +233,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S
//MotorStop(MotorId,Hard_Hiz );
MotorMove(MotorId,direction,Steps );
- MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/40, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 );
+ MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveCallBackFunction, /*eTenMillisecond*/20, MotorControlGetnBusyState,(IfTypeMotors*0x100+MotorId), MotorId, 0 );
MotorControlCallback[MotorId] = MotorMoveCallBackFunction;
return MotorControlId[MotorId];
}
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index e8e2e4ed0..78398119b 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -446,6 +446,7 @@ uint16_t FluidLevelWarning = 20,FluidLevelError = 50;
int NumOfSystemAlarms = MAX_SYSTEM_ALARMS;
//bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
bool EventsNotificationRequestAccepted = false;
+char AlarmReasonStr[100];
//read dispensers limit switches. 25 - send warning. up - stop job and send alarm
//Cone missing
//Dyeing head over temperature
@@ -594,7 +595,8 @@ void AlarmHandlingLoadFlags(void)
CheckCurrentAlarms = (AlarmhandlingFlags && 0x0002);
CheckTamperAlarms = (AlarmhandlingFlags && 0x0004);
CheckMotorAlarms = (AlarmhandlingFlags && 0x0008);
- ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0);
+ usnprintf(AlarmReasonStr, 100, "Alarm group from EEPPROM Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms);
+ ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0);
}
void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms)
@@ -604,7 +606,9 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms
CheckCurrentAlarms = checkCurrentAlarms;
CheckTamperAlarms = checkTamperAlarms;
CheckMotorAlarms = checkMotorAlarms;
- ReportWithPackageFilter(AlarmFilter,"Alarm group setting", __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0);
+ usnprintf(AlarmReasonStr, 100, "Alarm group setting Current %d Motor %d Tamper %d",CheckCurrentAlarms,CheckMotorAlarms,CheckTamperAlarms);
+ ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,0, RpMessage, 1*CheckHardLimitAlarms+2*CheckCurrentAlarms+3*CheckTamperAlarms+4*CheckMotorAlarms, 0);
+
if (CheckHardLimitAlarms) flags |= 0x1;
if (CheckCurrentAlarms) flags |= 0x2;
if (CheckTamperAlarms) flags |= 0x4;
@@ -615,7 +619,6 @@ void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms
AlarmhandlingFlags = flags;
}
}
-char AlarmReasonStr[100];
JobEndReasonEnum getEndReason(uint32_t AlarmId)
{
switch (AlarmItem[AlarmId].AlarmSource)
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
index 00d5a2a65..c428faea3 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
@@ -22,6 +22,8 @@ void HeatingTestSendResonse(uint32_t status, bool last,bool heater1Active,bool h
uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature);
void HeatingTestRequest(MessageContainer* requestContainer);
void HeatingTestPollRequest(MessageContainer* requestContainer);
+void SetHeaterStateRequestFunc(MessageContainer* requestContainer);
+
bool HeaterCheckReady(void);
bool isHeaterReady(uint8_t HeaterId);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 56e71b345..783e337cc 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -15,6 +15,8 @@
#include "PMR/Hardware/HardwarePidControlType.pb-c.h"
#include "PMR/Hardware/HardwarePidControl.pb-c.h"
#include "PMR/Hardware/HardwareBlower.pb-c.h"
+#include "PMR/Diagnostics/SetHeaterStateRequest.pb-c.h"
+#include "PMR/Diagnostics/SetHeaterStateResponse.pb-c.h"
#include "PMR/Diagnostics/HeaterType.pb-c.h"
#include "PMR/Diagnostics/HeaterState.pb-c.h"
#include "PMR/common/MessageContainer.pb-c.h"
@@ -638,6 +640,40 @@ int GetFilteredHeaterRead(int HeaterId)
* initialized all global data
*************************************************************************************/
bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false};
+
+void SetHeaterStateRequestFunc(MessageContainer* requestContainer)
+{
+
+ uint32_t status = PASSED;
+ MessageContainer responseContainer;
+
+ SetHeaterStateRequest* request = set_heater_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+
+ SetHeaterStateResponse response = SET_HEATER_STATE_RESPONSE__INIT;
+
+ if (request->has_heatertype)
+ {
+ if ((request->has_isactive)&&(request->has_setpoint))
+ status = HeaterCommandRequestMessage(request->heatertype,true,request->setpoint);
+ else
+ status = HeaterCommandRequestMessage(request->heatertype,false,request->setpoint);
+ }
+
+ responseContainer = createContainer(MESSAGE_TYPE__SetHeaterStateResponse, requestContainer->token, true, &response, &set_heater_state_response__pack, &set_heater_state_response__get_packed_size);
+ if (status)
+ {
+ responseContainer.has_error = true;
+ responseContainer.error = (ErrorCode)status;
+ }
+ //-------------------------------------------------------------------------------------------
+ uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer));
+ size_t container_size = message_container__pack(&responseContainer, container_buffer);
+ free(responseContainer.data.data);
+ SendChars((char*)container_buffer, container_size);
+
+ set_heater_state_request__free_unpacked(request,NULL);
+
+}
uint32_t HeaterCommandRequestMessage(int HeaterNum, bool OnOff, int Temperature)
{
//uint32_t status = NOT_SUPPORTED;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
index 75acec0b6..c8f435cb9 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
@@ -354,12 +354,16 @@ void IDS_Dispenser_Content_Calculation (char DispenserId)
//double consumedintimeframe = (double)(CurrentDispenserSpeed[DispenserId]); //pulses only
//consumedintimeframe = 10+DispenserId;
IDS_Dispenser_Data[DispenserId].consumedinnanolitter += (CurrentDispenserSpeed[DispenserId]*4/10);//400 milliseconds ==> speed*4/10
+ if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0)
+ IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0;
//if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]>0))
- // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data ",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0);
+ // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data info",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)CurrentDispenserSpeed[DispenserId],0);
+ //if ((DispenserId == 2)&&(CurrentDispenserSpeed[DispenserId]<0))
+ // ReportWithPackageFilter(IDSFilter,"IDS_Dispenser_Data fill",__FILE__,DispenserId,(int)IDS_Dispenser_Data[DispenserId].consumedinnanolitter,RpWarning,(int)(-1*CurrentDispenserSpeed[DispenserId]),0);
if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter<0)
IDS_Dispenser_Data[DispenserId].consumedinnanolitter = 0;
- if (CurrentDispenserSpeed[DispenserId]>0.1)
+ if (abs(CurrentDispenserSpeed[DispenserId])>0)
{
DispenserDataUpdated = true;
IDS_Dispenser_Data[DispenserId].totalconsumedinnanolitter += (CurrentDispenserSpeed[DispenserId]/10);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 327d80eb1..d40f3c00b 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -452,10 +452,12 @@ c. Go to step 2.a x Segment.BrushStopsCount.
uint32_t DispenserPrepareControlId = 0xFF;
int NumOfActiveDispensers = 0;
int DispenserBuildTimeCounter = 0;
-#define DISPENSER_UP_MOVEMENT
+ double TargetNumberOfStepsPreRun,MaximalPressurePreRun;
int DispenserTotalPrepareSteps[MAX_SYSTEM_DISPENSERS];
bool DispenserLastMovementDown[MAX_SYSTEM_DISPENSERS];
-#define PRESSURE_READ_TIME_GAP 100
+
+ #define PRESSURE_READ_TIME_GAP 100
+
uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
{
if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off)
@@ -582,10 +584,10 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
{
DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond);
HW_Motor_Id = DispenserIdToMotorId[i];
-//#ifdef DISPENSER_UP_MOVEMENT
- if (DispenserTotalPrepareSteps[i]<InitialDispenserTimeout)
+
+ if (DispenserTotalPrepareSteps[i]<TargetNumberOfStepsPreRun)
{
- AdjustDispenserSpeedToPressure(i,InitialDispenserPressure,pressure);
+ AdjustDispenserSpeedToPressure(i,MaximalPressurePreRun,pressure);
}
else if (pressure > DispenserPreparePressure*1.2)
{
@@ -597,7 +599,6 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
if (AdjustDispenserSpeedToPressure(i,DispenserPreparePressure,pressure) == true)
NumofReadyDispensers++;
}
-//#endif
ReportWithPackageFilter(IDSFilter,"IDS prepare",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(CurrentDispenserSpeed[i]*100),0);
}
}
@@ -758,7 +759,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
JobTicket* JobTicket = JobDetails;
JobEndSequence = false;
- if ((pressurebuildup>0.1)&&(pressurebuildup<4.0))
+ if ((pressurebuildup>0.1)&&(pressurebuildup<4.5))
{
ReportWithPackageFilter(IDSFilter,"Setting pressure from RML feeder tension",__FILE__,__LINE__,(int)(pressurebuildup*100),RpWarning,(int)(DispenserPreparePressure*100),0);
DispenserPreparePressure = pressurebuildup;
@@ -778,6 +779,8 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl
CleaningDispenserSpeed = 0;
EnableCleaning = false;
}
+ TargetNumberOfStepsPreRun = InitialDispenserTimeout;
+ MaximalPressurePreRun = InitialDispenserPressure;
for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++)
{
@@ -1840,7 +1843,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
DispenserPreSegmentControlId = 0xFF;
}
- IDS_Dispenser_Store_Data ();
+ //IDS_Dispenser_Store_Data ();
for ( Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index 7295084e3..8856d873a 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -898,6 +898,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
uint32_t timeout = 0xFFFFFFFFU;
ROM_WatchdogReloadSet(WATCHDOG0_BASE, timeout);
#endif
+ HeatersEnd();
FRESULT iFResult = Init_Flash_File_System(true);
if(iFResult != FR_OK)
{
@@ -930,6 +931,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor
{
LOG_ERROR(request->delay,"FlashInit");
+ HeatersEnd();
FlashInit();
response.progress = (double)OK;
response.has_progress = true;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index a4172185a..cd7c146fe 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -373,10 +373,7 @@
}
if (Head_Type == HEAD_TYPE_FLAT)
{
- Report("Thread_Load_Lift_actuators",__FILE__,__LINE__,LOW,RpMessage,false,0);
- //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP);
- //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP);
- //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP
+ Report("Thread_Load_Lift right actuator",__FILE__,__LINE__,LOW,RpMessage,false,0);
Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP
}
return OK;
@@ -400,11 +397,8 @@
}
if (Head_Type == HEAD_TYPE_FLAT)
{
- Report("Thread_Load_Lift_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,false,0);
+ Report("Thread_Load_Lift left actuator",__FILE__,__LINE__,LOW,RpMessage,false,0);
Trigger_Head_Actuators_Stub(ACTOT, ENABLE, UP);
- //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, UP);
- //Trigger_Head_Actuators_Control(ACTOT, LOW,true);//UP
- //Trigger_Head_Actuators_Control(ACTIN, LOW,true);//UP
}
return OK;
@@ -476,7 +470,7 @@
MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LLOADING], Thread_Load_HomingCallback,25000);
if (Head_Type == HEAD_TYPE_FLAT)
{
- Report("Thread_Load_Close_ OT actuator",__FILE__,__LINE__,LOW,RpMessage,true,0);
+ Report("Thread_Load_Close left actuator",__FILE__,__LINE__,LOW,RpMessage,true,0);
Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN);
}
@@ -516,12 +510,7 @@
}
if (Head_Type == HEAD_TYPE_FLAT)
{
- Report("Thread_Load_Close_actuators",__FILE__,__LINE__,LOW,RpMessage,true,0);
-
- //Trigger_Head_Actuators_Control(ACTIN, LOW,false);//DOWN
- //Trigger_Head_Actuators_Stub(ACTOT, ENABLE, DOWN);
-
- //Trigger_Head_Actuators_Stub(ACTIN, ENABLE, DOWN);
+ Report("Thread_Load_Close right actuators",__FILE__,__LINE__,LOW,RpMessage,true,0);
HeadCard_Actuators_Relocate();
}
return OK;
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index e16909c45..c217a68b3 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -1401,6 +1401,7 @@ Void jobTask(UArg arg0, UArg arg1)
JobResumed = false;
setmachineActive(false);
SetMachineStatus(MACHINE_STATE__Ready);
+ IDS_Dispenser_Store_Data();
resetIdleCounter();
CurrentJob = NULL;
if (IFS_Clearing_SuctionWaiting == true)