/* * 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 #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/Head_Card/ADC/Head_ADC.h" #include "drivers/I2C_Communication/DAC/Blower.h" #include #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_ex.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 "StateMachines/Initialization/InitSequence.h" #include #include "diagnostics.h" #include #include #include "drivers/Uart_Comm/WHS_Controller_Comm/Shinko/ACS-13AC5E3.h" #include "Modules/IFS/ifs.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 = 1; //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 headzone7temperature[DIAGNOSTICS_LIMIT+1]; double headzone8temperature[DIAGNOSTICS_LIMIT+1]; double headzone9temperature[DIAGNOSTICS_LIMIT+1]; double headzone10temperature[DIAGNOSTICS_LIMIT+1]; double headzone11temperature[DIAGNOSTICS_LIMIT+1]; double headzone12temperature[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 HeadFlowMeter,TotalFlowMeter; //double tempFlow = 0.0; double DrierFlowMeter; double AcVoltage; double WasteLevel = 0.0; double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1]; double HeadCurrent[MAX_FLAT_HEAD_HEATERS][1]; double VOC_Sensor; double OverallTemperature; 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_MAX_HEATERS]; #define NUM_OF_INTERFACE_IOS 27 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; extern uint8_t Head_Fan_PWM_Command[2] ; bool blowervolatgedisplay = false; bool midtankDisplay = false; double diagvoltage = 0; /******************** Functions ********************************************/ //********************************************************************** 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; uint32_t Diagnostis_Time_Stamp = 0; /******************** 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) { ReportWithPackageFilter(DiagnosticsFilter,"wrong Motor Id",__FILE__,__LINE__,(int)MotorId,RpError,(int)0,0); return; } MotorValue[MotorId][MotorCounterIndex[MotorId]] = frequency; if (MotorCounterIndex[MotorId]= HEATER_TYPE_MAX_HEATERS) { ReportWithPackageFilter(DiagnosticsFilter,"wrong Heater Id",__FILE__,__LINE__,(int)HeaterId,RpError,(int)0,0); return; } /*if ((temperature < 1000)||(temperature>28000)) //error read, all 0xF or all 0 { return; }*/ HeaterTemperature[HeaterId][HeaterCounterIndex[HeaterId]] = temp/100; if (HeaterCounterIndex[HeaterId]=DIAGNOSTICS_DANCER_LIMIT ) // SpeedCounterIndex = 0; } void DiagnosticLoadDancer(int DancerId, uint16_t value) { if (DancerId >= NUM_OF_DANCERS) { ReportWithPackageFilter(DiagnosticsFilter,"wrong Dancer Id",__FILE__,__LINE__,(int)DancerId,RpError,(int)0,0); return; } DancerValue[DancerId][DancerCounterIndex[DancerId]] = value; if (DancerCounterIndex[DancerId]=DIAGNOSTICS_DANCER_LIMIT ) // DancerCounterIndex[DancerId] = 0; } void DiagnosticLoadDancerError(int DancerId, double value) { if (DancerId >= NUM_OF_DANCERS) { ReportWithPackageFilter(DiagnosticsFilter,"wrong Dancer Id",__FILE__,__LINE__,(int)DancerId,RpError,(int)0,0); return; } DancerErrorValue[DancerId][DancerErrorCounterIndex[DancerId]] = value; if (DancerErrorCounterIndex[DancerId]=DIAGNOSTICS_DANCER_LIMIT ) // DancerErrorCounterIndex[DancerId] = 0; } double Shinko_Sv = 12,Shinko_Pv = 15; void LoadChillerState(HeaterType HeaterType,HeaterState *HeaterState) { //int HeaterId = HeaterType; HeaterState->has_heatertype = true; HeaterState->heatertype = HeaterType; HeaterState->has_setpoint = true; HeaterState->setpoint = (float)(ShinkoTempDeg.Read_Setup); HeaterState->has_currentvalue = true; HeaterState->currentvalue = (float)(ShinkoTempDeg.Read_value); HeaterState->has_isactive = true; HeaterState->isactive = false; HeaterState->has_isrampingup = true; HeaterState->isrampingup = false; HeaterState->has_isinsetpoint = true; HeaterState->isinsetpoint = true; return; } #ifdef FOUR_WINDERS double dancer2,dancer3,dancer4; #endif void CopyTemperaturesToMonitor(void) { DiagnosticsMonitor.mixertemperature = HeaterTemperature[HEATER_TYPE__MixerHeater]; DiagnosticsMonitor.headzone1temperature = HeaterTemperature[HEATER_TYPE__HeaterZone1]; DiagnosticsMonitor.headzone2temperature = HeaterTemperature[HEATER_TYPE__HeaterZone2]; DiagnosticsMonitor.headzone3temperature = HeaterTemperature[HEATER_TYPE__HeaterZone3]; DiagnosticsMonitor.n_mixertemperature = HeaterCounterIndex[HEATER_TYPE__MixerHeater]; DiagnosticsMonitor.n_headzone1temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone1]; DiagnosticsMonitor.n_headzone2temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone2]; DiagnosticsMonitor.n_headzone3temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone3]; if ((Head_Type == HEAD_TYPE_FLAT) || (Head_Type == HEAD_TYPE_FLAT_WITHOUT_CARD)) { DiagnosticsMonitor.headzone4temperature = HeaterTemperature[HEATER_TYPE__HeaterZone4]; DiagnosticsMonitor.headzone5temperature = HeaterTemperature[HEATER_TYPE__HeaterZone5]; DiagnosticsMonitor.headzone6temperature = HeaterTemperature[HEATER_TYPE__HeaterZone6]; DiagnosticsMonitor.n_headzone4temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone4]; DiagnosticsMonitor.n_headzone5temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; DiagnosticsMonitor.n_headzone6temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone6]; } if (Head_Type == HEAD_TYPE_FLAT) { DiagnosticsMonitor.headzone7temperature = HeaterTemperature[HEATER_TYPE__HeaterZone7]; DiagnosticsMonitor.headzone8temperature = HeaterTemperature[HEATER_TYPE__HeaterZone8]; DiagnosticsMonitor.headzone9temperature = HeaterTemperature[HEATER_TYPE__HeaterZone9]; DiagnosticsMonitor.headzone10temperature = HeaterTemperature[HEATER_TYPE__HeaterZone10]; DiagnosticsMonitor.headzone11temperature = HeaterTemperature[HEATER_TYPE__HeaterZone11]; DiagnosticsMonitor.headzone12temperature = HeaterTemperature[HEATER_TYPE__HeaterZone12]; DiagnosticsMonitor.n_headzone7temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; DiagnosticsMonitor.n_headzone8temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone8]; DiagnosticsMonitor.n_headzone9temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone9]; DiagnosticsMonitor.n_headzone10temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone10]; DiagnosticsMonitor.n_headzone11temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone11]; DiagnosticsMonitor.n_headzone12temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone12]; //temporary DiagnosticsMonitor.headcoverheater1temperature = HeaterTemperature[HEATER_TYPE__HeadCoverHeater1]; DiagnosticsMonitor.headcoverheater2temperature = HeaterTemperature[HEATER_TYPE__HeadCoverHeater2]; DiagnosticsMonitor.n_headcoverheater1temperature = HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater1]; DiagnosticsMonitor.n_headcoverheater2temperature = HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater2]; } //if ((Head_Type == HEAD_TYPE_SYLKO)||(Head_Type == HEAD_TYPE_STAPLE_SPUN)) if (Head_Type == HEAD_TYPE_ARC) { DiagnosticsMonitor.headcoverheater1temperature = HeaterTemperature[HEATER_TYPE__HeadCoverHeater1]; DiagnosticsMonitor.headcoverheater2temperature = HeaterTemperature[HEATER_TYPE__HeadCoverHeater2]; DiagnosticsMonitor.n_headcoverheater1temperature = HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater1]; DiagnosticsMonitor.n_headcoverheater2temperature = HeaterCounterIndex[HEATER_TYPE__HeadCoverHeater2]; DiagnosticsMonitor.headzone11temperature = HeaterTemperature[HEATER_TYPE__HeaterZone11]; DiagnosticsMonitor.headzone12temperature = HeaterTemperature[HEATER_TYPE__HeaterZone12]; DiagnosticsMonitor.n_headzone11temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone11]; DiagnosticsMonitor.n_headzone12temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone12]; DiagnosticsMonitor.n_headblower1airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; DiagnosticsMonitor.n_headblower2airflow = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; headblower1airflow = PressureSensorGetPressure(HEAD_FAN_RIGHT); headblower2airflow = PressureSensorGetPressure(HEAD_FAN_LEFT); DiagnosticsMonitor.headblower1airflow = &headblower1airflow; DiagnosticsMonitor.headblower2airflow = &headblower2airflow; DiagnosticsMonitor.n_headblowervoltage1 = 1; DiagnosticsMonitor.n_headblowervoltage2 = 1; headblowervoltage1 = HeadBlowersGetRPM(HEAD_FAN_RIGHT); headblowervoltage2 = HeadBlowersGetRPM(HEAD_FAN_LEFT); DiagnosticsMonitor.headblowervoltage1 = &headblowervoltage1; DiagnosticsMonitor.headblowervoltage2 = &headblowervoltage2; //#warning machine to machine test DiagnosticsMonitor.headzone4temperature = HeaterTemperature[HEATER_TYPE__HeaterZone4]; DiagnosticsMonitor.headzone9temperature = HeaterTemperature[HEATER_TYPE__HeaterZone9]; DiagnosticsMonitor.headzone10temperature = HeaterTemperature[HEATER_TYPE__HeaterZone10]; DiagnosticsMonitor.n_headzone4temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone4]; DiagnosticsMonitor.n_headzone9temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone9]; DiagnosticsMonitor.n_headzone10temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone10]; } #ifdef FOUR_WINDERS // double dancer2,dancer3,dancer4; dancer2 = Control_Read_Dancer_Position(HARDWARE_DANCER_2,0); dancer3 = Control_Read_Dancer_Position(HARDWARE_DANCER_3,0); dancer4 = Control_Read_Dancer_Position(HARDWARE_DANCER_4,0); DiagnosticsMonitor.n_headzone4heatercurrent = 1; DiagnosticsMonitor.n_headzone56heatercurrent = 1; DiagnosticsMonitor.n_headzone8heatercurrent = 1; DiagnosticsMonitor.headzone4heatercurrent = &dancer4; DiagnosticsMonitor.headzone56heatercurrent = &dancer3; DiagnosticsMonitor.headzone8heatercurrent = &dancer2; #endif DiagnosticsMonitor.dryerzone1temperature = HeaterTemperature[HEATER_TYPE__DryerAirHeater]; DiagnosticsMonitor.dryerzone2temperature = HeaterTemperature[HEATER_TYPE__DryerMainHeater]; DiagnosticsMonitor.dryerzone3temperature = HeaterTemperature[HEATER_TYPE__DryerSecondaryHeater]; DiagnosticsMonitor.n_dryerzone1temperature = HeaterCounterIndex[HEATER_TYPE__DryerAirHeater]; DiagnosticsMonitor.n_dryerzone2temperature = HeaterCounterIndex[HEATER_TYPE__DryerMainHeater]; DiagnosticsMonitor.n_dryerzone3temperature = HeaterCounterIndex[HEATER_TYPE__DryerSecondaryHeater]; } void CopyPressuresToMonitor(int count) { DiagnosticsMonitor.n_dispenser1pressure = count; DiagnosticsMonitor.dispenser1pressure = dispenserspressure[0]; DiagnosticsMonitor.n_dispenser2pressure = count; DiagnosticsMonitor.dispenser2pressure = dispenserspressure[1]; DiagnosticsMonitor.n_dispenser3pressure = count; DiagnosticsMonitor.dispenser3pressure = dispenserspressure[2]; DiagnosticsMonitor.n_dispenser4pressure = count; DiagnosticsMonitor.dispenser4pressure = dispenserspressure[3]; DiagnosticsMonitor.n_dispenser5pressure = count; DiagnosticsMonitor.dispenser5pressure = dispenserspressure[4]; DiagnosticsMonitor.n_dispenser6pressure = count; DiagnosticsMonitor.dispenser6pressure = dispenserspressure[5]; DiagnosticsMonitor.n_dispenser7pressure = count; DiagnosticsMonitor.dispenser7pressure = dispenserspressure[6]; DiagnosticsMonitor.n_dispenser8pressure = count; DiagnosticsMonitor.dispenser8pressure = dispenserspressure[7]; } void DiagnosticTenMsecCollection(void) { if (DiagnosticsActive == false) return; /*if (JobIsActive()== false) return;*/ DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0)); DiagnosticLoadDancer(POOLER_DANCER,Control_Read_Dancer_Position(POOLER_DANCER, 0)); DiagnosticLoadDancer(FEEDER_DANCER,Control_Read_Dancer_Position(FEEDER_DANCER, 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 HEAD_TYPE_FLAT_WITHOUT_CARD) //rapid/pp machines { /*DiagnosticsMonitor.n_drierzone1heatercurrent = 1; DiagnosticsMonitor.drierzone1heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_1]; DiagnosticsMonitor.n_drierzone2heatercurrent = 1; DiagnosticsMonitor.drierzone2heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_2];*/ Get_Head_Current(HEAD_CURRENT_MIXER,&HeadCurrent[HEAD_CURRENT_ZONE_12+1][0]); DiagnosticsMonitor.n_mixer1heatercurrent = 1; DiagnosticsMonitor.mixer1heatercurrent = HeadCurrent[HEAD_CURRENT_ZONE_12+1]; if (Head_Type == HEAD_TYPE_FLAT) { for (i=0;i0.05) { Report("Head flow change 1m",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0); tempFlow = HeadFlowMeter; }*/ DiagnosticsMonitor.n_headairflow = 1; DiagnosticsMonitor.headairflow = &HeadFlowMeter; } void DiaglosticChangeBlowerData() { DiagnosticsMonitor.n_blowervoltage = 1; diagvoltage = getBlowerState(); DiagnosticsMonitor.blowervoltage = &diagvoltage; } void DiagnosticOneSecCollection(void) { int i; memset(HeaterCounterIndex,0,sizeof(HeaterCounterIndex)); if (Head_Type > HEAD_TYPE_FLAT_WITHOUT_CARD) //rapid/pp machines { AcVoltage = ReadVAC(); //DiagnosticsMonitor.whsblower2voltage = &AcVoltage; //DiagnosticsMonitor.n_whsblower2voltage = 1; DiagnosticsMonitor.incomingvoltage = &AcVoltage; DiagnosticsMonitor.n_incomingvoltage = 1; } if (WHS_Type == WHS_TYPE_NEW) //rapid/pp machines { DrierFlowMeter = GetWHSAirFlow(DRIER_FLOW_METER); DiagnosticsMonitor.n_dryerairflow = 1; DiagnosticsMonitor.dryerairflow = &DrierFlowMeter; HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER); DiagnosticsMonitor.n_headairflow = 1; DiagnosticsMonitor.headairflow = &HeadFlowMeter; TotalFlowMeter = GetWHSAirFlow(NU_FLOW_METER); DiagnosticsMonitor.n_totalwhsflow = 1; DiagnosticsMonitor.totalwhsflow = &TotalFlowMeter; /*if (fabs(tempFlow - HeadFlowMeter)>0.25) { Report("Head flow change 1s",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0); tempFlow = HeadFlowMeter; }*/ WasteLevel = GetWHSWasteTankLevelMiliLiter()/1000;//change from ml to litter static double InitCounter = 85.0; if (GetMachineState()<=MACHINE_STATE_WAIT_FOR_COOLER) { InitCounter-=1.0; if(InitCounter<0)InitCounter = 0; } else { InitCounter = ShinkoTempDeg.Read_value; } DiagnosticsMonitor.chillertemperature = &InitCounter; DiagnosticsMonitor.n_chillertemperature = 1; DiagnosticsMonitor.n_wastelevel = 1; DiagnosticsMonitor.wastelevel = &WasteLevel; } HeatersCurrent[HEATER_DRYER_CURRENT_1][0] = Get_Heaters_Current(HEATER_DRYER_CURRENT_1); HeatersCurrent[HEATER_DRYER_CURRENT_2][0] = Get_Heaters_Current(HEATER_DRYER_CURRENT_2); DiagnosticsMonitor.n_drierzone1heatercurrent = 1; DiagnosticsMonitor.drierzone1heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_1]; DiagnosticsMonitor.n_drierzone2heatercurrent = 1; DiagnosticsMonitor.drierzone2heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_2]; if (Head_Type == HEAD_TYPE_FLAT_WITHOUT_CARD) { 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)); } if (Head_Type == HEAD_TYPE_FLAT) { DiagnosticLoadTemperature(HEATER_TYPE__MixerHeater, MillisecGetTemperatures( HEAD_PT100_MIXER_0X8E_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone1, MillisecGetTemperatures(HEAD_PT100_ZONE_1_0X80_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone2, MillisecGetTemperatures(HEAD_PT100_ZONE_2_0X80_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone3, MillisecGetTemperatures(HEAD_PT100_ZONE_3_0X82_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone4, MillisecGetTemperatures(HEAD_PT100_ZONE_4_0X82_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone5, MillisecGetTemperatures(HEAD_PT100_ZONE_5_0X84_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone6, MillisecGetTemperatures(HEAD_PT100_ZONE_6_0X84_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone7, MillisecGetTemperatures(HEAD_PT100_ZONE_7_0X86_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone8, MillisecGetTemperatures(HEAD_PT100_ZONE_8_0X86_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone9, MillisecGetTemperatures(HEAD_PT100_ZONE_9_0X88_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone10, MillisecGetTemperatures(HEAD_PT100_ZONE_10_0X88_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone11, MillisecGetTemperatures(HEAD_PT100_ZONE_11_0X8A_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone12, MillisecGetTemperatures(HEAD_PT100_ZONE_12_0X8A_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeadCoverHeater1, MillisecGetTemperatures(HEAD_PT100_AIR_HEATER_2_0X8C_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeadCoverHeater2, MillisecGetTemperatures(HEAD_PT100_AIR_HEATER_1_0X8C_0)); } if (Head_Type == HEAD_TYPE_ARC) { DiagnosticLoadTemperature(HEATER_TYPE__MixerHeater, MillisecGetTemperatures( HEAD_PT100_MIXER_0X8E_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone1, MillisecGetTemperatures(HEAD_PT100_ZONE_1_0X80_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone2, MillisecGetTemperatures(HEAD_PT100_ZONE_2_0X80_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone3, MillisecGetTemperatures(HEAD_PT100_ZONE_3_0X82_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeadCoverHeater1, MillisecGetTemperatures(HEAD_PT100_AIR_HEATER_2_0X8C_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeadCoverHeater2, MillisecGetTemperatures(HEAD_PT100_AIR_HEATER_1_0X8C_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone5, MillisecGetTemperatures(HEAD_PT100_ZONE_5_0X84_0)); //DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone6, MillisecGetTemperatures(HEAD_PT100_ZONE_6_0X84_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone7, MillisecGetTemperatures(HEAD_PT100_ZONE_7_0X86_0)); //DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone8, MillisecGetTemperatures(HEAD_PT100_ZONE_8_0X86_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone11, MillisecGetTemperatures(HEAD_PT100_ZONE_11_0X8A_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone12, MillisecGetTemperatures(HEAD_PT100_ZONE_12_0X8A_1)); #warning MACHINE TO MACHINE TEST DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone4, MillisecGetTemperatures(HEAD_PT100_ZONE_4_0X82_1)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone9, MillisecGetTemperatures(HEAD_PT100_ZONE_9_0X88_0)); DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone10, MillisecGetTemperatures(HEAD_PT100_ZONE_10_0X88_1)); } 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= Diagnostic_Extended_Mode) { //if (JobIsActive()) { #ifdef FOUR_WINDERS DiagnosticLoadMotor(FEEDER_MOTOR, ThreadGetMotorSpeed (WINDER_2_MOTOR)); DiagnosticLoadMotor(DRYER_MOTOR, ThreadGetMotorSpeed (WINDER_3_MOTOR)); DiagnosticLoadMotor(POOLER_MOTOR, ThreadGetMotorSpeed (WINDER_4_MOTOR)); DiagnosticLoadMotor(WINDER_MOTOR, ThreadGetMotorSpeed (WINDER_MOTOR)); DiagnosticLoadMotor(SCREW_MOTOR, ThreadGetMotorSpeed (SCREW_MOTOR)); #else 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)); #endif } for (i=0;i= DiagnosticCollectionLimit) SendDiagnostics(); } void DiagnosticsReset(void) { memset(DancerCounterIndex,0,sizeof(DancerCounterIndex)); memset(MotorCounterIndex,0,sizeof(MotorCounterIndex)); memset(DancerErrorCounterIndex,0,sizeof(DancerErrorCounterIndex)); SpeedCounterIndex = 0; DiagnosticsIndex = 0; DiagnosticsMonitor.n_dancer1angle = 0; DiagnosticsMonitor.n_dancer2angle = 0; DiagnosticsMonitor.n_dancer3angle = 0; DiagnosticsMonitor.n_windertension = 0; DiagnosticsMonitor.n_pullertension = 0; DiagnosticsMonitor.n_feedertension = 0; } int j=0; MessageContainer diagnosticsresponseContainer; uint8_t diagnostics_response_buffer[5500]; 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; int chillerHeaterId = 0; if (DiagnosticsActive == false) { DiagnosticsReset(); return; } if (SuspendLargeMessages == true) { LargeMessagesD++; DiagnosticsReset(); return; } //if (JobIsActive()) { 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 = 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)) if (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]; } int i,temp; DiagnosticsMonitor.n_dispensersmotorsfrequency = 0; /**/ //if (JobIsActive()) { j++; DiagnosticsMonitor.n_dispensersmotorsfrequency = MAX_SYSTEM_DISPENSERS; if (DiagnosticsMonitor.dispensersmotorsfrequency) { for (i = 0; i= Diagnostic_Extended_Mode) { CopyTemperaturesToMonitor(); }*/ if (DiagnosticMode >= Diagnostic_Extended_Mode) { CopyPressuresToMonitor(temp); } DiagnosticsMonitor.n_midtank1level = 1; DiagnosticsMonitor.midtank1level = MidTankpressure[0]; DiagnosticsMonitor.n_midtank2level = 1; DiagnosticsMonitor.midtank2level = MidTankpressure[1]; DiagnosticsMonitor.n_midtank3level = 1; DiagnosticsMonitor.midtank3level = MidTankpressure[2]; DiagnosticsMonitor.n_midtank4level = 1; DiagnosticsMonitor.midtank4level = MidTankpressure[3]; DiagnosticsMonitor.n_midtank5level = 1; DiagnosticsMonitor.midtank5level = MidTankpressure[4]; DiagnosticsMonitor.n_midtank6level = 1; DiagnosticsMonitor.midtank6level = MidTankpressure[5]; DiagnosticsMonitor.n_midtank7level = 1; DiagnosticsMonitor.midtank7level = MidTankpressure[6]; DiagnosticsMonitor.n_midtank8level = 1; DiagnosticsMonitor.midtank8level = MidTankpressure[7]; /* DiagnosticsMonitor.n_drierzone1heatercurrent = 1; DiagnosticsMonitor.drierzone1heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_1]; DiagnosticsMonitor.n_drierzone2heatercurrent = 1; DiagnosticsMonitor.drierzone2heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_2]; DiagnosticsMonitor.n_mixer1heatercurrent = 1; DiagnosticsMonitor.mixer1heatercurrent = HeatersCurrent[HEATER_MIXCHIP_CURRENT]; DiagnosticsMonitor.n_headzone1heatercurrent = 1; DiagnosticsMonitor.headzone1heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_1]; DiagnosticsMonitor.n_headzone2heatercurrent = 1; DiagnosticsMonitor.headzone2heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_2]; DiagnosticsMonitor.n_headzone3heatercurrent = 1; DiagnosticsMonitor.headzone3heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_3]; DiagnosticsMonitor.n_headzone4heatercurrent = 1; DiagnosticsMonitor.headzone4heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_4]; DiagnosticsMonitor.n_headzone5_6heatercurrent = 1; DiagnosticsMonitor.headzone5_6heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_5_6]; */ VOC_Sensor = (double) Get_latest_Gas_Sensor_PPM();//(double) getGasReading(); DiagnosticsMonitor.n_gassensor = 1; DiagnosticsMonitor.gassensor = &VOC_Sensor; response.monitors = &DiagnosticsMonitor; //response.digitalpins = DigitalPinArray; response.n_componentsstates = 0; response.n_digitalinterfacestates = DiagnosticsLoadDigitalValues(); response.digitalinterfacestates = digitalinterfacestates; response.n_heatersstates = 0; i = 0; LoadHeaterState(HEATER_TYPE__DryerAirHeater,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__DryerMainHeater,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__DryerSecondaryHeater,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__MixerHeater,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone1,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone2,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone3,&HeaterInfo[i++]); if ((Head_Type == HEAD_TYPE_FLAT)||(Head_Type == HEAD_TYPE_FLAT_WITHOUT_CARD)) { LoadHeaterState(HEATER_TYPE__HeaterZone4,&HeaterInfo[i++]); } LoadHeaterState(HEATER_TYPE__HeaterZone5,&HeaterInfo[i++]); //LoadHeaterState(HEATER_TYPE__HeaterZone6,&HeaterInfo[i++]); if ((Head_Type == HEAD_TYPE_FLAT)||(Head_Type == HEAD_TYPE_FLAT_WITHOUT_CARD)) { LoadHeaterState(HEATER_TYPE__HeaterZone6,&HeaterInfo[i++]); } if ((Head_Type == HEAD_TYPE_FLAT)||(Head_Type == HEAD_TYPE_ARC)) { LoadHeaterState(HEATER_TYPE__HeaterZone7,&HeaterInfo[i++]); //LoadHeaterState(HEATER_TYPE__HeaterZone8,&HeaterInfo[i++]); } if (Head_Type == HEAD_TYPE_FLAT) { LoadHeaterState(HEATER_TYPE__HeaterZone8,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone9,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone10,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone11,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeaterZone12,&HeaterInfo[i++]); } if (Head_Type == HEAD_TYPE_ARC) //if (Head_Type == HEAD_TYPE_STAPLE_SPUN) { LoadHeaterState(HEATER_TYPE__HeadCoverHeater1,&HeaterInfo[i++]); LoadHeaterState(HEATER_TYPE__HeadCoverHeater2,&HeaterInfo[i++]); } if(WHS_Type == WHS_TYPE_NEW) { chillerHeaterId = (Head_Type == HEAD_TYPE_ARC)?HEATER_TYPE__HeaterZone12:HEATER_TYPE__HeadCoverHeater1; LoadChillerState(chillerHeaterId,&HeaterInfo[i++]); } response.n_heatersstates = i; response.heatersstates = heatersstates; response.has_elapsedmilli = true; if (Diagnostis_Time_Stamp == 0) { response.elapsedmilli = 0; } else response.elapsedmilli = msec_millisecondCounter-Diagnostis_Time_Stamp; Diagnostis_Time_Stamp = msec_millisecondCounter; // diagnosticsresponseContainer = createContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size); diagnosticsresponseContainer = createAllocatedContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size,diagnostics_response_ptr); diagnosticsresponseContainer.has_continuous = true; diagnosticsresponseContainer.continuous = true; if (diagnosticsresponseContainer.data.data) { if (diagnosticscontainer_buffer == 0) //send new diagnostics packet only if the previous one was sent and released { diagnosticscontainer_buffer = my_malloc(message_container__get_packed_size(&diagnosticsresponseContainer)); if (diagnosticscontainer_buffer) { size_t container_size = message_container__pack(&diagnosticsresponseContainer, diagnosticscontainer_buffer); // if (SendChars(diagnosticscontainer_buffer, container_size)== false) //comm tx mailbox full if (SendCharsWithType(diagnosticscontainer_buffer, container_size,MESSAGE_TYPE__StartDiagnosticsResponse) == false) //comm tx mailbox full { DiagnosticsStop(); my_free(diagnosticscontainer_buffer); } /*else { Report("Diagnostic Messgage",__FILE__,__LINE__,container_size,RpWarning,msec_millisecondCounter, msec_millisecondCounter); }*/ //diag_size[diag_index] = container_size; //diag_time[diag_index] = msec_millisecondCounter; //if (diag_index++>=MAX_DIAG_LOG) // diag_index = 0; } else { ReportWithPackageFilter(DiagnosticsFilter,"my_malloc failed, DiagnosticsStop ",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); DiagnosticsStop(); //CommunicationMailboxFlush(); } } else { ReportWithPackageFilter(DiagnosticsFilter,"previous packet not sent",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); } //my_free(diagnosticsresponseContainer.data.data); } else { ReportWithPackageFilter(DiagnosticsFilter,"my_malloc failed, DiagnosticsStop ",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); DiagnosticsStop(); } DiagnosticsReset(); } 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 ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)DiagnosticLimit,RpWarning,(int)DiagnosticsControlId,0); if (Diagnostics10MSControlId == 0xFF) Diagnostics10MSControlId = AddControlCallback(NULL,Diagnostics_TenMiliControlTrigger,DiagnosticFastLimit,TemplateDataReadCBFunction,0,0,0); else ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)DiagnosticFastLimit,RpWarning,(int)Diagnostics10MSControlId,0); if (Diagnostics1SecControlId == 0xFF) Diagnostics1SecControlId = AddControlCallback(NULL,Diagnostics_OneSecControlTrigger,eOneSecond,TemplateDataReadCBFunction,0,0,0); else ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)eOneSecond,RpWarning,(int)Diagnostics1SecControlId,0); if (Diagnostics1MinControlId == 0xFF) Diagnostics1MinControlId = AddControlCallback(NULL,Diagnostics_OneMinControlTrigger,eOneMinute,TemplateDataReadCBFunction,0,0,0); else ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)eOneMinute,RpWarning,(int)Diagnostics1MinControlId,0); } } 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; Diagnostis_Time_Stamp = 0; } 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(); if (DiagnosticMode >= Diagnostic_Extreme_Mode) DiagnosticOneMinuteCollection(); break; case DiagnosticsOneMinuteTrigger: DiagnosticOneMinuteCollection(); break; default: break; } } }