From 18f3d2c3d8504303029ffd15cc9ce68383498a86 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Mon, 25 Jun 2018 18:41:07 +0300 Subject: alarm handling and heaters corrections --- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 100 +++++++++++++- .../Embedded_SW/Embedded/Modules/Heaters/Heaters.h | 1 - .../Embedded/Modules/Heaters/Heaters_init.c | 6 +- .../Embedded/Modules/Heaters/Heaters_print.c | 148 ++++++++++++--------- 4 files changed, 185 insertions(+), 70 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 23560bd06..cfcae2da6 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -20,7 +20,9 @@ #include "drivers/Danser_SSI/SSI_Comm.h" #include "drivers/Heater/TemperatureSensor.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA.h" +#include "PMR/Hardware/HardwareDancerType.pb-c.h" #include "modules/thread/thread_ex.h" #include @@ -222,13 +224,105 @@ uint32_t AlarmHandlingLoop(uint32_t tick) void SendDiagnostics(void) { MessageContainer responseContainer; - + int i; StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; - + DiagnosticsMonitors DiagnosticsMonitor; if (DiagnosticsActive == false) return; - + DiagnosticsMonitor.n_dancer1angle = 1; + DiagnosticsMonitor.n_dancer2angle = 1; + DiagnosticsMonitor.n_dancer3angle = 1; + DiagnosticsMonitor.n_feedermotorfrequency = 1; + DiagnosticsMonitor.n_dryermotor = 1; + DiagnosticsMonitor.n_pollermotor = 1; + DiagnosticsMonitor.n_windermotor = 1; + DiagnosticsMonitor.n_screwmotor = 1; + DiagnosticsMonitor.n_mixertemperature = 1; + DiagnosticsMonitor.n_headzone1temperature = 1; + DiagnosticsMonitor.n_headzone2temperature = 1; + DiagnosticsMonitor.n_headzone3temperature = 1; + DiagnosticsMonitor.n_dryerzone1temperature = 1; + DiagnosticsMonitor.n_dryerzone2temperature = 1; + DiagnosticsMonitor.n_dryerzone3temperature = 1; +/* + DiagnosticsMonitor.dancer1angle = Control_Read_Dancer_Position(WINDER_DANCER, 0,0); + DiagnosticsMonitor.dancer2angle = Control_Read_Dancer_Position(POOLER_DANCER, 0,0); + DiagnosticsMonitor.dancer3angle = Control_Read_Dancer_Position(FEEDER_DANCER, 0,0); + + DiagnosticsMonitor.feedermotorfrequency = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING); + DiagnosticsMonitor.dryermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING); + DiagnosticsMonitor.pollermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_LDRIVING); + DiagnosticsMonitor.windermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_WINDER); + DiagnosticsMonitor.screwmotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW); + DiagnosticsMonitor.mixertemperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_MIXCHIP_TEMP); + DiagnosticsMonitor.headzone1temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP1); + DiagnosticsMonitor.headzone2temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP2); + DiagnosticsMonitor.headzone3temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP3); + DiagnosticsMonitor.dryerzone1temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP1); + DiagnosticsMonitor.dryerzone2temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP2); + DiagnosticsMonitor.dryerzone3temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP3); + + DiagnosticsMonitor.n_dispenser1motorfrequency = 1; + DiagnosticsMonitor.n_dispenser2motorfrequency = 1; + DiagnosticsMonitor.n_dispenser3motorfrequency = 1; + DiagnosticsMonitor.n_dispenser4motorfrequency = 1; + DiagnosticsMonitor.n_dispenser5motorfrequency = 1; + DiagnosticsMonitor.n_dispenser6motorfrequency = 1; + DiagnosticsMonitor.n_dispenser7motorfrequency = 1; + DiagnosticsMonitor.n_dispenser8motorfrequency = 1; + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7); + DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8); +*/ + DigitalPin DigitalPinArray[MAX_GPI]; + for (i=0;iNumberOFSlicesInUse) +#warning temporary disable time slice control as we are working with one heater in run time +/* if ((Heater1000Slices + Heater200aSlices +2)>NumberOFSlicesInUse) { LOG_ERROR (NumberOFSlicesInUse, "proportional time slices too high too high"); return ERROR;//NumberOFSlicesInUse = MAX_TIMESLICES; } - +*/ //mark the time slices for heaters operation as empty / Heater1000 / Heater 200 memset (TimeSliceAllocation,0xFF,sizeof(TimeSliceAllocation)); for (Slice_i = 0; Slice_i < Heater1000Slices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index eb5736c1d..110d1918d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -45,10 +45,14 @@ typedef struct HeatersControlMessage{ HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; uint32_t ControlIdtoHeaterId [MAX_HEATERS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; uint32_t DryerHeaterMaxTempControl = 0xFF; -uint32_t DryerInternalPT100Id = ANALOG_DRYER_TEMP2; - +#warning the PT100 id for the dryer control is number2 - dryer internal ambient sensor +uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; +uint32_t DryerInternalPT100Id = TEMP_SENSE_ANALOG_DRYER_TEMP1; bool HeatersRestart = false; +bool HeaterMaxTempFlag[MAX_HEATERS_NUM] = {false,false,false,false,false,false,false,false}; +bool HeaterControlFlag[MAX_HEATERS_NUM] = {true,true,true,true,true,true,true,true}; + uint32_t OutputProportionalSingleStep = 0; //A/C Heaters step size from one decision point to another - in cpu clocks. 120000 = 1 millisecod uint32_t Heater_timerBase = TIMER2_BASE; //Timer handle uint32_t OutputProportionalCycleTime = 0; //A/C Heaters Cycle time in milliseconds - one for all heaters @@ -236,7 +240,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) //start thread control for all motors HeaterPIDConfig[HeaterId].m_params.MAX = HeaterControl[HeaterId].outputproportionalpowerlimit; - HeaterPIDConfig[HeaterId].m_params.MIN = .0; + HeaterPIDConfig[HeaterId].m_params.MIN = 0.0; HeaterPIDConfig[HeaterId].m_params.Kd = HeaterControl[HeaterId].kd; HeaterPIDConfig[HeaterId].m_params.Kp = HeaterControl[HeaterId].kp; HeaterPIDConfig[HeaterId].m_params.Ki = HeaterControl[HeaterId].ki; @@ -299,19 +303,30 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) LOG_ERROR (IfIndex, "Wrong Interface "); return 0xFFFFFFFF; } - if (readValue >= HeaterControl[index].sensormaxvalue) + static int ttt=0; + ttt++; + if (ttt >=21) + { + HeatingTestSendResonse(0,false,GetHeaterState(index), InitialHeating,index, readValue,HeaterControl[index].sensormaxvalue*100, + HeaterControl[index].sensorminvalue*100,"AC MaxTemp"); + ttt=0; + } + if ((readValue/100) >= HeaterControl[index].sensormaxvalue) { LOG_ERROR (readValue, "Heater Over the max temperature, turned off"); DeActivateHeater(index); + HeaterMaxTempFlag[index] = true; return OK; } - if (readValue <= (HeaterControl[index].sensormaxvalue-HeaterControl[index].sensorminvalue)) + if ((readValue/100) <= (HeaterControl[index].sensormaxvalue-HeaterControl[index].sensorminvalue)) { if (HeaterControl[index].sensorminvalue > 0) { - ActivateHeater(index); + HeaterMaxTempFlag[index] = false; + if (HeaterControlFlag[index] == true) + ActivateHeater(index); } - LOG_ERROR (readValue, "Heater Cooled Off max temperature, turned on"); + LOG_ERROR ((readValue/100), "Heater Cooled Off max temperature, turned on"); return OK; } return ERROR; @@ -319,6 +334,7 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { int index=MAX_HEATERS_NUM; + double temperror = 0.0, correction = 0.0; /*char str[100]; uint8_t len = 0;*/ if (IfIndex>>8 != IfTypeHeaters) @@ -344,11 +360,20 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) Temperature[0],Temperature[1], HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w].m_calculatedError, HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1].m_calculatedError,"Standard"); */ + static int tt=0; + tt++; + if (tt >=21) + { + HeatingTestSendResonse(0,false,GetHeaterState(index), InitialHeating,index, readValue,correction, + HeaterPIDConfig[index].m_calculatedError,"Standard AC"); + tt=0; + } // check if the read value is within the proportional band if (InitialHeating) { if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { + HeaterControlFlag[index] = false; DeActivateHeater(index); //Heaters OFF until coming into the proportional band /* @@ -385,20 +410,18 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterPIDConfig[index].m_mesuredParam = readValue; if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band { - HeaterPIDConfig[index].m_calculatedError = 1.0; - HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); + HeaterRecalculateSharedHeatersParams(index, 100); } else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { - HeaterPIDConfig[index].m_calculatedError = 0.0; - HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); + HeaterRecalculateSharedHeatersParams(index, 0); } //check only for the proportional band limits -// HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, -// &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); -// HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); - - //SetMotorFreq (index, HeaterControl[index].m_calculatedError); + temperror = (double)readValue/10000; + HeaterPIDConfig[index].m_mesuredParam = temperror; + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); + correction = HeaterPIDConfig[index].m_calculatedError; } @@ -413,6 +436,7 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { int index=MAX_HEATERS_NUM; + double temperror = 0.0, correction = 0.0; /*char str[100]; uint8_t len = 0;*/ if (IfIndex>>8 != IfTypeHeaters) @@ -431,32 +455,14 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) LOG_ERROR (0, "unconfigured"); return ERROR; } - /*static uint32_t Temperature[2] = {0}; - if (index<2) - Temperature[index] = readValue; +/* HeatingTestSendResonse(0, false,GetHeaterState(HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w),GetHeaterState(HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1), Temperature[0],Temperature[1], HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w].m_calculatedError, HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1].m_calculatedError,"Standard"); */ -/* - Data, 189, 2730, 0, False, True, 50, 0, Standard DC -{ -Data, 428, 80, 2641, False, False, 3, 4000, Standard DC -{ - "HeaterGroupId": 0, - "Zone1Temp": 80, - "Zone2Temp": 2641, - "Heater1Active": false, - "Heater2Active": false, - "Heater1Percentage": 3, - "Heater2Percentage": 4000, - "InfoMessage": "Standard DC" -} void HeatingTestSendResonse(uint32_t status, bool last,bool heater1Active,bool heater2Active, int temperature1, int temperature2,int Heater1Percentage,int Heater2Percentage, char* Message) - -}*/ static int t=0; t++; - if (t >=11) + if (t >=22) { HeatingTestSendResonse(0,false,GetHeaterState(index), DCInitialHeating[index],index, readValue,DCTimeSliceAllocation[index], HeaterPIDConfig[index].m_calculatedError,"Standard DC"); @@ -468,6 +474,7 @@ Data, 428, 80, 2641, False, False, 3, 4000, Standard DC //int temp = ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100); if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { + HeaterControlFlag[index] = false; DeActivateHeater(index); //Heaters OFF until coming into the proportional band return OK; @@ -489,23 +496,22 @@ Data, 428, 80, 2641, False, False, 3, 4000, Standard DC } if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) { - HeaterPIDConfig[index].m_mesuredParam = readValue; if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band { - HeaterPIDConfig[index].m_calculatedError = 1.0; - HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); + HeaterRecalculateHeaterParams(index, 100); } else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { - HeaterPIDConfig[index].m_calculatedError = 0.0; - HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); + HeaterRecalculateHeaterParams(index, 0); } + //check only for the proportional band limits -// HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, -// &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); + temperror = (double)readValue/10000; + HeaterPIDConfig[index].m_mesuredParam = temperror; + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); + correction = HeaterPIDConfig[index].m_calculatedError; // HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError*100)); - - //SetMotorFreq (index, HeaterControl[index].m_calculatedError); } @@ -567,29 +573,35 @@ uint32_t HeatersControlLoop(uint32_t tick) } if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) { - //If HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w] == false) + { + //If HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w should be active + //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + } } else if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1) { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //If HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1] == false) + { + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //If HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 should be active + //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + } } else { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); } for ( DcHeaterId = HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1; DcHeaterId<= HARDWARE_PID_CONTROL_TYPE__MixerHeater;DcHeaterId++) @@ -599,12 +611,22 @@ uint32_t HeatersControlLoop(uint32_t tick) if (DCTimeSliceAllocation[DcHeaterId] > 0) //heater active { if (SliceCounter == 0) - ActivateHeater (DcHeaterId); + if (HeaterMaxTempFlag[DcHeaterId] == false) + { + HeaterControlFlag[DcHeaterId] = true; + ActivateHeater (DcHeaterId); + } else if (SliceCounter >= DCTimeSliceAllocation[DcHeaterId]) //turn off + { + HeaterControlFlag[DcHeaterId] = false; DeActivateHeater (DcHeaterId); + } } else + { + HeaterControlFlag[DcHeaterId] = false; DeActivateHeater (DcHeaterId); + } } //handle the time sharing module SliceCounter++; -- cgit v1.3.1 From 182877a87c0298cdc32d74dbc9c3f5778146c42d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 26 Jun 2018 00:29:09 +0300 Subject: Diagnostics reqests handling --- .../Embedded_SW/Embedded/Communication/Container.c | 8 +- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 172 +---------------- .../Embedded/Modules/AlarmHandling/AlarmHandling.h | 10 +- .../AlarmHandling/AlarmHandlingDiagnostics.c | 209 +++++++++++++++++++++ .../Embedded/Modules/Control/MillisecTask.c | 1 - .../Embedded_SW/Embedded/Modules/Control/control.c | 2 + 6 files changed, 228 insertions(+), 174 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c index cf1cb3ef5..7d59c5f40 100644 --- a/Software/Embedded_SW/Embedded/Communication/Container.c +++ b/Software/Embedded_SW/Embedded/Communication/Container.c @@ -31,6 +31,7 @@ #include "Modules/General/GeneralHardware.h" #include "Modules/heaters/heaters_ex.h" +#include "Modules/AlarmHandling/AlarmHandling.h" //#include "Drivers/USB_Communication/USBCDCD.h" #include "Communication/CommunicationTask.h" @@ -230,7 +231,12 @@ void receive_callback(char* buffer, size_t length) case MESSAGE_TYPE__DisconnectRequest: DisconnectionRequest(requestContainer); break; - + case MESSAGE_TYPE__StartDiagnosticsRequest: + StartDiagnosticsRequestFunc(requestContainer); + break; + case MESSAGE_TYPE__StopDiagnosticsRequest: + StopDiagnosticsRequestFunc(requestContainer); + break; case MESSAGE_TYPE__StubI2CReadBytesRequest: Stub_I2CReadBytesRequest(requestContainer); break; diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index cfcae2da6..26b19c91f 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -25,17 +25,11 @@ #include "PMR/Hardware/HardwareDancerType.pb-c.h" #include "modules/thread/thread_ex.h" -#include -#include -#include -#include #include #include #include "PMR/debugging/DebugLogCategory.pb-c.h" -char DiagnosticsToken[36] = {0}; -bool DiagnosticsActive = false; Task_Handle AlarmHandling_Task_Handle; @@ -57,44 +51,6 @@ typedef struct AlarmHandlingMessage{ uint8_t messageData[20]; }AlarmHandlingMessageStruc; -/******************** CODE ********************************************/ -//********************************************************************** -uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) -{ - uint32_t status = NOT_SUPPORTED; - //MessageContainer responseContainer; - -// ReportInitParams InitParams; - - StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - strcpy (DiagnosticsToken, requestContainer->token); - DiagnosticsActive = true; - - start_diagnostics_request__free_unpacked(request,NULL); - return status; -} -uint32_t StopDiagnosticsRequestFunc(MessageContainer* requestContainer) -{ - - MessageContainer responseContainer; - - StopDiagnosticsRequest* request = stop_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - - StopDiagnosticsResponse response = STOP_DIAGNOSTICS_RESPONSE__INIT; - - DiagnosticsActive = false; - - responseContainer = createContainer(MESSAGE_TYPE__StopDiagnosticsResponse, requestContainer->token, false, &response, &stop_diagnostics_response__pack, &stop_diagnostics_response__get_packed_size); - responseContainer.continuous = false; - 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); - //USBCDCD_sendData(container_buffer, container_size,10); - SendChars(container_buffer, container_size); - //free (container_buffer); - -return OK; -} void AlarmHandlingInit(void) { @@ -123,7 +79,7 @@ void AlarmHandlingIterate(UArg arg0) return ; } -void AlarmHandler_SendDiagnostics(void) +uint32_t AlarmHandler_SendDiagnostics(uint32_t IfIndex, uint32_t ReadValue) { AlarmHandlingMessageStruc Message; @@ -221,132 +177,6 @@ uint32_t AlarmHandlingLoop(uint32_t tick) return OK; } -void SendDiagnostics(void) -{ - MessageContainer responseContainer; - int i; - StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; - DiagnosticsMonitors DiagnosticsMonitor; - if (DiagnosticsActive == false) - return; - DiagnosticsMonitor.n_dancer1angle = 1; - DiagnosticsMonitor.n_dancer2angle = 1; - DiagnosticsMonitor.n_dancer3angle = 1; - DiagnosticsMonitor.n_feedermotorfrequency = 1; - DiagnosticsMonitor.n_dryermotor = 1; - DiagnosticsMonitor.n_pollermotor = 1; - DiagnosticsMonitor.n_windermotor = 1; - DiagnosticsMonitor.n_screwmotor = 1; - DiagnosticsMonitor.n_mixertemperature = 1; - DiagnosticsMonitor.n_headzone1temperature = 1; - DiagnosticsMonitor.n_headzone2temperature = 1; - DiagnosticsMonitor.n_headzone3temperature = 1; - DiagnosticsMonitor.n_dryerzone1temperature = 1; - DiagnosticsMonitor.n_dryerzone2temperature = 1; - DiagnosticsMonitor.n_dryerzone3temperature = 1; -/* - DiagnosticsMonitor.dancer1angle = Control_Read_Dancer_Position(WINDER_DANCER, 0,0); - DiagnosticsMonitor.dancer2angle = Control_Read_Dancer_Position(POOLER_DANCER, 0,0); - DiagnosticsMonitor.dancer3angle = Control_Read_Dancer_Position(FEEDER_DANCER, 0,0); - - DiagnosticsMonitor.feedermotorfrequency = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING); - DiagnosticsMonitor.dryermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING); - DiagnosticsMonitor.pollermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_LDRIVING); - DiagnosticsMonitor.windermotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_WINDER); - DiagnosticsMonitor.screwmotor = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW); - DiagnosticsMonitor.mixertemperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_MIXCHIP_TEMP); - DiagnosticsMonitor.headzone1temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP1); - DiagnosticsMonitor.headzone2temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP2); - DiagnosticsMonitor.headzone3temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP3); - DiagnosticsMonitor.dryerzone1temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP1); - DiagnosticsMonitor.dryerzone2temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP2); - DiagnosticsMonitor.dryerzone3temperature = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP3); - - DiagnosticsMonitor.n_dispenser1motorfrequency = 1; - DiagnosticsMonitor.n_dispenser2motorfrequency = 1; - DiagnosticsMonitor.n_dispenser3motorfrequency = 1; - DiagnosticsMonitor.n_dispenser4motorfrequency = 1; - DiagnosticsMonitor.n_dispenser5motorfrequency = 1; - DiagnosticsMonitor.n_dispenser6motorfrequency = 1; - DiagnosticsMonitor.n_dispenser7motorfrequency = 1; - DiagnosticsMonitor.n_dispenser8motorfrequency = 1; - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7); - DiagnosticsMonitor.dispenser1motorfrequency = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8); -*/ - DigitalPin DigitalPinArray[MAX_GPI]; - for (i=0;i +#include + +#include "drivers/adc_sampling/adc.h" +#include "Control/control.h" + +#include "drivers/Motors/Motor.h" +#include "drivers/Danser_SSI/SSI_Comm.h" +#include "drivers/Heater/TemperatureSensor.h" +#include "drivers/FPGA/FPGA_SPI_Comm.h" +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" +#include "drivers/FPGA/FPGA.h" +#include "PMR/Hardware/HardwareDancerType.pb-c.h" +#include "modules/ids/ids_ex.h" + +#include "modules/thread/thread_ex.h" +#include +#include +#include +#include +#include +#include +#include "PMR/debugging/DebugLogCategory.pb-c.h" + + +char DiagnosticsToken[36] = {0}; +bool DiagnosticsActive = false; + + + +/******************** CODE ********************************************/ +//********************************************************************** +#define DIAGNOSTICS_LIMIT 10 +int DiagnosticsIndex = 0; +int DiagnosticCollectionLimit = 1; +int DiagnosticLimit = eHundredMillisecond; +DigitalPin DigitalPinArray[MAX_GPI][DIAGNOSTICS_LIMIT]; +double dancer1angle[DIAGNOSTICS_LIMIT]; +double dancer2angle[DIAGNOSTICS_LIMIT]; +double dancer3angle[DIAGNOSTICS_LIMIT]; + +double feedermotorfrequency[DIAGNOSTICS_LIMIT]; +double dryermotor[DIAGNOSTICS_LIMIT]; +double pollermotor[DIAGNOSTICS_LIMIT]; +double windermotor[DIAGNOSTICS_LIMIT]; +double screwmotor[DIAGNOSTICS_LIMIT]; +double mixertemperature[DIAGNOSTICS_LIMIT]; +double headzone1temperature[DIAGNOSTICS_LIMIT]; +double headzone2temperature[DIAGNOSTICS_LIMIT]; +double headzone3temperature[DIAGNOSTICS_LIMIT]; +double dryerzone1temperature[DIAGNOSTICS_LIMIT]; +double dryerzone2temperature[DIAGNOSTICS_LIMIT]; +double dryerzone3temperature[DIAGNOSTICS_LIMIT]; + +double dispensermotorfrequency[DIAGNOSTICS_LIMIT][MAX_SYSTEM_DISPENSERS]; + +void DiagnosticCollection(void) +{ + int i; + dancer1angle[DiagnosticsIndex] = Control_Read_Dancer_Position(WINDER_DANCER, 0,0); + dancer2angle[DiagnosticsIndex] = Control_Read_Dancer_Position(POOLER_DANCER, 0,0); + dancer3angle[DiagnosticsIndex] = Control_Read_Dancer_Position(FEEDER_DANCER, 0,0); + + feedermotorfrequency[DiagnosticsIndex] = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING); + dryermotor[DiagnosticsIndex] = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING); + pollermotor[DiagnosticsIndex] = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_LDRIVING); + windermotor[DiagnosticsIndex] = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_WINDER); + screwmotor[DiagnosticsIndex] = MotorGetSpeed (HARDWARE_MOTOR_TYPE__MOTO_SCREW); + mixertemperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_MIXCHIP_TEMP); + headzone1temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP1); + headzone2temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP2); + headzone3temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DYEINGH_TEMP3); + dryerzone1temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP1); + dryerzone2temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP2); + dryerzone3temperature[DiagnosticsIndex] = TemperatureSensorRead(TEMP_SENSE_ANALOG_DRYER_TEMP3); + + for (i=0;i= DIAGNOSTICS_LIMIT) DiagnosticsIndex = DIAGNOSTICS_LIMIT; + +} +void DiagnosticsReset(void) +{ + DiagnosticsIndex = 0; + +} +void SendDiagnostics(void) +{ + MessageContainer responseContainer; + StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; + DiagnosticsMonitors DiagnosticsMonitor; + if (DiagnosticsActive == false) + return; + + + DiagnosticsMonitor.n_dancer1angle = DiagnosticsIndex; + DiagnosticsMonitor.n_dancer2angle = DiagnosticsIndex; + DiagnosticsMonitor.n_dancer3angle = DiagnosticsIndex; + DiagnosticsMonitor.n_feedermotorfrequency = DiagnosticsIndex; + DiagnosticsMonitor.n_dryermotor = DiagnosticsIndex; + DiagnosticsMonitor.n_pollermotor = DiagnosticsIndex; + DiagnosticsMonitor.n_windermotor = DiagnosticsIndex; + DiagnosticsMonitor.n_screwmotor = DiagnosticsIndex; + DiagnosticsMonitor.n_mixertemperature = DiagnosticsIndex; + DiagnosticsMonitor.n_headzone1temperature = DiagnosticsIndex; + DiagnosticsMonitor.n_headzone2temperature = DiagnosticsIndex; + DiagnosticsMonitor.n_headzone3temperature = DiagnosticsIndex; + DiagnosticsMonitor.n_dryerzone1temperature = DiagnosticsIndex; + DiagnosticsMonitor.n_dryerzone2temperature = DiagnosticsIndex; + DiagnosticsMonitor.n_dryerzone3temperature = DiagnosticsIndex; + DiagnosticsMonitor.dancer1angle = dancer1angle; + DiagnosticsMonitor.dancer2angle = dancer2angle; + DiagnosticsMonitor.dancer3angle = dancer3angle; + + DiagnosticsMonitor.feedermotorfrequency = feedermotorfrequency; + DiagnosticsMonitor.dryermotor = dryermotor; + DiagnosticsMonitor.pollermotor = pollermotor; + DiagnosticsMonitor.windermotor = windermotor; + DiagnosticsMonitor.screwmotor = screwmotor; + DiagnosticsMonitor.mixertemperature = mixertemperature; + DiagnosticsMonitor.headzone1temperature = headzone1temperature; + DiagnosticsMonitor.headzone2temperature = headzone2temperature; + DiagnosticsMonitor.headzone3temperature = headzone3temperature; + DiagnosticsMonitor.dryerzone1temperature = dryerzone1temperature; + DiagnosticsMonitor.dryerzone2temperature = dryerzone2temperature; + DiagnosticsMonitor.dryerzone3temperature = dryerzone3temperature; + + DiagnosticsMonitor.dispensersmotorsfrequency = dispensermotorfrequency; + + response.monitors = &DiagnosticsMonitor; + response.n_digitalpins = DiagnosticsIndex*MAX_GPI; + response.digitalpins = DigitalPinArray; + response.n_events = 0; + response.n_componentsstates = 0; + + responseContainer = createContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size); + responseContainer.continuous = true; + + 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); + + DiagnosticsReset(); + //USBCDCD_sendData(container_buffer, container_size,10); +// SendChars(container_buffer, container_size); + //free (container_buffer); + +} +uint32_t AlarmHandlingControlId = 0xff; +uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) +{ + uint32_t status = NOT_SUPPORTED; + //MessageContainer responseContainer; + +// ReportInitParams InitParams; + + StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + strcpy (DiagnosticsToken, requestContainer->token); + DiagnosticsActive = true; + AlarmHandlingControlId = AddControlCallback(AlarmHandler_SendDiagnostics,DiagnosticLimit,NULL,0,0,0); + start_diagnostics_request__free_unpacked(request,NULL); + return status; +} +uint32_t StopDiagnosticsRequestFunc(MessageContainer* requestContainer) +{ + + MessageContainer responseContainer; + + StopDiagnosticsRequest* request = stop_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + StopDiagnosticsResponse response = STOP_DIAGNOSTICS_RESPONSE__INIT; + + DiagnosticsActive = false; + RemoveControlCallback(AlarmHandlingControlId,AlarmHandler_SendDiagnostics); + AlarmHandlingControlId = 0xFF; + responseContainer = createContainer(MESSAGE_TYPE__StopDiagnosticsResponse, requestContainer->token, false, &response, &stop_diagnostics_response__pack, &stop_diagnostics_response__get_packed_size); + responseContainer.continuous = false; + 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); + //USBCDCD_sendData(container_buffer, container_size,10); + SendChars(container_buffer, container_size); + //free (container_buffer); + +return OK; +} + + diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index a00c23739..a2d8760a1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -380,7 +380,6 @@ uint32_t MillisecLoop(uint32_t tick) { for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) MillisecReadFromTempSensor(Sensor_i, NULL); - AlarmHandler_SendDiagnostics(); } if (O900Millisecond_Tick) diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 8e999a668..48c6680f1 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -227,6 +227,8 @@ uint32_t AddControlCallback( ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlF } int RemoveControlCallback(uint32_t deviceId , ControlCBFunction Callback) { + if (deviceId == 0xFF) + return ERROR; assert(deviceId < MAX_TANGO_CONTROL_DEVICES); unsigned int key; -- cgit v1.3.1 From 2b03f5c3729401204f389f8b9ba2d09a95590372 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 26 Jun 2018 00:59:40 +0300 Subject: use diagnostics parameters --- Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c | 4 ++-- .../Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 26b19c91f..433f6210f 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -91,7 +91,7 @@ uint32_t AlarmHandler_SendDiagnostics(uint32_t IfIndex, uint32_t ReadValue) Mailbox_post(AlarmHandlingMsgQ , &Message, BIOS_NO_WAIT); - return ; + return OK; } /*typedef enum _EventType { EVENT_TYPE__ThreadBreak = 0, @@ -200,7 +200,7 @@ void AlarmHandlingTask(UArg arg0, UArg arg1) AlarmHandlingLoop(Message.tick); break; case AlarmHandlingSendDiagnostics: - SendDiagnostics(); + DiagnosticCollection(); default: break; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c index adc5e4335..85afbbea9 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c @@ -67,6 +67,8 @@ double dispensermotorfrequency[DIAGNOSTICS_LIMIT][MAX_SYSTEM_DISPENSERS]; void DiagnosticCollection(void) { int i; + if (DiagnosticsActive == false) + return; dancer1angle[DiagnosticsIndex] = Control_Read_Dancer_Position(WINDER_DANCER, 0,0); dancer2angle[DiagnosticsIndex] = Control_Read_Dancer_Position(POOLER_DANCER, 0,0); dancer3angle[DiagnosticsIndex] = Control_Read_Dancer_Position(FEEDER_DANCER, 0,0); @@ -98,6 +100,8 @@ void DiagnosticCollection(void) DiagnosticsIndex++; if (DiagnosticsIndex >= DIAGNOSTICS_LIMIT) DiagnosticsIndex = DIAGNOSTICS_LIMIT; + if (DiagnosticsIndex >= DiagnosticCollectionLimit) + SendDiagnostics(); } void DiagnosticsReset(void) -- cgit v1.3.1 From a1edf5f9117dd8b092a0320a4f24e338417d03e8 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 26 Jun 2018 10:55:37 +0300 Subject: Diagnostics + eTenSilliseconds --- .../Embedded_SW/Embedded/Drivers/Motors/Motor.c | 4 +-- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 2 +- .../AlarmHandling/AlarmHandlingDiagnostics.c | 37 +++++++++++++++++++--- .../Embedded/Modules/Control/MillisecTask.c | 2 +- .../Embedded_SW/Embedded/Modules/Control/control.c | 4 +-- .../Embedded_SW/Embedded/Modules/Control/control.h | 2 +- .../Embedded/Modules/Heaters/Heaters_ex.h | 2 ++ .../Embedded/Modules/Heaters/Heaters_print.c | 6 +++- 8 files changed, 46 insertions(+), 13 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index 25944bd31..bc7e08e75 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -362,7 +362,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t _motorId,bool direction, uint32_t MotorStop(_motorId,Hard_Hiz ); MotorMove(_motorId,direction,Steps ); - MotorMoveControlId[_motorId] = AddControlCallback( MotorMoveCallBackFunction, eTenMilliSecond, MotorControlGetnBusyState,(IfTypeMotors*0x100+_motorId), _motorId, 0 ); + MotorMoveControlId[_motorId] = AddControlCallback( MotorMoveCallBackFunction, eTenMillisecond, MotorControlGetnBusyState,(IfTypeMotors*0x100+_motorId), _motorId, 0 ); return MotorMoveControlId[_motorId]; } @@ -371,7 +371,7 @@ uint32_t MotorSetSpeedWithCallback (TimerMotors_t _motorId, uint32_t _freq, call assert (callback); MotorSetSpeedModuleCallback[_motorId] = callback; - MotorSetSpeedControlId[_motorId] = AddControlCallback( MotorSetSpeedCallBackFunction, eTenMilliSecond, MotorControlGetnBusyState,(IfTypeMotors*0x100+_motorId), _motorId, 0 ); + MotorSetSpeedControlId[_motorId] = AddControlCallback( MotorSetSpeedCallBackFunction, eTenMillisecond, MotorControlGetnBusyState,(IfTypeMotors*0x100+_motorId), _motorId, 0 ); MotorSetSpeed(_motorId, _freq); return MotorSetSpeedControlId[_motorId]; diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 567366eff..7eea21fd3 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -354,7 +354,7 @@ uint32_t Control3WayValvesWithCallback (Valves_t _ValveId, bool direction, callb Valve_Set(_ValveId, direction); - Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eTenMilliSecond, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); + Valve3WayControlId[_ValveId] = AddControlCallback( Valve3WayCallBackFunction, eTenMillisecond, FPGA_GetDispenserValveBusyOCD,(IfTypeDisopenser*0x100+_ValveId), _ValveId, 0 ); return Valve3WayControlId[_ValveId]; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c index 85afbbea9..abd10383f 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c @@ -42,9 +42,9 @@ bool DiagnosticsActive = false; //********************************************************************** #define DIAGNOSTICS_LIMIT 10 int DiagnosticsIndex = 0; -int DiagnosticCollectionLimit = 1; -int DiagnosticLimit = eHundredMillisecond; -DigitalPin DigitalPinArray[MAX_GPI][DIAGNOSTICS_LIMIT]; +int DiagnosticCollectionLimit = 3; //number of data samples to collect before sending to the host +int DiagnosticLimit = eTenMillisecond; //frequency of data collection +DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT]; double dancer1angle[DIAGNOSTICS_LIMIT]; double dancer2angle[DIAGNOSTICS_LIMIT]; double dancer3angle[DIAGNOSTICS_LIMIT]; @@ -63,6 +63,14 @@ double dryerzone2temperature[DIAGNOSTICS_LIMIT]; double dryerzone3temperature[DIAGNOSTICS_LIMIT]; double dispensermotorfrequency[DIAGNOSTICS_LIMIT][MAX_SYSTEM_DISPENSERS]; +double dispenser1motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser2motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser3motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser4motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser5motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser6motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser7motorfrequency[DIAGNOSTICS_LIMIT]; +double dispenser8motorfrequency[DIAGNOSTICS_LIMIT]; void DiagnosticCollection(void) { @@ -90,7 +98,16 @@ void DiagnosticCollection(void) { dispensermotorfrequency[DiagnosticsIndex][i] = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1+i); } - for (i=0;i MAX_HEATERS_NUM) return false; + return HeaterMaxTempFlag[HeaterId]; +} uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { int index=MAX_HEATERS_NUM; -- cgit v1.3.1 From 5efdaff54ec70731fede1308c5b70b3f7048657d Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 26 Jun 2018 12:43:53 +0300 Subject: some heater control bugs --- .../AlarmHandling/AlarmHandlingDiagnostics.c | 9 +++- .../Embedded/Modules/Heaters/Heaters_print.c | 60 +++++++++++----------- 2 files changed, 38 insertions(+), 31 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c index abd10383f..a11c472b3 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c @@ -180,7 +180,7 @@ void SendDiagnostics(void) response.monitors = &DiagnosticsMonitor; - response.n_digitalpins = DiagnosticsIndex; + response.n_digitalpins = DiagnosticsIndex/**MAX_GPI*/; response.digitalpins = DigitalPinArray; response.n_events = 0; response.n_componentsstates = 0; @@ -199,6 +199,11 @@ void SendDiagnostics(void) } uint32_t AlarmHandlingControlId = 0xff; +uint32_t AlarmHandlingEmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue) +{ + return OK; +} + uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) { uint32_t status = NOT_SUPPORTED; @@ -209,7 +214,7 @@ uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); strcpy (DiagnosticsToken, requestContainer->token); DiagnosticsActive = true; - AlarmHandlingControlId = AddControlCallback(AlarmHandler_SendDiagnostics,DiagnosticLimit,NULL,0,0,0); + AlarmHandlingControlId = AddControlCallback(AlarmHandler_SendDiagnostics,DiagnosticLimit,AlarmHandlingEmptyCBFunction,0,0,0); start_diagnostics_request__free_unpacked(request,NULL); return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index c66e1bd25..2de675d5c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -46,7 +46,7 @@ HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; uint32_t ControlIdtoHeaterId [MAX_HEATERS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; uint32_t DryerHeaterMaxTempControl = 0xFF; #warning the PT100 id for the dryer control is number2 - dryer internal ambient sensor -uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; +uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; uint32_t DryerInternalPT100Id = TEMP_SENSE_ANALOG_DRYER_TEMP1; bool HeatersRestart = false; @@ -135,7 +135,7 @@ uint32_t HeatersEnd(void) } } if (i == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) //DC Heaters - if (ControlIdtoHeaterId [i]!=0xFF) + if (DryerHeaterMaxTempControl) { status |=RemoveControlCallback(DryerHeaterMaxTempControl ,HeaterMaxTempCBFunction); ControlIdtoHeaterId [i]=0xFF; @@ -575,39 +575,41 @@ uint32_t HeatersControlLoop(uint32_t tick) 0,0, HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w].m_calculatedError, HeaterPIDConfig[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1].m_calculatedError,"First Control"); } - if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) + if (InitialHeating == false) { - if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w] == false) + if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w) { - //If HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w] == false) + { + //If HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w should be active + //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + } } - } - else if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1) - { - if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1] == false) + else if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1) + { + if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1] == false) + { + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //If HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 should be active + //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + } + } + else { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //If HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); + //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); + DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); } } - else - { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater1000w); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1 - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w1); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2); - } - for ( DcHeaterId = HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1; DcHeaterId<= HARDWARE_PID_CONTROL_TYPE__MixerHeater;DcHeaterId++) { if (HeaterReady[DcHeaterId] == false) -- cgit v1.3.1 From 195150999420f473a61b0aa0739b8756b440b630 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Wed, 27 Jun 2018 10:28:44 +0300 Subject: First print!!!! disable diagnostics, some tracking info --- .../Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c | 6 +++--- Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c | 7 ++++--- Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 3 +++ 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c index a11c472b3..60a093216 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandlingDiagnostics.c @@ -131,7 +131,7 @@ void SendDiagnostics(void) MessageContainer responseContainer; StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; DiagnosticsMonitors DiagnosticsMonitor; - if (DiagnosticsActive == false) + //if (DiagnosticsActive == false) return; @@ -180,8 +180,8 @@ void SendDiagnostics(void) response.monitors = &DiagnosticsMonitor; - response.n_digitalpins = DiagnosticsIndex/**MAX_GPI*/; - response.digitalpins = DigitalPinArray; + response.n_digitalpins = 0/**MAX_GPI*/; + //response.digitalpins = DigitalPinArray; response.n_events = 0; response.n_componentsstates = 0; diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 2de675d5c..32509dfea 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -45,8 +45,9 @@ typedef struct HeatersControlMessage{ HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; uint32_t ControlIdtoHeaterId [MAX_HEATERS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; uint32_t DryerHeaterMaxTempControl = 0xFF; -#warning the PT100 id for the dryer control is number2 - dryer internal ambient sensor -uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; +#warning the PT100 id for the dryer control is number2 - dryer internal ambient sensor. +#warning the PT100 for head 4 is number 5 +uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; uint32_t DryerInternalPT100Id = TEMP_SENSE_ANALOG_DRYER_TEMP1; bool HeatersRestart = false; @@ -466,7 +467,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) */ static int t=0; t++; - if (t >=22) + if (t >=23) { HeatingTestSendResonse(0,false,GetHeaterState(index), DCInitialHeating[index],index, readValue,DCTimeSliceAllocation[index], HeaterPIDConfig[index].m_calculatedError,"Standard DC"); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 4b7648e96..092fbb252 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -16,6 +16,8 @@ #include "drivers/motors/motor.h" #include "drivers/valves/valve.h" +#include "modules/heaters/heaters.h" + typedef struct { @@ -252,6 +254,7 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) { Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); + HeatingTestSendResonse(0,false,0, Dispenser_Mixer,DispenserId, segmentfirst_speed,SegmentId,JobBrushStopId,"Dispenser !!!!!!!!!!!"); } } } -- cgit v1.3.1