aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-12-04 17:46:52 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-12-04 17:46:52 +0200
commit6150db333d81879d3aba19613cca67cb92b22774 (patch)
treec610e14f9dd21a78ab5298824335589b59ecae7c /Software/Embedded_SW/Embedded/Modules
parent95cabc98a8cd6baebc697c179be9fb68913ac483 (diff)
parente64abeba3fd00cf6111b698384650b0e2a530436 (diff)
downloadTango-6150db333d81879d3aba19613cca67cb92b22774.tar.gz
Tango-6150db333d81879d3aba19613cca67cb92b22774.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.c119
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h1
2 files changed, 100 insertions, 20 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 2d0e5a4c7..fc2fa7625 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -26,6 +26,7 @@
#include "PMR/Hardware/HardwareDancerType.pb-c.h"
#include "modules/thread/thread_ex.h"
+#include "modules/heaters/heaters_ex.h"
#include "modules/ids/ids_ex.h"
#include <PMR/Diagnostics/Event.pb-c.h>
#include <PMR/Diagnostics/EventType.pb-c.h>
@@ -261,8 +262,6 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId)
return JOB_OTHER_ALARM;
}
}
-char Alarmstr[150];
-
uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Severity)
{
switch (Severity)
@@ -277,14 +276,11 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever
case DEBUG_LOG_CATEGORY__Error:
if (JobIsActive())
{
- memset(Alarmstr,0,sizeof(Alarmstr));
- usnprintf(Alarmstr, 100, "Alarm set on Alarm Id, Value",(int)AlarmId,(int)AlarmItem[AlarmId].AlarmValue);
- strcat (Alarmstr, AlarmItem[AlarmId].EventName );
JobEndReason = getEndReason(AlarmId);
- AbortJob(Alarmstr);
- Report("Alarm set on - stop job", __FILE__,__LINE__,AlarmItem[AlarmId].AlarmValue, RpMessage, AlarmItem[AlarmId].DebounceCounter, 0);
- Report(AlarmItem[AlarmId].EventName, __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0);
+ AbortJob(AlarmItem[AlarmId].EventName);
+ Report(AlarmItem[AlarmId].EventName, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0);
}
+//Stop Job
break;
case DEBUG_LOG_CATEGORY__Debug:
case DEBUG_LOG_CATEGORY__Info:
@@ -295,6 +291,83 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever
}
return OK;
}
+uint32_t AlarmHandlingPrepareJob(void *CurrentJob)
+{
+ JobTicket* JobTicket = CurrentJob;
+ bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
+ EventType HeaterEventType[MAX_HEATERS_NUM] = {EVENT_TYPE__DryerOverTemperature,EVENT_TYPE__DryerOverTemperature,EVENT_TYPE__DryerOverTemperature,EVENT_TYPE__DyeingHead1OverTemperature,EVENT_TYPE__DyeingHead2OverTemperature,
+ EVENT_TYPE__DyeingHead3OverTemperature,EVENT_TYPE__DyeingHead4OverTemperature,EVENT_TYPE__DyeingHead5OverTemperature,EVENT_TYPE__DyeingHead6OverTemperature,
+ EVENT_TYPE__GeneralInternalOverTemperature};
+ int Segment_i,Brush_i,Dispenser_i,DispenserId,Alarm_i,Heater_i,AlarmId=0;
+ HeaterState HeaterState;
+
+ uint32_t status = OK;
+ if (JobTicket->n_segments == 0)
+ return OK;
+ for (Segment_i=0;Segment_i<JobTicket->n_segments;Segment_i++)
+ {
+ for (Brush_i=0;Brush_i<JobTicket->segments[Segment_i]->n_brushstops;Brush_i++)
+ {
+ if (JobTicket->segments[Segment_i]->brushstops[Brush_i]->n_dispensers)
+ {
+ for (Dispenser_i = 0;Dispenser_i < JobTicket->segments[Segment_i]->brushstops[Brush_i]->n_dispensers;Dispenser_i++)
+ {
+ //prepare the SW structures
+ DispenserId = JobTicket->segments[Segment_i]->brushstops[Brush_i]->dispensers[Dispenser_i]->index;
+ if (JobTicket->segments[Segment_i]->brushstops[Brush_i]->dispensers[Dispenser_i]->nanolitterpersecond>0.0)
+ {
+ DispenserInUse[DispenserId] = true;
+ }
+ }//for dispenser
+ }//if dispensers
+ }//for brush
+ }//for segments
+ for (Dispenser_i=0;Dispenser_i<MAX_SYSTEM_DISPENSERS;Dispenser_i++)
+ {
+ if (DispenserInUse[Dispenser_i] == true)
+ {
+ for (Alarm_i = 0;Alarm_i<MAX_SYSTEM_ALARMS;Alarm_i++)
+ {
+ if (AlarmItem[Alarm_i].EventType == (EVENT_TYPE__Dispenser1Empty+Dispenser_i))
+ {
+ if (AlarmItem[Alarm_i].Status == true)
+ {
+ status = ERROR;
+ AlarmId = Alarm_i;
+ break;
+ }
+ }
+ }
+ }
+ }
+ for (Heater_i = 0;Heater_i<MAX_HEATERS_NUM;Heater_i++)
+ {
+ LoadHeaterState((HeaterType)Heater_i,&HeaterState);
+ if (HeaterState.setpoint)//temperature is set - heater active
+ {
+ for (Alarm_i = 0;Alarm_i<MAX_SYSTEM_ALARMS;Alarm_i++)
+ {
+ if (AlarmItem[Alarm_i].EventType == HeaterEventType[Heater_i])
+ {
+ if (AlarmItem[Alarm_i].Status == true)
+ {
+ status = ERROR;
+ AlarmId = Alarm_i;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (status == ERROR)
+ {
+ JobEndReason = getEndReason(AlarmId);
+ AbortJob(AlarmItem[AlarmId].EventName);
+ Report(AlarmItem[AlarmId].EventName, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0);
+ }
+ return status;
+}
+
/*
uint32_t AlarmHandling_CalculateTemperatures(uint32_t SensorId, uint32_t Data)
{
@@ -401,7 +474,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
switch (AlarmItem[Alarm_i].AlarmSource)
{
case TemperatureAlarm:
- ivalue = TemperatureSensorRead(AlarmItem[Alarm_i].DeviceId);
+ ivalue = TemperatureSensorRead((TEMPERATURE_SENSOR_ID_ENUM)AlarmItem[Alarm_i].DeviceId);
if (AlarmItem[Alarm_i].AlarmDirection == true)
{
if (ivalue/100 >= AlarmItem[Alarm_i].AlarmValue)
@@ -420,7 +493,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
}
break;
case LimitSwitchAlarm:
- value = IDS_CheckDispenserLimitSwitch(AlarmItem[Alarm_i].DeviceId);
+ value = IDS_CheckDispenserLimitSwitch((LimitSwitchAlarms)AlarmItem[Alarm_i].DeviceId);
if (value == AlarmItem[Alarm_i].AlarmValue)
{
Status = true;
@@ -446,12 +519,12 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
case CurrentAlarm:
break;
case MotorAlarm:
- if (isMotorConfigured(AlarmItem[Alarm_i].DeviceId) == false)
+ if (isMotorConfigured((TimerMotors_t)AlarmItem[Alarm_i].DeviceId) == false)
{
Status = false;
break;
}
- value = MotorGetStatus(AlarmItem[Alarm_i].DeviceId);
+ value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId);
if (AlarmItem[Alarm_i].AlarmDirection == true)
{
if (value && AlarmItem[Alarm_i].AlarmValue)
@@ -478,25 +551,31 @@ uint32_t AlarmHandlingLoop(uint32_t tick)
if (Status == true) //increase counter
{
AlarmItem[Alarm_i].DebounceCounter++;
- if (AlarmItem[Alarm_i].DebounceCounter < AlarmItem[Alarm_i].DebounceValue)
+ if (AlarmItem[Alarm_i].Status == false) // alarm is not set yet
{
- Status = false;
+ if (AlarmItem[Alarm_i].DebounceCounter < AlarmItem[Alarm_i].DebounceValue) //had not reached the debounce value
+ {
+ Status = false; //do not set the alarm
+ } //else alarm will be set
}
- else
+ else // alarm is already set
{
- AlarmItem[Alarm_i].DebounceCounter = AlarmItem[Alarm_i].DebounceValue;
+ AlarmItem[Alarm_i].DebounceCounter = AlarmItem[Alarm_i].DebounceValue; // do not go over the debounce value
}
}
else //status == false - decrease counter
{
AlarmItem[Alarm_i].DebounceCounter--;
- if (AlarmItem[Alarm_i].DebounceCounter > 0)
+ if (AlarmItem[Alarm_i].Status == true) // alarm is set
{
- Status = true;
+ if (AlarmItem[Alarm_i].DebounceCounter > 0) // had not reached zero yet
+ {
+ Status = true; // do not reset the alarm yet
+ } // else reset the alarm
}
- else
+ else // if the alarm is off
{
- AlarmItem[Alarm_i].DebounceCounter = 0;
+ AlarmItem[Alarm_i].DebounceCounter = 0; //do not go below 0
}
}
}
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h
index 4a11276a1..edce0d9cb 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h
@@ -15,6 +15,7 @@ uint32_t AlarmHandlingStart(void);
uint32_t AlarmHandlingStop(void);
void AlarmHandlingSetAlarm(uint32_t AlarmId, bool Value);
+uint32_t AlarmHandlingPrepareJob(void *CurrentJob);
uint32_t StartEventsNotificationRequestFunc(MessageContainer* requestContainer);
uint32_t StopEventsNotificationRequestFunc(MessageContainer* requestContainer);
uint32_t ResolveEventRequestFunc(MessageContainer* requestContainer);