From 168debdfc19054c327b55f402f6522453c1fc9eb Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Sat, 14 Feb 2026 19:04:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BE=D1=81=D1=86=D0=B8=D0=BB=D0=BE=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=84=20=D0=BD=D0=B0=20Modbus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPP/AllLibs/Modbus | 2 +- UPP/Core/Configs/modbus_config.h | 2 +- UPP/Core/Configs/modbus_data.c | 10 + UPP/Core/Configs/modbus_data.h | 12 +- UPP/Core/UPP/upp_main.c | 5 +- UPP/Core/UPP/upp_status.c | 45 ++--- UPP/MDK-ARM/UPP.uvoptx | 186 ++++++++++-------- UPP/MDK-ARM/UPP.uvprojx | 20 ++ .../Modbus/ModbusPoll.mbw | 69 +++++++ 9 files changed, 234 insertions(+), 117 deletions(-) create mode 100644 Информация для программиста (УПП СП СЭД)/Modbus/ModbusPoll.mbw diff --git a/UPP/AllLibs/Modbus b/UPP/AllLibs/Modbus index f03ffd5..c4c8024 160000 --- a/UPP/AllLibs/Modbus +++ b/UPP/AllLibs/Modbus @@ -1 +1 @@ -Subproject commit f03ffd5bfcd1a1296ae4d02dfa8902fd15fe8400 +Subproject commit c4c80245129815bbe4a722024247f1b54f23823a diff --git a/UPP/Core/Configs/modbus_config.h b/UPP/Core/Configs/modbus_config.h index 806e78d..7d9945e 100644 --- a/UPP/Core/Configs/modbus_config.h +++ b/UPP/Core/Configs/modbus_config.h @@ -36,7 +36,6 @@ #define MODBUS_MODEL_NAME "" #define MODBUS_USER_APPLICATION_NAME "" - // Периферия (опционально) //#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart //#define mb_htim htim3 ///< Удобный дефайн для модбасовского таймера @@ -51,6 +50,7 @@ #define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров #define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства #define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас +#define MODBUS_ENABLE_OSCIL ///< Включить осциллограф Modbus //#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU diff --git a/UPP/Core/Configs/modbus_data.c b/UPP/Core/Configs/modbus_data.c index d016027..af2be68 100644 --- a/UPP/Core/Configs/modbus_data.c +++ b/UPP/Core/Configs/modbus_data.c @@ -95,11 +95,21 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u local_addr = Addr - R_HOLDING_PRVT_ADDR; *pRegs = MB_Set_Register_Ptr(&MB_INTERNAL.param, local_addr); // указатель на выбранный по Addr регистр } +#ifdef MODBUS_ENABLE_OSCIL + else if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_OSCIL_ADDR, R_HOLDING_OSCIL_QNT) == ET_NO_ERRORS) + { + local_addr = Addr - R_HOLDING_OSCIL_ADDR; + *pRegs = MB_Set_Register_Ptr(&MB_INTERNAL.oscil , local_addr); // указатель на выбранный по Addr регистр + } +#endif // if address doesnt match any array - return illegal data address response else { return ET_ILLEGAL_DATA_ADDRESS; } + + + } else if(RegisterType == RegisterType_Input) { diff --git a/UPP/Core/Configs/modbus_data.h b/UPP/Core/Configs/modbus_data.h index c76596e..a22f58f 100644 --- a/UPP/Core/Configs/modbus_data.h +++ b/UPP/Core/Configs/modbus_data.h @@ -51,6 +51,7 @@ #ifndef _MODBUS_DATA_H_ #define _MODBUS_DATA_H_ +#include "modbus_oscil.h" #include "upp_defs.h" #include "upp_params.h" #include "stdint.h" @@ -143,12 +144,6 @@ typedef struct // tester modbus data extern MB_DataStructureTypeDef MB_DATA; - -typedef struct -{ - uint8_t data[240]; -}MB_OscilTypeDef; - typedef struct { UPP_FuncCalls_t FuncCalls; @@ -162,7 +157,10 @@ extern MB_DataInternalTypeDef MB_INTERNAL; //--------------SIZES OF DATA--------------- #define R_HOLDING_PRVT_ADDR 1000 -#define R_HOLDING_PRVT_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t)) +#define R_HOLDING_PRVT_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t)) + +#define R_HOLDING_OSCIL_ADDR 2000 +#define R_HOLDING_OSCIL_QNT (sizeof(MB_OscilTypeDef)/sizeof(uint16_t)) #define C_COILS_PRVT_ADDR 1000 #define C_COILS_PRVT_QNT (16) diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index 0db25b3..b4ada98 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -46,6 +46,7 @@ int UPP_App_Init(void) MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim, UPP_UART2_SetDirection); MODBUS_FirstInit(&hmodbus_pui, &mb_pui_huart, &mb_pui_htim, UPP_UART1_SetDirection); + MB_Oscil_Init(&MB_INTERNAL.oscil, 120, 4, 2); if(HAL_TIM_Base_Start(&ustim) != HAL_OK) @@ -117,10 +118,6 @@ int UPP_While(void) int retval = 0; PWM_SetPolarity(&upp.hpwm, dbg_polarity); - if(upp.pm.adc.RawData[0] < 2000) - { - __NOP(); - } if(upp.pm.f.runSlow) { GPIO_LED_Duty_Set(&UPP_LEDS.green1, test_green1); diff --git a/UPP/Core/UPP/upp_status.c b/UPP/Core/UPP/upp_status.c index de1f051..476c26e 100644 --- a/UPP/Core/UPP/upp_status.c +++ b/UPP/Core/UPP/upp_status.c @@ -7,7 +7,6 @@ ******************************************************************************/ #include "upp_main.h" // всё остальное по работе с УПП #include "upp_status.h" -int cnt_oscil_size = 100; void UPP_Status_Handler_SlowCalc(void) { @@ -96,30 +95,28 @@ void UPP_Status_Handler_IRQ(void) upp.PUI.values->Trad = upp.pm.measured.final.T[TEMP_RAD] * 10; upp.PUI.values->Tshkaf = upp.pm.measured.final.T[TEMP_SHKAF] * 10; - - static int mb_u_cnt = 0; - if(mb_u_cnt+4 >= 240) + uint8_t oscil_data[4] = {0}; + switch(MB_INTERNAL.oscil.User[0]) { - mb_u_cnt = 0; - } -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.U[U_AB]+1)*127; -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.U[U_BC]+1)*127; -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.U[U_CA]+1)*127; -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.I[I_A]+1)*127; -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.I[I_B]+1)*127; -// MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.pm.measured.slow.I[I_C]+1)*127; - static int cnt_oscil = 0; - - if(cnt_oscil == 0) - { - MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.hangle.Iref)*32; - MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.hangle.Imeas)*32; - MB_INTERNAL.oscil.data[mb_u_cnt++] = (upp.hangle.alpha)*127; - MB_INTERNAL.oscil.data[mb_u_cnt++] = 0; - } - if (++cnt_oscil>cnt_oscil_size) - { - cnt_oscil = 0; + case 0: + oscil_data[0] = (upp.pm.measured.slow.U[U_AB]+1)*127; + oscil_data[1] = (upp.pm.measured.slow.U[U_BC]+1)*127; + oscil_data[2] = (upp.pm.measured.slow.U[U_CA]+1)*127; + oscil_data[3] = local_time(); + break; + + case 1: + oscil_data[0] = (upp.pm.measured.slow.I[I_A]+1)*127; + oscil_data[1] = (upp.pm.measured.slow.I[I_B]+1)*127; + oscil_data[2] = (upp.pm.measured.slow.I[I_C]+1)*127; + break; + + case 2: + oscil_data[0] = (upp.hangle.Iref)*32; + oscil_data[1] = (upp.hangle.Imeas)*32; + oscil_data[2] = (upp.hangle.alpha)*127; + break; } + MB_Oscil_Add(&MB_INTERNAL.oscil, oscil_data); } \ No newline at end of file diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index bb70ab3..32b5962 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -148,40 +148,7 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) - - - 0 - 0 - 351 - 1 -
134232798
- 0 - 0 - 0 - 0 - 0 - 1 - ../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c - - \\UPP\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c\351 -
- - 1 - 0 - 183 - 1 -
134280762
- 0 - 0 - 0 - 0 - 0 - 1 - ..\Core\UPP\upp_main.c - - \\UPP\../Core/UPP/upp_main.c\183 -
-
+ 0 @@ -196,7 +163,7 @@ 2 1 - hmodbus1 + hmodbus1,0x0A 3 @@ -283,6 +250,46 @@ 1 pCoils + + 20 + 1 + MB_INTERNAL.oscil,0x0A + + + 21 + 1 + hmodbus1.lastPacketTick,0x0A + + + 22 + 1 + &MB_INTERNAL.oscil.Preamble,0x0A + + + 23 + 1 + &MB_INTERNAL.oscil.Data + + + 24 + 1 + hmodbus1.lastPacketTick,0x0A + + + 25 + 1 + lastPacketTick,0x0A + + + 26 + 1 + dbg_period,0x0A + + + 27 + 1 + mb_period,0x0A + @@ -373,15 +380,10 @@ 17 2 - MB_INTERNAL.oscil.data,0x0A - - - 18 - 2 hmodbus1 - 19 + 18 2 cnt_oscil_size,0x0A @@ -1403,7 +1405,7 @@ Modbus - 0 + 1 0 0 0 @@ -1551,6 +1553,30 @@ 0 0 + + 6 + 69 + 1 + 0 + 0 + 0 + ..\AllLibs\Modbus\Src\modbus_oscil.c + modbus_oscil.c + 0 + 0 + + + 6 + 70 + 5 + 0 + 0 + 0 + ..\AllLibs\Modbus\Inc\modbus_oscil.h + modbus_oscil.h + 0 + 0 + @@ -1561,7 +1587,7 @@ 0 7 - 69 + 71 1 0 0 @@ -1573,7 +1599,7 @@ 7 - 70 + 72 1 0 0 @@ -1585,7 +1611,7 @@ 7 - 71 + 73 1 0 0 @@ -1597,7 +1623,7 @@ 7 - 72 + 74 5 0 0 @@ -1609,7 +1635,7 @@ 7 - 73 + 75 1 0 0 @@ -1621,7 +1647,7 @@ 7 - 74 + 76 5 0 0 @@ -1641,7 +1667,7 @@ 0 8 - 75 + 77 1 0 0 @@ -1653,7 +1679,7 @@ 8 - 76 + 78 1 0 0 @@ -1665,7 +1691,7 @@ 8 - 77 + 79 1 0 0 @@ -1677,7 +1703,7 @@ 8 - 78 + 80 1 0 0 @@ -1689,7 +1715,7 @@ 8 - 79 + 81 1 0 0 @@ -1709,7 +1735,7 @@ 0 9 - 80 + 82 1 0 0 @@ -1721,7 +1747,7 @@ 9 - 81 + 83 1 0 0 @@ -1733,7 +1759,7 @@ 9 - 82 + 84 1 0 0 @@ -1745,7 +1771,7 @@ 9 - 83 + 85 1 0 0 @@ -1757,7 +1783,7 @@ 9 - 84 + 86 1 0 0 @@ -1769,7 +1795,7 @@ 9 - 85 + 87 1 0 0 @@ -1781,7 +1807,7 @@ 9 - 86 + 88 1 0 0 @@ -1793,7 +1819,7 @@ 9 - 87 + 89 1 0 0 @@ -1805,7 +1831,7 @@ 9 - 88 + 90 1 0 0 @@ -1817,7 +1843,7 @@ 9 - 89 + 91 1 0 0 @@ -1829,7 +1855,7 @@ 9 - 90 + 92 1 0 0 @@ -1841,7 +1867,7 @@ 9 - 91 + 93 1 0 0 @@ -1853,7 +1879,7 @@ 9 - 92 + 94 1 0 0 @@ -1865,7 +1891,7 @@ 9 - 93 + 95 1 0 0 @@ -1877,7 +1903,7 @@ 9 - 94 + 96 1 0 0 @@ -1889,7 +1915,7 @@ 9 - 95 + 97 1 0 0 @@ -1901,7 +1927,7 @@ 9 - 96 + 98 1 0 0 @@ -1913,7 +1939,7 @@ 9 - 97 + 99 1 0 0 @@ -1925,7 +1951,7 @@ 9 - 98 + 100 1 0 0 @@ -1937,7 +1963,7 @@ 9 - 99 + 101 1 0 0 @@ -1949,7 +1975,7 @@ 9 - 100 + 102 1 0 0 @@ -1961,7 +1987,7 @@ 9 - 101 + 103 1 0 0 @@ -1973,7 +1999,7 @@ 9 - 102 + 104 1 0 0 @@ -1985,7 +2011,7 @@ 9 - 103 + 105 1 0 0 @@ -2005,7 +2031,7 @@ 0 10 - 104 + 106 1 0 0 @@ -2025,7 +2051,7 @@ 0 11 - 105 + 107 2 0 0 @@ -2037,7 +2063,7 @@ 11 - 106 + 108 2 0 0 diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx index 7ea1641..a3e2a3d 100644 --- a/UPP/MDK-ARM/UPP.uvprojx +++ b/UPP/MDK-ARM/UPP.uvprojx @@ -1107,6 +1107,16 @@ 1 ..\AllLibs\Modbus\Src\rs_message.c + + modbus_oscil.c + 1 + ..\AllLibs\Modbus\Src\modbus_oscil.c + + + modbus_oscil.h + 5 + ..\AllLibs\Modbus\Inc\modbus_oscil.h + @@ -2489,6 +2499,16 @@ 1 ..\AllLibs\Modbus\Src\rs_message.c + + modbus_oscil.c + 1 + ..\AllLibs\Modbus\Src\modbus_oscil.c + + + modbus_oscil.h + 5 + ..\AllLibs\Modbus\Inc\modbus_oscil.h + diff --git a/Информация для программиста (УПП СП СЭД)/Modbus/ModbusPoll.mbw b/Информация для программиста (УПП СП СЭД)/Modbus/ModbusPoll.mbw new file mode 100644 index 0000000..3904331 --- /dev/null +++ b/Информация для программиста (УПП СП СЭД)/Modbus/ModbusPoll.mbw @@ -0,0 +1,69 @@ + + + + + 96 + + 0 + 10 + 115200 + 8 + 0 + 1 + 0 + 9600 + 0 + 0 + 1 + 1 + 1 + 0 + + 0 + 1000 + 20 + 127.0.0.1 + 502 + 3000 + 0 + 0 + + + + + + + + + + + + + + + + + + + + Внутренние настройки.mbp + + + + Вызов функций.mbp + + + + Значения для ПУИ.mbp + + + + Настройки ПУИ.mbp + + + + Управление от ПУИ.mbp + + + +