From 7c1062a6d9d88bdeebde829cab8b32db9bfeeaab Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Thu, 5 Feb 2026 10:14:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D1=80=D0=B8=D0=B3=D0=B8=D0=BD=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=83=D1=8E=20=D0=BF=D0=BB=D0=B0=D1=82=D1=83=20?= =?UTF-8?q?=D0=A3=D0=9F=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPP/Core/Configs/upp_config.h | 4 +- UPP/Core/PowerMonitor/power_monitor.c | 3 +- UPP/Core/Src/main.c | 4 +- UPP/Core/UPP/upp_main.c | 37 +++++++++++++++--- UPP/Core/UPP/upp_status.c | 2 +- UPP/MDK-ARM/UPP.uvoptx | 33 ++++++++++++++-- .../Modbus Карта.docx | Bin 14614 -> 14637 bytes 7 files changed, 66 insertions(+), 17 deletions(-) diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index 35d0cb0..39bd452 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -22,9 +22,9 @@ * @{ */ -//#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках +#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках //#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП -#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) +//#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) //#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы //#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c index beb12c7..f1cdc9f 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -216,8 +216,7 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm) } } - if(hpm->f.isI) - Protect_Fast(&hpm->measured, u2f(PARAM_INTERNAL->pm.lImaxAmp, 100)); + Protect_Fast(&hpm->measured, u2f(PARAM_INTERNAL->pm.lImaxAmp, 100)); /* Вообще фильтры должны рабтоать синхронно, но на всякий синхронизация */ //__SynchAvgFilters(hpm); diff --git a/UPP/Core/Src/main.c b/UPP/Core/Src/main.c index e231ae7..d9df347 100644 --- a/UPP/Core/Src/main.c +++ b/UPP/Core/Src/main.c @@ -107,8 +107,8 @@ int main(void) MX_GPIO_Init(); MX_DMA_Init(); MX_ADC3_Init(); - MX_USART3_UART_Init(); - MX_CAN1_Init(); + MX_USART3_UART_Init(); + //MX_CAN1_Init(); MX_IWDG_Init(); MX_TIM1_Init(); MX_TIM3_Init(); diff --git a/UPP/Core/UPP/upp_main.c b/UPP/Core/UPP/upp_main.c index 1122afc..ad318a8 100644 --- a/UPP/Core/UPP/upp_main.c +++ b/UPP/Core/UPP/upp_main.c @@ -75,11 +75,16 @@ int UPP_PreWhile(void) dbg_polarity = 0; #endif - UPP_DO.CEN(ENABLE); +// UPP_DO.CEN(ENABLE); MODBUS_SlaveStart(&hmodbus1, NULL); return 0; } +int test_cen = 0; +int test_err = 0; +int test_work = 0; +int test_ready = 0; + /** * @brief Основной цикл УПП. * @return 0 - если ОК, >1 если ошибка. @@ -107,17 +112,32 @@ int UPP_While(void) razgon_done = 0; #endif +// if(test_cen) +// UPP_DO.CEN(ENABLE); +// else +// UPP_DO.CEN(DISABLE); +// +// if(test_err) +// UPP_DO.Error(ENABLE); +// else +// UPP_DO.Error(DISABLE); +// +// if(test_work) +// UPP_DO.Work(ENABLE); +// else +// UPP_DO.Work(DISABLE); +// +// if(test_ready) +// UPP_DO.Ready(ENABLE); +// else +// UPP_DO.Ready(DISABLE); + // Обрабока ошибок и выставление итоговой Ошибки UPP_Errors_Handle(); // Контроль парамеров UPP_Params_Control(); -#ifndef UPP_DISABLE_ERROR_BLOCK - // если ошибка вызываем СТОП - upp.call->stop = (errors.common != Err_None); -#endif - // Сброс на дефолтные по запросу if(upp.call->set_default_pui || upp.call->set_default_internal) { @@ -127,6 +147,11 @@ int UPP_While(void) } +#ifndef UPP_DISABLE_ERROR_BLOCK + // если ошибка вызываем СТОП + upp.call->stop = (errors.common != Err_None); +#endif + // Если СТОП - переходим в ошибку if (upp.call->stop) upp.workmode = UPP_Error; diff --git a/UPP/Core/UPP/upp_status.c b/UPP/Core/UPP/upp_status.c index ed27e20..d28d285 100644 --- a/UPP/Core/UPP/upp_status.c +++ b/UPP/Core/UPP/upp_status.c @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file upp_status.c -* @brief Модуль определяющий состояние УПП +* @brief Модуль определяющий состояние УПП (Input Регистры) ****************************************************************************** * @details ******************************************************************************/ diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index 9c4b273..1f577c5 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -75,7 +75,7 @@ 1 0 - 0 + 1 18 @@ -135,7 +135,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) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) + -U-O14 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(790007A3) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) 0 @@ -155,13 +155,38 @@ 1 uwTick,0x0A + + 1 + 1 + upp,0x0A + + + 2 + 1 + test_cen,0x0A + + + 3 + 1 + test_err,0x0A + + + 4 + 1 + test_work,0x0A + + + 5 + 1 + test_ready,0x0A + 0 0 - 0 + 1 1 0 0 @@ -262,7 +287,7 @@ 1 0 - 1 + 0 18 diff --git a/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx b/Информация для программиста (УПП СП СЭД)/Modbus Карта.docx index f2e7e6f9e394cca87141a7485a7cebee5ac5404c..3fbecf6117a75a713de4a28ea5d41f9d61bc1ada 100644 GIT binary patch delta 5636 zcmZ9QWmMFU(#LmccIjBUm+o8|>5`C^7Erp8h99{|Ni2eNr*tDB9U}2ZKthm`kXoce zdG5V0?s=Z)`)bbl%&VC*^PMx9K6O5g*LV=!Hh1D7LJ-J52L;9#;LYTBBovDvdgt}jnWZZ<>F%_+I*xs3Ep{kcMP1nf=vICl$(8xd)UnV)x0 z{fikI=bpE;)Xh~GQCWyyx@e|Z{6?oNR)_?e9iq z*}Pl6GCzElbtmcG_vEtvRo=iSN|Z|LNLh{Jo=R6Y<Zx+r;rSrroeSC@Ug1BB&8;jR-;5sM)*9uRyW_c# z+YU7WK)mT$e`P z8KAYn06s8B@o8=5GS<4=;>HxJ)=?{SW)> zNUO|C9-n{EN_x56<&fq4Gp@uM%Ij!A?@M^Sm}K1PYKSthhZu@g5yK=xoV34fikGMe z0<-Z~c=;|V?(=aM1LZ%IEXUuvkJ%KnU63*iJwoTzD#0HM3$)8e+wUJ03x)kIPUZV% zv+BPY1ZNKw)Gim-=WMGR7U$EtbF`4nl>JUr1Dn)ggyQZ46%0-aMQq2Zm{L(Z(d->< zL$1$WF53NIaD*hu*}MxJFTrAgiLq*i0#TjCS_yy4O-5LhS=VlTJn2G?>T~aWXAIt5SqKDk_?W`j;10%+8{+xbF^!RD|kiA+bX3=#F)}Z=63N?H; zKv}&!V7i6lwQqLM3+l(OzvsN51$zBI#5es&-X}~s6-8byEQADnlhbcqAk*4#eFVKU zDAxylHi~|h{B?3-_;>U3Wak&rtn5m-Tw_BcoRw z)~OtLQMa5dFn+NkIvb~qFtIf=ML4rF%m|cf$u}&j-O5x7PH)Kjvc_A#3>4MSMZras zd}3dbGvFCeEEWW@Z&R+o&i&1gXw3c?{fsKH!ExZgG~1#O;fE)%LzB53bXi0V#=i(I zJ2&OzMr|{1yocEO8hW*+a>c`F4ZZTB?8`PfTb(LL487=okynL7t3N-pr#?5a$!KuQ}g0e+ZKX(Gm3QVo;Az^zgx1$G__h9GVXRA2>xlcE3{e)MNL= zptGcLRT^GIeog3(kW(DfKK2AJU5rG;v6z-IxWv(0uP0Ht&c$Z?Lnp$$b>Tr~m*O;; zRDVVGpS8$7!h>OoI<=P~`79aggO`sTDTMYiOjGtC*~d14%sNOQC@_#(PA5DT_{i z**obFF*Pn=#0bm$9`H4)+)X6c##_|4nfPKj9vRTsDXrw$fX$aa5m=mx2fF$vN|mVh z{EGuuXo7t4%sz#-`sz0#^gEAbIYswS=xprw6WpD_&i+Ty3yJSSPlhZpUE6O*_uaY)k>cD5r+o-YCWyfrLtJ@AY;ZHtRs550wzkB zaHil4Han_dQyX12@Lxf#sktvg{gC7# zo7&qk`a48$Vt7toJ!G`rpCeCT<5944uTm1WP z!R~w4i*GVK=>+g<8tQxcV$n&`(oIYf*TH0scE{$EKHMU?N_D~f{;?T?+SPsxH1YnN z0vbzmoh0@aTWSUw|=uQ!OL#R+!|uV@ijH|4)4#7M65iAUImtiLz3o- z0mCG=X11FzURS?#bto{5+D&T9J({;fNGE*1Cl4uN z^qqPj>m zyMh#(j79k6llTOh9Ahq{%S%_AXr5J-_1;v-3Zk=J$%-`F^21P`CQ>Y+K*H&UkivWr z^9A=s(k}wszfgGiliwtJJDhrr)^eQqy~E-G<1u_UN_8)LLe=-XlS+Ow=z_(>g#>9P zg4;;V9^UrkIE`&Ftd|ld5-NlZ|GC?-QA$u^Sr>e&HnwK`*lq#NgZXq0|FgSL!T=-W zMi%5k`D5DUC}HZ8m>r>!K%HVXjk@4k8_wQaRBO#Vmv(}YH94<=b=ok$67kL6R!6fC zvyYlpXt5GCr~1}t;_P)Mwnvb{;n}g`QPKqaceWfKhwQcU(V_uzF?$j$y#mf=Ly`}% zST!2go>!C+>LC?!$IttAy9-!CbnZtXvI_7|2Tv5%QRlyP!t>UefLu>Vnmq@k1tsJU z31iw`O3F70ku5BQBxMZ8!L-N zerphg8&Q0kM$ZPy<4EBkL<-?q^^(pBM3QDuQ#_54g7w&xTnBbhTh9;bj(jYZyT41! z|LK)C+gR90M0JP)*d*eT^9h%eUEedgqNF6z3VVV0{XY(tCie{|4mcgrH&RlTXHsi) zJ0~3?sQq@O$1XYxUwV>4!mD{#^`XlEwaXrxUKzrP=n}e@FHR+%eqzS5-i&cuf6Uei zy?)x`Yx_BnWj3VwQ=ug3N1{f~TAY+!&c@y4i>7{J;BR0R5aM(96t;cf`GI;r#MHCC z!;~CcUHr(H%8w&7jXMHDk%q{sj5he-VH8danOxc-<8C&>pV!2Pl)mZ5^Z{Z>mYCsf zOiNe&&Uubt+3@BDhPf64602I3j=BBGcl6IP?c8#3sZTq0V|^_i73$HXcPZCTIYOzu z?b?d9vEz({+IWOJ)r2;Ku30uIp*K>w18yGfjS0~Tg z<@I+ZPvdO$-cXnuXj+LXrqT%;_`duj_@zEpN(;&Q$liff0tly;!|v+Dd-$_7hEyBq|X){71rPeTokv!?gr{A2^v42o->WS9mX4qHZHfuR+j@+9Y z`cTa=o=BNyF1$w31+;6J>xr+h&Au(@W>k7u;L`+5qcygI6Gxbv@rN#%Me>6bX$e?; ze)e%$YU^Fdj4n)3C+17UW<^ZElv3Me);tcuv55_AqiabxZQf5A0IE-x(59EGS)x%hDH?)8W;z?^7RLczVSxGEUYZ*5h2^9USkPNXC zhJ^)&wM9}>UOmbc6NC*;qt}J24tqvNewf<;f6bvkkwb{*fqt_BmtIGG)F%u^`CZP{ zdxl-QFP_5Z(LM|`UIB3hyA~_hKj!BuG@p0fNjug@HNBoxZxruFbnFgS4!>$7*jtLLBc09S@el|fL$ixge~zN_wmo>{)Y zOOWvc9#u%nBxQQ%eq+>LM{Kx%tB8&1fS3j>(XZz@d_wYl17f?2NyQ!!Q=JxUz4bBi zQ@22?=icG}TM{7DIt&Ljk03$)Mv%1(v0PwaZ=P^X-?j9>MZm!FZ__U8;`&*}h`RZs zlVwTNB5M=>s)c(H)jF7^ZevhpCykm@tg}C!zQnWd_G~X(xI1uv#f^BHw=}El{ZBY1 zzfRqSzothG!ckCjH+r_sDH+Kw6~RgMa6sPfKNl0L{O%%st7pVyxRzT?0TF74nJ)@sz3Gu4t_p_LQ@(|Ip=nGPrPU)siWzKE0uUD z&C%ZoovcM4lmpU!F^VPCkV{oJZ_@xqR@u{#DW6$eB@Tk_;9qafHXKR4E$Vp;rAxs|GeAh;F{2ebz}HFZiL)V*^M`)*Z4I z1DFZN>dIzNrKM|X{c?LM-*5eY^`tN|wqR?qk?Dkz-ECT_Rh)4p;NQAs(tat79Py3@ z;?wj-X}aRaI+VBYXKzIwk`IVcGcd}Qw>+@~|NGs_fY1Z4qTCT&bpO}C|K;%i)pJxM zLLOX=Iz=deV^D&UoOJ)0Trdc9j0pmf{5S94!6%frBpcm-I{Yubg7NQL;D75B)gUPk P&O)6?vf`LX{G0p_&&;8S delta 5559 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 F007Hxf}{Wd