Merge branch 'py32f002b_dallas_allrom_in_modbus' into py32f002b_dallas

This commit is contained in:
2025-03-05 17:17:42 +03:00
8 changed files with 124 additions and 92 deletions

View File

@@ -286,12 +286,13 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
{
if(sensor == NULL)
return HAL_ERROR;
DALLAS_InitStructTypeDef initbuff = sensor->Init;
memset(sensor, 0, sizeof(DALLAS_SensorHandleTypeDef));
sensor->Init = initbuff;
memset(&sensor->f, 0, sizeof(sensor->f));
sensor->isConnected = 0;
sensor->isInitialized = 0;
sensor->isLost = 0;
sensor->temperature = 0;
sensor->sensROM = 0;
return HAL_OK;
}

View File

@@ -7,7 +7,7 @@
*/
#include "ds18b20_driver.h"
DS18B20_Drv_t DS;
DS18B20_Drv_t *DS;
OneWire_t OW;
/**
@@ -593,6 +593,12 @@ HAL_StatusTypeDef DS18B20_Search(DS18B20_Drv_t *DS, OneWire_t *OW)
OW->RomCnt++;
}
for(int i = OW->RomCnt; i < DS18B20_DEVICE_AMOUNT; i++)
{
for(int j = 0; j < 8; j++)
DS->DevAddr[i][j] = 0;
}
if(OW->RomCnt > 0)
return HAL_OK;

View File

@@ -78,7 +78,7 @@ typedef struct
{
uint8_t DevAddr[DS18B20_DEVICE_AMOUNT][8];
} DS18B20_Drv_t;
extern DS18B20_Drv_t DS;
extern DS18B20_Drv_t *DS;;
extern OneWire_t OW;
/* External Function ---------------------------------------------------------*/

View File

@@ -21,7 +21,7 @@
#define MODBUS_VENDOR_NAME "NIO-12"
#define MODBUS_PRODUCT_CODE "12345"
#define MODBUS_REVISION "Ver. 1.0"
#define MODBUS_VENDOR_URL "https://git.arktika.cyou/set506/DS18B20_Library/src/branch/py32f002b_dallas"
#define MODBUS_VENDOR_URL "https://git.arktika.cyou/set506/DS18B20_Library/"
#define MODBUS_PRODUCT_NAME "Dallas Driver"
#define MODBUS_MODEL_NAME "PY32F002B"
#define MODBUS_USER_APPLICATION_NAME "PY32Dallas"

View File

@@ -291,6 +291,11 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
extern void PYModule_IncrementScanSensor(void);
PYModule_IncrementScanSensor();
}
// Все найденные ROM на линии
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_ALL_ROMS_ADDR, R_ALL_ROMS_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
}
// if address doesnt match any array - return illegal data address response
else
{

View File

@@ -54,6 +54,8 @@ typedef struct //MB_DataInRegsTypeDef
{
uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT];
MB_SensorParamsTypeDef Response;
uint16_t reserved;
uint16_t AllROMs[DS18B20_DEVICE_AMOUNT][4];
}MB_DataInRegsTypeDef;
@@ -69,8 +71,10 @@ typedef struct //MB_DataInRegsTypeDef
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_TEMPERATURE_ADDR (0)
#define R_TEMPERATURE_QNT (DS18B20_DEVICE_AMOUNT)
#define R_SENS_PARAMS_ADDR (DS18B20_DEVICE_AMOUNT)
#define R_SENS_PARAMS_QNT (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t))
#define R_SENS_PARAMS_ADDR (DS18B20_DEVICE_AMOUNT) // 30
#define R_SENS_PARAMS_QNT (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t)) // 7
#define R_ALL_ROMS_ADDR (R_SENS_PARAMS_ADDR+R_SENS_PARAMS_QNT + 1) // 38
#define R_ALL_ROMS_QNT (DS18B20_DEVICE_AMOUNT*4)
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_SENS_INIT_ADDR (0)
@@ -119,6 +123,7 @@ typedef struct //MB_DataCoilsTypeDef
/* reg 2 - settings */
unsigned ConvertionDone:1;
unsigned LostedSensors:1;
unsigned reserved2:11;
}MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS
@@ -126,7 +131,7 @@ typedef struct //MB_DataCoilsTypeDef
#define C_CONTROL_QNT 5
#define C_FLAGS_ADDR 16
#define C_FLAGS_QNT 2
#define C_FLAGS_QNT 10
/** MODBUS_DATA_COILS_DEFINES
* @}

View File

@@ -32,15 +32,21 @@ void PYModule_main(void)
}
}
if(MB_DATA.Coils.ScanSensors)
if(MB_DATA.Coils.ReadSensor)
{
PYModule_ScanSensor(&DallasBus);
}
else
{
scan_cnt = 0;
PYModule_ReadSensor(&hdallas1, &pchsens);
MB_DATA.Coils.ReadSensor = 0;
}
// if(MB_DATA.Coils.ScanSensors)
// {
// PYModule_ScanSensor(&DallasBus);
// }
// else
// {
// scan_cnt = 0;
// }
if(MB_DATA.Coils.InitSensor)
{
PYModule_InitSensor(&pchsens);
@@ -79,8 +85,9 @@ void PYModule_FirstInit(void)
OW.DataPort = DS_GPIO_Port;
/* Инициализация onewire и поиск датчиков*/
DS = (DS18B20_Drv_t *)&MB_DATA.InRegs.AllROMs;
OneWire_Init(&OW);
DS18B20_Search(&DS, &OW);
DS18B20_Search(DS, &OW);
/* Инициализация modbus */
@@ -90,13 +97,13 @@ void PYModule_FirstInit(void)
/* Инициализация структур датчиков ПЧ */
DallasBus.hdallas = &hdallas1;
DallasBus.hdallas->onewire = &OW;
DallasBus.hdallas->ds_devices = &DS;
DallasBus.hdallas->ds_devices = DS;
PCHSens_InitModule(&hdallas1, &pchsens.module1, REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1);
PCHSens_InitModule(&hdallas1, &pchsens.module2, REG_PCH_NUMB_12|REG_PCH_DIODE_NUMB_1);
PCHSens_InitModule(&hdallas1, &pchsens.module3, REG_PCH_NUMB_21|REG_PCH_DIODE_NUMB_1);
PCHSens_InitModule(&hdallas1, &pchsens.module4, REG_PCH_NUMB_22|REG_PCH_DIODE_NUMB_1);
PCHSens_InitModule(&hdallas1, &pchsens.module5, REG_PCH_NUMB_31|REG_PCH_DIODE_NUMB_1);
PCHSens_InitModule(&hdallas1, &pchsens.module6, REG_PCH_NUMB_32|REG_PCH_DIODE_NUMB_1);
// PCHSens_InitModule(&hdallas1, &pchsens.module2, REG_PCH_NUMB_12|REG_PCH_DIODE_NUMB_1);
// PCHSens_InitModule(&hdallas1, &pchsens.module3, REG_PCH_NUMB_21|REG_PCH_DIODE_NUMB_1);
// PCHSens_InitModule(&hdallas1, &pchsens.module4, REG_PCH_NUMB_22|REG_PCH_DIODE_NUMB_1);
// PCHSens_InitModule(&hdallas1, &pchsens.module5, REG_PCH_NUMB_31|REG_PCH_DIODE_NUMB_1);
// PCHSens_InitModule(&hdallas1, &pchsens.module6, REG_PCH_NUMB_32|REG_PCH_DIODE_NUMB_1);
/* Поиск неизвестных сенсоров */
PCHSens_FindUnknownSensors(&DallasBus);
@@ -183,10 +190,11 @@ void PYModule_InitSensor(PCHSens_TypeDef *pchsens)
if(PCHSens_GetSensorByLocation(pchsens, (PCHSens_LocationTypeDef)MB_DATA.HoldRegs.InitStruct.Location, &sensor) != HAL_OK)
return;
uint64_t connectROM = 0;
connectROM = ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[0]))<<48;
connectROM |= ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[1]))<<32;
connectROM |= ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[2]))<<16;
connectROM |= ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[3]));
connectROM = ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[0])))<<48;
connectROM |= ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[1])))<<32;
connectROM |= ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[2])))<<16;
connectROM |= ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[3])));
if(PCHSens_InitNewSensor(&hdallas1, sensor, connectROM) == HAL_OK)
{
PYModule_FillResponse(sensor, STATUS_OK);
@@ -207,7 +215,7 @@ void PYModule_DeInitSensor(PCHSens_TypeDef *pchsens)
if(PCHSens_GetSensorByLocation(pchsens, (PCHSens_LocationTypeDef)MB_DATA.HoldRegs.InitStruct.Location, &sensor) != HAL_OK)
return;
if(PCHSens_UndefineSensor(sensor) != HAL_OK)
if(PCHSens_UndefineSensor(sensor) == HAL_OK)
{
PYModule_FillResponse(sensor, STATUS_OK);
}

View File

@@ -153,7 +153,56 @@
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>201</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134234866</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\Core\PY32Module\PY32module_main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Project\../Core/PY32Module/PY32module_main.c\201</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>197</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\PY32Module\PY32module_main.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>198</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\PY32Module\PY32module_main.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
@@ -168,92 +217,52 @@
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>module2</ItemText>
<ItemText>ROM</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>*(volatile uint32_t *)0xE0001000</ItemText>
<ItemText>hmodbus1,0x10</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>scratchpad</ItemText>
<ItemText>RS_Buffer,0x10</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>ROM</ItemText>
<ItemText>mb_location</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>start,0x0A</ItemText>
<ItemText>*(uint64_t *)(ROM)</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>end,0x0A</ItemText>
<ItemText>*ROM</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>(uint16_t)htim1.Instance-&gt;CNT-start,0x0A</ItemText>
<ItemText>sensor-&gt;sensROM</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>end-start,0x0A</ItemText>
<ItemText>sensor</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt;(end-start)),0x0A</ItemText>
<ItemText>(uint64_t *)(ROM)</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt; us*tim_1us_period),0x0A</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>(uint16_t)htim1.Instance-&gt;CNT-start,0x0A</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>hmodbus1,0x0A</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>RS_Buffer,0x10</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>mb_location</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>DS</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<ItemText>\\Project\../Core/PY32Module/PY32module_main.c\pchsens.module3</ItemText>
</Ww>
<Ww>
<count>18</count>
<WinNumber>1</WinNumber>
<ItemText>\\Project\../Core/PY32Module/PY32module_main.c\pchsens.module4</ItemText>
</Ww>
<Ww>
<count>19</count>
<WinNumber>1</WinNumber>
<ItemText>scan_cnt</ItemText>
<ItemText>(uint32_t *)(0x20000076)</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
@@ -265,24 +274,22 @@
<Ww>
<count>1</count>
<WinNumber>2</WinNumber>
<ItemText>DS,0x10</ItemText>
<ItemText>MB_DATA,0x10</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>2</WinNumber>
<ItemText>OW</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>2</WinNumber>
<ItemText>MB_DATA,0x10</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>2</WinNumber>
<ItemText>hmodbus1</ItemText>
</Ww>
</WatchWindow2>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x20000058-2</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>