/* * AlarmHandlingDiagnostics.c * * Created on: 26 june 2018 * Author: shlomo */ #include #include "include.h" #include #include #include "drivers/adc_sampling/adc.h" #include "Control/control.h" #include #include "drivers/Motors/Motor.h" #include "drivers/Heater/TemperatureSensor.h" #include "drivers/SSI_Comm/Dancer/Dancer.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/FPGA/FPGA.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/valves/valve.h" #include "modules/ids/ids_ex.h" #include "Modules/Control/MillisecTask.h" #include "Modules/General/GeneralHardware.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "Modules/heaters/heaters_ex.h" #include "modules/thread/thread_ex.h" #include "modules/waste/waste.h" #include "PMR/Hardware/HardwareDancerType.pb-c.h" #include #include #include #include #include #include #include #include #include "PMR/Diagnostics/HeaterType.pb-c.h" #include "PMR/Diagnostics/HeaterState.pb-c.h" #include #include "StateMachines/Printing/PrintingSTM.h" #include #include "diagnostics.h" extern F2_CTRL_REG F2_CTRL_Reg; char DiagnosticsToken[36+1] = {0}; bool DiagnosticsActive = false; void SendDiagnostics(void); uint32_t DiagnosticsStart(void); uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_OneMinControlTrigger(uint32_t IfIndex, uint32_t ReadValue); DiagnosticsMonitors DiagnosticsMonitor = DIAGNOSTICS_MONITORS__INIT; #define DIAGNOSTICS_LIMIT 3 #define DIAGNOSTICS_DANCER_LIMIT 30 int DiagnosticsIndex = 0; int DiagnosticCollectionLimit = 2; //number of data samples to collect before sending to the host //int DiagnosticLimit = eHundredMillisecond; //frequency of data collection //int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection //DigitalPin DigitalPinArray[1][DIAGNOSTICS_LIMIT+1]; double dancer1angle[DIAGNOSTICS_LIMIT+1]; double dancer2angle[DIAGNOSTICS_LIMIT+1]; double dancer3angle[DIAGNOSTICS_LIMIT+1]; double feedermotorfrequency[DIAGNOSTICS_LIMIT+1]; double dryermotor[DIAGNOSTICS_LIMIT+1]; double pollermotor[DIAGNOSTICS_LIMIT+1]; double windermotor[DIAGNOSTICS_LIMIT+1]; double screwmotor[DIAGNOSTICS_LIMIT+1]; double mixertemperature[DIAGNOSTICS_LIMIT+1]; double headzone1temperature[DIAGNOSTICS_LIMIT+1]; double headzone2temperature[DIAGNOSTICS_LIMIT+1]; double headzone3temperature[DIAGNOSTICS_LIMIT+1]; double headzone4temperature[DIAGNOSTICS_LIMIT+1]; double headzone5temperature[DIAGNOSTICS_LIMIT+1]; double headzone6temperature[DIAGNOSTICS_LIMIT+1]; double dryerzone1temperature[DIAGNOSTICS_LIMIT+1]; double dryerzone2temperature[DIAGNOSTICS_LIMIT+1]; double dryerzone3temperature[DIAGNOSTICS_LIMIT+1]; double dispensermotorfrequency[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; double dispenserspressure[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1]; double midtankinklevel[MAX_SYSTEM_DISPENSERS][1]; double MidTankpressure[MAX_SYSTEM_DISPENSERS][1]; double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1]; double VOC_Sensor; DoubleArray DispenserFreq[MAX_SYSTEM_DISPENSERS]; DoubleArray DiagnosticsDispenserPressure[MAX_SYSTEM_DISPENSERS]; DoubleArray DispenserInkLevel[MAX_SYSTEM_DISPENSERS]; DoubleArray DiagnosticsMidTankInkLevel[MAX_SYSTEM_DISPENSERS]; HeaterState **heatersstates; HeaterState HeaterInfo[HEATER_TYPE__MixerHeater+1]; #define NUM_OF_INTERFACE_IOS 21 DigitalInterfaceState **digitalinterfacestates; DigitalInterfaceState DigitalOutputState[NUM_OF_INTERFACE_IOS]; /*double dispenser1motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser2motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser3motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser4motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser5motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser6motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser7motorfrequency[DIAGNOSTICS_LIMIT+1]; double dispenser8motorfrequency[DIAGNOSTICS_LIMIT+1]; */ Task_Handle Diagnostics_Task_Handle; Mailbox_Handle DiagnosticsMsgQ = NULL; bool blowervolatgedisplay = false; bool midtankDisplay = false; double diagvoltage = 0; /******************** Functions ********************************************/ //uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); //********************************************************************** typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, DiagnosticsOneSecTrigger, DiagnosticsOneMinuteTrigger }DiagnosticsMessages; typedef struct DiagnosticsMessage{ uint16_t messageId; uint16_t msglen; uint32_t tick; uint8_t messageData[20]; }DiagnosticsMessageStruc; #define MAX_DIAG_LOG 100 int diag_index=0; uint32_t diag_size[MAX_DIAG_LOG]; uint32_t diag_time[MAX_DIAG_LOG]; Diagnostic_Mode DiagnosticMode = Diagnostic_Normal_Mode; /******************** CODE ********************************************/ //********************************************************************** void DiagnosticsInit(void) { int i; Error_Block eb; Error_init(&eb); DiagnosticsMsgQ = Mailbox_create(sizeof(DiagnosticsMessageStruc), 40, NULL,&eb); DiagnosticsMonitor.dispensersmotorsfrequency = (DoubleArray**)my_malloc(sizeof(DoubleArray *)*MAX_SYSTEM_DISPENSERS); DiagnosticsMonitor.dispenserspressure = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); DiagnosticsMonitor.midtanksinklevel = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); DiagnosticsMonitor.dispensersinklevel = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); for (i = 0; i= MAX_THREAD_MOTORS_NUM) { LOG_ERROR(MotorId,"wrong Heater Id"); return; } MotorValue[MotorId][MotorCounterIndex[MotorId]] = frequency; MotorCounterIndex[MotorId]++; if (MotorCounterIndex[MotorId]>=DIAGNOSTICS_LIMIT ) MotorCounterIndex[MotorId] = 0; } uint32_t DiagnosticsLoadDigitalValues(void) { uint32_t index = 0; DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DRYER_SSR3_CTRL; if(F2_CTRL_Reg.ushort & CLEANER_PUMP_SSR3_CTRL) DigitalOutputState[index++].value = true; else DigitalOutputState[index++].value = false; DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DRYER_SSR1_CTRL; DigitalOutputState[index++].value = GetHeaterState(1); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DRYER_SSR2_CTRL; DigitalOutputState[index++].value = GetHeaterState(2); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DYEINGH_SSR8_CTRL; DigitalOutputState[index++].value = GetHeaterState(3); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DYEINGH_SSR7_CTRL; DigitalOutputState[index++].value = GetHeaterState(4); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DYEINGH_SSR6_CTRL; DigitalOutputState[index++].value = GetHeaterState(5); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DYEINGH_SSR5_CTRL; DigitalOutputState[index++].value = GetHeaterState(6); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_DILUTORPUMP_SSR10_CTRL; DigitalOutputState[index++].value = GetHeaterState(7); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_EXTWINDER_SSR11_CTRL; DigitalOutputState[index++].value = GetHeaterState(8); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_MIXCHIP_SSR4_CTRL; DigitalOutputState[index++].value = GetHeaterState(9); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE_SSR13_CTRL; DigitalOutputState[index++].value = ReadHeadMagnetBit(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED4; DigitalOutputState[index++].value = DataUpdated; DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_FULL; DigitalOutputState[index++].value = WHS_IsContainerFull(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_WARN; DigitalOutputState[index++].value = WHS_IsContainerEmpty(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE1_1; /*waste lower cartridge presence*/ DigitalOutputState[index++].value = WHS_WasteCartridgeLowerPresent(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE1_2; /*waste middle cartridge presence*/ DigitalOutputState[index++].value = WHS_WasteCartridgeMiddlePresent(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE_SSR12_CTRL; /*lubricant valve*/ DigitalOutputState[index++].value = GetLubricantState(); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_TFEED_BREAK_1; /*Secondary Pump Active*/ DigitalOutputState[index++].value = SecondaryPumpActive; return index; } void DiagnosticLoadTemperature(int HeaterId, int temperature) { double temp = temperature; if (HeaterId >= MAX_HEATERS_NUM) { LOG_ERROR(HeaterId,"wrong Heater Id"); return; } if ((temperature < 1000)||(temperature>28000)) //error read, all 0xF or all 0 { return; } HeaterTemperature[HeaterId][HeaterCounterIndex[HeaterId]] = temp/100; HeaterCounterIndex[HeaterId]++; if (HeaterCounterIndex[HeaterId]>=DIAGNOSTICS_LIMIT ) HeaterCounterIndex[HeaterId] = 0; } void DiagnosticLoadSpeedSensor(float value) { SpeedValue[SpeedCounterIndex] = (double)(value); if (SpeedCounterIndex=DIAGNOSTICS_DANCER_LIMIT ) // SpeedCounterIndex = 0; } void DiagnosticLoadDancer(int DancerId, uint16_t value) { if (DancerId >= MAX_HEATERS_NUM) { LOG_ERROR(DancerId,"wrong Dancer Id"); return; } DancerValue[DancerId][DancerCounterIndex[DancerId]] = value; if (DancerCounterIndex[DancerId]=DIAGNOSTICS_DANCER_LIMIT ) // DancerCounterIndex[DancerId] = 0; } void DiagnosticLoadDancerError(int DancerId, double value) { if (DancerId >= MAX_HEATERS_NUM) { LOG_ERROR(DancerId,"wrong Dancer Id"); return; } DancerErrorValue[DancerId][DancerErrorCounterIndex[DancerId]] = value; if (DancerErrorCounterIndex[DancerId]=DIAGNOSTICS_DANCER_LIMIT ) // DancerErrorCounterIndex[DancerId] = 0; } void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); DiagnosticLoadDancer(POOLER_DANCER,Control_Read_Dancer_Position(POOLER_DANCER, 0,0)); DiagnosticLoadDancer(FEEDER_DANCER,Control_Read_Dancer_Position(FEEDER_DANCER, 0,0)); DiagnosticLoadDancerError(WINDER_DANCER,ThreadGetMotorCalculatedError(WINDER_DANCER)); DiagnosticLoadDancerError(POOLER_DANCER,ThreadGetMotorCalculatedError(POOLER_DANCER)); DiagnosticLoadDancerError(FEEDER_DANCER,ThreadGetMotorCalculatedError(FEEDER_DANCER)); //DiagnosticLoadSpeedSensor(getSensorSpeedData()); } void DiagnosticOneMinuteCollection(void) { int i; DiagnosticsMonitor.n_dispensersinklevel = 0; DiagnosticsMonitor.n_midtanksinklevel = 0; for (i=0;i= Diagnostic_Extended_Mode) { //if (JobIsActive()) { DiagnosticLoadMotor(FEEDER_MOTOR, ThreadGetMotorSpeed (FEEDER_MOTOR)); DiagnosticLoadMotor(DRYER_MOTOR, ThreadGetMotorSpeed (DRYER_MOTOR)); DiagnosticLoadMotor(POOLER_MOTOR, ThreadGetMotorSpeed (POOLER_MOTOR)); DiagnosticLoadMotor(WINDER_MOTOR, ThreadGetMotorSpeed (WINDER_MOTOR)); DiagnosticLoadMotor(SCREW_MOTOR, ThreadGetMotorSpeed (SCREW_MOTOR)); } } /* DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); for (i=0;i= DIAGNOSTICS_LIMIT) DiagnosticsIndex = DIAGNOSTICS_LIMIT; if (DiagnosticsIndex >= DiagnosticCollectionLimit) SendDiagnostics(); } void DiagnosticsReset(void) { memset(DancerCounterIndex,0,sizeof(DancerCounterIndex)); memset(MotorCounterIndex,0,sizeof(MotorCounterIndex)); memset(DancerErrorCounterIndex,0,sizeof(DancerErrorCounterIndex)); SpeedCounterIndex = 0; memset(HeaterCounterIndex,0,sizeof(HeaterCounterIndex)); DiagnosticsIndex = 0; } int j=0; MessageContainer diagnosticsresponseContainer; uint8_t diagnostics_response_buffer[3500]; uint8_t *diagnostics_response_ptr = diagnostics_response_buffer; char * diagnosticscontainer_buffer=0; int LargeMessagesD = 0; void SendDiagnostics(void) { //MessageContainer responseContainer; StartDiagnosticsResponse response = START_DIAGNOSTICS_RESPONSE__INIT; //int i; if (DiagnosticsActive == false) { DiagnosticsReset(); return; } if (SuspendLargeMessages == true) { LargeMessagesD++; DiagnosticsReset(); return; } //if (JobIsActive()) { DiagnosticsMonitor.n_dispenser1motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser2motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser3motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser4motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser5motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser6motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser7motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.n_dispenser8motorfrequency = DiagnosticsIndex; DiagnosticsMonitor.dispenser1motorfrequency = dispensermotorfrequency[0]; DiagnosticsMonitor.dispenser2motorfrequency = dispensermotorfrequency[1]; DiagnosticsMonitor.dispenser3motorfrequency = dispensermotorfrequency[2]; DiagnosticsMonitor.dispenser4motorfrequency = dispensermotorfrequency[3]; DiagnosticsMonitor.dispenser5motorfrequency = dispensermotorfrequency[4]; DiagnosticsMonitor.dispenser6motorfrequency = dispensermotorfrequency[5]; DiagnosticsMonitor.dispenser7motorfrequency = dispensermotorfrequency[6]; DiagnosticsMonitor.dispenser8motorfrequency = dispensermotorfrequency[7]; } /* DiagnosticsMonitor.n_dancer1angle = DiagnosticsIndex; DiagnosticsMonitor.n_dancer2angle = DiagnosticsIndex; DiagnosticsMonitor.n_dancer3angle = DiagnosticsIndex; DiagnosticsMonitor.dancer1angle = dancer1angle; DiagnosticsMonitor.dancer2angle = dancer2angle; DiagnosticsMonitor.dancer3angle = dancer3angle; */ if ((JobIsActive())&&(DiagnosticMode >= Diagnostic_Extended_Mode)) { DiagnosticsMonitor.n_dancer1angle = DancerCounterIndex[0]; DiagnosticsMonitor.n_dancer2angle = DancerCounterIndex[1]; DiagnosticsMonitor.n_dancer3angle = DancerCounterIndex[2]; DiagnosticsMonitor.dancer1angle = DancerValue[0]; DiagnosticsMonitor.dancer2angle = DancerValue[1]; DiagnosticsMonitor.dancer3angle = DancerValue[2]; DiagnosticsMonitor.n_windertension = DancerErrorCounterIndex[0]; DiagnosticsMonitor.n_pullertension = DancerErrorCounterIndex[1]; DiagnosticsMonitor.n_feedertension = DancerErrorCounterIndex[2]; DiagnosticsMonitor.windertension = DancerErrorValue[0]; DiagnosticsMonitor.pullertension = DancerErrorValue[1]; DiagnosticsMonitor.feedertension = DancerErrorValue[2]; DiagnosticsMonitor.n_threadspeed = SpeedCounterIndex; DiagnosticsMonitor.threadspeed = SpeedValue; DiagnosticsMonitor.feedermotorfrequency = MotorValue[FEEDER_MOTOR]; DiagnosticsMonitor.dryermotor = MotorValue[DRYER_MOTOR]; DiagnosticsMonitor.pollermotor = MotorValue[POOLER_MOTOR]; DiagnosticsMonitor.windermotor = MotorValue[WINDER_MOTOR]; DiagnosticsMonitor.screwmotor = MotorValue[SCREW_MOTOR]; DiagnosticsMonitor.n_feedermotorfrequency = MotorCounterIndex[FEEDER_MOTOR]; DiagnosticsMonitor.n_dryermotor = MotorCounterIndex[DRYER_MOTOR]; DiagnosticsMonitor.n_pollermotor = MotorCounterIndex[POOLER_MOTOR]; DiagnosticsMonitor.n_windermotor = MotorCounterIndex[WINDER_MOTOR]; DiagnosticsMonitor.n_screwmotor = MotorCounterIndex[SCREW_MOTOR]; } DiagnosticsMonitor.mixertemperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__MixerHeater]; DiagnosticsMonitor.headzone1temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1]; DiagnosticsMonitor.headzone2temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2]; DiagnosticsMonitor.headzone3temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3]; DiagnosticsMonitor.headzone4temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4]; DiagnosticsMonitor.headzone5temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5]; DiagnosticsMonitor.headzone6temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6]; DiagnosticsMonitor.dryerzone1temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature]; DiagnosticsMonitor.dryerzone2temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]; DiagnosticsMonitor.dryerzone3temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]; DiagnosticsMonitor.n_mixertemperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__MixerHeater]; DiagnosticsMonitor.n_headzone1temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1]; DiagnosticsMonitor.n_headzone2temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2]; DiagnosticsMonitor.n_headzone3temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3]; DiagnosticsMonitor.n_headzone4temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4]; DiagnosticsMonitor.n_headzone5temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5]; DiagnosticsMonitor.n_headzone6temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6]; DiagnosticsMonitor.n_dryerzone1temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature]; DiagnosticsMonitor.n_dryerzone2temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]; DiagnosticsMonitor.n_dryerzone3temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]; DiagnosticsMonitor.n_blowervoltage = 1; diagvoltage = getBlowerState(); DiagnosticsMonitor.blowervoltage = &diagvoltage; int i; DiagnosticsMonitor.n_dispensersmotorsfrequency = 0; /**/ //if (JobIsActive()) { j++; DiagnosticsMonitor.n_dispensersmotorsfrequency = MAX_SYSTEM_DISPENSERS; if (DiagnosticsMonitor.dispensersmotorsfrequency) { for (i = 0; i=MAX_DIAG_LOG) // diag_index = 0; } else { LOG_ERROR(Task_self(),"my_malloc failed"); DiagnosticsStop(); //CommunicationMailboxFlush(); } } else { LOG_ERROR(Task_self(),"previous packet not sent"); } //my_free(diagnosticsresponseContainer.data.data); } else { LOG_ERROR(Task_self(),"my_malloc failed"); DiagnosticsStop(); } DiagnosticsReset(); /* DiagnosticsMonitor.n_drierzone1heatercurrent = 0; DiagnosticsMonitor.n_drierzone2heatercurrent = 0; DiagnosticsMonitor.n_mixer1heatercurrent = 0; DiagnosticsMonitor.n_headzone1heatercurrent = 0; DiagnosticsMonitor.n_headzone2heatercurrent = 0; DiagnosticsMonitor.n_headzone3heatercurrent = 0; DiagnosticsMonitor.n_headzone4heatercurrent = 0; DiagnosticsMonitor.n_headzone5_6heatercurrent = 0; DiagnosticsMonitor.n_filterdeltapressure = 0; DiagnosticsMonitor.n_midtank1level = 0; DiagnosticsMonitor.n_midtank2level = 0; DiagnosticsMonitor.n_midtank3level = 0; DiagnosticsMonitor.n_midtank4level = 0; DiagnosticsMonitor.n_midtank5level = 0; DiagnosticsMonitor.n_midtank6level = 0; DiagnosticsMonitor.n_midtank7level = 0; DiagnosticsMonitor.n_midtank8level = 0; DiagnosticsMonitor.n_dispensersinklevel = 0; DiagnosticsMonitor.n_midtanksinklevel = 0; */ } uint32_t DiagnosticsControlId = 0xff; uint32_t Diagnostics10MSControlId = 0xff; uint32_t Diagnostics1SecControlId = 0xff; uint32_t Diagnostics1MinControlId = 0xFF; bool DiagnosticRequestAccepted = false; uint32_t DiagnosticsStart(void) { if ( DiagnosticsActive == false) { if (DiagnosticRequestAccepted == true) { DiagnosticsActive = true; if (DiagnosticsControlId == 0xFF) DiagnosticsControlId = AddControlCallback(NULL,Diagnostics_ControlTrigger,DiagnosticLimit,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); if (Diagnostics10MSControlId == 0xFF) Diagnostics10MSControlId = AddControlCallback(NULL,Diagnostics_TenMiliControlTrigger,DiagnosticFastLimit,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); if (Diagnostics1SecControlId == 0xFF) Diagnostics1SecControlId = AddControlCallback(NULL,Diagnostics_OneSecControlTrigger,eOneSecond,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(Diagnostics1SecControlId,"Diagnostics restarted"); if (Diagnostics1MinControlId == 0xFF) Diagnostics1MinControlId = AddControlCallback(NULL,Diagnostics_OneMinControlTrigger,eOneMinute,TemplateDataReadCBFunction,0,0,0); else LOG_ERROR(Diagnostics1MinControlId,"Diagnostics restarted"); } } return OK; } uint32_t DiagnosticsStop(void) { if ( DiagnosticsActive == true) { DiagnosticsActive = false; if (DiagnosticsControlId != 0xFF) RemoveControlCallback(DiagnosticsControlId,Diagnostics_ControlTrigger); if (Diagnostics10MSControlId != 0xFF) RemoveControlCallback(Diagnostics10MSControlId,Diagnostics_TenMiliControlTrigger); if (Diagnostics1SecControlId != 0xFF) RemoveControlCallback(Diagnostics1SecControlId,Diagnostics_OneSecControlTrigger); if (Diagnostics1MinControlId != 0xFF) RemoveControlCallback(Diagnostics1MinControlId,Diagnostics_OneMinControlTrigger); DiagnosticsControlId = 0xFF; Diagnostics10MSControlId = 0xFF; Diagnostics1SecControlId = 0xFF; Diagnostics1MinControlId = 0xFF; } return OK; } uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) { uint32_t status = NOT_SUPPORTED; //MessageContainer responseContainer; // ReportInitParams InitParams; //ControlStart(); DiagnosticRequestAccepted = true; DiagnosticsStart(); StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ustrncpy (DiagnosticsToken, requestContainer->token,36); 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; DiagnosticsStop(); DiagnosticRequestAccepted = 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 = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); return OK; } uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; //send message to the Millisec task Message.messageId = DiagnosticsTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); return OK; } uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; if (DiagnosticMode == Diagnostic_Extreme_Mode) { Message.messageId = DiagnosticsTenMiliTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); } return OK; } uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; Message.messageId = DiagnosticsOneSecTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); return OK; } uint32_t Diagnostics_OneMinControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; Message.messageId = DiagnosticsOneMinuteTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); return OK; } /****************************************************************************** * ======== messageTsk ======== * Task for this function is created statically. See the project's .cfg file. * this message task is created statically in system initialization, ******************************************************************************/ void DiagnosticsTask(UArg arg0, UArg arg1) { DiagnosticsMessageStruc Message; //char str[60]; //uint16_t length; //Clock_setTimeout(HostKAClock, 1000); //Clock_start(HostKAClock); DiagnosticsInit(); Diagnostics_Task_Handle = Task_self(); while(1) { Mailbox_pend(DiagnosticsMsgQ , &Message, BIOS_WAIT_FOREVER); switch (Message.messageId) { case DiagnosticsTrigger: Diagnostic100msecCollection(); break; case DiagnosticsTenMiliTrigger: if (DiagnosticMode >= Diagnostic_Extreme_Mode) DiagnosticTenMsecCollection(); break; case DiagnosticsOneSecTrigger: DiagnosticOneSecCollection(); break; case DiagnosticsOneMinuteTrigger: DiagnosticOneMinuteCollection(); break; default: break; } } }