diff --git a/Core/Inc/requester.h b/Core/Inc/requester.h index 223b65e..c9ca2d1 100644 --- a/Core/Inc/requester.h +++ b/Core/Inc/requester.h @@ -26,7 +26,10 @@ //CAN Filter #define ID_MAIN_DEVICE 0x000 -#define CURRENT_ID_DEVICE 0x002 + +#define CURRENT_TYPE_DEVICE 0b001 +#define CURRENT_ID_DEVICE 0b0010 + #define CAN_IDE_32 0b00000100 // Для 32-х битного масштаба #define CAN_DATA_TYPE_FILTER 0x1F000000 @@ -34,7 +37,7 @@ #define CAN_SENSOR_TYPE_FILTER 0x00F80000 #define CAN_SENSOR_ID_FILTER 0x0007FF00 -union Byte{ +typedef union{ struct bitfield{ unsigned bit0:1; unsigned bit1:1; @@ -46,7 +49,19 @@ union Byte{ unsigned bit7:1; }Bitfield; char AllBit; -}; +}Byte; + +/** + * @brief HAL Status structures definition + */ +typedef enum +{ + CRR_OK = 0x00U, + CRR_ERROR = 0x01U, + CRR_BUSY = 0x02U, + CRR_TIMEOUT = 0x03U +} CRR_Status; + _Bool IsLeapYear(uint8_t year); @@ -58,6 +73,10 @@ _Bool IsLeapYear(uint8_t year); #define HighByteOfWord(WORD) (WORD>>8)&0xFF #define LowByteOfWord(WORD) WORD&0xFF +//Priority level +#define PRIORITY_CRITICAL 0 +#define PRIORITY_STANDARD 1 + //Route mode #define ROUTE_MASTER 0 #define ROUTE_SLAVE 1 @@ -67,33 +86,34 @@ _Bool IsLeapYear(uint8_t year); #define DATA_TYPE_DISCRETE 0b0001 #define DATA_TYPE_ANALOG 0b0010 #define DATA_TYPE_MODBUS_COIL 0b0011 -#define DATA_TYPE_MODBUS_DISCRETE 0b0100 -#define DATA_TYPE_MODBUS_HOLDING 0b0101 -#define DATA_TYPE_MODBUS_INPUT 0b0110 -#define DATA_TYPE_ERROR 0b0111 +#define DATA_TYPE_GENERAL_ADDRESS_SPACE 0b0100 +#define DATA_TYPE_MODBUS_DISCRETE 0b0101 +#define DATA_TYPE_MODBUS_HOLDING 0b0110 +#define DATA_TYPE_MODBUS_INPUT 0b0111 +#define DATA_TYPE_ERROR 0b1000 #define DATA_TYPE_PULSE 0b1111 //Sensor Types for DATA_TYPE_BROADCAST -#define SENSOR_TYPE_BROADCAST_STATUS 0b00000 -#define SENSOR_TYPE_BROADCAST_ONOFF 0b00001 -#define SENSOR_TYPE_BROADCAST_RESTARTDEVICE 0b00010 -#define SENSOR_TYPE_BROADCAST_RTCSETUP 0b00011 +#define SENSOR_TYPE_BROADCAST_STATUS 0b000000000000 +#define SENSOR_TYPE_BROADCAST_ONOFF 0b000000000001 +#define SENSOR_TYPE_BROADCAST_RESTARTDEVICE 0b000000000010 +#define SENSOR_TYPE_BROADCAST_RTCSETUP 0b000000000011 //Sensor Types for DATA_TYPE_DISCRETE -#define SENSOR_TYPE_DISCRETE_ACCIDENT 0b00000 -#define SENSOR_TYPE_DISCRETE_WARNING 0b00001 -#define SENSOR_TYPE_DISCRETE_CONTROL_SIGNALS 0b00010 -#define SENSOR_TYPE_DISCRETE_FLAGS 0b00011 -#define SENSOR_TYPE_DISCRETE_RESET 0b00100 -#define SENSOR_TYPE_DISCRETE_CHANGE_MODE 0b00101 -#define SENSOR_TYPE_DISCRETE_REQUEST_LIST_OF_PARAMETERS 0b00110 +#define SENSOR_TYPE_DISCRETE_ACCIDENT 0b0000 +#define SENSOR_TYPE_DISCRETE_WARNING 0b0001 +#define SENSOR_TYPE_DISCRETE_CONTROL_SIGNALS 0b0010 +#define SENSOR_TYPE_DISCRETE_FLAGS 0b0011 +#define SENSOR_TYPE_DISCRETE_RESET 0b0100 +#define SENSOR_TYPE_DISCRETE_CHANGE_MODE 0b0101 +#define SENSOR_TYPE_DISCRETE_REQUEST_LIST_OF_PARAMETERS 0b0110 //Sensor Types for DATA_TYPE_ANALOG -#define SENSOR_TYPE_ANALOG_UNIVERSAL 0b00000 -#define SENSOR_TYPE_ANALOG_USTAVKI 0b00001 -#define SENSOR_TYPE_ANALOG_U 0b00010 -#define SENSOR_TYPE_ANALOG_I 0b00011 -#define SENSOR_TYPE_ANALOG_T 0b00100 +#define SENSOR_TYPE_ANALOG_UNIVERSAL 0b0000 +#define SENSOR_TYPE_ANALOG_USTAVKI 0b0001 +#define SENSOR_TYPE_ANALOG_U 0b0010 +#define SENSOR_TYPE_ANALOG_I 0b0011 +#define SENSOR_TYPE_ANALOG_T 0b0100 //Error Code #define NONEXISTENT_ELEMENT 0x01 @@ -129,21 +149,37 @@ union ext_ID_Modbus{ unsigned int BitAll:29; };*/ -typedef union _extID{ - struct extID_Standard_Fields{ - unsigned DeviceID:8; - unsigned SensorID:11; - unsigned SensorType:5; - unsigned DataType:4; +typedef union{ + struct extID_Fields{ + union{ + struct msgBody_Broadcast{ + unsigned Page:4; + unsigned BroadcastType:12; + }Broadcast; + struct msgBody_Discrete{ + unsigned Body:12; + unsigned Type:4; + }Discrete; + struct msgBody_Analog{ + unsigned SensorID:12; + unsigned SensorType:4; + }Analog; + struct msgBody_Modbus{ + unsigned RegCount:4; + unsigned StrAdr:12; + }Modbus; + struct msgBody_Error{ + unsigned ErrorCode:8; + unsigned Info:8; + }Error; + unsigned Body:16; + }Msg; + unsigned MsgType:4; + unsigned DeviceID:4; + unsigned DeviceType:3; unsigned Route:1; - }StandardFields; - struct extID_Modbus_Fields{ - unsigned DeviceID:8; - unsigned CountReg:8; - unsigned StrAdr:8; - unsigned DataType:4; - unsigned Route:1; - }ModbusFields; + unsigned Priority:1; + }Fields; unsigned int BitAll:29; }extID; @@ -260,20 +296,20 @@ void REQUESTER_Init(void); void REQUESTER_MainWhile(void); void Boot_SystemClock_Config(void); -void REQUESTER_AnalogProcessing(struct RXMsg _rxMsg); +CRR_Status REQUESTER_AnalogProcessing(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToAnalogUniversal(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToAnalogUSTAVKI(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToAnalogUSens(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToAnalogISens(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToAnalogTSens(struct RXMsg _rxMsg); -void REQUESTER_BroadcastProcessing(struct RXMsg _rxMsg); +CRR_Status REQUESTER_BroadcastProcessing(struct RXMsg _rxMsg); HAL_StatusTypeDef CanRequestToBroadcastStatus(struct RXMsg _rxMsg); void CanRequestToBroadcastOnOff(struct RXMsg _rxMsg); void CanRequestToBroadcastRestart(struct RXMsg _rxMsg); void CanRequestToBroadcastRtcSetup(struct RXMsg _rxMsg); -void REQUESTER_DiscreticProcessing(struct RXMsg _rxMsg); +CRR_Status REQUESTER_DiscreticProcessing(struct RXMsg _rxMsg); void CanRequestToDiscreteAccident(struct RXMsg _rxMsg); void CanRequestToDiscreteWarning(struct RXMsg _rxMsg); void CanRequestToDiscreteControlSignals(struct RXMsg _rxMsg); @@ -282,11 +318,11 @@ void CanRequestToDiscreteReset(struct RXMsg _rxMsg); void CanRequestToDiscreteChangeMode(struct RXMsg _rxMsg); void CanRequestToDiscreteRequestListOfParameters(struct RXMsg _rxMsg); -void REQUESTER_ModbusProcessing(struct RXMsg _rxMsg); -void CanRequestToModbusCoil(struct RXMsg _rxMsg); -void CanRequestToModbusDiscrete(struct RXMsg _rxMsg); -void CanRequestToModbusHolding(struct RXMsg _rxMsg); -void CanRequestToModbusInput(struct RXMsg _rxMsg); +CRR_Status REQUESTER_ModbusProcessing(struct RXMsg _rxMsg); +HAL_StatusTypeDef CanRequestToModbusCoil(struct RXMsg _rxMsg); +HAL_StatusTypeDef CanRequestToModbusDiscrete(struct RXMsg _rxMsg); +HAL_StatusTypeDef CanRequestToModbusHolding(struct RXMsg _rxMsg); +HAL_StatusTypeDef CanRequestToModbusInput(struct RXMsg _rxMsg); void REQUESTER_RTC_SYNC(uint8_t *data); void REQUESTER_Pulse_TIM_Handler(void); diff --git a/Core/Src/requester.c b/Core/Src/requester.c index 9661711..8ebc378 100644 --- a/Core/Src/requester.c +++ b/Core/Src/requester.c @@ -1,29 +1,13 @@ #include "requester.h" -static union Byte byte[2048][8]; -#define byte_modbusadr(x) byte[x/64][(x%64)/8] -#define _GET_MODBUS_BIT(x) byte[x/64][(x%64)/8].AllBit>>((x%64)%8) -#define _GET_MODBUS_ADR(SensorId, RequestedBytePosition, RequestedBitPosition) SensorId*64 + RequestedBytePosition*8 + RequestedBitPosition - -uint16_t ModbusFilters[COUNT_OF_MODBUS_SECTIONS][2]; - struct device CurrentDevice; -struct device Device_on_the_Network[32]; -struct data Data; +struct device Device_on_the_Network[8][16]; struct controlflags ControlFlags; -struct received_request ReceivedRequest; uint8_t CurrentStep = 0; uint8_t LastStep = 0; struct RXMsg rxMsg[CAN_RX_BUFFER_SIZE]; -#define MAX_NUM_OF_DEVICES_PER_LINE 4 -#define MAX_NUM_OF_REGISTERS_IN_DEVICE 255 - -//Регистр это слово (16 бит). uint16 -uint16_t ModbusDemonstration[MAX_NUM_OF_DEVICES_PER_LINE][MAX_NUM_OF_REGISTERS_IN_DEVICE]; -uint16_t ModbusAlternativeTable[MAX_NUM_OF_DEVICES_PER_LINE*MAX_NUM_OF_REGISTERS_IN_DEVICE]; - _Bool IsLeapYear(uint8_t year) { year+=2000; @@ -50,135 +34,94 @@ void REQUESTER_Init(void) ControlFlags.IsPulse = 1; MX_TIM7_Init(); MX_RTC_Init(); - - #ifdef _DEMO - int Reg_AltModbusTable; - //Тестовые значения регистров. Для отладки/демонстрации - for(int x = 0; x < MAX_NUM_OF_DEVICES_PER_LINE; x++) - { - for(int y = 0; y < MAX_NUM_OF_REGISTERS_IN_DEVICE; y++) - { - ModbusDemonstration[x][y] = x<<8 | y; - - Reg_AltModbusTable = x*MAX_NUM_OF_REGISTERS_IN_DEVICE+y; - - ModbusAlternativeTable[Reg_AltModbusTable] = x<<8 | y; - } - } - #endif } -int ProverkaDefinaResult; -int ProverkaDefinaItem = 0; -int ProverkaArbitors = 0; - /** * @brief Функция с обработкой полученных запросов -* @details В бесконечном цикле функция ожидает выставление флага о полученном запросе. +* @details В бесконечном цикле функция ожидает приёма сообщения. После этого сообщение распределяется в зависимости от DataType. * Обработка запроса аналоговых значений - REQUESTER_AnalogProcessing(). * Обработка широковещательных запросов - REQUESTER_BroadcastProcessing(). * Обработка запроса дискретных значений - REQUESTER_DiscreticProcessing(). * Обработка Modbus - REQUESTER_ModbusProcessing(). -* @note */ void REQUESTER_MainWhile(void) { - CAN_TxHeaderTypeDef TxHeader; - uint32_t TxMailBox = 0; - uint8_t data[8]; - extID eID; - eID.BitAll = 0; - eID.StandardFields.DeviceID = 2; - eID.StandardFields.DataType = DATA_TYPE_ANALOG; - eID.StandardFields.SensorType = 0x1F; - eID.StandardFields.SensorID = 0; - eID.StandardFields.Route = ROUTE_SLAVE; - - TxHeader.IDE = CAN_ID_EXT; - TxHeader.TransmitGlobalTime = DISABLE; - TxHeader.RTR = CAN_RTR_DATA; - TxHeader.ExtId = eID.BitAll; - int TxTest = 0; HAL_TIM_Base_Start_IT(&htim7); - + unsigned currentAttemptCount; while(1) { if(AvailableCanRxMsg()) { - if(rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_ANALOG) - { - REQUESTER_AnalogProcessing(rxMsg[CurrentStep]); - } - else if(rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_BROADCAST) - { - REQUESTER_BroadcastProcessing(rxMsg[CurrentStep]); - } - else if(rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_DISCRETE) - { - REQUESTER_DiscreticProcessing(rxMsg[CurrentStep]); - } - else if(rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_MODBUS_COIL || - rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_MODBUS_DISCRETE || - rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_MODBUS_HOLDING || - rxMsg[CurrentStep].eID.StandardFields.DataType == DATA_TYPE_MODBUS_INPUT) - { - REQUESTER_ModbusProcessing(rxMsg[CurrentStep]); - } + currentAttemptCount = 0; + if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_ANALOG) + { + REQUESTER_AnalogProcessing(rxMsg[CurrentStep]); + } + else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_BROADCAST) + { + REQUESTER_BroadcastProcessing(rxMsg[CurrentStep]); + } + else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_DISCRETE) + { + REQUESTER_DiscreticProcessing(rxMsg[CurrentStep]); + } + else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_GENERAL_ADDRESS_SPACE) + { + + } + else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_COIL || + rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_DISCRETE || + rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_HOLDING || + rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_INPUT) + { + REQUESTER_ModbusProcessing(rxMsg[CurrentStep]); + } CurrentStep = (uint16_t)(CurrentStep + 1) % CAN_RX_BUFFER_SIZE; } - /* - while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0); - - if(HAL_CAN_AddTxMessage(&hcan, &TxHeader, data, &TxMailBox)!= HAL_OK) - { - ProverkaArbitors++; - } - */ -// eID.Fields.SensorID++; -// if(eID.Fields.SensorID>10) - //{ -// eID.Fields.SensorID = 0; -// } } } /** * @brief Функция обработки аналоговых запросов. -* @details Функция, формирующая и отправляющая ответ на запросы. Типы запросов: Универсальный, Уставки, Напряжение, Ток, Температура +* @param struct RXMsg _rxMsg - структура для полученного сообщения. +* @details Функция, формирующая и отправляющая ответ на запросы. Типы запросов: Универсальный, Уставки, Напряжение, Ток, Температура. + */ -void REQUESTER_AnalogProcessing(struct RXMsg _rxMsg) +CRR_Status REQUESTER_AnalogProcessing(struct RXMsg _rxMsg) { - switch (_rxMsg.eID.StandardFields.SensorType) + switch (_rxMsg.eID.Fields.Msg.Analog.SensorType) { case SENSOR_TYPE_ANALOG_UNIVERSAL: { - CanRequestToAnalogUniversal(_rxMsg); + return (CRR_Status)CanRequestToAnalogUniversal(_rxMsg); break; } case SENSOR_TYPE_ANALOG_USTAVKI: { - CanRequestToAnalogUSTAVKI(_rxMsg); + return (CRR_Status)CanRequestToAnalogUSTAVKI(_rxMsg); break; } case SENSOR_TYPE_ANALOG_U: { - CanRequestToAnalogUSens(_rxMsg); + return (CRR_Status)CanRequestToAnalogUSens(_rxMsg); break; } case SENSOR_TYPE_ANALOG_I: { - CanRequestToAnalogISens(_rxMsg); + return (CRR_Status)CanRequestToAnalogISens(_rxMsg); break; } case SENSOR_TYPE_ANALOG_T: { - CanRequestToAnalogTSens(_rxMsg); + return (CRR_Status)CanRequestToAnalogTSens(_rxMsg); break; } default: //RESERVE SENSOR TYPE + return CRR_ERROR; break; } + return CRR_ERROR; } __weak HAL_StatusTypeDef CanRequestToAnalogUniversal(struct RXMsg _rxMsg) @@ -191,7 +134,7 @@ __weak HAL_StatusTypeDef CanRequestToAnalogUniversal(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; + tmp_eID.Fields.Route = ROUTE_SLAVE; TxHeader.ExtId = tmp_eID.BitAll; TxHeader.DLC = 6; data[0] = 'U'; @@ -213,7 +156,7 @@ __weak HAL_StatusTypeDef CanRequestToAnalogUSTAVKI(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; + tmp_eID.Fields.Route = ROUTE_SLAVE; TxHeader.ExtId = tmp_eID.BitAll; TxHeader.DLC = 7; data[0] = 'U'; @@ -236,15 +179,15 @@ __weak HAL_StatusTypeDef CanRequestToAnalogUSens(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; + tmp_eID.Fields.Route = ROUTE_SLAVE; TxHeader.ExtId = tmp_eID.BitAll; TxHeader.DLC = 6; data[0] = 'U'; - data[1] = ' '; - data[2] = 's'; - data[3] = 'e'; - data[4] = 'n'; - data[5] = 's'; + data[1] = 'S'; + data[2] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 1000; + data[3] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 100 % 10; + data[4] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 10 % 10; + data[5] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID % 10; return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } @@ -258,15 +201,15 @@ __weak HAL_StatusTypeDef CanRequestToAnalogISens(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; + tmp_eID.Fields.Route = ROUTE_SLAVE; TxHeader.ExtId = tmp_eID.BitAll; TxHeader.DLC = 6; data[0] = 'I'; - data[1] = ' '; - data[2] = 's'; - data[3] = 'e'; - data[4] = 'n'; - data[5] = 's'; + data[1] = 'S'; + data[2] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 1000; + data[3] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 100 % 10; + data[4] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 10 % 10; + data[5] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID % 10; return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } @@ -280,30 +223,34 @@ __weak HAL_StatusTypeDef CanRequestToAnalogTSens(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; + tmp_eID.Fields.Route = ROUTE_SLAVE; TxHeader.ExtId = tmp_eID.BitAll; TxHeader.DLC = 6; data[0] = 'T'; - data[1] = ' '; - data[2] = 's'; - data[3] = 'e'; - data[4] = 'n'; - data[5] = 's'; + data[1] = 'S'; + data[2] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 1000; + data[3] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 100 % 10; + data[4] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID / 10 % 10; + data[5] = 47 + _rxMsg.eID.Fields.Msg.Analog.SensorID % 10; return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } /** * @brief Функция обработки широковещательных запросов. +* @param struct RXMsg _rxMsg - структура для полученного сообщения. * @details Функция, выполняющая команды, переданные в широковещательном формате с головного (master) устройства. Типы команд: Запрос статуса, запрос на включение или выключение, рестарт устройств, установка времени. */ -void REQUESTER_BroadcastProcessing(struct RXMsg _rxMsg) +CRR_Status REQUESTER_BroadcastProcessing(struct RXMsg _rxMsg) { - switch(_rxMsg.eID.StandardFields.SensorType) + switch(_rxMsg.eID.Fields.Msg.Broadcast.BroadcastType) { case SENSOR_TYPE_BROADCAST_STATUS: { //Обработка запроса статуса устройства - CanRequestToBroadcastStatus(_rxMsg); + if(CanRequestToBroadcastStatus(_rxMsg)!=HAL_OK) + { + return CRR_ERROR; + } break; } case SENSOR_TYPE_BROADCAST_ONOFF: @@ -326,8 +273,10 @@ void REQUESTER_BroadcastProcessing(struct RXMsg _rxMsg) } default: //RESERVE SENSOR TYPE. + return CRR_ERROR; break; } + return CRR_OK; } __weak HAL_StatusTypeDef CanRequestToBroadcastStatus(struct RXMsg _rxMsg) @@ -341,8 +290,9 @@ __weak HAL_StatusTypeDef CanRequestToBroadcastStatus(struct RXMsg _rxMsg) TxHeader.RTR = CAN_RTR_DATA; extID tmp_eID; tmp_eID.BitAll = _rxMsg.eID.BitAll; - tmp_eID.StandardFields.Route = ROUTE_SLAVE; - tmp_eID.StandardFields.DeviceID = CURRENT_ID_DEVICE; + tmp_eID.Fields.Route = ROUTE_SLAVE; + tmp_eID.Fields.DeviceType = CURRENT_TYPE_DEVICE; + tmp_eID.Fields.DeviceID = CURRENT_ID_DEVICE; TxHeader.ExtId = tmp_eID.BitAll; RTC_TimeTypeDef sTime = {0}; @@ -372,7 +322,7 @@ __weak void CanRequestToBroadcastRestart(struct RXMsg _rxMsg) { return; } - if(_rxMsg.eID.StandardFields.SensorID == (CURRENT_ID_DEVICE / (_rxMsg.DLC*8))) + if(_rxMsg.eID.Fields.Msg.Broadcast.Page == (CURRENT_ID_DEVICE / (_rxMsg.DLC*8))) { uint64_t page = 0; for(int i = 0; i < _rxMsg.DLC; i++) @@ -416,12 +366,13 @@ __weak void CanRequestToBroadcastRtcSetup(struct RXMsg _rxMsg) /** * @brief Функция обработки дискретных запросов. +* @param struct RXMsg _rxMsg - структура для полученного сообщения. * @details Функция, формирующая и отправляющая ответ на запросы. Типы запросов: Аварии, Предупреждения, Управляющие сигналы, Флаги, Рестарт устройства, Изменение режима работы устройства, Запрос на устройство. * @note Запрос на устройство. Головное (master) устройство запрашивает некоторое колличество параметров. В Data - 64 битовых адресса параметров, тип которых задаётся в Sensor ID. Имеется возможность запрашивать непоследовательные параметры. */ -void REQUESTER_DiscreticProcessing(struct RXMsg _rxMsg) +CRR_Status REQUESTER_DiscreticProcessing(struct RXMsg _rxMsg) { - switch(_rxMsg.eID.StandardFields.SensorType){ + switch(_rxMsg.eID.Fields.Msg.Discrete.Type){ case SENSOR_TYPE_DISCRETE_ACCIDENT: { CanRequestToDiscreteAccident(_rxMsg); @@ -459,8 +410,10 @@ void REQUESTER_DiscreticProcessing(struct RXMsg _rxMsg) } default: //RESERVE SENSOR TYPE. + return CRR_ERROR; break; } + return CRR_OK; } __weak void CanRequestToDiscreteAccident(struct RXMsg _rxMsg) @@ -499,116 +452,144 @@ __weak void CanRequestToDiscreteRequestListOfParameters(struct RXMsg _rxMsg) /** * @brief Функция обработки Modbus запросов. +* @param struct RXMsg _rxMsg - структура для полученного сообщения. * @details Функция, формирующая и отправляющая ответ на запросы. */ -void REQUESTER_ModbusProcessing(struct RXMsg _rxMsg) +CRR_Status REQUESTER_ModbusProcessing(struct RXMsg _rxMsg) { - switch(_rxMsg.eID.ModbusFields.DataType) + switch(_rxMsg.eID.Fields.MsgType) { case DATA_TYPE_MODBUS_COIL: { - CanRequestToModbusCoil(_rxMsg); + return (CRR_Status)CanRequestToModbusCoil(_rxMsg); break; } case DATA_TYPE_MODBUS_DISCRETE: { - CanRequestToModbusDiscrete(_rxMsg); + return (CRR_Status)CanRequestToModbusDiscrete(_rxMsg); break; } case DATA_TYPE_MODBUS_HOLDING: { - CanRequestToModbusHolding(_rxMsg); + return (CRR_Status)CanRequestToModbusHolding(_rxMsg); break; } case DATA_TYPE_MODBUS_INPUT: { - CanRequestToModbusInput(_rxMsg); + return (CRR_Status)CanRequestToModbusInput(_rxMsg); break; } default: //ERROR + return CRR_ERROR; break; } + return CRR_ERROR; } -__weak void CanRequestToModbusCoil(struct RXMsg _rxMsg) +__weak HAL_StatusTypeDef CanRequestToModbusCoil(struct RXMsg _rxMsg) { - return; + CAN_TxHeaderTypeDef TxHeader; + uint32_t TxMailBox = 0; + uint8_t data[8]; + TxHeader.IDE = CAN_ID_EXT; + TxHeader.TransmitGlobalTime = DISABLE; + TxHeader.RTR = CAN_RTR_DATA; + extID tmp_eID; + tmp_eID.BitAll = _rxMsg.eID.BitAll; + tmp_eID.Fields.Route = ROUTE_SLAVE; + TxHeader.ExtId = tmp_eID.BitAll; + TxHeader.DLC = 8; + data[0] = 'M'; + data[1] = 'C'; + data[2] = ' '; + data[3] = 'S'; + data[4] = _rxMsg.eID.Fields.Msg.Modbus.StrAdr; + data[5] = ' '; + data[6] = 'C'; + data[7] = _rxMsg.eID.Fields.Msg.Modbus.RegCount; + return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } -__weak void CanRequestToModbusDiscrete(struct RXMsg _rxMsg) +__weak HAL_StatusTypeDef CanRequestToModbusDiscrete(struct RXMsg _rxMsg) { - return; + CAN_TxHeaderTypeDef TxHeader; + uint32_t TxMailBox = 0; + uint8_t data[8]; + TxHeader.IDE = CAN_ID_EXT; + TxHeader.TransmitGlobalTime = DISABLE; + TxHeader.RTR = CAN_RTR_DATA; + extID tmp_eID; + tmp_eID.BitAll = _rxMsg.eID.BitAll; + tmp_eID.Fields.Route = ROUTE_SLAVE; + TxHeader.ExtId = tmp_eID.BitAll; + TxHeader.DLC = 8; + data[0] = 'M'; + data[1] = 'D'; + data[2] = ' '; + data[3] = 'S'; + data[4] = _rxMsg.eID.Fields.Msg.Modbus.StrAdr; + data[5] = ' '; + data[6] = 'C'; + data[7] = _rxMsg.eID.Fields.Msg.Modbus.RegCount; + return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } -__weak void CanRequestToModbusHolding(struct RXMsg _rxMsg) +__weak HAL_StatusTypeDef CanRequestToModbusHolding(struct RXMsg _rxMsg) { - return; + CAN_TxHeaderTypeDef TxHeader; + uint32_t TxMailBox = 0; + uint8_t data[8]; + TxHeader.IDE = CAN_ID_EXT; + TxHeader.TransmitGlobalTime = DISABLE; + TxHeader.RTR = CAN_RTR_DATA; + extID tmp_eID; + tmp_eID.BitAll = _rxMsg.eID.BitAll; + tmp_eID.Fields.Route = ROUTE_SLAVE; + TxHeader.ExtId = tmp_eID.BitAll; + TxHeader.DLC = 8; + data[0] = 'M'; + data[1] = 'H'; + data[2] = ' '; + data[3] = 'S'; + data[4] = _rxMsg.eID.Fields.Msg.Modbus.StrAdr; + data[5] = ' '; + data[6] = 'C'; + data[7] = _rxMsg.eID.Fields.Msg.Modbus.RegCount; + return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } -__weak void CanRequestToModbusInput(struct RXMsg _rxMsg) +__weak HAL_StatusTypeDef CanRequestToModbusInput(struct RXMsg _rxMsg) { - return; + CAN_TxHeaderTypeDef TxHeader; + uint32_t TxMailBox = 0; + uint8_t data[8]; + TxHeader.IDE = CAN_ID_EXT; + TxHeader.TransmitGlobalTime = DISABLE; + TxHeader.RTR = CAN_RTR_DATA; + extID tmp_eID; + tmp_eID.BitAll = _rxMsg.eID.BitAll; + tmp_eID.Fields.Route = ROUTE_SLAVE; + TxHeader.ExtId = tmp_eID.BitAll; + TxHeader.DLC = 8; + data[0] = 'M'; + data[1] = 'I'; + data[2] = ' '; + data[3] = 'S'; + data[4] = _rxMsg.eID.Fields.Msg.Modbus.StrAdr; + data[5] = ' '; + data[6] = 'C'; + data[7] = _rxMsg.eID.Fields.Msg.Modbus.RegCount; + return HAL_CAN_AddTxMessage(&_HCAN, &TxHeader, data, &TxMailBox); } -/* СТАРЫЙ УЖАСНЫЙ МОДБАС - if((ReceivedRequest.SensorToModbus.Modbus.StrAdr>=0) && (ReceivedRequest.SensorToModbus.Modbus.StrAdr<=127)) - { - //Обращение к существующему в устройстве модбас регистру - CAN_TxHeaderTypeDef TxHeader; - uint32_t TxMailBox = 0; - uint8_t data[8]; - TxHeader.IDE = CAN_ID_EXT; - TxHeader.DLC = 8; - TxHeader.RTR = CAN_RTR_DATA; - - int RequestFromDLC; - for(RequestFromDLC = ReceivedRequest.SensorToModbus.Modbus.StrAdr; - (RequestFromDLC>11; - eID.StandardFields.SensorID = RequestFromDLC; - TxHeader.ExtId = eID.BitAll; - for(int DataFor = 0; DataFor < 8; DataFor+=2) - { - data[DataFor] = HighByteOfWord(ModbusDemonstration[CURRENT_ID_DEVICE][RequestFromDLC]); - data[DataFor+1] = LowByteOfWord(ModbusDemonstration[CURRENT_ID_DEVICE][RequestFromDLC]); - RequestFromDLC++; - TxHeader.DLC +=2; - if(!((RequestFromDLC> 13) ); // верхние 16 бит + canFilterConfig.FilterIdLow = (uint16_t)( (((idFilter & 0x1FFF) << 3) ) | CAN_IDE_32 ); // низкие 16 бит, + canFilterConfig.FilterMaskIdHigh = (uint16_t)(((idMask & 0xFFFF) >> 13) ); + canFilterConfig.FilterMaskIdLow = (uint16_t)( (((idMask & 0x1FFF) << 3) ) | CAN_IDE_32 ); + + if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) + { + Error_Handler(); + } +} + +#define BIT27 (1UL << 27) +#define BITS_20_23_MASK (0xFUL << 20) // 4 бита (20..23) +#define BITS_24_26_MASK (0x7UL << 24) // 3 бита (24..26) + +uint32_t filter1_id = BIT27 | CURRENT_TYPE_DEVICE | CURRENT_ID_DEVICE; +uint32_t filter1_mask = BIT27 | BITS_24_26_MASK | BITS_20_23_MASK; // все проверяемые биты + +#define BITS_16_19_MASK (0xFUL << 16) + +uint32_t filter2_id = DATA_TYPE_BROADCAST; +uint32_t filter2_mask = BITS_16_19_MASK; + +uint32_t filter3_id = DATA_TYPE_PULSE; +uint32_t filter3_mask = BITS_16_19_MASK; + void REQUESTER_CAN_FILTERS() { - //MAIN DEVICE - CAN_FilterTypeDef canFilterConfig; - canFilterConfig.FilterBank = 0; - canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; - canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - /*Для ID устройства используются восемь младших битов. - Макс значение 0 устройство - 0x000, 1 - 0x002, 2 - 0x004, 3 - 0x006*/ - canFilterConfig.FilterIdHigh = (uint16_t)(ID_MAIN_DEVICE>>13); - canFilterConfig.FilterIdLow = (uint16_t)(ID_MAIN_DEVICE<<5) | CAN_IDE_32; - /*Маска 1.1111.1110.<...>. Нули - любые символы. Единицы - точное соответствие фильтру выше.*/ - canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DEVICE_ID_FILTER>>13); - canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DEVICE_ID_FILTER<<3) | CAN_IDE_32; - canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; - canFilterConfig.FilterActivation = ENABLE; - canFilterConfig.SlaveStartFilterBank = 14; - if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) - { - Error_Handler(); - } - - //CURRENT DEVICE - canFilterConfig.FilterBank = 1; - /*Для ID устройства используются восемь младших битов. - Макс значение 0 устройство - 0x000, 1 - 0x002, 2 - 0x004, 3 - 0x006*/ - canFilterConfig.FilterIdHigh = (uint16_t)(CURRENT_ID_DEVICE>>13); - canFilterConfig.FilterIdLow = (uint16_t)(CURRENT_ID_DEVICE<<5) | CAN_IDE_32; - /*Маска 1.1111.1110.<...>. Нули - любые символы. Единицы - точное соответствие фильтру выше.*/ - canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DEVICE_ID_FILTER>>13); - canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DEVICE_ID_FILTER<<3) | CAN_IDE_32; - if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) - { - Error_Handler(); - } - - //MODBUS - canFilterConfig.FilterBank = 2; - canFilterConfig.FilterIdHigh = (uint16_t)(0x03000000>>13); - canFilterConfig.FilterIdLow = (uint16_t)(0x03000000<<5) | CAN_IDE_32; - canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DATA_TYPE_FILTER>>13); // we're checking only high 13 bits, that contained "key" - canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DATA_TYPE_FILTER<<3) | CAN_IDE_32; // 1<<2 - set IDE bit - if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) - { - Error_Handler(); - } - - //PULSE - canFilterConfig.FilterBank = 3; - canFilterConfig.FilterIdHigh = (uint16_t)(HighIdFilter(DATA_TYPE_PULSE)>>13); - //canFilterConfig.FilterIdHigh = (uint16_t)(0x1F000000>>13); - canFilterConfig.FilterIdLow = (uint16_t)(HighIdFilter(DATA_TYPE_PULSE)<<5) | CAN_IDE_32; - canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DATA_TYPE_FILTER>>13); // we're checking only high 13 bits, that contained "key" - canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DATA_TYPE_FILTER<<3) | CAN_IDE_32; // 1<<2 - set IDE bit - if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) - { - Error_Handler(); - } - - //DEBUG FILTER "ALL IDE WELCOME" - canFilterConfig.FilterBank = 4; - canFilterConfig.FilterIdHigh = (uint16_t)(HighIdFilter(0)>>13); - canFilterConfig.FilterIdLow = (uint16_t)(HighIdFilter(0)<<5) | CAN_IDE_32; - canFilterConfig.FilterMaskIdHigh = (uint16_t)(0>>13); // we're checking only high 13 bits, that contained "key" - canFilterConfig.FilterMaskIdLow = (uint16_t)(0<<3) | CAN_IDE_32; // 1<<2 - set IDE bit - if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) - { - Error_Handler(); - } + // Первый фильтр: проверяем 20-27 биты, где 27-й всегда 1 + CONFIG_CAN_FILTER(0, filter1_id, filter1_mask); + + // Второй фильтр: проверяем 16-19 биты, равны DATA_TYPE_BROADCASTE + CONFIG_CAN_FILTER(1, filter2_id, filter2_mask); + + // Третий фильтр: проверяем 16-19 биты, равны DATA_TYPE_PULSE + CONFIG_CAN_FILTER(2, filter3_id, filter3_mask); } + +//void REQUESTER_CAN_FILTERS() +//{ +// //MAIN DEVICE +// CAN_FilterTypeDef canFilterConfig; +// canFilterConfig.FilterBank = 0; +// canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; +// canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; +// /*Для ID устройства используются восемь младших битов. +// Макс значение 0 устройство - 0x000, 1 - 0x002, 2 - 0x004, 3 - 0x006*/ +// canFilterConfig.FilterIdHigh = (uint16_t)(ID_MAIN_DEVICE>>13); +// canFilterConfig.FilterIdLow = (uint16_t)(ID_MAIN_DEVICE<<5) | CAN_IDE_32; +// /*Маска 1.1111.1110.<...>. Нули - любые символы. Единицы - точное соответствие фильтру выше.*/ +// canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DEVICE_ID_FILTER>>13); +// canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DEVICE_ID_FILTER<<3) | CAN_IDE_32; +// canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; +// canFilterConfig.FilterActivation = ENABLE; +// canFilterConfig.SlaveStartFilterBank = 14; +// if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// +// //CURRENT DEVICE +// canFilterConfig.FilterBank = 1; +// /*Для ID устройства используются восемь младших битов. +// Макс значение 0 устройство - 0x000, 1 - 0x002, 2 - 0x004, 3 - 0x006*/ +// canFilterConfig.FilterIdHigh = (uint16_t)(CURRENT_ID_DEVICE>>13); +// canFilterConfig.FilterIdLow = (uint16_t)(CURRENT_ID_DEVICE<<5) | CAN_IDE_32; +// /*Маска 1.1111.1110.<...>. Нули - любые символы. Единицы - точное соответствие фильтру выше.*/ +// canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DEVICE_ID_FILTER>>13); +// canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DEVICE_ID_FILTER<<3) | CAN_IDE_32; +// if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// +// //MODBUS +// canFilterConfig.FilterBank = 2; +// canFilterConfig.FilterIdHigh = (uint16_t)(0x03000000>>13); +// canFilterConfig.FilterIdLow = (uint16_t)(0x03000000<<5) | CAN_IDE_32; +// canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DATA_TYPE_FILTER>>13); // we're checking only high 13 bits, that contained "key" +// canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DATA_TYPE_FILTER<<3) | CAN_IDE_32; // 1<<2 - set IDE bit +// if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// +// //PULSE +// canFilterConfig.FilterBank = 3; +// canFilterConfig.FilterIdHigh = (uint16_t)(HighIdFilter(DATA_TYPE_PULSE)>>13); +// canFilterConfig.FilterIdLow = (uint16_t)(HighIdFilter(DATA_TYPE_PULSE)<<5) | CAN_IDE_32; +// canFilterConfig.FilterMaskIdHigh = (uint16_t)(CAN_DATA_TYPE_FILTER>>13); // we're checking only high 13 bits, that contained "key" +// canFilterConfig.FilterMaskIdLow = (uint16_t)(CAN_DATA_TYPE_FILTER<<3) | CAN_IDE_32; // 1<<2 - set IDE bit +// if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// +// //DEBUG FILTER "ALL IDE WELCOME" +// canFilterConfig.FilterBank = 4; +// canFilterConfig.FilterIdHigh = (uint16_t)(HighIdFilter(0)>>13); +// canFilterConfig.FilterIdLow = (uint16_t)(HighIdFilter(0)<<5) | CAN_IDE_32; +// canFilterConfig.FilterMaskIdHigh = (uint16_t)(0>>13); // we're checking only high 13 bits, that contained "key" +// canFilterConfig.FilterMaskIdLow = (uint16_t)(0<<3) | CAN_IDE_32; // 1<<2 - set IDE bit +// if(HAL_CAN_ConfigFilter(&_HCAN, &canFilterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +//} diff --git a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c index 331405e..dae2e77 100644 --- a/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c +++ b/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c @@ -403,7 +403,7 @@ HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) } /* Set the automatic retransmission */ - if (hcan->Init.AutoRetransmission == ENABLE) + if (hcan->Init.AutoRetransmission == ENABLE) { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); } diff --git a/MDK-ARM/CAN_Request-Response_protocol.uvoptx b/MDK-ARM/CAN_Request-Response_protocol.uvoptx index 2ff3a6f..0a83236 100644 --- a/MDK-ARM/CAN_Request-Response_protocol.uvoptx +++ b/MDK-ARM/CAN_Request-Response_protocol.uvoptx @@ -117,6 +117,11 @@ Segger\JL2CM3.dll + + 0 + DLGUARM + В¬†wTІв TІв п;Зq + 0 ARMRTXEVENTFLAGS @@ -135,11 +140,7 @@ 0 JL2CM3 - -U -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F103RG$Flash\STM32F10x_1024.FLM) - - - 0 - DLGUARM + -U-O14 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F103RG$Flash\STM32F10x_1024.FLM) 0 @@ -152,7 +153,79 @@ -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F103RG$Flash\STM32F10x_1024.FLM) - + + + 0 + 0 + 30 + 1 +
134237984
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Core\Src\requester.c + + \\CAN_Request_Response_protocol\../Core/Src/requester.c\30 +
+ + 1 + 0 + 52 + 1 +
134236608
+ 0 + 0 + 0 + 0 + 0 + 1 + ../Core/Src/can.c + + \\CAN_Request_Response_protocol\../Core/Src/can.c\52 +
+ + 2 + 0 + 334 + 1 +
134223362
+ 0 + 0 + 0 + 0 + 0 + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c + + \\CAN_Request_Response_protocol\../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c\334 +
+ + 3 + 0 + 1008 + 1 +
134224438
+ 0 + 0 + 0 + 0 + 0 + 1 + ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c + + \\CAN_Request_Response_protocol\../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c\1008 +
+
+ + + 0 + 1 + sTime + + 0 @@ -195,6 +268,16 @@ + + + System Viewer\CAN + 35904 + + + System Viewer\RTC + 35905 + + 1 1 diff --git a/extID_type/extID_type_from_new_can_protocol.h b/extID_type/extID_type_from_new_can_protocol.h deleted file mode 100644 index 0e55288..0000000 --- a/extID_type/extID_type_from_new_can_protocol.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef _new_can_protocol_ID_struct -#define _new_can_protocol_ID_struct - -//Route mode -#define ROUTE_MASTER 0 -#define ROUTE_SLAVE 1 - -//Data Types -#define DATA_TYPE_BROADCAST 0b0000 -#define DATA_TYPE_DISCRETE 0b0001 -#define DATA_TYPE_ANALOG 0b0010 -#define DATA_TYPE_MODBUS_COIL 0b0011 -#define DATA_TYPE_MODBUS_DISCRETE 0b0100 -#define DATA_TYPE_MODBUS_HOLDING 0b0101 -#define DATA_TYPE_MODBUS_INPUT 0b0110 -#define DATA_TYPE_ERROR 0b0111 -#define DATA_TYPE_PULSE 0b1111 - -//Sensor Types for DATA_TYPE_BROADCAST -#define SENSOR_TYPE_BROADCAST_STATUS 0b00000 -#define SENSOR_TYPE_BROADCAST_ONOFF 0b00001 -#define SENSOR_TYPE_BROADCAST_RESTARTDEVICE 0b00010 -#define SENSOR_TYPE_BROADCAST_RTCSETUP 0b00011 - -//Sensor Types for DATA_TYPE_DISCRETE -#define SENSOR_TYPE_DISCRETE_ACCIDENT 0b00000 -#define SENSOR_TYPE_DISCRETE_WARNING 0b00001 -#define SENSOR_TYPE_DISCRETE_CONTROL_SIGNALS 0b00010 -#define SENSOR_TYPE_DISCRETE_FLAGS 0b00011 -#define SENSOR_TYPE_DISCRETE_RESET 0b00100 -#define SENSOR_TYPE_DISCRETE_CHANGE_MODE 0b00101 -#define SENSOR_TYPE_DISCRETE_REQUEST_LIST_OF_PARAMETERS 0b00110 - -//Sensor Types for DATA_TYPE_ANALOG -#define SENSOR_TYPE_ANALOG_UNIVERSAL 0b00000 -#define SENSOR_TYPE_ANALOG_USTAVKI 0b00001 -#define SENSOR_TYPE_ANALOG_U 0b00010 -#define SENSOR_TYPE_ANALOG_I 0b00011 -#define SENSOR_TYPE_ANALOG_T 0b00100 - -//Error Code -#define NONEXISTENT_ELEMENT 0x01 - -typedef union _extID{ - struct extID_Standard_Fields{ - unsigned DeviceID:8; - unsigned SensorID:11; - unsigned SensorType:5; - unsigned DataType:4; - unsigned Route:1; - }StandardFields; - struct extID_Modbus_Fields{ - unsigned DeviceID:8; - unsigned CountReg:8; - unsigned StrAdr:8; - unsigned DataType:4; - unsigned Route:1; - }ModbusFields; - unsigned int BitAll:29; -}extID; - -#endif \ No newline at end of file diff --git a/requester.xlsx b/requester.xlsx deleted file mode 100644 index bba010b..0000000 Binary files a/requester.xlsx and /dev/null differ diff --git a/Протокол CAN и ОАП.xlsx b/Протокол CAN и ОАП.xlsx new file mode 100644 index 0000000..142b518 Binary files /dev/null and b/Протокол CAN и ОАП.xlsx differ