Сделано базовое управление по модбас
- сохранение температур в модбас - чтение параметров датчика - инициализация нового датчика - деинициализация старого датчика Проект связанный с PY32модулем и температурами ПЧ перенесен в отдельную папку
This commit is contained in:
@@ -55,7 +55,7 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor)
|
||||
|
||||
/**
|
||||
* @brief Функция для иниицализации нового датчика в структуре
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @retval HAL Status
|
||||
*/
|
||||
@@ -79,7 +79,7 @@ HAL_StatusTypeDef Dallas_AddNewSensors(DALLAS_HandleTypeDef *hdallas, DALLAS_Sen
|
||||
|
||||
/**
|
||||
* @brief Инициализирует структуру датчика по ROM
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @retval HAL Status
|
||||
*/
|
||||
@@ -141,7 +141,7 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(DALLAS_HandleTypeDef *hdallas, DALLAS_S
|
||||
|
||||
/**
|
||||
* @brief Инициализирует структуру датчика по пользовательским байтам
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @retval HAL Status
|
||||
*/
|
||||
@@ -211,7 +211,7 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(DALLAS_HandleTypeDef *hdallas, DA
|
||||
|
||||
/**
|
||||
* @brief Инициализирует структуру датчика по порядковому номеру
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @retval HAL Status
|
||||
* @details Порядковый номер датчика в списке найденных.
|
||||
@@ -233,7 +233,7 @@ HAL_StatusTypeDef Dallas_SensorInitByInd(DALLAS_HandleTypeDef *hdallas, DALLAS_S
|
||||
|
||||
/**
|
||||
* @brief Инициализирует датчик для работы
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @param ROM ROM датчика, который надо инициализировать
|
||||
* @retval HAL Status
|
||||
@@ -254,7 +254,7 @@ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_Sensor
|
||||
// sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i));
|
||||
|
||||
/* Проверка присутствует ли выбранный датчик на линии */
|
||||
result = DS18B20_ReadScratchpad(hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&hdallas->scratchpad);
|
||||
result = Dallas_ReadScratchpad(sensor);
|
||||
if (result == HAL_OK)
|
||||
{
|
||||
/* Установка разрешения */
|
||||
@@ -279,9 +279,7 @@ HAL_StatusTypeDef Dallas_SensorInit(DALLAS_HandleTypeDef *hdallas, DALLAS_Sensor
|
||||
|
||||
/**
|
||||
* @brief Деинициализирует структуру датчика
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param sensor Указатель на структуру датчика
|
||||
* @param sens_ind Порядковый номер датчика в структуре
|
||||
* @retval HAL Status
|
||||
*/
|
||||
HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
|
||||
@@ -300,7 +298,7 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
|
||||
|
||||
/**
|
||||
* @brief Запускает измерение температуры на всех датчиках
|
||||
* @param onewire Указатель на структуру OneWire
|
||||
* @param hdallas Указатель на хендл для общения с датчиками
|
||||
* @param waitCondition Условие ожидания завершения преобразования
|
||||
* @param dallas_delay_ms Время ожидания окончания конверсии
|
||||
* @retval HAL Status
|
||||
@@ -483,11 +481,10 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor)
|
||||
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
|
||||
if(sensor->isInitialized == 0)
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
result = DS18B20_ReadScratchpad(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->hdallas->scratchpad);
|
||||
|
||||
result = Dallas_ReadScratchpad(sensor);
|
||||
|
||||
if (result == HAL_OK)
|
||||
{
|
||||
@@ -501,8 +498,8 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor)
|
||||
if(sensor->isConnected == 1)
|
||||
{
|
||||
sensor->f.disconnect_cnt++;
|
||||
sensor->isLost = 1;
|
||||
}
|
||||
sensor->isLost = 1;
|
||||
sensor->isConnected = 0;
|
||||
|
||||
// Dallas_ReplaceLostedSensor(sensor);
|
||||
@@ -522,6 +519,8 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor)
|
||||
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
if(sensor->isInitialized == 0)
|
||||
return HAL_ERROR;
|
||||
@@ -537,7 +536,7 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint
|
||||
sensor->f.write_err_cnt++;
|
||||
return result;
|
||||
}
|
||||
result = DS18B20_ReadScratchpad(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->hdallas->scratchpad);
|
||||
result = Dallas_ReadScratchpad(sensor);
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
return result;
|
||||
@@ -547,3 +546,9 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint
|
||||
}
|
||||
|
||||
|
||||
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_SensorHandleTypeDef *sensor)
|
||||
{
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
return DS18B20_ReadScratchpad(sensor->hdallas->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->hdallas->scratchpad);
|
||||
}
|
||||
|
||||
@@ -140,6 +140,8 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_SensorHandleTypeDef *sensor);
|
||||
HAL_StatusTypeDef Dallas_IsConnected(DALLAS_SensorHandleTypeDef *sensor);
|
||||
/* Записывает пользовательские байты */
|
||||
HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_SensorHandleTypeDef *sensor, uint16_t UserBytes12, uint16_t UserBytes34, uint8_t UserBytesMask);
|
||||
/* Записывает пользовательские байты */
|
||||
HAL_StatusTypeDef Dallas_ReadScratchpad(DALLAS_SensorHandleTypeDef *sensor);
|
||||
|
||||
|
||||
#endif // #ifndef DALLAS_TOOLS_H
|
||||
@@ -352,6 +352,22 @@ HAL_StatusTypeDef DS18B20_WaitForEndConvertion(OneWire_t* OW)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief The function is used to wait for end of convertion without blocking
|
||||
* @param OW OneWire HandleTypedef
|
||||
*/
|
||||
HAL_StatusTypeDef DS18B20_WaitForEndConvertion_NonBlocking(OneWire_t* OW)
|
||||
{
|
||||
if(OW == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
/* If line is pull down - conversion is ongoing */
|
||||
if(OneWire_ReadBit(OW) == 0)
|
||||
return HAL_BUSY;
|
||||
else
|
||||
return HAL_OK; // convertion done
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief The function is used as set temperature alarm range on
|
||||
|
||||
@@ -89,6 +89,7 @@ HAL_StatusTypeDef DS18B20_StartConvTAll(OneWire_t* OW);
|
||||
HAL_StatusTypeDef DS18B20_CalcTemperature(OneWire_t* OW, uint8_t *ROM, uint8_t *Scratchpad, float *destination);
|
||||
HAL_StatusTypeDef DS18B20_ReadScratchpad(OneWire_t* OW, uint8_t *ROM, uint8_t *Scratchpad);
|
||||
HAL_StatusTypeDef DS18B20_WaitForEndConvertion(OneWire_t* OW);
|
||||
HAL_StatusTypeDef DS18B20_WaitForEndConvertion_NonBlocking(OneWire_t* OW);
|
||||
HAL_StatusTypeDef DS18B20_SetTempAlarm(OneWire_t* OW, uint8_t *ROM, int8_t Low,
|
||||
int8_t High);
|
||||
HAL_StatusTypeDef DS18B20_WriteUserBytes(OneWire_t* OW, uint8_t *ROM, int16_t UserBytes12,
|
||||
|
||||
@@ -1,313 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file pch_sensors.c
|
||||
* @brief Работа с датчиками температуры DS18B20 в ПЧ
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
/* Includes ----------------------------------------------------------------*/
|
||||
|
||||
#include "pch_sensors.h"
|
||||
#include "modbus_data.h"
|
||||
PCHSens_DallasBusHandle DallasBus;
|
||||
PCHSens_SensorActionsTypeDef action;
|
||||
|
||||
/* Declarations and definitions --------------------------------------------*/
|
||||
|
||||
PCHSens_ModuleTypeDef module1;
|
||||
PCHSens_ModuleTypeDef module2;
|
||||
PCHSens_ModuleTypeDef module3;
|
||||
PCHSens_ModuleTypeDef module4;
|
||||
PCHSens_ModuleTypeDef module5;
|
||||
PCHSens_ModuleTypeDef module6;
|
||||
/* Functions ---------------------------------------------------------------*/
|
||||
HAL_StatusTypeDef PCHSens_InitNewSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor, uint64_t ROM)
|
||||
{
|
||||
DALLAS_SensorHandleTypeDef tempsens;
|
||||
HAL_StatusTypeDef result;
|
||||
if(hdallas == NULL)
|
||||
return HAL_ERROR;
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
// sensor->UserBytes = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
||||
|
||||
sensor->sens.Init.InitParam = ROM;
|
||||
sensor->sens.Init.init_func = &Dallas_SensorInitByROM;
|
||||
|
||||
result = Dallas_AddNewSensors(hdallas, &sensor->sens);
|
||||
if(result != HAL_OK)
|
||||
{
|
||||
sensor->not_found = 1;
|
||||
return result;
|
||||
}
|
||||
|
||||
result = Dallas_WriteUserBytes(&sensor->sens, sensor->Location.all, sensor->Location.all, USED_USER_BYTES);
|
||||
if(result != HAL_OK)
|
||||
return result;
|
||||
|
||||
sensor->sens.Init.InitParam = sensor->Location.all;
|
||||
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
||||
|
||||
result = Dallas_AddNewSensors(hdallas, &sensor->sens);
|
||||
if(result == HAL_OK)
|
||||
{
|
||||
sensor->not_found = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sensor->not_found = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
HAL_StatusTypeDef PCHSens_AddSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
if(hdallas == NULL)
|
||||
return HAL_ERROR;
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
// sensor->UserBytes = (PCHSens_LocationTypeDef *)&sensor->sens.scratchpad.tHighRegister;
|
||||
|
||||
sensor->sens.Init.InitParam = sensor->Location.all;
|
||||
|
||||
sensor->sens.Init.init_func = &Dallas_SensorInitByUserBytes;
|
||||
|
||||
result = Dallas_AddNewSensors(hdallas, &sensor->sens);
|
||||
|
||||
if(result == HAL_OK)
|
||||
{
|
||||
sensor->not_found = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sensor->not_found = 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef PCHSens_InitModule(DALLAS_HandleTypeDef *hdallas, PCHSens_ModuleTypeDef* module, uint16_t param)
|
||||
{
|
||||
if(hdallas == NULL)
|
||||
return HAL_ERROR;
|
||||
if(module == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
PCHSens_LocationTypeDef initlocation;
|
||||
initlocation.all = param;
|
||||
action.read = 1;
|
||||
|
||||
module->hdallas = hdallas;
|
||||
module->refLocation = initlocation;
|
||||
|
||||
module->sens1.Location.all = module->refLocation.all;
|
||||
module->sens1.Location.param.Location = 0;
|
||||
PCHSens_AddSensor(hdallas, &module->sens1);
|
||||
|
||||
module->sens2.Location.all = module->refLocation.all;
|
||||
module->sens2.Location.param.Location = 1;
|
||||
PCHSens_AddSensor(hdallas, &module->sens2);
|
||||
|
||||
module->sens3.Location.all = module->refLocation.all;
|
||||
module->sens3.Location.param.Location = 2;
|
||||
PCHSens_AddSensor(hdallas, &module->sens3);
|
||||
|
||||
module->sens4.Location.all = module->refLocation.all;
|
||||
module->sens4.Location.param.Location = 3;
|
||||
PCHSens_AddSensor(hdallas, &module->sens4);
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
HAL_StatusTypeDef PCHSens_ModuleHandleAction(PCHSens_ModuleTypeDef* module)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
|
||||
if(module == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
result = PCHSens_SensorHandleActions(module->hdallas, &module->sens1);
|
||||
result = PCHSens_SensorHandleActions(module->hdallas, &module->sens2);
|
||||
result = PCHSens_SensorHandleActions(module->hdallas, &module->sens3);
|
||||
result = PCHSens_SensorHandleActions(module->hdallas, &module->sens4);
|
||||
|
||||
return result;
|
||||
}
|
||||
HAL_StatusTypeDef PCHSens_Covert(PCHSens_DallasBusHandle *hbus)
|
||||
{
|
||||
return Dallas_StartConvertTAll(hbus->hdallas, DALLAS_WAIT_BUS, 0);
|
||||
}
|
||||
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_SensorTypeDef* sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
result = Dallas_ReadTemperature(&sensor->sens);
|
||||
PCHSens_StoreToModbus(sensor);
|
||||
|
||||
return result;
|
||||
}
|
||||
HAL_StatusTypeDef PCHSens_CheckSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
unsigned unknow_sensors_flag = 0;
|
||||
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
if(sensor->sens.isInitialized == 0)
|
||||
return HAL_ERROR;
|
||||
|
||||
if((sensor->sens.isLost == 1))
|
||||
{
|
||||
if(Dallas_ReplaceLostedSensor(&sensor->sens) != HAL_OK)
|
||||
{
|
||||
sensor->not_found = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sensor->not_found = 0;
|
||||
}
|
||||
}
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
HAL_StatusTypeDef PCHSens_FindUnknownSensors(PCHSens_DallasBusHandle *hbus)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
if(hbus == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
hbus->UnknownCnt = 0;
|
||||
|
||||
PCHSens_LocationTypeDef *param = (PCHSens_LocationTypeDef *)&hbus->hdallas->scratchpad.tHighRegister;
|
||||
for(int i = 0; i < hbus->hdallas->onewire->RomCnt; i++)
|
||||
{
|
||||
/* Проверка присутствует ли выбранный датчик на линии */
|
||||
result = DS18B20_ReadScratchpad(hbus->hdallas->onewire, (uint8_t *)&DS.DevAddr[i], (uint8_t *)&hbus->hdallas->scratchpad);
|
||||
if(result != HAL_OK)
|
||||
__NOP();
|
||||
|
||||
if((IS_REG_SENS_LOCATION(param) == 0) ||
|
||||
(IS_REG_PCH_LOCATION(param) == 0) ||
|
||||
(IS_REG_PCH_NUMB(param) == 0) )
|
||||
{
|
||||
// unknowns->unknown_sensors[unknowns->UnknownCnt].Init.InitParam = i;
|
||||
// unknowns->unknown_sensors[unknowns->UnknownCnt].Init.init_func = &Dallas_SensorInitByInd;
|
||||
// result = Dallas_AddNewSensors(hbus, &unknowns->unknown_sensors[unknowns->UnknownCnt]);
|
||||
hbus->UnknownCnt++;
|
||||
if(result != HAL_OK)
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
return HAL_OK;
|
||||
}
|
||||
//HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor)
|
||||
//{
|
||||
// HAL_StatusTypeDef result;
|
||||
// if(sensor == NULL)
|
||||
// return HAL_ERROR;
|
||||
//
|
||||
// if((unknowns->ROMtoDefine != NULL) && (unknowns->LocationtoDefine.all != NULL) && (unknowns->senstoDefine != NULL))
|
||||
// {
|
||||
// result = PCHSens_InitNewSensor(unknowns->onewire, unknowns->senstoDefine, unknowns->ROMtoDefine);
|
||||
// unknowns->ROMtoDefine = 0;
|
||||
// unknowns->LocationtoDefine.all = 0;
|
||||
// unknowns->senstoDefine = 0;
|
||||
// return result;
|
||||
// }
|
||||
// return HAL_OK;
|
||||
//}
|
||||
|
||||
HAL_StatusTypeDef PCHSens_UndefineSensor(PCHSens_SensorTypeDef *sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
result = Dallas_WriteUserBytes(&sensor->sens, 0, 0, USED_USER_BYTES);
|
||||
if(result != HAL_OK)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
result = Dallas_SensorDeInit(&sensor->sens);
|
||||
return result;
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef PCHSens_SensorHandleActions(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef *sensor)
|
||||
{
|
||||
HAL_StatusTypeDef result;
|
||||
if(sensor == NULL)
|
||||
return HAL_ERROR;
|
||||
|
||||
if(action.connectROM != NULL)
|
||||
{
|
||||
result = PCHSens_InitNewSensor(hdallas, sensor, action.connectROM);
|
||||
action.connectROM = 0;
|
||||
}
|
||||
|
||||
if(action.read != NULL)
|
||||
{
|
||||
result = PCHSens_ReadTemperature(sensor);
|
||||
if(result != HAL_OK)
|
||||
PCHSens_CheckSensor(hdallas, sensor);
|
||||
}
|
||||
|
||||
if(action.deinit != NULL)
|
||||
{
|
||||
action.deinit = 0;
|
||||
result = PCHSens_UndefineSensor(sensor);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void PCHSens_FirstInit(void)
|
||||
{
|
||||
int init_find = 0;
|
||||
OW.DataPin = DS_Pin;
|
||||
OW.DataPort = DS_GPIO_Port;
|
||||
DS.Resolution = DS18B20_RESOLUTION_9BITS;
|
||||
|
||||
OneWire_Init(&OW);
|
||||
DS18B20_Search(&DS, &OW);
|
||||
|
||||
DallasBus.hdallas = &hdallas1;
|
||||
DallasBus.hdallas->onewire = &OW;
|
||||
|
||||
|
||||
|
||||
PCHSens_InitModule(&hdallas1, &module1, REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1);
|
||||
PCHSens_InitModule(&hdallas1, &module2, REG_PCH_NUMB_12|REG_PCH_DIODE_NUMB_1);
|
||||
PCHSens_InitModule(&hdallas1, &module3, REG_PCH_NUMB_13|REG_PCH_DIODE_NUMB_1);
|
||||
PCHSens_InitModule(&hdallas1, &module4, REG_PCH_NUMB_21|REG_PCH_DIODE_NUMB_1);
|
||||
PCHSens_InitModule(&hdallas1, &module5, REG_PCH_NUMB_22|REG_PCH_DIODE_NUMB_1);
|
||||
PCHSens_InitModule(&hdallas1, &module6, REG_PCH_NUMB_23|REG_PCH_DIODE_NUMB_1);
|
||||
|
||||
PCHSens_FindUnknownSensors(&DallasBus);
|
||||
}
|
||||
|
||||
|
||||
void PCHSens_StoreToModbus(PCHSens_SensorTypeDef *sensor)
|
||||
{
|
||||
uint8_t pch_numb = (sensor->Location.param.PCHdig1 - 1)*3 + (sensor->Location.param.PCHdig2 - 1);
|
||||
uint8_t location = (sensor->Location.param.Location);
|
||||
|
||||
uint8_t mb_location = pch_numb*4 + location;
|
||||
|
||||
if (mb_location < DS18B20_DEVICE_AMOUNT)
|
||||
MB_DATA.InRegs.SensTemperature[mb_location] = sensor->sens.temperature*100;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,175 +0,0 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file pch_sensors.h
|
||||
* @brief Работа с датчиками температуры DS18B20 в ПЧ
|
||||
******************************************************************************
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef PCH_SENSORS_H
|
||||
#define PCH_SENSORS_H
|
||||
|
||||
|
||||
|
||||
/* Includes -----------------------------------------------------------------*/
|
||||
#include "dallas_tools.h"
|
||||
|
||||
/* Declarations and definitions ---------------------------------------------*/
|
||||
#define USED_USER_BYTES DALLAS_USER_BYTE_12
|
||||
|
||||
/* Позиции параметров в UserBytes */
|
||||
#define REG_SENS_LOCATION_Pos (0) /*!< @brief Позиция параметра "Локация внутри модуля" */
|
||||
|
||||
#define REG_PCH_LOCATION_Pos (8) /*!< @brief Позиция параметра "Расположение в ПЧ" */
|
||||
#define REG_PCH_DIOD_PHASE_Pos (10) /*!< @brief Позиция параметра "Диодный или фазный модуль" @ref REG_PCH_LOCATION_Pos */
|
||||
#define REG_PCH_MODULE_NUMB_Pos (8) /*!< @brief Позиция параметра "Порядковый номер диодного/фазного модуля" @ref REG_PCH_LOCATION_Pos */
|
||||
|
||||
#define REG_PCH_NUMB_Pos (11) /*!< @brief Позиция параметра "Преобразователь частоты" */
|
||||
#define REG_PCH_NUMB_DIGIT_1_Pos (13) /*!< @brief Позиция параметра "Первая цифра номера преобразователя частоты" @ref REG_PCH_NUMB_Pos */
|
||||
#define REG_PCH_NUMB_DIGIT_2_Pos (11) /*!< @brief Позиция параметра "Вторая цифра номера преобразователя частоты" @ref REG_PCH_NUMB_Pos */
|
||||
|
||||
#define REG_ZIP_Pos (15) /*!< @brief Позиция параметра "ЗИП/не ЗИП" */
|
||||
|
||||
/* Маски параметров в UserBytes */
|
||||
#define REG_SENS_LOCATION_Mask ((uint16_t)0x3 << REG_SENS_LOCATION_Pos) /*!< @brief Маска параметра "Локация внутри модуля" */
|
||||
|
||||
#define REG_PCH_LOCATION_Mask ((uint16_t)0x7 << REG_PCH_LOCATION_Pos) /*!< @brief Маска параметра "Расположение в ПЧ" */
|
||||
#define REG_PCH_DIOD_PHASE_Mask ((uint16_t)0x1 << REG_PCH_DIOD_PHASE_Pos) /*!< @brief Маска параметра "Диодный или фазный модуль" */
|
||||
#define REG_PCH_MODULE_NUMB_Mask ((uint16_t)0x3 << REG_PCH_MODULE_NUMB_Pos) /*!< @brief Маска параметра "Порядковый номер диодного/фазного модуля" */
|
||||
|
||||
#define REG_PCH_NUMB_Mask ((uint16_t)0xF << REG_PCH_NUMB_Pos) /*!< @brief Маска параметра "Преобразователь частоты" */
|
||||
#define REG_PCH_NUMB_DIGIT_1_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_1_Pos) /*!< @brief Маска параметра "Первая цифра номера преобразователя частоты" */
|
||||
#define REG_PCH_NUMB_DIGIT_2_Mask ((uint16_t)0x3 << REG_PCH_NUMB_DIGIT_2_Pos) /*!< @brief Маска параметра "Вторая цифра номера преобразователя частоты" */
|
||||
|
||||
#define REG_ZIP_Mask ((uint16_t)0x1 << REG_ZIP_Pos) /*!< @brief Маска параметра "ЗИП/не ЗИП" */
|
||||
|
||||
/* Варианты параметров в UserBytes */
|
||||
#define REG_PCH_NUMB_11 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
#define REG_PCH_NUMB_12 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (2 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
#define REG_PCH_NUMB_13 ((1 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
#define REG_PCH_NUMB_21 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (1 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
#define REG_PCH_NUMB_22 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (2 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
#define REG_PCH_NUMB_23 ((2 << REG_PCH_NUMB_DIGIT_1_Pos) | (3 << REG_PCH_NUMB_DIGIT_2_Pos))
|
||||
|
||||
#define REG_PCH_DIODE_NUMB_1 ((0 << REG_PCH_DIOD_PHASE_Pos) | (1 << REG_PCH_MODULE_NUMB_Pos))
|
||||
#define REG_PCH_DIODE_NUMB_2 ((0 << REG_PCH_DIOD_PHASE_Pos) | (2 << REG_PCH_MODULE_NUMB_Pos))
|
||||
#define REG_PCH_DIODE_NUMB_3 ((0 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
|
||||
#define REG_PCH_PHASE_NUMB_1 ((1 << REG_PCH_DIOD_PHASE_Pos) | (1 << REG_PCH_MODULE_NUMB_Pos))
|
||||
#define REG_PCH_PHASE_NUMB_2 ((1 << REG_PCH_DIOD_PHASE_Pos) | (2 << REG_PCH_MODULE_NUMB_Pos))
|
||||
#define REG_PCH_PHASE_NUMB_3 ((1 << REG_PCH_DIOD_PHASE_Pos) | (3 << REG_PCH_MODULE_NUMB_Pos))
|
||||
|
||||
/* Получить параметр из UserBytes */
|
||||
#define GET_REG_SENS_LOCATION(_REG_) ((_REG_) & REG_SENS_LOCATION_Mask) /*!< @brief Получить параметр "Локация внутри модуля" */
|
||||
|
||||
#define GET_REG_PCH_LOCATION(_REG_) ((_REG_) & REG_PCH_LOCATION_Mask) /*!< @brief Получить параметр "Расположение в ПЧ" */
|
||||
#define GET_REG_PCH_DIOD_PHASE(_REG_) ((_REG_) & REG_PCH_DIOD_PHASE_Mask) /*!< @brief Получить параметр "Диодный или фазный модуль" */
|
||||
#define GET_REG_PCH_MODULE_NUMB(_REG_) ((_REG_) & REG_PCH_MODULE_NUMB_Mask) /*!< @brief Получить параметр "Порядковый номер диодного/фазного модуля" */
|
||||
|
||||
#define GET_REG_PCH_NUMB(_REG_) ((_REG_) & REG_PCH_NUMB_Mask) /*!< @brief Получить параметр "Преобразователь частоты" */
|
||||
#define GET_REG_PCH_NUMB_DIGIT_1(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_1_Mask) /*!< @brief Получить параметр "Первая цифра номера преобразователя частоты" */
|
||||
#define GET_REG_PCH_NUMB_DIGIT_2(_REG_) ((_REG_) & REG_PCH_NUMB_DIGIT_2_Mask) /*!< @brief Получить параметр "Вторая цифра номера преобразователя частоты" */
|
||||
|
||||
#define GET_REG_ZIP(_REG_) ((_REG_) & REG_ZIP_Mask) /*!< @brief Получить параметр "ЗИП/не ЗИП" */
|
||||
|
||||
/* Диапазоны параметров из UserBytes */
|
||||
#define REG_SENS_LOCATION_MAX 3
|
||||
#define REG_SENS_LOCATION_MIN 0
|
||||
#define REG_PCH_DIOD_PHASE_MAX 1
|
||||
#define REG_PCH_DIOD_PHASE_MIN 0
|
||||
#define REG_PCH_MODULE_NUMB_MAX 3
|
||||
#define REG_PCH_MODULE_NUMB_MIN 0
|
||||
#define REG_PCH_NUMB_DIGIT_1_MAX 3
|
||||
#define REG_PCH_NUMB_DIGIT_1_MIN 1
|
||||
#define REG_PCH_NUMB_DIGIT_2_MAX 2
|
||||
#define REG_PCH_NUMB_DIGIT_2_MIN 1
|
||||
|
||||
|
||||
/** @brief Получить параметр "Локация внутри модуля" */
|
||||
#define IS_REG_SENS_LOCATION(_REG_) (((_REG_)->param.Location <= REG_SENS_LOCATION_MAX) && ((_REG_)->param.Location >= REG_SENS_LOCATION_MIN))
|
||||
|
||||
/*!< @brief Получить параметр "Расположение в ПЧ" */
|
||||
#define IS_REG_PCH_LOCATION(_REG_) (IS_REG_PCH_DIOD_PHASE(_REG_) && IS_REG_PCH_MODULE_NUMB(_REG_))
|
||||
/*!< @brief Получить параметр "Диодный или фазный модуль" */
|
||||
#define IS_REG_PCH_DIOD_PHASE(_REG_) (((_REG_)->param.DiodeOrPhase <= REG_PCH_DIOD_PHASE_MAX) && ((_REG_)->param.DiodeOrPhase >= REG_PCH_DIOD_PHASE_MIN))
|
||||
/*!< @brief Получить параметр "Порядковый номер диодного/фазного модуля" */
|
||||
#define IS_REG_PCH_MODULE_NUMB(_REG_) (((_REG_)->param.ModuleNumb <= REG_PCH_MODULE_NUMB_MAX) && ((_REG_)->param.ModuleNumb >= REG_PCH_MODULE_NUMB_MIN))
|
||||
|
||||
/*!< @brief Получить параметр "Преобразователь частоты" */
|
||||
#define IS_REG_PCH_NUMB(_REG_) (IS_REG_PCH_NUMB_DIGIT_1(_REG_) && IS_REG_PCH_NUMB_DIGIT_2(_REG_))
|
||||
/*!< @brief Получить параметр "Первая цифра номера преобразователя частоты" */
|
||||
#define IS_REG_PCH_NUMB_DIGIT_1(_REG_) (((_REG_)->param.PCHdig1 <= REG_PCH_NUMB_DIGIT_1_MAX) && ((_REG_)->param.PCHdig1 >= REG_PCH_NUMB_DIGIT_1_MIN))
|
||||
/*!< @brief Получить параметр "Вторая цифра номера преобразователя частоты" s*/
|
||||
#define IS_REG_PCH_NUMB_DIGIT_2(_REG_) (((_REG_)->param.PCHdig2 <= REG_PCH_NUMB_DIGIT_2_MAX) && ((_REG_)->param.PCHdig2 >= REG_PCH_NUMB_DIGIT_2_MIN))
|
||||
/*!< @brief Получить параметр "ЗИП/не ЗИП" */
|
||||
#define IS_REG_ZIP(_REG_) (GET_REG_ZIP(_REG_))
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint16_t all;
|
||||
struct
|
||||
{
|
||||
unsigned Location:2;
|
||||
unsigned reserved:6;
|
||||
unsigned ModuleNumb:2;
|
||||
unsigned DiodeOrPhase:1;
|
||||
unsigned PCHdig2:2;
|
||||
unsigned PCHdig1:2;
|
||||
unsigned ZIP:1;
|
||||
}param;
|
||||
}PCHSens_LocationTypeDef;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t connectROM;
|
||||
unsigned read;
|
||||
unsigned deinit;
|
||||
}PCHSens_SensorActionsTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DALLAS_SensorHandleTypeDef sens;
|
||||
PCHSens_LocationTypeDef Location;
|
||||
unsigned not_found:1;
|
||||
}PCHSens_SensorTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DALLAS_HandleTypeDef *hdallas;
|
||||
|
||||
PCHSens_SensorTypeDef sens1;
|
||||
PCHSens_SensorTypeDef sens2;
|
||||
PCHSens_SensorTypeDef sens3;
|
||||
PCHSens_SensorTypeDef sens4;
|
||||
|
||||
PCHSens_LocationTypeDef refLocation;
|
||||
|
||||
}PCHSens_ModuleTypeDef;
|
||||
extern PCHSens_ModuleTypeDef module1;
|
||||
extern PCHSens_ModuleTypeDef module2;
|
||||
extern PCHSens_ModuleTypeDef module3;
|
||||
extern PCHSens_ModuleTypeDef module4;
|
||||
extern PCHSens_ModuleTypeDef module5;
|
||||
extern PCHSens_ModuleTypeDef module6;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DALLAS_HandleTypeDef *hdallas;
|
||||
uint8_t UnknownCnt;
|
||||
}PCHSens_DallasBusHandle;
|
||||
extern PCHSens_DallasBusHandle DallasBus;
|
||||
|
||||
|
||||
/* Functions ---------------------------------------------------------------*/
|
||||
HAL_StatusTypeDef PCHSens_InitNewSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor, uint64_t ROM);
|
||||
HAL_StatusTypeDef PCHSens_AddSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor);
|
||||
HAL_StatusTypeDef PCHSens_InitModule(DALLAS_HandleTypeDef *hdallas, PCHSens_ModuleTypeDef* module, uint16_t param);
|
||||
HAL_StatusTypeDef PCHSens_ModuleHandleAction(PCHSens_ModuleTypeDef* module);
|
||||
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_SensorTypeDef* sensor);
|
||||
HAL_StatusTypeDef PCHSens_Covert(PCHSens_DallasBusHandle *hbus);
|
||||
HAL_StatusTypeDef PCHSens_CheckSensor(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef* sensor);
|
||||
HAL_StatusTypeDef PCHSens_FindUnknownSensors(PCHSens_DallasBusHandle *hbus);
|
||||
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_DallasBusHandle *hbus, PCHSens_SensorTypeDef *sensor);
|
||||
HAL_StatusTypeDef PCHSens_SensorHandleActions(DALLAS_HandleTypeDef *hdallas, PCHSens_SensorTypeDef *sensor);
|
||||
void PCHSens_FirstInit(void);
|
||||
void PCHSens_StoreToModbus(PCHSens_SensorTypeDef *sensor);
|
||||
#endif // #ifndef PCH_SENSORS_H
|
||||
Reference in New Issue
Block a user