#ifndef MODULES_THREAD_THREAD_H_ #define MODULES_THREAD_THREAD_H_ #include "PMR/common/MessageContainer.pb-c.h" #include "PMR/Hardware/HardwareMotor.pb-c.h" #include "PMR/Hardware/HardwareMotorType.pb-c.h" #include "PMR/Hardware/HardwareDancer.pb-c.h" #include "PMR/Hardware/HardwareDancerType.pb-c.h" #include "PMR/Hardware/HardwareWinder.pb-c.h" #include "PMR/Hardware/HardwarePidControl.pb-c.h" #include "PMR/Hardware/HardwareConfiguration.pb-c.h" #include "PMR/Printing/JobSpool.pb-c.h" #include "PMR/Printing/JobSpoolType.pb-c.h" #include "drivers/Motors/Motor.h" #include "../control/pidalgo.h" #include "thread_ex.h" #include "drivers/SSI_Comm/SSI_Comm.h" #define NORMAL_COEF_DIVIDER 100 typedef struct { bool m_isEnabled; int32_t m_SetParam; float m_mesuredParam; float m_preError; float m_integral; float m_calculatedError; bool m_isReady; uint32_t m_ingnoreValue; PID_Config_Params m_params; }MotorControlConfig_t; #ifdef FOUR_WINDERS #define SCREW_2_Motor HARDWARE_MOTOR_TYPE__MOTO_SPARE2_1 #define SCREW_3_Motor HARDWARE_MOTOR_TYPE__MOTO_SPARE1_1 #define SCREW_4_Motor HARDWARE_MOTOR_TYPE__MOTO_RDANCER #define Winder_2_Motor HARDWARE_MOTOR_TYPE__MOTO_SPARE2_2 #define Winder_3_Motor HARDWARE_MOTOR_TYPE__MOTO_SPARE1_2 #define Winder_4_Motor HARDWARE_MOTOR_TYPE__MOTO_RLOADARM #endif #define MAX_THREAD_FEED_MOTORS (WINDER_MOTOR+1) #define MAX_SYSTEM_DANCERS NUM_OF_ROTENC extern TimerMotors_t ThreadMotorIdToMotorId[MAX_THREAD_MOTORS_NUM]; #ifdef FOUR_WINDERS extern Dancers_4_Winders ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM]; #else extern HardwareDancerType ThreadMotorIdToDancerId[MAX_THREAD_MOTORS_NUM]; #endif extern HardwarePidControlType ThreadMotorIdToControlId[MAX_THREAD_MOTORS_NUM]; extern bool BreakSensorenabled; extern int32_t BreakSensordebouncetimemilli; extern bool SampleWinding; //extern MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]; extern HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM]; //extern InternalWinderConfigStruc InternalWinderCfg; extern HardwareDancer DancersCfg[MAX_SYSTEM_DANCERS]; extern double CurrentControlledSpeed[MAX_THREAD_MOTORS_NUM]; extern double OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM]; #define MAX_CONTROL_SAMPLES 10 extern int32_t MotorSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM]; extern double NormalizedErrorCoEfficient[MAX_THREAD_MOTORS_NUM]; extern int DancerStopActivityLimit[MAX_THREAD_MOTORS_NUM]; extern MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM]; extern double MotorSpeedSamples[MAX_THREAD_MOTORS_NUM][MAX_CONTROL_SAMPLES]; extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM]; uint32_t InternalWinderConfigMessage(HardwareWinder* request); uint32_t MotorsConfigMessage( HardwareConfiguration* HW_request); uint32_t InternalWindingConfigMessage(JobSpool* request); uint32_t MotorPidRequestMessage(HardwarePidControl* request); void SetKeepWindingCone(bool value); void SetWinderBackToBaseTime(uint32_t value); uint32_t DancerConfigMessage(HardwareDancer * request); uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); void SetOriginMotorSpeed(float process_speed); uint32_t UpdatePidDuringRun(HardwarePidControl *hardwarepidcontrol); uint32_t ThreadPrepare_Tension (int DancerId, double tension); #endif //MODULES_THREAD_THREAD_H_