Обновление после командировки 29.06.2026

This commit is contained in:
cfif 2026-06-29 13:13:45 +03:00
parent 5c21e7fe8a
commit f1407a74b3
3 changed files with 84 additions and 116 deletions

View File

@ -37,91 +37,41 @@ void Mma_Init(
env->thread.id = 0; env->thread.id = 0;
} }
void LoadDataInFromModel(tMma *env) {
if (osMutexAcquire(env->ModelTask.access, 5000) == osOK) { void GetCanErrors(tMma *env, uint8_t canIndex) {
FLEXCAN_ErrorInfoType errorInfo;
// Включение 5V (0 - ВКЛ) // Получить информацию об ошибках
GpioPinSet(&env->gpios->power.SW5V_EN, rtY.PowerEnable_Model.SW5V_EN); FLEXCAN_ErrorType result = FLEXCAN_GetErrorInfo(canIndex, &errorInfo);
// GpioPinSet(&env->gpios->power.SW5V_EN, true);
// Контроль напряжения борт-сети (1 - ВКЛ) if (result == FLEXCAN_ERROR_OK) {
GpioPinSet(&env->gpios->power.PBATT_CK_EN, rtY.PowerEnable_Model.PBATT_CK_EN); // Количество ошибок приёма
uint32_t rxErrors = errorInfo.u32RxErrCnt;
uint32_t rxErrorsFast = errorInfo.u32RxErrCnt_Fast;
GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_Motor_Front_EN, rtY.PowerEnable_Model.Incar_Motor_Front_EN); // Количество ошибок передачи
GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_EN_Diag, true); uint32_t txErrors = errorInfo.u32TxErrCnt;
GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_Motor_Rear_EN, rtY.PowerEnable_Model.Incar_Motor_Rear_EN); uint32_t txErrorsFast = errorInfo.u32TxErrCnt_Fast;
GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_EN, rtY.PowerEnable_Model.TwoWayValve_EN); LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "RX Errors: %lu (normal), %lu (fast)\n", rxErrors, rxErrorsFast);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_EN_Diag, true); LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "TX Errors: %lu (normal), %lu (fast)\n", txErrors, txErrorsFast);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.ReservePower_EN, rtY.PowerEnable_Model.ReservePower_EN);
GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.EN_ReservePower, rtY.PowerEnable_Model.EN_ReservePower); // Общее количество ошибок
GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.EN_PowerReserve, rtY.PowerEnable_Model.EN_PowerReserve); uint32_t totalErrors = rxErrors + rxErrorsFast + txErrors + txErrorsFast;
LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "Total errors: %lu\n", totalErrors);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver1_EN, rtY.PowerEnable_Model.PtcRelayDriver1_EN);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver_EN_Diag, true);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver2_EN, rtY.PowerEnable_Model.PtcRelayDriver2_EN);
GpioPinSet(&env->gpios->power.VN7008AJ_FrontLINActuatorPowerDriverAB.LIN_ActPower_AB, rtY.PowerEnable_Model.LIN_ActPower_AB);
GpioPinSet(&env->gpios->power.VN7008AJ_FrontLINActuatorPowerDriverAB.EN_CurrentSensing_AB, true);
GpioPinSet(&env->gpios->power.VN7008AJ_RearLINActuatorPowerDriverC.LIN_ActPower_C, rtY.PowerEnable_Model.LIN_ActPower_C);
GpioPinSet(&env->gpios->power.VN7008AJ_RearLINActuatorPowerDriverC.EN_CurrentSensing_C, true);
GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_ShutOFFValveBatteryChiller.EN_BATTChiller, rtY.PowerEnable_Model.EN_BATTChiller);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffFront_EN, rtY.PowerEnable_Model.ShutOffFront_EN);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOff_EN_Diag, true);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffRear_EN, rtY.PowerEnable_Model.ShutOffRear_EN);
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV1_EN, rtY.PowerEnable_Model.ShutOffTXV1_EN);
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV_EN_Diag, true);
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV2_EN, rtY.PowerEnable_Model.ShutOffTXV2_EN);
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentFront = %d", rtY.PWM_Get_f.pwmPercentFront)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentRear = %d", rtY.PWM_Get_f.pwmPercentRear)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentFrontReserved = %d", rtY.PWM_Get_f.pwmPercentFrontReserved)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentRearReserved = %d", rtY.PWM_Get_f.pwmPercentRearReserved)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0)
env->pwms->pwmFrontIo.setActivePercent(env->pwms->pwmFrontIo.env, rtY.PWM_Get_f.pwmPercentFront);
env->pwms->pwmRearIo.setActivePercent(env->pwms->pwmRearIo.env, rtY.PWM_Get_f.pwmPercentRear);
env->pwms->pwmFrontReservedIo.setActivePercent(env->pwms->pwmFrontReservedIo.env, rtY.PWM_Get_f.pwmPercentFrontReserved);
env->pwms->pwmRearReservedIo.setActivePercent(env->pwms->pwmRearReservedIo.env, rtY.PWM_Get_f.pwmPercentRearReserved);
PWM_Get.pwmPercentFront = env->pwms->pwmFrontCaptureIO.getPwm(env->pwms->pwmFrontCaptureIO.env);
PWM_Get.pwmPercentRear = env->pwms->pwmRearCaptureIO.getPwm(env->pwms->pwmRearCaptureIO.env);
PWM_Get.pwmPercentFrontReserved = env->pwms->pwmFrontCaptureIO.getPwm(
env->pwms->pwmFrontReservedCaptureIO.env);
PWM_Get.pwmPercentRearReserved = env->pwms->pwmRearCaptureIO.getPwm(
env->pwms->pwmRearReservedCaptureIO.env);
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentFront = %d", PWM_Get.pwmPercentFront)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentRear = %d", PWM_Get.pwmPercentRear)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentFrontReserved = %d", PWM_Get.pwmPercentFrontReserved)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentRearReserved = %d", PWM_Get.pwmPercentRearReserved)
// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0)
set_Dtc_state(&env->Diagnostic);
set_CanDebugSpamTransmitter(&env->canSpamDebugTransmitter);
set_CanSpamTransmitter(&env->canSpamTransmitter);
get_CanSpamReceiver(&env->canSpamReceiver);
osMutexRelease(env->ModelTask.access);
} }
} }
static _Noreturn void Mma_Thread(tMma *env) { static _Noreturn void Mma_Thread(tMma *env) {
// Запуск устройства // Запуск устройства
Mma_InitStage(env); Mma_InitStage(env);
// env->pwms->pwmFrontIo.run(env->pwms->pwmFrontIo.env); env->pwms->pwmFrontIo.run(env->pwms->pwmFrontIo.env);
ModelTask_StartThread(&env->ModelTask); ModelTask_StartThread(&env->ModelTask);
@ -132,7 +82,6 @@ static _Noreturn void Mma_Thread(tMma *env) {
LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Model running...") LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Model running...")
// SMC_SetSystemMode(SMC_MODE_STANBY_3); // SMC_SetSystemMode(SMC_MODE_STANBY_3);
for (;;) { for (;;) {
@ -140,7 +89,8 @@ static _Noreturn void Mma_Thread(tMma *env) {
// bool ST_PowerReserve = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.ST_PowerReserve); // bool ST_PowerReserve = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.ST_PowerReserve);
// bool ST_ReservePower = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.ST_ReservePower); // bool ST_ReservePower = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.ST_ReservePower);
LoadDataInFromModel(env);
// GetCanErrors(env, 0);
SystemDelayMs(25); SystemDelayMs(25);

View File

@ -117,9 +117,6 @@ static void Mma_InitSubSystems(tMma *env) {
// Indication_Init(&env->Indication, HVAC_DEV_MODE_STARTUP); // Indication_Init(&env->Indication, HVAC_DEV_MODE_STARTUP);
ModelTask_Init(&env->ModelTask, &env->linTaskActuator1, &env->linTaskActuator2, &env->linTaskActuator3,
&env->slog.logger);
CommandLine_Init(&env->cli, &env->slog, &env->serialPorts->SerialPortLog_IO, CommandLine_Init(&env->cli, &env->slog, &env->serialPorts->SerialPortLog_IO,
&env->serialPorts->cliVirtualPortOut_Io); &env->serialPorts->cliVirtualPortOut_Io);
CommandLine_StartThread(&env->cli); CommandLine_StartThread(&env->cli);
@ -144,21 +141,78 @@ static void Mma_InitSubSystems(tMma *env) {
CanXcpProcessing_Listener_Start(&env->CanSerialPortFrameXCP); CanXcpProcessing_Listener_Start(&env->CanSerialPortFrameXCP);
CanSpamReceiver_Init(&env->canSpamReceiver, &env->canPorts->Can0_IO, env->ModelTask.access, &env->slog.logger); CanSpamReceiver_Init(&env->canSpamReceiver, &env->canPorts->Can0_IO, &env->slog.logger);
CanSpamReceiver_StartThread(&env->canSpamReceiver); CanSpamReceiver_StartThread(&env->canSpamReceiver);
CanSpamTransmitter_Init(&env->canSpamTransmitter, &env->canPorts->Can0_IO, env->ModelTask.access, &env->slog.logger); CanSpamTransmitter_Init(&env->canSpamTransmitter, &env->canPorts->Can0_IO, &env->slog.logger);
CanSpamTransmitter_StartThread(&env->canSpamTransmitter); CanSpamTransmitter_StartThread(&env->canSpamTransmitter);
CanSpamDebugReceiver_Init(&env->canSpamDebugReceiver, &env->canPorts->Can1_IO, &env->slog.logger);
CanSpamDebugReceiver_Init(&env->canSpamDebugReceiver, &env->canPorts->Can1_IO, env->ModelTask.access, &env->slog.logger);
CanSpamDebugReceiver_StartThread(&env->canSpamDebugReceiver); CanSpamDebugReceiver_StartThread(&env->canSpamDebugReceiver);
CanSpamDebugTransmitter_Init(&env->canSpamDebugTransmitter, &env->canPorts->Can1_IO, &env->canSpamDebugReceiver, env->ModelTask.access, CanSpamDebugTransmitter_Init(&env->canSpamDebugTransmitter, &env->canPorts->Can1_IO, &env->canSpamDebugReceiver,
&env->slog.logger); &env->slog.logger);
CanSpamDebugTransmitter_StartThread(&env->canSpamDebugTransmitter); CanSpamDebugTransmitter_StartThread(&env->canSpamDebugTransmitter);
tLinData *linData4 = Lin4_Init(GetLin123CallbackHandler);
Lin_4_Init(&env->linTaskSensor4, linData4, &env->linPorts->lin4_Io, &env->slog.logger);
// Lin4_StartThread(&env->linTaskSensor4);
tLinData *linData5 = Lin5_Init(GetLin123CallbackHandler);
Lin_5_Init(&env->linTaskSensor5, linData5, &env->linPorts->lin5_Io, &env->slog.logger);
Lin5_StartThread(&env->linTaskSensor5);
// tLinData *linData6 = Lin6_Init(GetLin123CallbackHandler);
// Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger);
// Lin6_StartThread(&env->linTaskSensor6);
Adc_0_Init(&env->adcTask0, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger);
Adc_0_StartThread(&env->adcTask0);
Adc_1_Init(&env->adcTask1, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger);
Adc_1_StartThread(&env->adcTask1);
CanUds_Init(
&env->canUds,
&env->Diagnostic,
&env->canPorts->Can0_IO,
&env->storage,
&env->canSpamTransmitter,
&env->canSpamDebugTransmitter,
&env->adcTask0,
&P_bInternalFlashPage_ClearRange,
&P_bInternalFlashPage_WriteFromRam,
&env->slog.logger);
CanSerialPortCanUds_Start(&env->canUds);
StandBy_Init();
ModelTask_Init(
&env->ModelTask,
&env->linTaskActuator1,
&env->linTaskActuator2,
&env->linTaskActuator3,
env->pwms,
env->gpios,
&env->adcTask0,
&env->adcTask1,
&env->canSpamReceiver,
&env->canSpamTransmitter,
&env->canSpamDebugTransmitter,
&env->Diagnostic,
&env->slog.logger
);
tLinData *linData1 = Lin1_Init(GetLin123CallbackHandler); tLinData *linData1 = Lin1_Init(GetLin123CallbackHandler);
Lin_1_Init(&env->linTaskActuator1, Lin_1_Init(&env->linTaskActuator1,
linData1, &env->linPorts->lin1_Io, 9, linData1, &env->linPorts->lin1_Io, 9,
@ -196,41 +250,6 @@ static void Mma_InitSubSystems(tMma *env) {
Lin3_StartThread(&env->linTaskActuator3); Lin3_StartThread(&env->linTaskActuator3);
tLinData *linData4 = Lin4_Init(GetLin123CallbackHandler);
Lin_4_Init(&env->linTaskSensor4, linData4, &env->linPorts->lin4_Io, &env->slog.logger);
// Lin4_StartThread(&env->linTaskSensor4);
tLinData *linData5 = Lin5_Init(GetLin123CallbackHandler);
Lin_5_Init(&env->linTaskSensor5, linData5, &env->linPorts->lin5_Io, &env->slog.logger);
Lin5_StartThread(&env->linTaskSensor5);
// tLinData *linData6 = Lin6_Init(GetLin123CallbackHandler);
// Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger);
// Lin6_StartThread(&env->linTaskSensor6);
Adc_0_Init(&env->adcTask0, env->ModelTask.access, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger);
Adc_0_StartThread(&env->adcTask0);
Adc_1_Init(&env->adcTask1, env->ModelTask.access, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger);
Adc_1_StartThread(&env->adcTask1);
CanUds_Init(
&env->canUds,
&env->Diagnostic,
&env->canPorts->Can0_IO,
&env->storage,
&env->canSpamTransmitter,
&env->canSpamDebugTransmitter,
&env->adcTask0,
&P_bInternalFlashPage_ClearRange,
&P_bInternalFlashPage_WriteFromRam,
&env->slog.logger);
CanSerialPortCanUds_Start(&env->canUds);
StandBy_Init();
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization") LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization")

View File

@ -6,7 +6,6 @@
void InitPeripheralInterfaces(tLoggerInterface *logger) { void InitPeripheralInterfaces(tLoggerInterface *logger) {
Gpios_Init(); Gpios_Init();
CanPorts_Init(logger); CanPorts_Init(logger);
Adcs_Init(logger); Adcs_Init(logger);
Pwms_Init(logger); Pwms_Init(logger);