diff --git a/john103C6T6NewVer/Core/Inc/main.h b/john103C6T6NewVer/Core/Inc/main.h index d1b7673..ef23d6c 100644 --- a/john103C6T6NewVer/Core/Inc/main.h +++ b/john103C6T6NewVer/Core/Inc/main.h @@ -48,7 +48,7 @@ extern "C" { #define MODBUS_REG_ORDER_BE 0 #define MODBUS_REG_ORDER_LE 1 -#define USE_USART USART_1 +#define USE_USART USART_2 #define USART1_PA6_PA7 //#define USART1_PA9_PA10 diff --git a/john103C6T6NewVer/Core/Src/main.c b/john103C6T6NewVer/Core/Src/main.c index 720975c..881d819 100644 --- a/john103C6T6NewVer/Core/Src/main.c +++ b/john103C6T6NewVer/Core/Src/main.c @@ -1,4 +1,4 @@ -/* USER CODE BEGIN Header */ +/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c @@ -75,6 +75,13 @@ DALLAS_SensorHandleTypeDef sens[30]; int init_sens = 0; FlashRecord_t* record; uint8_t flash_buff[RECORD_SIZE - 4]; +RS_HandleTypeDef hmodbus_master; +RS_HandleTypeDef hmodbus_slave; +RS_MsgTypeDef master_msg; +RS_MsgTypeDef slave_msg; +uint8_t master_modbus_uart_buff[MSG_SIZE_MAX]; +uint8_t slave_modbus_uart_buff[MSG_SIZE_MAX]; +uint32_t last_modbus_request_tick = 0; /* USER CODE END PM */ @@ -174,21 +181,27 @@ int main(void) { .port = GPIOC, .pin = GPIO_PIN_13, - .blink_period = 10, // 100 мс - .blink_count = 2 // 3 мигания + .blink_period = 10, // 100 РјСЃ + .blink_count = 2 // 3 мигания }; LED_BlinkRx_Init(&led_rx); BufferState_t buffer_init(); led_blink(GPIOC, 13, rest_iter, reset_blink_delay); - MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim); - MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE); - // Запуск приема Modbus - MODBUS_SlaveStart(&hmodbus1, NULL); + MODBUS_FirstInit(&hmodbus_master, &huart2, &htim2); + hmodbus_master.pBufferPtr = master_modbus_uart_buff; + MODBUS_Config(&hmodbus_master, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_MASTER); + + MODBUS_FirstInit(&hmodbus_slave, &huart1, NULL); + hmodbus_slave.pBufferPtr = slave_modbus_uart_buff; + MODBUS_Config(&hmodbus_slave, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE); + MODBUS_SlaveStart(&hmodbus_slave, &slave_msg); + // Запуск приема Modbus + master_msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 1); uint8_t uart_byte = 0; Dallas_BusFirstInit(&htim1); - // ������������� �� ������� ��������� �������� - // ������������� �� ������� (����������� ������ ���������� �������) + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ (пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ) reinit_t_sens(); init_setpoint_all_T_sense(temp_sense, hdallas.onewire->RomCnt); @@ -205,21 +218,28 @@ int main(void) /* USER CODE BEGIN WHILE */ while (1) { - - if (MB_DATA.Coils.reserve3[3]==1) + if ((HAL_GetTick() - last_modbus_request_tick) >= 1000U) + { + if (MODBUS_MasterRequest(&hmodbus_master, &master_msg, NULL) == HAL_OK) + { + last_modbus_request_tick = HAL_GetTick(); + } + } + if (MB_DATA.Coils.reserve3[3]==1) { MB_DATA.Coils.reserve3[3]=0; LED_BlinkRx_Init(&led_rx); } -//////блинкер по приему RS - if (hmodbus1.f.blink==1) +//////блинкер РїРѕ приему RS + if ((hmodbus_master.f.blink == 1) || (hmodbus_slave.f.blink == 1)) { - hmodbus1.f.blink=0; - LED_BlinkRx_OnRx(); + hmodbus_master.f.blink = 0; + hmodbus_slave.f.blink = 0; + LED_BlinkRx_OnRx(); } LED_BlinkRx_Process(); ////// -////// запись во флэш +////// запись РІРѕ флэш if (MB_DATA.Coils.reserve3[0]==1) { MB_DATA.Coils.reserve3[0] = 0; @@ -359,7 +379,7 @@ void init_cycle_counter(void) { DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; } -// Замер времени в тактах процессора +// Замер времени РІ тактах процессора uint32_t measure_execution_time_cycles(void (*func)(void)) { uint32_t start = get_cycle_count(); func(); @@ -385,7 +405,7 @@ return reg_array; void iwdg_refresh(void) { - IWDG->KR = 0xAAAA; // �������� ������ + IWDG->KR = 0xAAAA; // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ } void led_blink(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint8_t iter, uint16_t delay) { @@ -421,7 +441,7 @@ void reinit_t_sens(void) { for ( int i = 0; i < hdallas.onewire->RomCnt; i++) { - // ������������� �� ROM-������ + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ ROM-пїЅпїЅпїЅпїЅпїЅпїЅ //sens[i].Init.init_func = &Dallas_SensorInitByROM; // sens[i].Init.InitParam.ROM = rom_address; sens[i].Init.InitParam.Ind = i; @@ -660,3 +680,5 @@ void assert_failed(uint8_t *file, uint32_t line) /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ + + diff --git a/john103C6T6NewVer/Core/Src/stm32f1xx_it.c b/john103C6T6NewVer/Core/Src/stm32f1xx_it.c index 8122531..c88181d 100644 --- a/john103C6T6NewVer/Core/Src/stm32f1xx_it.c +++ b/john103C6T6NewVer/Core/Src/stm32f1xx_it.c @@ -67,6 +67,8 @@ extern TIM_HandleTypeDef htim2; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; extern TIM_HandleTypeDef htim3; +extern RS_HandleTypeDef hmodbus_master; +extern RS_HandleTypeDef hmodbus_slave; /* USER CODE BEGIN EV */ @@ -273,7 +275,7 @@ void TIM1_CC_IRQHandler(void) void TIM2_IRQHandler(void) { /* USER CODE BEGIN TIM2_IRQn 0 */ - RS_TIM_Handler(&hmodbus1); + RS_TIM_Handler(&hmodbus_master); return; /* USER CODE END TIM2_IRQn 0 */ HAL_TIM_IRQHandler(&htim2); @@ -306,9 +308,7 @@ static uint8_t first_in=1; void USART1_IRQHandler(void) { /* USER CODE BEGIN USART1_IRQn 0 */ - #if (USE_USART== USART_1) - RS_UART_Handler(&hmodbus1); - #endif + RS_UART_Handler(&hmodbus_slave); @@ -328,9 +328,7 @@ void USART1_IRQHandler(void) void USART2_IRQHandler(void) { /* USER CODE BEGIN USART2_IRQn 0 */ - #if (USE_USART== USART_2) - RS_UART_Handler(&hmodbus1); - #endif + RS_UART_Handler(&hmodbus_master); /* USER CODE END USART2_IRQn 0 */ diff --git a/john103C6T6NewVer/Modbus/modbus_config.h b/john103C6T6NewVer/Modbus/modbus_config.h index 9d5682b..889ab1a 100644 --- a/john103C6T6NewVer/Modbus/modbus_config.h +++ b/john103C6T6NewVer/Modbus/modbus_config.h @@ -1,21 +1,21 @@ -/** +/** ****************************************************************************** * @file modbus_config.h -* @brief Конфигурационные параметры Modbus устройства +* @brief Конфигурационные параметры Modbus устройства ****************************************************************************** @addtogroup MODBUS_CONFIGS Modbus configs @ingroup MODBUS -@brief Конфигурация библиотеки +@brief Конфигурация библиотеки @{ ****************************************************************************** * @details -Файл содержит настройки для работы Modbus: -- Подключение библиотек контроллера -- ID устройства и таймауты -- Строковые идентификаторы (Vendor, Product, Revision) -- Настройки периферии (UART, TIMER) -- Подключение модулей Modbus -- Опциональные функции (переключение команд 0x03/0x04) +Файл содержит настройки для работы Modbus: +- Подключение библиотек контроллера +- ID устройства Рё таймауты +- Строковые идентификаторы (Vendor, Product, Revision) +- Настройки периферии (UART, TIMER) +- Подключение модулей Modbus +- Опциональные функции (переключение команд 0x03/0x04) ******************************************************SSSSSS************************/ #ifndef _MODBUS_CONFIG_H_ #define _MODBUS_CONFIG_H_ @@ -26,11 +26,11 @@ -// Общие параметры -#define MODBUS_DEVICE_ID 3 ///< Адрес устройства в сети Modbus -#define MODBUS_TIMEOUT 5000 ///< Таймаут в тиках таймера +// Общие параметры +#define MODBUS_DEVICE_ID 3 ///< Адрес устройства РІ сети Modbus +#define MODBUS_TIMEOUT 5000 ///< Таймаут РІ тиках таймера -// Строковые идентификаторы устройства +// Строковые идентификаторы устройства #define MODBUS_VENDOR_NAME "super mega vendor" #define MODBUS_PRODUCT_CODE "Climate control" #define MODBUS_REVISION "1.0" @@ -39,36 +39,37 @@ #define MODBUS_MODEL_NAME "" #define MODBUS_USER_APPLICATION_NAME "" -#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов -#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT +#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов +#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. РџРѕ аналогии РјРѕР¶РЅРѕ определить строки РґРѕ <=128 USEROBJECT -// Периферия (опционально) +// Периферия (опционально) #if (USE_USART== USART_1) -#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart +#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart #elif(USE_USART==USART_2) #define mb_huart huart2 #endif -#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера -//#define RS_EnableReceive() ///< Функция изменения направления передачи на ПРИЕМ для RS-485 -//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485 +#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера +//#define RS_EnableReceive() ///< Функция изменения направления передачи РЅР° ПРИЕМ для RS-485 +//#define RS_EnableTransmit() ///< Функция изменения направления передачи РЅР° ПЕРЕДАЧУ для RS-485 -// Модули modbus -#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима -//#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕР режима +// Модули modbus +// Enable slave mode +#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима +#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕР режима -#define MODBUS_ENABLE_COILS ///< Включить обработку коилов -#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения -#define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров -#define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства -#define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас +#define MODBUS_ENABLE_COILS ///< Включить обработку коилов +#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения +#define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров +#define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства +#define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас -//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU +//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU /** - * @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей) - * @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS - * Поэтому чтобы считывать Input Regs - надо поменять их местами. + * @brief Поменять комманды 0x03 Рё 0x04 местами (для LabView терминалки РѕС‚ двигателей) + * @details Терминалка РѕС‚ двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS + * Поэтому чтобы считывать Input Regs - надо поменять РёС… местами. */ //#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS @@ -78,3 +79,4 @@ #endif //_MODBUS_CONFIG_H_ + diff --git a/john103C6T6c русскими коментами.rar b/john103C6T6c русскими коментами.rar deleted file mode 100644 index e36b5fd..0000000 Binary files a/john103C6T6c русскими коментами.rar and /dev/null differ diff --git a/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace b/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace index 7e0cbb7..8d4ca0d 100644 --- a/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace +++ b/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace @@ -3,9 +3,9 @@ 2c0000000200000003000000ffffffffffffffffffffffffffffffff40000000670000008c080000bd050000 - + - + @@ -18,9 +18,9 @@ - + - +