Добавлены датчики и IO UDS

This commit is contained in:
cfif 2026-07-14 09:53:22 +03:00
parent 1a22d1e959
commit 02ca2275d5
2 changed files with 277 additions and 23 deletions

View File

@ -10,6 +10,7 @@
#include "LoggerInterface.h"
#include "memory.h"
#define LOG_SIGN4 "Ln4"
#define LOG_SIGN5 "Ln5"
#define LOGGER env->logger
@ -106,10 +107,148 @@ Get_Sensor4_Stat(tLinIO *linIo, tLinData *linData, void *p_Stat, uint8_t p_Stat_
//начало----------------------------------------- LIN 4 ----------------------------------------------------------------
//начало----------------------------------------- LIN 4 ---------------------------------------------------------------
// Это с выхода Lin4
void Lin4_Output_Set_Model(tLin4TaskSensor *env) {
tAirQS_Stat *pAirQS_Stat = (tAirQS_Stat *) &env->Stat[0];
env->AirQS_Stat_For_Model.AirQS_LinRespErr_Stat = pAirQS_Stat->AirQS_LinRespErr_Stat;
env->AirQS_Stat_For_Model.AirQS_Sens_Stat = pAirQS_Stat->AirQS_Sens_Stat;
env->AirQS_Stat_For_Model.AirQS_Combined_Stat = pAirQS_Stat->AirQS_Combined_Stat;
env->AirQS_Stat_For_Model.AirQS_Err_Stat = pAirQS_Stat->AirQS_Err_Stat;
env->AirQS_Stat_For_Model.AirQS_COLvl_Stat = pAirQS_Stat->AirQS_COLvl_Stat;
env->AirQS_Stat_For_Model.AirQS_NOxLvl_Stat = pAirQS_Stat->AirQS_NOxLvl_Stat;
env->AirQS_Stat_For_Model.AirQS_NH3Lvl_Stat = pAirQS_Stat->AirQS_NH3Lvl_Stat;
tAroma_Stat *pAroma_Stat = (tAroma_Stat *) &env->Stat[1];
env->Aroma_Stat_For_Model.Aroma_LinRespErr_Stat = pAroma_Stat->Aroma_LinRespErr_Stat;
env->Aroma_Stat_For_Model.Aroma_CartridgeSw_Stat = pAroma_Stat->Aroma_CartridgeSw_Stat;
env->Aroma_Stat_For_Model.Aroma_Err_Stat = pAroma_Stat->Aroma_Err_Stat;
env->Aroma_Stat_For_Model.Aroma_Intens_Stat = pAroma_Stat->Aroma_Intens_Stat;
env->Aroma_Stat_For_Model.Aroma_CartridgeFlavor_Stat = pAroma_Stat->Aroma_CartridgeFlavor_Stat;
env->Aroma_Stat_For_Model.Aroma_CartridgeCapacity_Stat = pAroma_Stat->Aroma_CartridgeCapacity_Stat;
tIonizer_Stat *pIonizer_Stat = (tIonizer_Stat *) &env->Stat[2];
env->Ionizer_Stat_For_Model.Ionizer_LinRespErr_Stat = pIonizer_Stat->Ionizer_LinRespErr_Stat;
env->Ionizer_Stat_For_Model.Ionizer_Err_Stat = pIonizer_Stat->Ionizer_Err_Stat;
env->Ionizer_Stat_For_Model.Ionizer_Ionization_Stat = pIonizer_Stat->Ionizer_Ionization_Stat;
teTXV_fHVAC_Stat *p_teTXV_fHVAC_Stat = (teTXV_fHVAC_Stat *) &env->Stat[3];
env->eTXV_fHVAC_Stat_For_Model.eTXV_fHVAC_Pos_Stat = p_teTXV_fHVAC_Stat->eTXV_fHVAC_Pos_Stat;
env->eTXV_fHVAC_Stat_For_Model.eTXV_fHVAC_LinRespErr_Stat = p_teTXV_fHVAC_Stat->eTXV_fHVAC_LinRespErr_Stat;
env->eTXV_fHVAC_Stat_For_Model.eTXV_fHVAC_Err_Stat = p_teTXV_fHVAC_Stat->eTXV_fHVAC_Err_Stat;
env->eTXV_fHVAC_Stat_For_Model.eTXV_fHVAC_Pressure_Val = p_teTXV_fHVAC_Stat->eTXV_fHVAC_Pressure_Val;
env->eTXV_fHVAC_Stat_For_Model.eTXV_fHVAC_Temp_Val = p_teTXV_fHVAC_Stat->eTXV_fHVAC_Temp_Val;
teTXV_rHVAC_Stat *p_teTXV_rHVAC_Stat = (teTXV_rHVAC_Stat *) &env->Stat[4];
env->eTXV_rHVAC_Stat_For_Model.eTXV_rHVAC_Pos_Stat = p_teTXV_rHVAC_Stat->eTXV_rHVAC_Pos_Stat;
env->eTXV_rHVAC_Stat_For_Model.eTXV_rHVAC_LinRespErr_Stat = p_teTXV_rHVAC_Stat->eTXV_rHVAC_LinRespErr_Stat;
env->eTXV_rHVAC_Stat_For_Model.eTXV_rHVAC_Err_Stat = p_teTXV_rHVAC_Stat->eTXV_rHVAC_Err_Stat;
env->eTXV_rHVAC_Stat_For_Model.eTXV_rHVAC_Pressure_Val = p_teTXV_rHVAC_Stat->eTXV_rHVAC_Pressure_Val;
env->eTXV_rHVAC_Stat_For_Model.eTXV_rHVAC_Temp_Val = p_teTXV_rHVAC_Stat->eTXV_rHVAC_Temp_Val;
teTXV_batChiller_Stat *p_teTXV_batChiller_Stat = (teTXV_batChiller_Stat *) &env->Stat[5];
env->eTXV_batChiller_Stat_For_Model.eTXV_batChiller_Pos_Stat = p_teTXV_batChiller_Stat->eTXV_batChiller_Pos_Stat;
env->eTXV_batChiller_Stat_For_Model.eTXV_batChiller_LinRespErr_Stat = p_teTXV_batChiller_Stat->eTXV_batChiller_LinRespErr_Stat;
env->eTXV_batChiller_Stat_For_Model.eTXV_batChiller_Err_Stat = p_teTXV_batChiller_Stat->eTXV_batChiller_Err_Stat;
env->eTXV_batChiller_Stat_For_Model.eTXV_batChiller_Pressure_Val = p_teTXV_batChiller_Stat->eTXV_batChiller_Pressure_Val;
env->eTXV_batChiller_Stat_For_Model.eTXV_batChiller_Temp_Val = p_teTXV_batChiller_Stat->eTXV_batChiller_Temp_Val;
teTXV_eeChiller_Stat *p_teTXV_eeChiller_Stat = (teTXV_eeChiller_Stat *) &env->Stat[6];
env->eTXV_eeChiller_Stat_For_Model.eTXV_eeChiller_Pos_Stat = p_teTXV_eeChiller_Stat->eTXV_eeChiller_Pos_Stat;
env->eTXV_eeChiller_Stat_For_Model.eTXV_eeChiller_LinRespErr_Stat = p_teTXV_eeChiller_Stat->eTXV_eeChiller_LinRespErr_Stat;
env->eTXV_eeChiller_Stat_For_Model.eTXV_eeChiller_Err_Stat = p_teTXV_eeChiller_Stat->eTXV_eeChiller_Err_Stat;
env->eTXV_eeChiller_Stat_For_Model.eTXV_eeChiller_Pressure_Val = p_teTXV_eeChiller_Stat->eTXV_eeChiller_Pressure_Val;
env->eTXV_eeChiller_Stat_For_Model.eTXV_eeChiller_Temp_Val = p_teTXV_eeChiller_Stat->eTXV_eeChiller_Temp_Val;
osStatus_t status = osOK;
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_tAirQS);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_tAirQS, &env->AirQS_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_tAroma);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_tAroma, &env->Aroma_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_tIonizer);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_tIonizer, &env->Ionizer_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_teTXV_fHVAC);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_teTXV_fHVAC, &env->eTXV_fHVAC_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_teTXV_rHVAC);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_teTXV_rHVAC, &env->eTXV_rHVAC_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_teTXV_batChiller);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_teTXV_batChiller, &env->eTXV_batChiller_Stat_For_Model, 0, 0);
}
countQueue_space = osMessageQueueGetSpace(env->queue_input_teTXV_eeChiller);
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_teTXV_eeChiller, &env->eTXV_eeChiller_Stat_For_Model, 0, 0);
}
}
// Это формирование выхода с модели с задачи Lin4
void Lin4_Output_Get_From_Model(tLin4TaskSensor *env) {
osStatus_t status = osOK;
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_tAirQS);
if (countQueue_space == 0) {
status = osMessageQueueGet(env->queue_input_tAirQS, &rtDW.LIN4_AirQS_Stat_Model, 0, 0);
}
}
// Это формирование входа с модели на задачу Lin4
void Lin4_Input_Set_From_Model(tLin4TaskSensor *env) {
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_tCCU);
osStatus_t status = osOK;
if (countQueue_space) {
status = osMessageQueuePut(env->queue_input_tCCU, &rtY.LIN4_CCU_Req_Model, 0, 0);
}
}
// Это с входа Lin4
void Lin4_Input_Set_Model(tLin4TaskSensor *env) {
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_input_tCCU);
if (countQueue_space == 0) {
osStatus_t status = osMessageQueueGet(env->queue_input_tCCU, &env->CCU_Req_For_Model_For_Model, 0, 0);
if (status == osOK) {
env->d_CCU_Req.CCU_Ionization_Req = env->CCU_Req_For_Model_For_Model.CCU_Ionization_Req;
env->d_CCU_Req.CCU_AromaIntens_Req = env->CCU_Req_For_Model_For_Model.CCU_AromaIntens_Req;
env->d_CCU_Req.CCU_AirQS_Req = env->CCU_Req_For_Model_For_Model.CCU_AirQS_Req;
env->d_CCU_Req.CCU_fHVAC_Pos_Val = env->CCU_Req_For_Model_For_Model.CCU_fHVAC_Pos_Val;
env->d_CCU_Req.CCU_rHVAC_Pos_Val = env->CCU_Req_For_Model_For_Model.CCU_rHVAC_Pos_Val;
env->d_CCU_Req.CCU_batChiller_Pos_Val = env->CCU_Req_For_Model_For_Model.CCU_batChiller_Pos_Val;
env->d_CCU_Req.CCU_eeChiller_Pos_Val = env->CCU_Req_For_Model_For_Model.CCU_eeChiller_Pos_Val;
}
}
}
static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) {
lin_event_id_t ret = LIN_NO_EVENT;
env->d_CCU_Req.CCU_AirQS_Req = 1;
SystemDelayMs(40);
ret = Set_CCU_Req(env->linIo, env->linData, &env->d_CCU_Req);
#if (LOG_LIN4_SENSOR == 1)
@ -120,17 +259,18 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) {
}
#endif
SystemDelayMs(40);
for (uint8_t i = 0; i < LIN4_SENSOR_COUNT; ++i) {
ret = Get_Sensor4_Stat(env->linIo, env->linData, &env->Stat[i], LIN4_SENSON_LEN_Stat[i],
LIN4_SENSON_ADR_Stat[i]);
#if (LOG_LIN4_SENSOR == 1)
switch (i) {
case eeAirQS_Stat: {
tAirQS_Stat *pAirQS_Stat = (tAirQS_Stat *) &env->Stat[i];
#if (LOG_LIN4_SENSOR == 1)
if (ret == LIN_RX_COMPLETED) {
LoggerFormatInfo(LOGGER, LOG_SIGN4,
@ -146,8 +286,6 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) {
LoggerFormatInfo(LOGGER, LOG_SIGN4, "LIN4 ERROR (pAirQS_Stat) = %d", ret)
}
#endif
break;
}
case eeAroma_Stat: {
@ -244,7 +382,7 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) {
if (ret == LIN_RX_COMPLETED) {
LoggerFormatInfo(LOGGER, LOG_SIGN4,
"eTXV_eeChiller_Stat_ = %d eTXV_eeChiller_LinRespErr_Stat = %d eTXV_eeChiller_Err_Stat = %d eTXV_eeChiller_Pressure_Val = %d eTXV_eeChiller_Temp_Val = %d",
p_teTXV_eeChiller_Stat->eTXV_eeChiller_Stat_,
p_teTXV_eeChiller_Stat->eTXV_eeChiller_Pos_Stat,
p_teTXV_eeChiller_Stat->eTXV_eeChiller_LinRespErr_Stat,
p_teTXV_eeChiller_Stat->eTXV_eeChiller_Err_Stat,
p_teTXV_eeChiller_Stat->eTXV_eeChiller_Pressure_Val,
@ -256,10 +394,10 @@ static lin_event_id_t Lin4_Scheduler(tLin4TaskSensor *env) {
break;
}
}
#endif
}
return LIN_NO_EVENT;
}
@ -273,6 +411,16 @@ void Lin_4_Init(tLin4TaskSensor *env,
env->logger = logger;
env->access = osMutexNew(NULL);
env->queue_input_tCCU = osMessageQueueNew(1, sizeof(LIN4_CCU_Req_Bus), NULL);
env->queue_input_tAirQS = osMessageQueueNew(1, sizeof(LIN4_AirQS_Stat_Bus), NULL);
env->queue_input_tAroma = osMessageQueueNew(1, sizeof(LIN4_Aroma_Stat_Bus), NULL);
env->queue_input_tIonizer = osMessageQueueNew(1, sizeof(LIN4_Ionizer_Stat_Bus), NULL);
env->queue_input_teTXV_fHVAC = osMessageQueueNew(1, sizeof(LIN4_eTXV_fHVAC_Stat_Bus), NULL);
env->queue_input_teTXV_rHVAC = osMessageQueueNew(1, sizeof(LIN4_eTXV_rHVAC_Stat_Bus), NULL);
env->queue_input_teTXV_batChiller = osMessageQueueNew(1, sizeof(LIN4_eTXV_batChiller_Stat_Bus), NULL);
env->queue_input_teTXV_eeChiller = osMessageQueueNew(1, sizeof(LIN4_eTXV_eeChiller_Stat_Bus), NULL);
InitThreadAtrStatic(&env->threadLin.attr, "Ln4", env->threadLin.controlBlock, env->threadLin.stack,
osPriorityNormal);
}
@ -283,13 +431,12 @@ static _Noreturn void Lin4_Thread(tLin4TaskSensor *env) {
if (osMutexAcquire(env->access, 1000) == osOK) {
Lin4_Input_Set_Model(env);
lin_event_id_t res = Lin4_Scheduler(env);
Lin4_Output_Set_Model(env);
osMutexRelease(env->access);
}
SystemDelayMs(1000);
}
}
@ -465,8 +612,14 @@ static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) {
}
}
void getSensorLin5(tLin5TaskSensor *env, void *dataLedSensor) {
osStatus_t status = osMessageQueueGet(env->queue_led_count, dataLedSensor, 0, 0);
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) {
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_count);
if (countQueue_space == 0) {
osStatus_t status = osMessageQueueGet(env->queue_led_count, &rtDW.LIN5_SENSON_ADR_Stat_model, 0, 0);
}
}
@ -562,8 +715,9 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
uint32_t countQueue_led_count = osMessageQueueGetSpace(env->queue_led_count);
osStatus_t status = osOK;
if (countQueue_led_count) {
osStatus_t status = osMessageQueuePut(env->queue_led_count, env->linStateSensor.LED_COUNT, 0, 0U);
status = osMessageQueuePut(env->queue_led_count, env->linStateSensor.LED_COUNT, 0, 0U);
}
return LIN_NO_EVENT;

View File

@ -9,8 +9,9 @@
#include "stdbool.h"
#include "LinIO.h"
#include "LoggerInterface.h"
#include "HVAC_model.h"
#define LOG_LIN4_SENSOR 1
#define LOG_LIN4_SENSOR 0
#define LOG_LIN5_SENSOR 0
@ -123,7 +124,7 @@ typedef struct __attribute__ ((packed)) {
} teTXV_batChiller_Stat;
typedef struct __attribute__ ((packed)) {
uint8_t eTXV_eeChiller_Stat_: 7; // 0
uint8_t eTXV_eeChiller_Pos_Stat: 7; // 0
uint8_t eTXV_eeChiller_LinRespErr_Stat: 1; // 7
uint8_t eTXV_eeChiller_Err_Stat: 2; // 8
uint8_t eTXV_eeChiller_Pressure_Val: 6; // 10
@ -131,6 +132,74 @@ typedef struct __attribute__ ((packed)) {
} teTXV_eeChiller_Stat;
typedef struct {
uint8_t CCU_Ionization_Req;
uint8_t CCU_AromaIntens_Req;
uint8_t CCU_AirQS_Req;
uint8_t CCU_fHVAC_Pos_Val;
uint8_t CCU_rHVAC_Pos_Val;
uint8_t CCU_batChiller_Pos_Val;
uint8_t CCU_eeChiller_Pos_Val;
} tCCU_Req_For_Model;
typedef struct {
uint8_t AirQS_LinRespErr_Stat;
uint8_t AirQS_Sens_Stat;
uint8_t AirQS_Combined_Stat;
uint8_t AirQS_Err_Stat;
uint8_t AirQS_COLvl_Stat;
uint8_t AirQS_NOxLvl_Stat;
uint8_t AirQS_NH3Lvl_Stat;
} tAirQS_Stat_For_Model;
typedef struct {
uint8_t Aroma_LinRespErr_Stat;
uint8_t Aroma_CartridgeSw_Stat;
uint8_t Aroma_Err_Stat;
uint8_t Aroma_Intens_Stat;
uint8_t Aroma_CartridgeFlavor_Stat;
uint8_t Aroma_CartridgeCapacity_Stat;
} tAroma_Stat_For_Model;
typedef struct {
uint8_t Ionizer_LinRespErr_Stat;
uint8_t Ionizer_Err_Stat;
uint8_t Ionizer_Ionization_Stat;
} tIonizer_Stat_For_Model;
typedef struct {
uint8_t eTXV_fHVAC_Pos_Stat;
uint8_t eTXV_fHVAC_LinRespErr_Stat;
uint8_t eTXV_fHVAC_Err_Stat;
uint8_t eTXV_fHVAC_Pressure_Val;
uint8_t eTXV_fHVAC_Temp_Val;
} teTXV_fHVAC_Stat_For_Model;
typedef struct {
uint8_t eTXV_rHVAC_Pos_Stat;
uint8_t eTXV_rHVAC_LinRespErr_Stat;
uint8_t eTXV_rHVAC_Err_Stat;
uint8_t eTXV_rHVAC_Pressure_Val;
uint8_t eTXV_rHVAC_Temp_Val;
} teTXV_rHVAC_Stat_For_Model;
typedef struct {
uint8_t eTXV_batChiller_Pos_Stat;
uint8_t eTXV_batChiller_LinRespErr_Stat;
uint8_t eTXV_batChiller_Err_Stat;
uint8_t eTXV_batChiller_Pressure_Val;
uint8_t eTXV_batChiller_Temp_Val;
} teTXV_batChiller_Stat_For_Model;
typedef struct {
uint8_t eTXV_eeChiller_Pos_Stat;
uint8_t eTXV_eeChiller_LinRespErr_Stat;
uint8_t eTXV_eeChiller_Err_Stat;
uint8_t eTXV_eeChiller_Pressure_Val;
uint8_t eTXV_eeChiller_Temp_Val;
} teTXV_eeChiller_Stat_For_Model;
typedef struct __attribute__ ((packed)) {
uint8_t CCU_DLLed1_Req: 1; // 0
uint8_t CCU_DLLed2_Req: 1; // 1
@ -235,6 +304,34 @@ typedef struct {
tCCU_Req d_CCU_Req;
uint64_t Stat[LIN4_SENSOR_COUNT];
//tCCU_Req_For_Model CCU_Req_For_Model_For_Model;
LIN4_CCU_Req_Bus CCU_Req_For_Model_For_Model;
//tAirQS_Stat_For_Model AirQS_Stat_For_Model;
LIN4_AirQS_Stat_Bus AirQS_Stat_For_Model;
//tAroma_Stat_For_Model Aroma_Stat_For_Model;
LIN4_Aroma_Stat_Bus Aroma_Stat_For_Model;
//tIonizer_Stat_For_Model Ionizer_Stat_For_Model;
LIN4_Ionizer_Stat_Bus Ionizer_Stat_For_Model;
//teTXV_fHVAC_Stat_For_Model eTXV_fHVAC_Stat_For_Model;
LIN4_eTXV_fHVAC_Stat_Bus eTXV_fHVAC_Stat_For_Model;
//teTXV_rHVAC_Stat_For_Model eTXV_rHVAC_Stat_For_Model;
LIN4_eTXV_rHVAC_Stat_Bus eTXV_rHVAC_Stat_For_Model;
//teTXV_batChiller_Stat_For_Model eTXV_batChiller_Stat_For_Model;
LIN4_eTXV_batChiller_Stat_Bus eTXV_batChiller_Stat_For_Model;
//teTXV_eeChiller_Stat_For_Model eTXV_eeChiller_Stat_For_Model;
LIN4_eTXV_eeChiller_Stat_Bus eTXV_eeChiller_Stat_For_Model;
osMessageQueueId_t queue_input_tCCU;
osMessageQueueId_t queue_input_tAirQS;
osMessageQueueId_t queue_input_tAroma;
osMessageQueueId_t queue_input_tIonizer;
osMessageQueueId_t queue_input_teTXV_fHVAC;
osMessageQueueId_t queue_input_teTXV_rHVAC;
osMessageQueueId_t queue_input_teTXV_batChiller;
osMessageQueueId_t queue_input_teTXV_eeChiller;
struct {
osThreadId_t id;
uint32_t stack[384];
@ -303,6 +400,8 @@ void Lin_4_Init(tLin4TaskSensor *env,
void Lin4_StartThread(tLin4TaskSensor *env);
void Lin4_Input_Set_From_Model(tLin4TaskSensor *env);
void Lin4_Output_Get_From_Model(tLin4TaskSensor *env);
void Lin_5_Init(tLin5TaskSensor *env,
tLinData *linData,
@ -311,6 +410,7 @@ void Lin_5_Init(tLin5TaskSensor *env,
void Lin5_StartThread(tLin5TaskSensor *env);
void getSensorLin5(tLin5TaskSensor *env, void *dataLedSensor);
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env);
#endif //HVAC_M7_LINSENSORTASKS_H