diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
| commit | 00a491d93733d4625ad329b2ba8237f445364b3f (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Embedded_SW/Embedded/Drivers/Uart_Comm | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| download | Tango-00a491d9.tar.gz Tango-00a491d9.zip | |
merge
Diffstat (limited to 'Software/Embedded_SW/Embedded/Drivers/Uart_Comm')
| -rw-r--r-- | Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c | 542 | ||||
| -rw-r--r-- | Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h | 122 |
2 files changed, 523 insertions, 141 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c index 92337080d..0fe1ca152 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c +++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.c @@ -25,12 +25,9 @@ #include "driverlib/interrupt.h" #include "utils/uartstdio.h" #include "driverlib/uart.h" - -//#include <Drivers/I2C_Communication/WHS_Card/IO_Extender_Ports_TCA9555/WHS_IO.h> #include "Modules/Control/MillisecTask.h" #include <DataDef.h> #include <Drivers/I2C_Communication/I2C_Task.h> -//#include "Drivers/Uart_Comm/WHS_Controller_Comm/WHS_UART/WHS_Uart.h" #include "Drivers/FPGA/FPGA_Comm.h" #include "Drivers/Uart_Comm/BTSR/BTSR.h" @@ -41,6 +38,8 @@ uint8_t BTSR_RX_Buff[Max_BTSR_RX_Bytes]; uint16_t TX_Timeout = 0xFFFF;//6250 uint16_t RX_Timeout = 0xFFFF;//1 +BTSR_t BTSR[MaxUFeeders]; + typedef enum { BTSR_UART_CONFIG_PAR_1 = (UART_CONFIG_WLEN_8 |UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_ONE), @@ -71,13 +70,10 @@ void U4RX() UARTIntEnable(UART4_BASE, UART_INT_TX); BTSR_RX_Buff[rxcounter] = ROM_UARTCharGetNonBlocking(UART4_BASE);//Receive data rxcounter++; - - } void uart4_intHandler() { - //static uint8_t nop = 0; //Get interrupt flags unsigned long status = UARTIntStatus(UART4_BASE, 1); @@ -137,7 +133,6 @@ void InitConsole_BTSR_UART4(int32_t ui32SysClock) SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4); // // Enable GPIO port A which is used for UART4 pins. - // TODO: change this to whichever GPIO port you are using. // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); @@ -366,6 +361,7 @@ uint8_t Check_Received_CheckSum(uint8_t CODE_STRING, uint8_t Function_Code, uint (Buf[size_include_Checksum - 1] != (Sum >> 8)) ) { Status = ERROR; + ReportWithPackageFilter(ThreadFilter,"BTSR Get Wrong Checksum",__FILE__,__LINE__,(int)CODE_STRING,RpError,(int)Function_Code,0); } } return Status; @@ -405,56 +401,6 @@ uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size) return TxResult; } - -/* -uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size) -{ - int TxResult = 0; - uint8_t i = 1;//change to ADD0 and send the rest of bytes (1..Size) - const uint8_t Save_Size = size; - - BTSR_Change_Comm_Mode(TX_FIRST_BYTE); - Task_sleep (eOneMillisecond); - TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[0]); - - BTSR_Change_Comm_Mode(TX_NOT_FIRST_BYTE); - Task_sleep (eOneMillisecond); - - while(size) - { - if(size <= 16) //FIFO is working for data up to 16 bytes - { - for(; i < Save_Size; i++) - { - TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[i]); - } - size = 0;// all sent - } - else - { - for(; i < 16; i++) - { - TxResult |=ROM_UARTCharPutNonBlocking(UART4_BASE,Buf[i]); - } - size -= 16; - } - - while(HWREG(UART4_BASE + UART_O_FR) & UART_FR_BUSY)//UARTFR - { - if(TX_Timeout) - { - TX_Timeout--; - } - else - return ERROR; - } - } - - UART4_RS485_Direction(RX); - - return TxResult; -} -*/ uint8_t BTSR_Send_Buf_3xADD1(uint8_t *Buf, uint8_t size)//Only for commands with 3 bytes with Address 1 (0x06/0xFD) { int TxResult = 0; @@ -630,90 +576,279 @@ uint8_t BTSR_Read_Status(uint8_t BTSR_Id, uint8_t Application, uint8_t Yarn_Type //---------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------- -//BTSR_ALARM_AND_ENABLING_STATUS_READ -typedef struct + + +typedef union { - bool D0 : 1;//0 - bool D1 : 1;//1 - bool D2 : 1;//2 - bool D3 : 1;//3 - bool D4 : 1;//4 - bool D5 : 1;//5 - bool D6 : 1;//6 - bool D7 : 1;//7 -}BITS; + struct + { + uint8_t CODE_STRING ; + uint8_t FUNCTION_STRING; + //DATA_STRING + uint16_t WORK_TENSION ;//1° - 2° + uint16_t OUTPUT_TENSION;//3° - 4° + uint16_t RELAX_YARN ;//5° - 6° + uint8_t INC_DEC_TENSION;//7° + uint8_t INC_DEC_STRETCH;//8° + uint16_t TENSION_ERROR ;//9° - 10° + uint16_t TIME_ALARM ;//11° - 12° + uint8_t RELAX_SPEED ;//13° + uint8_t APPLICATION ;//14° + uint8_t YARN_TYPE ;//15° + uint8_t SPARE[4] ;//16° + uint8_t ALARM_ENABLING ;//20° + uint8_t ABILITAZIONE ;//21° + + uint16_t CHECKSUM ; + }Byte; +uint8_t Buf[25]; +}BTSR_ADVANCED_STYLE_LOAD; + +BTSR_ADVANCED_STYLE_LOAD BTSR_AdvStyle_Load; typedef union { - BITS Bit[4]; - uint8_t Byte[4]; -}BTSR_ALARM_AND_ENABLING_STATUS_READ; + struct + { + uint8_t CODE_STRING ; + uint8_t FUNCTION_STRING ; + + //DATA_STRING + uint16_t OUTPUT_TENSION ; + uint16_t WORK_TENSION ; + uint16_t RELAX_YARN ; + uint8_t INC_DEC_TENSION ; + uint8_t INC_DEC_STRETCH ; + uint32_t METER_START ; + uint32_t INC_DEC_METER ; + uint32_t TARGET ; + uint16_t TENSION_ERROR ; + uint16_t ALARM_TIME ; + uint8_t SPARE1[2] ; + uint8_t ALARM_ENABLING ; + uint8_t TARGET_ENABLING ; + uint8_t RELAX_YARN_SPEED; + uint8_t SPARE2[6] ; + + uint16_t CHECKSUM ; + }Byte; +uint8_t Buf[39]; +}BTSR_ADVANCED_TENSION_PROGRAMMING; -BTSR_ALARM_AND_ENABLING_STATUS_READ BTSR_Status; +BTSR_ADVANCED_TENSION_PROGRAMMING BTSR_Adv_Tension_Prog; -void BTSR_Configuration_Set(uint8_t UFeeder_ID) +void BTSR_Configuration_Set(UFeeder_Index UFeeder_i)//15 { memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); - BTSR_TX_Buff[0] = UFeeder_ID; + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; BTSR_TX_Buff[1] = 0x36; - BTSR_TX_Buff[2] = 0x80;//CCW + BTSR_TX_Buff[2] = BTSR[UFeeder_i].DirectionCCW << 7; BTSR_TX_Buff[3] = 0x01;//YYT OFF, UNICO OFF - BTSR_TX_Buff[4] = 0x40;//FLIP DISPLAY + BTSR_TX_Buff[4] = BTSR[UFeeder_i].Flip_Display << 6; + BTSR_TX_Buff[5] = BTSR[UFeeder_i].Lock_Keyboard_Menue;// ‘1’ EDITOR LOCKED BTSR_Calculate_CheckSum(BTSR_TX_Buff,18); - BTSR_Send_Buf(Typology_Set.Buf, 20); + BTSR_Send_Buf(BTSR_TX_Buff, 20); + +} + +void BTSR_Advanced_Style_Load(UFeeder_Index UFeeder_i) +{ + //memset(BTSR_AdvStyle_Load.Buf, 0, Size); + /* + uint8_t Size = sizeof(BTSR_AdvStyle_Load.Buf); + + memset(BTSR_AdvStyle_Load.Buf, 0, Size); +/ + BTSR_AdvStyle_Load.Byte.CODE_STRING = UFeeder_ID; + BTSR_AdvStyle_Load.Byte.FUNCTION_STRING = 0x4B; + + BTSR_AdvStyle_Load.Byte.WORK_TENSION = Tension; + BTSR_AdvStyle_Load.Byte.TENSION_ERROR = Tension_Error; + BTSR_AdvStyle_Load.Byte.TIME_ALARM = Time_Alarm; + BTSR_AdvStyle_Load.Byte.APPLICATION = Application; + BTSR_AdvStyle_Load.Byte.YARN_TYPE = YarnType; + BTSR_AdvStyle_Load.Byte.ALARM_ENABLING = 0x03; // OUTPUT TENSION ENABLED + TENSION ERROR ENABLED +*/ + //BTSR_Calculate_CheckSum(BTSR_AdvStyle_Load.Buf,Size - 2); + + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x4B; + + BTSR_TX_Buff[2] = BTSR[UFeeder_i].Tension & 0XFF;//1 + BTSR_TX_Buff[3] = BTSR[UFeeder_i].Tension >> 8;//2 + + BTSR_TX_Buff[10] = BTSR[UFeeder_i].Tension_Err & 0XFF;//9 + BTSR_TX_Buff[11] = BTSR[UFeeder_i].Tension_Err >> 8;//10 + BTSR_TX_Buff[12] = BTSR[UFeeder_i].Alarm_Time & 0XFF;//11 + BTSR_TX_Buff[13] = BTSR[UFeeder_i].Alarm_Time >> 8;//12 + + + BTSR_TX_Buff[15] = BTSR[UFeeder_i].Application;//14 + BTSR_TX_Buff[16] = BTSR[UFeeder_i].Yarn_Type;//15 + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,23); + + BTSR_Send_Buf(BTSR_TX_Buff,25); + +} + +void BTSR_Advanced_Tension_Prog(UFeeder_Index UFeeder_i ) +{ + + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x39; + + BTSR_TX_Buff[4] = BTSR[UFeeder_i].Tension & 0XFF;//3 + BTSR_TX_Buff[5] = BTSR[UFeeder_i].Tension >> 8;//4 + + BTSR_TX_Buff[22] = BTSR[UFeeder_i].Tension_Err & 0XFF;//21 + BTSR_TX_Buff[23] = BTSR[UFeeder_i].Tension_Err >> 8;//22 + + BTSR_TX_Buff[24] = BTSR[UFeeder_i].Alarm_Time & 0XFF;//23 + BTSR_TX_Buff[25] = BTSR[UFeeder_i].Alarm_Time >> 8;//24 + + BTSR_TX_Buff[28] = 0x01;//27 ‘1’ TENSION ERROR ENABLED + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,37); + + BTSR_Send_Buf(BTSR_TX_Buff,39); +} + +void BTSR_Application_Yarn_Type_Set(UFeeder_Index UFeeder_i) +{ + //APPLICATION_AND_YARN_TYPOLOGY_SET_27 + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x3F; + BTSR_TX_Buff[2] = BTSR[UFeeder_i].Application; + BTSR_TX_Buff[3] = BTSR[UFeeder_i].Yarn_Type; + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,4); + BTSR_Send_Buf(BTSR_TX_Buff, 6); } -void BTSR_Alarm_and_Enabling_Status_Read(uint8_t UFeeder_ID) + +void BTSR_Status_Reset(UFeeder_Index UFeeder_i)//35 { memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); - BTSR_TX_Buff[0] = UFeeder_ID; + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x27; + + BTSR_TX_Buff[2] = 0x07;//RESET_0 + BTSR_TX_Buff[3] = 0x00;//RESET_1 + BTSR_TX_Buff[4] = 0x00;//SPARE + BTSR_TX_Buff[5] = 0x00;//SPARE + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,6); + + BTSR_Send_Buf(BTSR_TX_Buff, 8); + +} + +void BTSR_Errors_Counter_Reset(UFeeder_Index UFeeder_i)//36 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x29; + BTSR_TX_Buff[2] = 0x00;//00 - RESETS ALL THE COUNTERS + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,3); + + BTSR_Send_Buf(BTSR_TX_Buff, 5); + +} + +void BTSR_Meters_Total_Counter_Reset(UFeeder_Index UFeeder_i , uint8_t Resolution)//37/39/41 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + + if(Resolution == LOW) + BTSR_TX_Buff[1] = 0x06; + else + if(Resolution == HIGH) + BTSR_TX_Buff[1] = 0x1E; + else + if(Resolution == HIGHEST) + BTSR_TX_Buff[1] = 0x48; + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,2); + + BTSR_Send_Buf(BTSR_TX_Buff, 4); +} + +void BTSR_Info_Read(UFeeder_Index UFeeder_i) +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + BTSR_TX_Buff[1] = 0x3E; + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,2); + + BTSR_Send_Buf(BTSR_TX_Buff, 4); + +} + +void BTSR_Meters_Total_Counter_Read(UFeeder_Index UFeeder_i , uint8_t Resolution)//37/39/41 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; + + if(Resolution == LOW) + BTSR_TX_Buff[1] = 0x16; + else + if(Resolution == HIGH) + BTSR_TX_Buff[1] = 0x1D; + else + if(Resolution == HIGHEST) + BTSR_TX_Buff[1] = 0x47; + + BTSR_Calculate_CheckSum(BTSR_TX_Buff,2); + + BTSR_Send_Buf(BTSR_TX_Buff, 4); +} + +void BTSR_Alarm_and_Enabling_Status_Read(UFeeder_Index UFeeder_i)//30 +{ + memset(BTSR_TX_Buff, 0, Max_BTSR_TX_Bytes); + + BTSR_TX_Buff[0] = BTSR[UFeeder_i].ID; BTSR_TX_Buff[1] = 0x1C; BTSR_Calculate_CheckSum(BTSR_TX_Buff,2); - BTSR_Send_Buf(Typology_Set.Buf, 4); + BTSR_Send_Buf(BTSR_TX_Buff, 4); } -typedef enum + + +typedef union { - //BTSR_READ - DEVICE_INFORMATION_READ_10 , - ADVANCED_PROGRAMMING_READ_18 , - ADVANCED_TENSION_READ_23 , - APPLICATION_AND_YARN_TYPOLOGY_READ_28 , - ALARM_AND_ENABLING_STATUS_READ_30 , - PC_LINK_READ_32 , - METERS_TOTAL_COUNTER_READ_LOW_37 , - METERS_TOTAL_COUNTER_READ_HIGH_39 , - METER_TOTAL_COUNTER_READ_HIGHEST_41 , - MAX_BTSR_READ , + struct + { + uint32_t Uint32; + uint16_t CheckSum; + }Data; + uint8_t Buf[6]; +}BTSR_METERS; + +BTSR_METERS BTSR_Meters; - //BTSR_SET - //return 0xFA/0xFB/0xF9 - DEVICE_CALIBRATION_11 , - BAUDRATE_SET_13 , - DISPLAY_LANGUAGE_SET_14 , - CONFIGURATION_SET_15 , - ADVANCED_CONFIGURATION_SET_17 , - INPUT_CURRENT_CONTROL_SET_20 , - ADVANCED_TENSION_PROGRAMMING_21 , - ADVANCED_STYLE_LOAD_25 , - APPLICATION_AND_YARN_TYPOLOGY_SET_27 , - WORK_TENSION_AND_OPERATION_STATUS_SET_29 , - ALARM_STATUS_RESET_35 , - RESETS_ALL_THE_COUNTERS_36 , - //return device + Function code - METERS_TOTAL_COUNTER_RESET_LOW_38 , - METERS_TOTAL_COUNTER_RESET_HIGH_40 , - METERS_TOTAL_COUNTER_RESET_HIGHEST_42 , - MAX_BTSR_SET -}BTSR_CMD; #define Get_Set_resp 5 #define Set_Command 6 @@ -721,43 +856,61 @@ typedef enum #define Get_Read_resp 7 #define Read_Command 8 -BTSR_CMD BTSR_command_Stage[MAX_BTSR_SET]; - -uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) +uint8_t BTSR_State_Machine(UFeeder_Index UFeeder_i) { uint8_t status = OK; - uint8_t i; + uint8_t i,j; + float temp = 0.0; + + //BTSR_Init(); for(i = DEVICE_CALIBRATION_11; i < MAX_BTSR_SET; i++) { - if(BTSR_command_Stage[i] == Get_Set_resp) + if(BTSR[UFeeder_i].Command[i] == Get_Set_resp) { - if((i >= DEVICE_CALIBRATION_11) && (i <= RESETS_ALL_THE_COUNTERS_36) /*&& (BTSR_RX_Buff[0] != BTSR_RISP_OK)*/) + if((i >= DEVICE_CALIBRATION_11) && (i <= RESETS_ALL_THE_COUNTERS_36) && (BTSR_RX_Buff[0] != BTSR_RISP_OK)) { status = ERROR; - BTSR_command_Stage[i] = BTSR_RX_Buff[0]; + BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[0]; //print response + command ID } - else if(((i == METERS_TOTAL_COUNTER_RESET_LOW_38) && (BTSR_RX_Buff[1] != 0x06)) || - ((i == METERS_TOTAL_COUNTER_RESET_HIGH_40) && (BTSR_RX_Buff[1] != 0x1E)) || - ((i == METERS_TOTAL_COUNTER_RESET_HIGHEST_42) && (BTSR_RX_Buff[1] != 0x48)) ) + else if( (i == METERS_TOTAL_COUNTER_RESET_38_40_42) && + ( ((BTSR[UFeeder_i].Length_Resolution == LOW) && (BTSR_RX_Buff[1] != 0x06)) || + ((BTSR[UFeeder_i].Length_Resolution == HIGH) && (BTSR_RX_Buff[1] != 0x1E)) || + ((BTSR[UFeeder_i].Length_Resolution == HIGHEST) && (BTSR_RX_Buff[1] != 0x48)) ) ) { status = ERROR; - BTSR_command_Stage[i] = BTSR_RX_Buff[1]; + BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[1]; //print response + command ID } - //print response + command ID - BTSR_command_Stage[i] = OK; + else//print response + command ID + BTSR[UFeeder_i].Command[i] = BTSR_RX_Buff[0];//OK; } - if(BTSR_command_Stage[i] == Set_Command) + if(BTSR[UFeeder_i].Command[i] == Set_Command) { - if(i == CONFIGURATION_SET_15) + switch(i) { - BTSR_Configuration_Set(UFeeder_ID); + case CONFIGURATION_SET_15: + BTSR_Configuration_Set(UFeeder_i); + break; + case ADVANCED_TENSION_PROGRAMMING_21: + BTSR_Advanced_Tension_Prog(UFeeder_i); + break; + case APPLICATION_AND_YARN_TYPOLOGY_SET_27: + BTSR_Application_Yarn_Type_Set(UFeeder_i); + break; + case ALARM_STATUS_RESET_35: + BTSR_Status_Reset(UFeeder_i); + break; + case RESETS_ALL_THE_COUNTERS_36: + BTSR_Errors_Counter_Reset(UFeeder_i); + break; + case METERS_TOTAL_COUNTER_RESET_38_40_42: + BTSR_Meters_Total_Counter_Reset(UFeeder_i, BTSR[UFeeder_i].Length_Resolution); + break; } - - BTSR_command_Stage[i] = Get_Set_resp; + BTSR[UFeeder_i].Command[i] = Get_Set_resp; return status;//Only one command in cycle } } @@ -765,25 +918,60 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) for(i = DEVICE_INFORMATION_READ_10; i < MAX_BTSR_READ; i++) { - if(BTSR_command_Stage[i] == Get_Read_resp) + if(BTSR[UFeeder_i].Command[i] == Get_Read_resp) { // Add CRC check if(i == ALARM_AND_ENABLING_STATUS_READ_30) { - for(i = 0; i < 4; i++) - BTSR_Status.Byte[i] = BTSR_RX_Buff[i]; + for(j = 0; j < 6; j++) + BTSR[UFeeder_i].Status.Byte[j] = BTSR_RX_Buff[j]; + } + else + if(i == DEVICE_INFORMATION_READ_10) + { + for(j = 0; j < 12; j++) + BTSR[UFeeder_i].Info.Buf[j] = BTSR_RX_Buff[j]; + status |= Check_Received_CheckSum(BTSR[UFeeder_i].ID, 0x3E, BTSR[UFeeder_i].Info.Buf, 12); + ReportWithPackageFilter(ThreadFilter,"BTSR VERSION",__FILE__,UFeeder_i,(BTSR[UFeeder_i].Info.Byte.BOARD_HW_VERSION << 8) | BTSR[UFeeder_i].Info.Byte.BOOTLOADER_SW_VERSION,RpMessage,(BTSR[UFeeder_i].Info.Byte.SW_VERSION << 8) | BTSR[UFeeder_i].Info.Byte.SW_UNDER_VERSION,0); + } + else + if(METER_TOTAL_COUNTER_READ_37_39_41) + { + for(j = 0; j < 6; j++) + BTSR_Meters.Buf[j] = BTSR_RX_Buff[j]; + status |= Check_Received_CheckSum(BTSR[UFeeder_i].ID, 0x16, BTSR_Meters.Buf, 6); + + temp = (float)(BTSR_Meters.Data.Uint32) * PI * BTSR[UFeeder_i].Radius_Meter; + if(BTSR[UFeeder_i].Length_Resolution == HIGH) + temp /=12.0; + else + if(BTSR[UFeeder_i].Length_Resolution == HIGHEST) + temp /=750.0; + + BTSR[UFeeder_i].LengthInMeter = temp; } - BTSR_command_Stage[i] = 0; + + memset(BTSR_RX_Buff, 0, Max_BTSR_RX_Bytes); + BTSR[UFeeder_i].Command[i] = BTSR_RISP_OK; } + //else//? - if(BTSR_command_Stage[i] == Read_Command) + if(BTSR[UFeeder_i].Command[i] == Read_Command) { - - if(i == ALARM_AND_ENABLING_STATUS_READ_30) + switch(i) { - BTSR_Alarm_and_Enabling_Status_Read(UFeeder_ID); + case ALARM_AND_ENABLING_STATUS_READ_30: + BTSR_Alarm_and_Enabling_Status_Read(UFeeder_i); + break; + case DEVICE_INFORMATION_READ_10: + BTSR_Info_Read(UFeeder_i); + break; + case METER_TOTAL_COUNTER_READ_37_39_41: + BTSR_Meters_Total_Counter_Read(UFeeder_i, BTSR[UFeeder_i].Length_Resolution); + break; } - BTSR_command_Stage[i] = Get_Read_resp; + + BTSR[UFeeder_i].Command[i] = Get_Read_resp; return status;//Only one command in cycle } } @@ -791,3 +979,79 @@ uint8_t BTSR_State_Machine(uint8_t UFeeder_ID) return status; } +void BTSR_Read_Errors_Status(UFeeder_Index UFeeder_i)//Every 1 second. 3 seconds debouce for on/off +{ + BTSR[UFeeder_i].Command[ALARM_AND_ENABLING_STATUS_READ_30] = Read_Command; +} + +void BTSR_Read_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution)//Every 100msec during thread movement +{ + BTSR[UFeeder_i].Length_Resolution = Length_Resolution; + + BTSR[UFeeder_i].Command[METER_TOTAL_COUNTER_READ_37_39_41] = Set_Command; +} + +void BTSR_Reset_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution)//before job +{ + BTSR[UFeeder_i].Length_Resolution = Length_Resolution; + + BTSR[UFeeder_i].Command[METERS_TOTAL_COUNTER_RESET_38_40_42] = Set_Command; +} + +void BTSR_Reset_Status(UFeeder_Index UFeeder_i)// +{ + + BTSR[UFeeder_i].Command[ALARM_STATUS_RESET_35] = Set_Command; +} + +void BTSR_Reset_Counters(UFeeder_Index UFeeder_i)// +{ + + BTSR[UFeeder_i].Command[RESETS_ALL_THE_COUNTERS_36] = Set_Command; +} + +void BTSR_RML_Settings(UFeeder_Index UFeeder_i, BTSR_APPLICATION Application, BTSR_YARN_TYPE Yarn_Type, uint16_t Tension, uint16_t Tension_Err, uint16_t Alarm_Time ) +{ + BTSR[UFeeder_i].Application = Application; + BTSR[UFeeder_i].Yarn_Type = Yarn_Type; + BTSR[UFeeder_i].Tension = Tension; + BTSR[UFeeder_i].Tension_Err = Tension_Err; + BTSR[UFeeder_i].Alarm_Time = Alarm_Time; + + BTSR[UFeeder_i].Command[ADVANCED_TENSION_PROGRAMMING_21] = Set_Command; + BTSR[UFeeder_i].Command[APPLICATION_AND_YARN_TYPOLOGY_SET_27] = Set_Command; +} + + + +void BTSR_Init() +{ + UFeeder_Index i = RUFeeder1; + + for(i = RUFeeder1; i < MaxUFeeders; i++) + { + BTSR[i].ID = 0x01 + i; + BTSR[i].Flip_Display = true; + BTSR[i].DirectionCCW = true; + BTSR[i].Radius_Meter = BTSR_ROLLER_RADIUS; + BTSR[i].Lock_Keyboard_Menue = false; + + BTSR[i].Command[CONFIGURATION_SET_15] = Set_Command; + BTSR[i].Command[DEVICE_INFORMATION_READ_10] = Read_Command; + + BTSR_Reset_Status(i); + BTSR_Reset_Counters(i); + BTSR_Reset_Length(i,LOW); + BTSR_Reset_Length(i,HIGH); + BTSR_Reset_Length(i,HIGHEST); + } + //Only for testing ------------------------------------------------------------------------------- +// BTSR_RML_Settings(RUFeeder1, SHOES, ALL_YARNS3, 1000, 10, 5);//Test!!! --- need to move to RML +// BTSR_Reset_Counters(RUFeeder1); +// BTSR_Reset_Status(RUFeeder1); +// BTSR_Reset_Length(RUFeeder1, HIGHEST); +// BTSR_Read_Length(RUFeeder1, HIGHEST); +// BTSR_Read_Errors_Status(RUFeeder1); + //------------------------------------------------------------------------------------------------ +} + diff --git a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h index 14fda8f19..db8f2879b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h +++ b/Software/Embedded_SW/Embedded/Drivers/Uart_Comm/BTSR/BTSR.h @@ -11,6 +11,9 @@ #define Max_BTSR_RX_Bytes 55 #define Max_BTSR_TX_Bytes 40 +#define BTSR_ROLLER_RADIUS 0.021//meter + + typedef enum { SOCKS = 1 , @@ -48,12 +51,117 @@ typedef enum BTSR_RISP_OUT_OF_RANFE = 0xF9, }BTSR_RISP_BYTE; +typedef enum +{ + //BTSR_READ (Read - The highest priority first) + METER_TOTAL_COUNTER_READ_37_39_41 ,//0 + ALARM_AND_ENABLING_STATUS_READ_30 ,//1 + PC_LINK_READ_32 ,//2 + ADVANCED_TENSION_READ_23 ,//3 + ADVANCED_PROGRAMMING_READ_18 ,//4 + APPLICATION_AND_YARN_TYPOLOGY_READ_28 ,//5 + DEVICE_INFORMATION_READ_10 ,//6 + + MAX_BTSR_READ ,//7 + + //BTSR_SET (Set - The highest priority first) + //Return 0xFA/0xFB/0xF9: + BAUDRATE_SET_13 ,//8 + DISPLAY_LANGUAGE_SET_14 ,//9 + DEVICE_CALIBRATION_11 ,//10 + CONFIGURATION_SET_15 ,//11 + ADVANCED_CONFIGURATION_SET_17 ,//12 + //return device + Function code: + METERS_TOTAL_COUNTER_RESET_38_40_42 ,//13 + //Return 0xFA/0xFB/0xF9: + RESETS_ALL_THE_COUNTERS_36 ,//14 + ALARM_STATUS_RESET_35 ,//15 + WORK_TENSION_AND_OPERATION_STATUS_SET_29 ,//16 + ADVANCED_TENSION_PROGRAMMING_21 ,//17 + ADVANCED_STYLE_LOAD_25 ,//18 + APPLICATION_AND_YARN_TYPOLOGY_SET_27 ,//19 + INPUT_CURRENT_CONTROL_SET_20 ,//20 + + MAX_BTSR_SET //21 +}BTSR_CMD; + +typedef enum +{ + RUFeeder1 = 0, + //RUFeeder2 = 1, + //RUFeeder3 = 2, + //RUFeeder4 = 3, + + MaxUFeeders, +}UFeeder_Index; + +//BTSR_ALARM_AND_ENABLING_STATUS_READ +typedef struct +{ + bool D0 : 1;//0 + bool D1 : 1;//1 + bool D2 : 1;//2 + bool D3 : 1;//3 + bool D4 : 1;//4 + bool D5 : 1;//5 + bool D6 : 1;//6 + bool D7 : 1;//7 +}BITS; + + +typedef union +{ + BITS Bit[6]; + uint8_t Byte[6]; +}BTSR_ALARM_AND_ENABLING_STATUS_READ; + +typedef union +{ + struct + { + uint8_t SW_VERSION;//0XDE + uint8_t SW_UNDER_VERSION;//0X01 + uint8_t BYTE_U0X55;//0X55 + uint8_t BYTE_F0X46;//0X46 + uint8_t PRODUCT_CODE;//0X13 + uint8_t TENSION_SENSOR_END_SCALE;//0X65 + uint8_t BOARD_HW_VERSION;//0X02 + uint8_t BOOTLOADER_SW_VERSION;//0X0A + uint8_t BYTE_0X32;//0X32 + uint8_t SPARE;//0X00 + uint8_t CHECKSUM_LSB;//0X60 + uint8_t CHECKSUM_MSB;//0X01 + }Byte; +uint8_t Buf[12]; +}BTSR_DEVICE_INFORMATION_READ; + +typedef struct +{ + uint8_t ID; + bool DirectionCCW; + bool Flip_Display; + bool Lock_Keyboard_Menue; + float Radius_Meter; + uint8_t Command[MAX_BTSR_SET]; + uint8_t Application; + uint8_t Yarn_Type; + uint16_t Tension; + uint16_t Tension_Err; + uint16_t Alarm_Time; + uint8_t Length_Resolution; + + float LengthInMeter; + BTSR_ALARM_AND_ENABLING_STATUS_READ Status; + BTSR_DEVICE_INFORMATION_READ Info; + +}BTSR_t; + extern uint8_t BTSR_RX_Buff[Max_BTSR_RX_Bytes]; unsigned long UARTStatus(); bool BTSR_Change_Comm_Mode(uint8_t Mode); -uint8_t BTSR_Auto_Identify(uint8_t BTSR_Id);//AUTOMATIC IDENTIFICATION PROCEDURE (IDENTIFY) -uint8_t BTSR_Set_Parmeters(uint8_t BTSR_Id, uint8_t Application, uint8_t Yarn_Type ); +uint8_t BTSR_Auto_Identify(uint8_t BTSR_ID);//AUTOMATIC IDENTIFICATION PROCEDURE (IDENTIFY) +uint8_t BTSR_Set_Parmeters(uint8_t BTSR_ID, uint8_t Application, uint8_t Yarn_Type ); uint8_t BTSR_Send_Buf(uint8_t *Buf, uint8_t size); uint8_t BTSR_RECEIVE_Buf(uint8_t *Buf, uint8_t size); @@ -62,4 +170,14 @@ uint8_t Check_Received_CheckSum(uint8_t CODE_STRING, uint8_t Function_Code, uint uint8_t BTSR_Send_Buf_3xADD1(uint8_t *Buf, uint8_t size);//Only for commands with 3 bytes with Address 1 (0x06/0xFD) void InitConsole_BTSR_UART4(int32_t ui32SysClock); +uint8_t BTSR_State_Machine(UFeeder_Index UFeeder_i); + +void BTSR_Init(); +void BTSR_RML_Settings(UFeeder_Index UFeeder_i, BTSR_APPLICATION Application, BTSR_YARN_TYPE Yarn_Type, uint16_t Tension, uint16_t Tension_Err, uint16_t Alarm_Time ); +void BTSR_Reset_Counters(UFeeder_Index UFeeder_i);//After errors +void BTSR_Reset_Status(UFeeder_Index UFeeder_i);//After errors +void BTSR_Reset_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution);//Before job +void BTSR_Read_Length(UFeeder_Index UFeeder_i, uint8_t Length_Resolution);//Every 100msec during thread movement +void BTSR_Read_Errors_Status(UFeeder_Index UFeeder_i);//Every 1 second. 3 seconds debouce for on/off + #endif /* DRIVERS_UART_COMM_BTSR_BTSR_H_ */ |
