aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-09-13 15:30:10 +0300
committerAvi Levkovich <avi@twine-s.com>2018-09-13 15:30:10 +0300
commit18cb71bab8fec9bf2ffb0da9e320e031dacffac6 (patch)
tree8c560dd5e115c34dd3793727059d45defa915134 /Software/Embedded_SW/Embedded/Modules
parente1a8d1a06b4b82e80317eb64feaf7d8ed94d758f (diff)
parentc2ad66a1133b79bb59505985e7f4cd2bc2c96aed (diff)
downloadTango-18cb71bab8fec9bf2ffb0da9e320e031dacffac6.tar.gz
Tango-18cb71bab8fec9bf2ffb0da9e320e031dacffac6.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c63
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h20
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c36
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c4
5 files changed, 103 insertions, 22 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index f79237a66..5b52eda1c 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -100,23 +100,23 @@ typedef struct
char *EventName;
}AlarmHandlingItem;
AlarmHandlingItem AlarmItem[MAX_SYSTEM_ALARMS]={
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser1Empty,NULL,"Dispenser1Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser2Empty,NULL,"Dispenser2Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_3,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser3Empty,NULL,"Dispenser3Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_4,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser4Empty,NULL,"Dispenser4Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_5,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser5Empty,NULL,"Dispenser5Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_6,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser6Empty,NULL,"Dispenser6Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_7,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser7Empty,NULL,"Dispenser7Empty"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_UP_8,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser8Empty,NULL,"Dispenser8Empty"},
-/*{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_1,false,true,DEBUG_LOG_CATEGORY__Warning,0,0,0,false,EVENT_TYPE__Dispenser1LowLevel,NULL,"Dispenser1LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_2,false,true,DEBUG_LOG_CATEGORY__Warning,1,0,0,false,EVENT_TYPE__Dispenser2LowLevel,NULL,"Dispenser2LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_3,false,true,DEBUG_LOG_CATEGORY__Warning,2,0,0,false,EVENT_TYPE__Dispenser3LowLevel,NULL,"Dispenser3LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_4,false,true,DEBUG_LOG_CATEGORY__Warning,3,0,0,false,EVENT_TYPE__Dispenser4LowLevel,NULL,"Dispenser4LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_5,false,true,DEBUG_LOG_CATEGORY__Warning,4,0,0,false,EVENT_TYPE__Dispenser5LowLevel,NULL,"Dispenser5LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_6,false,true,DEBUG_LOG_CATEGORY__Warning,5,0,0,false,EVENT_TYPE__Dispenser6LowLevel,NULL,"Dispenser6LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_7,false,true,DEBUG_LOG_CATEGORY__Warning,6,0,0,false,EVENT_TYPE__Dispenser7LowLevel,NULL,"Dispenser7LowLevel"},
-{100,LimitSwitchAlarm,GPI_LS_DISPENSER_25_8,false,true,DEBUG_LOG_CATEGORY__Warning,7,0,0,false,EVENT_TYPE__Dispenser8LowLevel,NULL,"Dispenser8LowLevel"},*/
-{100,TemperatureAlarm,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,250,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL,"GeneralInternalOverTemperature"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser1Empty,NULL,"Dispenser1Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser2Empty,NULL,"Dispenser2Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser3Empty,NULL,"Dispenser3Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_4,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser4Empty,NULL,"Dispenser4Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_5,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser5Empty,NULL,"Dispenser5Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_6,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser6Empty,NULL,"Dispenser6Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_7,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser7Empty,NULL,"Dispenser7Empty"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmEmpty_8,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__Dispenser8Empty,NULL,"Dispenser8Empty"},
+/*{100,LimitSwitchAlarm,LimitSwitchAlarmLow_1,false,true,DEBUG_LOG_CATEGORY__Warning,0,0,0,false,EVENT_TYPE__Dispenser1LowLevel,NULL,"Dispenser1LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_2,false,true,DEBUG_LOG_CATEGORY__Warning,1,0,0,false,EVENT_TYPE__Dispenser2LowLevel,NULL,"Dispenser2LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_3,false,true,DEBUG_LOG_CATEGORY__Warning,2,0,0,false,EVENT_TYPE__Dispenser3LowLevel,NULL,"Dispenser3LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_4,false,true,DEBUG_LOG_CATEGORY__Warning,3,0,0,false,EVENT_TYPE__Dispenser4LowLevel,NULL,"Dispenser4LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_5,false,true,DEBUG_LOG_CATEGORY__Warning,4,0,0,false,EVENT_TYPE__Dispenser5LowLevel,NULL,"Dispenser5LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_6,false,true,DEBUG_LOG_CATEGORY__Warning,5,0,0,false,EVENT_TYPE__Dispenser6LowLevel,NULL,"Dispenser6LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_7,false,true,DEBUG_LOG_CATEGORY__Warning,6,0,0,false,EVENT_TYPE__Dispenser7LowLevel,NULL,"Dispenser7LowLevel"},
+{100,LimitSwitchAlarm,LimitSwitchAlarmLow_8,false,true,DEBUG_LOG_CATEGORY__Warning,7,0,0,false,EVENT_TYPE__Dispenser8LowLevel,NULL,"Dispenser8LowLevel"},*/
+{100,TemperatureAlarm,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,300,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL,"GeneralInternalOverTemperature"},
//{100,TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1,250,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL,"GeneralInternalOverTemperature"},
//{100,TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2,80,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__GeneralInternalOverTemperature,NULL,"GeneralInternalOverTemperature"},
{100,TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP3,300,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,0,false,EVENT_TYPE__DyeingHead6OverTemperature,NULL,"DyeingHead6OverTemperature"},
@@ -306,6 +306,24 @@ void AlarmHandlingSetAlarm(uint32_t AlarmId, bool value)
if (AlarmItem[Alarm_i].EventType == AlarmId)
{
AlarmItem[Alarm_i].Status = value;
+ if (value == true)
+ {
+ AlarmHandlingConsequentActions(Alarm_i, AlarmItem[Alarm_i].Severity);
+ // report the alarm!
+ AlarmItem[Alarm_i].EventPtr = malloc (sizeof(Event));
+ if (AlarmItem[Alarm_i].EventPtr)
+ {
+ event__init(AlarmItem[Alarm_i].EventPtr);
+ AlarmItem[Alarm_i].EventPtr->has_type = true;
+ AlarmItem[Alarm_i].EventPtr->type = AlarmItem[Alarm_i].EventType;
+ AlarmItem[Alarm_i].EventPtr->message = AlarmItem[Alarm_i].EventName;
+ }
+ }
+ else
+ {
+ if (AlarmItem[Alarm_i].EventPtr)
+ free (AlarmItem[Alarm_i].EventPtr);
+ }
break;
}
}
@@ -370,7 +388,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
}
break;
case LimitSwitchAlarm:
- value = FPGA_Read_limit_Switches(AlarmItem[Alarm_i].DeviceId);
+ value = IDS_CheckDispenserLimitSwitch(AlarmItem[Alarm_i].DeviceId);
if (value == AlarmItem[Alarm_i].AlarmValue)
{
Status = true;
@@ -417,6 +435,9 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
}
}
break;
+ case DoNotPollAlarm:
+ Status = AlarmItem[Alarm_i].Status;
+ break;
default:
break;
} //switch
@@ -465,7 +486,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
event__init(AlarmItem[Alarm_i].EventPtr);
AlarmItem[Alarm_i].EventPtr->has_type = true;
AlarmItem[Alarm_i].EventPtr->type = AlarmItem[Alarm_i].EventType;
- AlarmItem[Alarm_i].EventPtr->message = TestMessage;
+ AlarmItem[Alarm_i].EventPtr->message = AlarmItem[Alarm_i].EventName;
}
}
else // alarm off
@@ -588,7 +609,9 @@ uint32_t ResolveEventRequestFunc(MessageContainer* requestContainer)
if (AlarmItem[Alarm_i].EventType == request->type)
{
AlarmItem[Alarm_i].Status = false;
- status = OK;
+ if (AlarmItem[Alarm_i].EventPtr)
+ free (AlarmItem[Alarm_i].EventPtr);
+ status = OK;
break;
}
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 0df71e327..100065f94 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -133,6 +133,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId)
}
DeActivateHeater(HeaterId);
+ HeaterReady[HeaterId] = true;
}
else if (HeaterId < MAX_AC_HEATERS) //AC Heaters
{
@@ -154,6 +155,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId)
}
DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain);
DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary);
+ HeaterReady[HeaterId] = true;
}
return status;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index 75d86fdd7..06e45d1b8 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -10,6 +10,24 @@
#include "PMR/Hardware/HardwarePIDControl.pb-c.h"
#define MAX_SYSTEM_DISPENSERS 8
+typedef enum {
+ LimitSwitchAlarmEmpty_1, //MOTO_DISPENSER_1 = 6,
+ LimitSwitchAlarmEmpty_2, //MOTO_DISPENSER_2 = 7,
+ LimitSwitchAlarmEmpty_3, //MOTO_DISPENSER_3 = 8,
+ LimitSwitchAlarmEmpty_4, //MOTO_DISPENSER_4 = 9,
+ LimitSwitchAlarmEmpty_5, //MOTO_DISPENSER_5 = 10,
+ LimitSwitchAlarmEmpty_6, //MOTO_DISPENSER_6 = 11,
+ LimitSwitchAlarmEmpty_7, //MOTO_DISPENSER_7 = 12,
+ LimitSwitchAlarmEmpty_8, //MOTO_DISPENSER_8 = 13,
+ LimitSwitchAlarmLow_1, //MOTO_DISPENSER_1 = 6,
+ LimitSwitchAlarmLow_2, //MOTO_DISPENSER_2 = 7,
+ LimitSwitchAlarmLow_3, //MOTO_DISPENSER_3 = 8,
+ LimitSwitchAlarmLow_4, //MOTO_DISPENSER_4 = 9,
+ LimitSwitchAlarmLow_5, //MOTO_DISPENSER_5 = 10,
+ LimitSwitchAlarmLow_6, //MOTO_DISPENSER_6 = 11,
+ LimitSwitchAlarmLow_7, //MOTO_DISPENSER_7 = 12,
+ LimitSwitchAlarmLow_8, //MOTO_DISPENSER_8 = 13,
+}LimitSwitchAlarms;
void Calculateinit (void);
@@ -24,6 +42,8 @@ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request);
uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback);
uint32_t IDS_StopHomeDispenser (uint32_t deviceID);
+uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id);
+
float CalculateDispenserPressure (int DispenserId);
float GetDispenserPressure(int DispenserId);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
index 6c1609138..2fbc90c69 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
@@ -17,6 +17,7 @@
#include "drivers/Motors/Motor.h"
#include "drivers/Valves/Valve.h"
+
FPGA_GPI_ENUM Dispenser_Id_to_LS_Id[MAX_SYSTEM_DISPENSERS] = {
GPI_LS_DISPENSER_DOWN_1, //MOTO_DISPENSER_1 = 6,
GPI_LS_DISPENSER_DOWN_2, //MOTO_DISPENSER_2 = 7,
@@ -27,6 +28,24 @@ FPGA_GPI_ENUM Dispenser_Id_to_LS_Id[MAX_SYSTEM_DISPENSERS] = {
GPI_LS_DISPENSER_DOWN_7, //MOTO_DISPENSER_7 = 12,
GPI_LS_DISPENSER_DOWN_8, //MOTO_DISPENSER_8 = 13,
};
+FPGA_GPI_ENUM Dispenser_Id_to_Alarm_LS_Id[MAX_SYSTEM_DISPENSERS*2] = {
+ GPI_LS_DISPENSER_UP_1, //MOTO_DISPENSER_1 = 6,
+ GPI_LS_DISPENSER_UP_2, //MOTO_DISPENSER_2 = 7,
+ GPI_LS_DISPENSER_UP_3, //MOTO_DISPENSER_3 = 8,
+ GPI_LS_DISPENSER_UP_4, //MOTO_DISPENSER_4 = 9,
+ GPI_LS_DISPENSER_UP_5, //MOTO_DISPENSER_5 = 10,
+ GPI_LS_DISPENSER_UP_6, //MOTO_DISPENSER_6 = 11,
+ GPI_LS_DISPENSER_UP_7, //MOTO_DISPENSER_7 = 12,
+ GPI_LS_DISPENSER_UP_8, //MOTO_DISPENSER_8 = 13,
+ GPI_LS_DISPENSER_25_1, //MOTO_DISPENSER_1 = 6,
+ GPI_LS_DISPENSER_25_2, //MOTO_DISPENSER_2 = 7,
+ GPI_LS_DISPENSER_25_3, //MOTO_DISPENSER_3 = 8,
+ GPI_LS_DISPENSER_25_4, //MOTO_DISPENSER_4 = 9,
+ GPI_LS_DISPENSER_25_5, //MOTO_DISPENSER_5 = 10,
+ GPI_LS_DISPENSER_25_6, //MOTO_DISPENSER_6 = 11,
+ GPI_LS_DISPENSER_25_7, //MOTO_DISPENSER_7 = 12,
+ GPI_LS_DISPENSER_25_8, //MOTO_DISPENSER_8 = 13,
+};
callback_fptr HomingRequestCallback[MAX_SYSTEM_DISPENSERS]={0,0,0,0,0,0,0,0};
bool HomingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
@@ -92,3 +111,20 @@ uint32_t IDS_StopHomeDispenser (uint32_t deviceID)
MotorSetMicroStep(deviceID, MotorsCfg[deviceID].microstep);
return OK;
}
+
+uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id)
+{
+ int DispenserId;
+ if (LS_Id <= LimitSwitchAlarmEmpty_8)
+ {
+ DispenserId = LS_Id;
+ }
+ else
+ {
+ DispenserId = LS_Id-LimitSwitchAlarmEmpty_8;
+ }
+ if (isMotorConfigured(DispenserId + HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)==false)
+ return true; //false is the alarm value
+ else
+ return FPGA_Read_limit_Switches(Dispenser_Id_to_Alarm_LS_Id[LS_Id]);
+}
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 8d9eb6117..acd8a8983 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -292,8 +292,8 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId)
DispenserSegmentReady[DispenserId] = false;
Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer
MotorSetSpeed(HW_Motor_Id, segmentfirst_speed);
- usnprintf(Message, 80, "Dispenser %d nl/sec %d nl/pulse %d speed %d",Dispenser_i,JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanolitterpersecond,
- JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanoliterperpulse,segmentfirst_speed);
+ usnprintf(Message, 80, "Dispenser %d nl/sec %d nl/pulse %d speed %d",Dispenser_i,(int)JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanolitterpersecond,
+ (int)JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanoliterperpulse,(int)segmentfirst_speed);
//LOG_ERROR(segmentfirst_speed,Message);
//Report(Message,__FILE__,__LINE__,Dispenser_i,RpWarning,segmentfirst_speed,0);
SendJobProgress(0.0,0,false, Message);