diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-04 17:46:52 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-12-04 17:46:52 +0200 |
| commit | 6150db333d81879d3aba19613cca67cb92b22774 (patch) | |
| tree | c610e14f9dd21a78ab5298824335589b59ecae7c /Software/Embedded_SW/Embedded/Modules | |
| parent | 95cabc98a8cd6baebc697c179be9fb68913ac483 (diff) | |
| parent | e64abeba3fd00cf6111b698384650b0e2a530436 (diff) | |
| download | Tango-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.c | 119 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h | 1 |
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); |
