diff options
| author | Avi Levkovich <avi@twine-s.com> | 2018-09-13 15:30:10 +0300 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2018-09-13 15:30:10 +0300 |
| commit | 18cb71bab8fec9bf2ffb0da9e320e031dacffac6 (patch) | |
| tree | 8c560dd5e115c34dd3793727059d45defa915134 /Software/Embedded_SW/Embedded/Modules | |
| parent | e1a8d1a06b4b82e80317eb64feaf7d8ed94d758f (diff) | |
| parent | c2ad66a1133b79bb59505985e7f4cd2bc2c96aed (diff) | |
| download | Tango-18cb71bab8fec9bf2ffb0da9e320e031dacffac6.tar.gz Tango-18cb71bab8fec9bf2ffb0da9e320e031dacffac6.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
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); |
