From bf181a74e502c84a74c13a6027ca382daada4320 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Mon, 20 Jul 2020 17:03:59 +0300 Subject: update Actuators logic --- .../I2C_Communication/Head_Card/IO_Ports/Head_IO.c | 55 +++++++++++++++------- .../Embedded/Drivers/I2C_Communication/I2C_Task.c | 21 ++++++++- .../Embedded/Drivers/I2C_Communication/I2C_Task.h | 1 + 3 files changed, 58 insertions(+), 19 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index 05423b8d8..691f1c455 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -414,7 +414,7 @@ uint32_t HeadCard_Valve_Control(bool Direction) return status; } */ -uint32_t ActControlId = 0xFF; +uint32_t ActControlId = 0xFF, ActControlId1 = 0xFF; char Global_Act_Cmd_flag = 0; //Sync - prevent reset from previous command @@ -468,14 +468,47 @@ uint32_t HeadCard_Actuators_Disable(void) //RST Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x00;//Disable movement status |= Head_Write_IO_Reg(0x42,HIGH); + //Trigger_OutputsWriting(); Task_sleep(5); Head_I2C_EXP2_0x42.bits.OUTPUT_ACTLOW_ACT_RST = 0x01;//Enable movement status |= Head_Write_IO_Reg(0x42,HIGH); + //Trigger_OutputsWriting(); return status; } + +uint32_t HeadCard_ActControlCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) // use IfIndex for Act_ID +{ + uint32_t status = OK; + + ACTUATORS Act_ID = (ACTUATORS)(IfIndex); + + if (SafeRemoveControlCallback(ActControlId1, HeadCard_ActControlCallBackFunction )==OK) + ActControlId1 = 0xFF; + else + Report("Remove control callback failed",__FILE__,__LINE__,(int)ActControlId1,RpWarning,(int)HeadCard_ActControlCallBackFunction,0); + + if(Act_ID == ACTIN)//0 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; + } + else//if(Act_ID == ACTOUT) 1 + { + Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; + } + + Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); + + Global_Act_Cmd_flag++;//Sync the callback to the command + + //3sec delay - Timeout + ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); + + return status; +} + uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) { uint32_t status = OK; @@ -499,22 +532,10 @@ uint32_t HeadCard_Actuators_Control(ACTUATORS Act_ID, bool Direction) status |= Head_Write_IO_Reg(0x46,LOW_AND_HIGH); - Task_sleep(500); + //Task_sleep(500); - if(Act_ID == ACTIN)//0 - { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTIN_ON = HIGH; - } - else//if(Act_ID == ACTOUT) 1 - { - Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; - } - status |= Head_Write_IO_Reg(0x46,HIGH); - - Global_Act_Cmd_flag++;//Sync the callback to the command - - //3sec delay - Timeout - ActControlId = AddControlCallback("ActuatorControl", HeadCard_ActuatorsCallBackFunction, (3* eOneSecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); + //100msec delay - (need short command - Active LOW ) + ActControlId1 = AddControlCallback("ctuatorControl", HeadCard_ActControlCallBackFunction, (/* 5 * */ eHundredMillisecond), TemplateDataReadCBFunction,Act_ID,0, 0 ); return status; } @@ -534,7 +555,7 @@ uint32_t HeadCard_ActStubCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) / { Head_I2C_EXP4_0x46.bits.OUTPUT_ACTLOW_ACTOT_ON = HIGH; } - Trigger_OutputsWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); + Trigger_ActOnWriting();//status |= Head_Write_IO_Reg(0x46,HIGH); return status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c index f126c254b..90f197587 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.c @@ -42,6 +42,7 @@ typedef enum HeaterWriting, Head_Inputs_Reading,// I/O Head_Outputs_Writing, + Head_ACT_ON_Writing, Head_Init_PT100, Actuators_Control, Actuators_Control_Stub, @@ -287,6 +288,18 @@ void Trigger_OutputsWriting(void) } +void Trigger_ActOnWriting(void) +{ + I2C_ReadingMessageStruc I2C_ReadingMessage; + //uint8_t Midtank_i; + + I2C_ReadingMessage.messageId = Head_ACT_ON_Writing; + if (I2C_ReadingMsgQ != NULL) + Mailbox_post(I2C_ReadingMsgQ , &I2C_ReadingMessage, BIOS_NO_WAIT); + return; + +} + void Trigger_WHS_init_IO(void) { @@ -665,8 +678,12 @@ void I2C_ReadingTask(UArg arg0, UArg arg1) Head_Read_IO_Reg(0x44, LOW_AND_HIGH);//BREAK__ZN1-12 + BREAK_HTIN Head_Read_IO_Reg(0x46, LOW_AND_HIGH);//READ HEAD CARD LS + ACT status + BREAK_HTOT break; - case Head_Outputs_Writing: - Head_Write_IO_Reg(0x46,HIGH);//ACT + case Head_Outputs_Writing: //Currently not in use + Head_Read_IO_Reg(0x42, LOW_AND_HIGH);// + Head_Read_IO_Reg(0x46, LOW_AND_HIGH);// + break; + case Head_ACT_ON_Writing: + Head_Write_IO_Reg(0x46,HIGH);//ACT ON break; case DispenserReadData: Dispenser_EEPROM_Read_Data(I2C_ReadingMessage.parameter); diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h index 16f86f9ed..4b12a7151 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Task.h @@ -52,6 +52,7 @@ void Trigger_Head_Actuators_Disable(void); void Trigger_Head_Fan_Control(uint32_t Fan_ID, uint16_t PWM); void Trigger_InputsReading(void); void Trigger_OutputsWriting(void); +void Trigger_ActOnWriting(void); void Trigger_Head_Magnet(int direction); void Trigger_Head_MixerValve(int direction); void Trigger_Head_PressureArc(bool Enable_Disable); -- cgit v1.3.1 From 74dbbc5c487559d59c71ee03621b736570585478 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 21 Jul 2020 13:51:31 +0300 Subject: merge --- Software/Embedded_SW/Embedded/DataDef.h | 4 ++-- Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c | 6 ++++++ Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c | 4 ++++ Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c | 6 +++--- Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c | 6 +++--- Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 2 +- Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c | 2 +- Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c | 4 ++-- Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 2 +- 9 files changed, 23 insertions(+), 13 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h index 32ea48152..0e38c6e2e 100644 --- a/Software/Embedded_SW/Embedded/DataDef.h +++ b/Software/Embedded_SW/Embedded/DataDef.h @@ -20,9 +20,9 @@ #define NO_INITIAL_HEATING #define MAX_STRING_LEN 255 //Embedded version + filter.c -//#define WATCHDOG +#define WATCHDOG //#define DISPESER_TEST -#define FPGA_WATCHDOG_DISABLE +//#define FPGA_WATCHDOG_DISABLE //#define USE_POWERSTEP01 -NA diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c index b2e623a11..12c9193e3 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c @@ -179,6 +179,7 @@ uint32_t MotorMoveWithCallback (TimerMotors_t MotorId,bool direction, uint32_t S printBusy = true; Report("MotorControlGetnBusyState print",__FILE__,__LINE__,MotorDriverResponse[MotorId].Busy,RpMessage,0,0); }*/ + ReportWithPackageFilter(GeneralFilter,"MotorMoveWithCallback",__FILE__,direction,MotorId,RpMessage,Steps,0); //call driver action to device id with the parameter //SetMotorSpeed (deviceId, parameter); @@ -657,6 +658,11 @@ uint32_t MotorMovetoLimitSwitch (TimerMotors_t MotorId,bool direction, uint32_t //SetMotorSpeed (deviceId, parameter); if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DH_LID) { + if ((Is_PP_Machine()==true)&&(Safety_Incident_Report()==Safety_Event_Occurred)) + { + ReportWithPackageFilter(GeneralFilter,"cannot open dyeing head lid when safety active",__FILE__,direction,MotorId,RpMessage,Safety_Incident_Report(),0); + return ERROR; + } DeActivateHeadMagnet(); //open the lid magnet if (direction == MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize) { diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index 650d9be24..cc8ae5be8 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -1325,6 +1325,10 @@ uint32_t AlarmHandlingLoop(uint32_t tick) { Status = false; } + else if (AlarmItem[Alarm_i].DeviceId == HARDWARE_MOTOR_TYPE__MOTO_SCREW) + { + Status = false; + } else { switch (AlarmItem[Alarm_i].AlarmValue) diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 1e828c74f..e9d9a4e9b 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -424,8 +424,8 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) EmbeddedParametersInit(); PrintingHWConfiguration(request); - if (request->n_winders == 1) - status += InternalWinderConfigMessage(request->winders); + //if (request->n_winders == 1) + // status += InternalWinderConfigMessage(request->winders); status += MotorsInit(); @@ -494,7 +494,7 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) DispenserId = request->dispensers[Dispenser_i]->index; Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON Valve_Set(IDS_Id_to_CartrideValve[DispenserId], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON - status += DispenserConfigMessage(request->dispensers[Dispenser_i]); + //status += DispenserConfigMessage(request->dispensers[Dispenser_i]); if (Check_Dispenser_Type(DispenserId) == LS_STATUS_ERROR) { LOG_ERROR (DispenserId, "Dispenser identification failed"); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c index 470bf974e..8f1de2c1c 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_init.c @@ -17,7 +17,7 @@ #define MAX_CONTROL_SAMPLES 10 -HardwareDispenser DispensersCfg[ MAX_SYSTEM_DISPENSERS]; +//HardwareDispenser DispensersCfg[ MAX_SYSTEM_DISPENSERS]; TimerMotors_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS] = {HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8}; @@ -37,7 +37,7 @@ bool isDispenserInConfig(int DispenserId) } -uint32_t DispenserConfigMessage(HardwareDispenser * request) +/*uint32_t DispenserConfigMessage(HardwareDispenser * request) { uint32_t status = PASSED; int Dispenser_i; @@ -50,7 +50,7 @@ uint32_t DispenserConfigMessage(HardwareDispenser * request) } else return Dispenser_i; -} +}*/ void IDS_ModuleInit(void) { Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Waste); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index ac9bd0deb..8682d648a 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -651,7 +651,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) "WFCF Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, - (int) Dispensers[Dispenser_i]->nanoliterperpulse, + (int) (Dispensers[Dispenser_i]->nanoliterperpulse*100), (int) Dispensers[Dispenser_i]->pulsepersecond*1000, (int) segmentfirst_speed*1000); //REPORT_MSG(segmentfirst_speed,IdsMessage); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index bfea7b13b..6b6b85f2f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -1125,7 +1125,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) 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); - //writeLine("Progress Completed!"); + progress_request__free_unpacked(request,NULL); SendChars((char*)container_buffer, container_size); //free(container_buffer); if (RestartNeeded == true) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 92b953db5..420141d5b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -89,14 +89,14 @@ void SetWinderBackToBaseTime(uint32_t value) ReportWithPackageFilter(ThreadFilter,"Set WinderBackToBaseTime",__FILE__,__LINE__,WinderBackToBaseTime,RpWarning,KeepWindingCone, 0); } -uint32_t InternalWinderConfigMessage(HardwareWinder* request) +/*uint32_t InternalWinderConfigMessage(HardwareWinder* request) { uint32_t status = PASSED; InternalWinderCfg.milimetersperrotation = request->millimeterperrotation; return status; -} +}*/ char ScrewStr[150]; uint32_t InternalWindingConfigMessage(JobSpool* request) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 1c52a9b68..c67619e20 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -963,7 +963,7 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension) } usnprintf(Lenstr, 100, "ThreadPrepare_Tension Dancer %d Request: %d Current %d movement %d dir %d motor %d address %d", DancerId,request,current,movement,direction,HW_Motor_Id,address); - ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,address,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpWarning,PrepareWaitCount,0); + ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,address,current,RpWarning,request,0); return status; } -- cgit v1.3.1 From 177130ab882888a5c0713b3ccddcd9ba3c6041ef Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 21 Jul 2020 16:47:58 +0300 Subject: update the logic of checking the IFS availability (since we don't recieve I2C errors with I2C_BUSY_DELAY = 100) --- .../I2C_Communication/RFID_NFC/I2C_IFS_Mux.c | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c index 1e23508ef..174fd6178 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c @@ -101,14 +101,23 @@ uint32_t Reset_and_Check_IFS_Availability(PANEL_BUTTON_OR_CRAT_ID Cart_ID) #ifndef EVALUATION_BOARD - if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF)) - { - IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; - } - else - { - IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; - } + if((Read_Buf[0] == 0x40) && (Read_Buf[1] == 0x00) && (Read_Buf[2] == 0x03) && (Read_Buf[3] == 0x00) && (Read_Buf[4] == 0x11) && (Read_Buf[5] == 0x01))//PN7150 RESET RESPONSE + { + IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; + } + else + { + IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; + } + +// if((IFS_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF)) +// { +// IFS_Availability[Cart_ID-1] = IFS_NOT_RECOGNIZED; +// } +// else +// { +// IFS_Availability[Cart_ID-1] = IFS_RECOGNIZED; +// } #else IFS_Availability[Cart_ID-1] = WITHOUT_IFS; #endif @@ -125,6 +134,7 @@ uint32_t Check_IFS_Availability() for(Cart_i = CART_1; Cart_i <= CART_3; Cart_i++) { status |= Reset_and_Check_IFS_Availability(Cart_i); + delayms(1); } return status; } -- cgit v1.3.1 From 004d88fd5af64ab5329d7eb3bca3069d737aca0a Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Tue, 21 Jul 2020 17:28:54 +0300 Subject: increase the delay in Reset_and_Check_IFS_Availability --- .../Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c index 174fd6178..601e2e18a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.c @@ -94,7 +94,7 @@ uint32_t Reset_and_Check_IFS_Availability(PANEL_BUTTON_OR_CRAT_ID Cart_ID) delayUs(5); IFS_i2c_status = I2C_Write(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add, CORE_RESET_CMD, sizeof(CORE_RESET_CMD)); status |= IFS_i2c_status; - delayms(2); + delayms(3); } status |= I2C_Read(I2C_ID_IFS_MUX, I2C_NFC_Slave_Add + 1, Read_Buf, sizeof(Read_Buf)); -- cgit v1.3.1