From 12642bc555c2fadbbe501b642ad0272abb6d8ee4 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 7 Aug 2018 09:46:39 +0300 Subject: fix jogging directions --- .../Embedded/Modules/Thread/Thread_print.c | 32 ++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index b536c93b0..c3b58625f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -20,7 +20,8 @@ #include "StateMachines/Printing/PrintingSTM.h" #include "drivers/Motors/Motor.h" -#include "drivers/Danser_SSI/ssi_comm.h" +//#include "drivers/SSI_Comm/ssi_comm.h" +#include "drivers/SSI_Comm/Dancer/Dancer.h" #include "drivers/Heater/TemperatureSensor.h" #include "drivers/Heater/Heater.h" #include "drivers/Motors/Motor.h" @@ -353,16 +354,21 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) avreageSampleValue += MotorSamples[index][i]; avreageSampleValue = avreageSampleValue / MotorsControl[index].pvinputfilterfactormode; - if (index == POOLER_MOTOR) + if (BreakSensorenabled == true) { - if (JobCounter > eOneSecond) + if (index == POOLER_MOTOR) { - if (ReadBreakSensor()==ERROR) + if (JobCounter > eOneSecond) { - //LOG_ERROR(index, "ReadBreakSensor Error"); - JobEndReason = JOB_THREAD_BREAK; - //SendJobProgress(0.0,0,false, "ReadBreakSensor Error"); - EndState(CurrentJob,"ReadBreakSensor Error" ); + if (ReadBreakSensor()==ERROR) + { + //consider applying the debouce parameters later + //BreakSensordebouncetimemilli + //LOG_ERROR(index, "ReadBreakSensor Error"); + JobEndReason = JOB_THREAD_BREAK; + //SendJobProgress(0.0,0,false, "ReadBreakSensor Error"); + EndState(CurrentJob,"ReadBreakSensor Error" ); + } } } } @@ -415,6 +421,10 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } //******************************************************************************************************************** +uint32_t ThreadGetMotorSpeed(threadMotorsEnum MotorId) +{ + return CurrentControlledSpeed[MotorId]; +} //******************************************************************************************************************** uint32_t ThreadInitialTestStub(HardwareMotor * request) @@ -561,17 +571,17 @@ uint32_t ThreadPreSegmentState(void *JobDetails) //MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, OriginalMotorSpd_2PPS[FEEDER_MOTOR]); //#warning rocker disabled - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].maxfrequency) + if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].maxfrequency > 0) { MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize); MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 2); } - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].maxfrequency) + if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].maxfrequency > 0) { MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize); MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 2); } -//#warning rocker disabled + //#warning rocker disabled // MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 0, GPI_LS_RLOADMOTOR_UP, EndState); //TODO -- cgit v1.3.1 From 8c9dcb78af71f508c6ac70e0ca602727a5325b90 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 7 Aug 2018 10:35:00 +0300 Subject: some changes from machine 001 --- .../Embedded/Communication/CommunicationTask.c | 4 +-- .../Embedded_SW/Embedded/Modules/Control/control.c | 4 ++- .../Modules/Diagnostics/DiagnosticsHoming.c | 13 +++----- .../Embedded/Modules/Heaters/Heaters_init.c | 38 +++++++++------------- .../Embedded/Modules/Thread/Thread_print.c | 17 ++++++---- 5 files changed, 36 insertions(+), 40 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c') diff --git a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c index b6841ef7e..4051c57e6 100644 --- a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c +++ b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c @@ -95,7 +95,7 @@ void communicationTask(UArg arg0, UArg arg1) initArray(1); //ui32RxCount = 0; - CommunicationRxMsgQ = Mailbox_create(sizeof(CommRxMessageStruc), 5, NULL,NULL); + CommunicationRxMsgQ = Mailbox_create(sizeof(CommRxMessageStruc), 4, NULL,NULL); /* Block while the device is NOT connected to the USB */ // Semaphore_pend(initConnectionSem, BIOS_WAIT_FOREVER); @@ -166,7 +166,7 @@ void communicationTxTask(UArg arg0, UArg arg1) SetCommunicationPath(isUART); #endif //ui32RxCount = 0; - CommunicationTxMsgQ = Mailbox_create(sizeof(CommTxMessageStruc), 10, NULL,NULL); + CommunicationTxMsgQ = Mailbox_create(sizeof(CommTxMessageStruc), 4, NULL,NULL); /* Block while the device is NOT connected to the USB */ // Semaphore_pend(initConnectionSem, BIOS_WAIT_FOREVER); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 60322b4d7..6a9735c13 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -293,8 +293,10 @@ uint32_t ControlLoop(uint32_t tick) bool Ten_msTick, Hundred_msTick, Onesecond_Tick,Tick98,Tick998; Ten_msTick = (tick%eTenMillisecond == 0) ?true:false; Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false; +// Hundred_msTick = (tick%200 == 0) ?true:false; Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; - Tick98 = (tick%eHundredMillisecond == 99) ?true:false; + Tick98 = (tick%eHundredMillisecond == 98) ?true:false; +// Tick98 = (tick%200 == 199) ?true:false; Tick998 = (tick%eOneSecond == 996) ?true:false; //ROM_IntMasterDisable(); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index b70c5a744..6745b9ff2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -81,7 +81,7 @@ uint32_t MotorHomingRequestCallback(uint32_t deviceID, uint32_t ReadValue) MessageContainer responseContainer; MotorHomingResponse response = MOTOR_HOMING_RESPONSE__INIT; - responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[deviceID], false, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); + responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[deviceID], true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); responseContainer.continuous = false; HomingToken[deviceID][0] = 0; uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); @@ -100,7 +100,7 @@ uint32_t DispenserHomingRequestCallback(uint32_t deviceID, uint32_t ReadValue) //open dry air valve in the dispenser Valve_Set((Valves_t) (deviceID+VALVE_2W_MID_AIR_LF), Atm_MidTank_OFF); - responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[deviceID], false, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); + responseContainer = createContainer(MESSAGE_TYPE__MotorHomingResponse, HomingToken[deviceID], true, &response, &motor_homing_response__pack, &motor_homing_response__get_packed_size); responseContainer.continuous = false; HomingToken[deviceID][0] = 0; uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); @@ -254,20 +254,17 @@ uint32_t DispenserJoggingRequestFunc(MessageContainer* requestContainer) { if (JobIsActive() == false) { - if (request->has_direction) + switch (request->direction) { - switch (request->direction) - { case MOTOR_DIRECTION__Forward: Control3WayValvesWithCallback ((Valves_t) request->index, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer break; case MOTOR_DIRECTION__Backward: Control3WayValvesWithCallback ((Valves_t) request->index, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer break; - } - MotorSetDirection(MotorId,request->direction); - MotorSetSpeed(MotorId, /*request->speed*/150); } + MotorSetDirection(MotorId,request->direction); + MotorSetSpeed(MotorId, /*request->speed*/150); } else { diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index 7989ded9e..8e16e2c01 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -85,28 +85,22 @@ void HeatingTestRequest(MessageContainer* requestContainer) HeaterId2 = request->hardwarepidcontrol2->hardwarepidcontroltype; status += HeaterConfigRequestMessage(request->hardwarepidcontrol2); - if (request->has_dryerzone1temp) - { - if (request->dryerzone1temp) - status |= HeaterCommandRequestMessage( - HeaterId1, true, - request->dryerzone1temp); - else - status |= HeaterCommandRequestMessage( - HeaterId1, false, - request->dryerzone1temp); - } - if (request->has_dryerzone2temp) - { - if (request->dryerzone2temp) - status |= HeaterCommandRequestMessage( - HeaterId2, true, - request->dryerzone2temp); - else - status |= HeaterCommandRequestMessage( - HeaterId2, false, - request->dryerzone2temp); - } + if (request->dryerzone1temp) + status |= HeaterCommandRequestMessage( + HeaterId1, true, + request->dryerzone1temp); + else + status |= HeaterCommandRequestMessage( + HeaterId1, false, + request->dryerzone1temp); + if (request->dryerzone2temp) + status |= HeaterCommandRequestMessage( + HeaterId2, true, + request->dryerzone2temp); + else + status |= HeaterCommandRequestMessage( + HeaterId2, false, + request->dryerzone2temp); ControlStart(); StubHeatingTestResponse response = STUB_HEATING_TEST_RESPONSE__INIT; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 75d54ef02..5b92fe3a0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -456,8 +456,7 @@ bool InitialProcess = false; MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage - if (MotorsCfg[HW_Motor_Id].has_directionthreadwize) - MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); + MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); if (Motor_i == FEEDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { @@ -561,13 +560,17 @@ uint32_t ThreadPreSegmentState(void *JobDetails) //MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, OriginalMotorSpd_2PPS[FEEDER_MOTOR]); //#warning rocker disabled - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].has_directionthreadwize) + if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].maxfrequency > 0) + { MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize); - MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 2); - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].has_directionthreadwize) + MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 2); + } + if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].maxfrequency > 0) + { MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize); - MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 2); -//#warning rocker disabled + MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 2); + } + //#warning rocker disabled // MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 0, GPI_LS_RLOADMOTOR_UP, EndState); //TODO -- cgit v1.3.1 From ad65c02d1a8e7db0fa51bccfc282f274d489de25 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 7 Aug 2018 14:12:04 +0300 Subject: improve communications. double array are disabled --- .../Embedded_SW/Embedded/Communication/CommunicationTask.c | 2 +- .../Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c | 4 ++-- Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 14 +++++++++++--- .../Embedded_SW/Embedded/Modules/Thread/Thread_print.c | 7 ++++++- 4 files changed, 20 insertions(+), 7 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c') diff --git a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c index 4051c57e6..bd89b8f2a 100644 --- a/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c +++ b/Software/Embedded_SW/Embedded/Communication/CommunicationTask.c @@ -166,7 +166,7 @@ void communicationTxTask(UArg arg0, UArg arg1) SetCommunicationPath(isUART); #endif //ui32RxCount = 0; - CommunicationTxMsgQ = Mailbox_create(sizeof(CommTxMessageStruc), 4, NULL,NULL); + CommunicationTxMsgQ = Mailbox_create(sizeof(CommTxMessageStruc), 20, NULL,NULL); /* Block while the device is NOT connected to the USB */ // Semaphore_pend(initConnectionSem, BIOS_WAIT_FOREVER); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 68a651426..95ab9680b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -368,7 +368,7 @@ void SendDiagnostics(void) DiagnosticsMonitor.blowervoltage = &voltage; memset(HeaterCounterIndex,0,sizeof(HeaterCounterIndex)); - if (JobIsActive()) + /*if (JobIsActive()) { DiagnosticsMonitor.n_dispensersmotorsfrequency = MAX_SYSTEM_DISPENSERS; @@ -393,7 +393,7 @@ void SendDiagnostics(void) DiagnosticsDispenserPressure[i].data = dispenserspressure[i]; DiagnosticsDispenserPressure[i].n_data = DiagnosticsIndex; DiagnosticsMonitor.dispenserspressure[i] = &DiagnosticsDispenserPressure[i]; - } + }*/ response.monitors = &DiagnosticsMonitor; response.n_digitalpins = 0/**MAX_GPI*/; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 9b5077ecc..84125c5e2 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -233,6 +233,7 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) SegmentReady(Module_IDS,ModuleDone); return OK; // all configured heaters are ready } + char Message[80]; //******************************************************************************************************************** uint32_t IDSSegmentState(void *JobDetails, int SegmentId) @@ -242,7 +243,6 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) TimerMotors_t HW_Motor_Id; double segmentfirst_speed; int CurrentSegment = SegmentId; - char Message[80]; if (CurrentSegment>=JobTicket->n_segments) @@ -267,7 +267,15 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) //(Speed*uStep*PPR)/((2*PI*Dispenser_Radius) segmentfirst_speed = JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanolitterpersecond/ JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanoliterperpulse; - segmentfirst_speed/=MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep + if (JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->dispenserstepdivision != DISPENSER_STEP_DIVISION__Auto) + { + MotorSetMicroStep(HW_Motor_Id, JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->dispenserstepdivision); + segmentfirst_speed/=JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->dispenserstepdivision; //the dye supply is calculated based on a 1/8 microstep + } + else + { + segmentfirst_speed/=MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep + } // double Dispenser_speed = (segmentfirst_speed * MotorsCfg[HW_Motor_Id].pulseperround)/(2*PI* MotorsCfg[HW_Motor_Id].pulleyradius); //DispenserControlConfig[Dispenser_i].m_SetParam = Dispenser_speed; // OriginalDispenserSpd_2PPS[Dispenser_i] = (int)Dispenser_speed; @@ -276,7 +284,7 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) DispenserSegmentReady[DispenserId] = false; Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); - usnprintf(Message, 80, "Dispenser %d nl\sec %f nl\pulse %f speed %d",Dispenser_i,JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanolitterpersecond, + usnprintf(Message, 80, "Dispenser %d nl/sec %f nl/pulse %f speed %d",Dispenser_i,JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanolitterpersecond, JobTicket->segments[CurrentSegment]->brushstops[JobBrushStopId]->dispensers[Dispenser_i]->nanoliterperpulse,segmentfirst_speed); //LOG_ERROR(segmentfirst_speed,Message); Report(Message,__FILE__,__LINE__,Dispenser_i,RpWarning,segmentfirst_speed,0); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 6f4ba1956..f9eb69de7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -289,6 +289,7 @@ void testDancersControl() ThreadControlCBFunction(IfTypeThread*0x100+FEEDER_MOTOR, DancersCfg[HARDWARE_DANCER_TYPE__RightDancer].zeropoint + mm20); ThreadControlActive = false; }*/ +bool dancerinvalid = false; uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { //#define MAX_CONTROL_SAMPLES 6 @@ -335,7 +336,11 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) } if (ReadValue == 0x3FFF) { - LOG_ERROR(index, "Dancer value invalid."); + if (dancerinvalid == false) + { + dancerinvalid = true; + LOG_ERROR(index, "Dancer value invalid."); + } return OK; } TranslatedReadValue = ReadValue - DancersCfg[DancerId].zeropoint; -- cgit v1.3.1