Compare commits

...

7 Commits

Author SHA1 Message Date
Razvalyaev
424ca121f8 Merge branch 'py32f002b_dallas_allrom_in_modbus' into py32f002b_dallas 2025-03-05 17:17:42 +03:00
Razvalyaev
1d6ccdbef3 Merge remote-tracking branch 'DS18B20_Library/py32f002b_dallas' into py32f002b_dallas 2025-03-05 17:17:18 +03:00
Razvalyaev
8d44a1a153 Убраны пока лишние пч, т.к. датчиков всего 4
Убрана функция скана
Исправлен оформирование ром для инициализации датчика
Переделан функция деинита структуры сенсора
2025-03-05 17:16:00 +03:00
Razvalyaev
b59da11afc добавлены адреса и ответ на запрос по регистрам со всеми найденными ROM 2025-03-05 13:12:54 +03:00
Razvalyaev
1633a224f3 проблема была в невыровненых данных
была строчка
  sensor->sensROM = *(uint64_t *)(ROM);

и она требует чтобы указатель ROM был выровнен по 4 байта

Но он не выровнен, потому что шаг модбас структуры 2 байта и он оказывается смещен на 2 байта вместо 4

Добавил резервные 2 байта, чтобы адрес быо кратен 4 байтам
2025-03-05 13:04:40 +03:00
Razvalyaev
54c8a663e4 попытка перенести адреса всех найденных устройств в modbus_data
почему-то вылетает на Dallas_SensorInit
2025-03-05 12:23:39 +03:00
Razvalyaev
458d2d77c9 исправлены диапазоны адресов у коилов
сделано обращение по указателям в паре мест
убрана громоздская конструкция из OneWire_Pin_Mode
2025-03-05 12:22:35 +03:00
11 changed files with 132 additions and 116 deletions

1
.gitignore vendored
View File

@@ -47,3 +47,4 @@ JLinkLog.txt
/MDK-ARM/DebugConfig/ /MDK-ARM/DebugConfig/
/MDK-ARM/Output/ /MDK-ARM/Output/
/~$ds18b20_locations.xlsx

View File

@@ -38,7 +38,7 @@ HAL_StatusTypeDef Dallas_ReplaceLostedSensor(DALLAS_SensorHandleTypeDef *sensor)
if(sensor->isLost) if(sensor->isLost)
{ {
if(DS18B20_Search(&DS, &OW) != HAL_OK) if(DS18B20_Search(sensor->hdallas->ds_devices, sensor->hdallas->onewire) != HAL_OK)
return HAL_ERROR; return HAL_ERROR;
if(sensor->Init.init_func(sensor->hdallas, sensor) != HAL_OK) if(sensor->Init.init_func(sensor->hdallas, sensor) != HAL_OK)
@@ -287,11 +287,12 @@ HAL_StatusTypeDef Dallas_SensorDeInit(DALLAS_SensorHandleTypeDef *sensor)
if(sensor == NULL) if(sensor == NULL)
return HAL_ERROR; return HAL_ERROR;
DALLAS_InitStructTypeDef initbuff = sensor->Init; memset(&sensor->f, 0, sizeof(sensor->f));
sensor->isConnected = 0;
memset(sensor, 0, sizeof(DALLAS_SensorHandleTypeDef)); sensor->isInitialized = 0;
sensor->isLost = 0;
sensor->Init = initbuff; sensor->temperature = 0;
sensor->sensROM = 0;
return HAL_OK; return HAL_OK;
} }

View File

@@ -7,7 +7,7 @@
*/ */
#include "ds18b20_driver.h" #include "ds18b20_driver.h"
DS18B20_Drv_t DS; DS18B20_Drv_t *DS;
OneWire_t OW; OneWire_t OW;
/** /**
@@ -593,6 +593,12 @@ HAL_StatusTypeDef DS18B20_Search(DS18B20_Drv_t *DS, OneWire_t *OW)
OW->RomCnt++; 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) if(OW->RomCnt > 0)
return HAL_OK; return HAL_OK;

View File

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

View File

@@ -16,30 +16,13 @@
void OneWire_Pin_Mode(OneWire_t* OW, PinMode Mode) void OneWire_Pin_Mode(OneWire_t* OW, PinMode Mode)
{ {
#ifdef CMSIS_Driver #ifdef CMSIS_Driver
static uint32_t pin_cr_numb = 0;
static int get_pin_numb = 1;
if(get_pin_numb)
{
get_pin_numb = 0;
for(int i = 0; i < 8; i++)
{
if((OW->DataPin >> i) == 0x1)
pin_cr_numb = i*4;
}
for(int i = 8; i < 16; i++)
{
if((OW->DataPin >> i) == 0x1)
pin_cr_numb = (i-8)*4;
}
}
if(Mode == Input) if(Mode == Input)
{ {
OW->DataPort->MODER &= ~((GPIO_MODER_MODE0_Msk) << pin_cr_numb); OW->DataPort->MODER &= ~((GPIO_MODER_MODE0_Msk) << 0);
OW->DataPort->MODER |= (GPIO_MODE_INPUT << (pin_cr_numb+2)); OW->DataPort->MODER |= (GPIO_MODE_INPUT << (0+2));
}else{ }else{
OW->DataPort->MODER &= ~((GPIO_MODER_MODE0_Msk) << pin_cr_numb); OW->DataPort->MODER &= ~((GPIO_MODER_MODE0_Msk) << 0);
OW->DataPort->MODER |= (GPIO_MODE_OUTPUT_PP << pin_cr_numb); OW->DataPort->MODER |= (GPIO_MODE_OUTPUT_PP << 0);
} }
#else #else
#ifdef LL_Driver #ifdef LL_Driver

View File

@@ -21,7 +21,7 @@
#define MODBUS_VENDOR_NAME "NIO-12" #define MODBUS_VENDOR_NAME "NIO-12"
#define MODBUS_PRODUCT_CODE "12345" #define MODBUS_PRODUCT_CODE "12345"
#define MODBUS_REVISION "Ver. 1.0" #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_PRODUCT_NAME "Dallas Driver"
#define MODBUS_MODEL_NAME "PY32F002B" #define MODBUS_MODEL_NAME "PY32F002B"
#define MODBUS_USER_APPLICATION_NAME "PY32Dallas" #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); extern void PYModule_IncrementScanSensor(void);
PYModule_IncrementScanSensor(); 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 // if address doesnt match any array - return illegal data address response
else else
{ {

View File

@@ -54,6 +54,8 @@ typedef struct //MB_DataInRegsTypeDef
{ {
uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT]; uint16_t SensTemperature[DS18B20_DEVICE_AMOUNT];
MB_SensorParamsTypeDef Response; MB_SensorParamsTypeDef Response;
uint16_t reserved;
uint16_t AllROMs[DS18B20_DEVICE_AMOUNT][4];
}MB_DataInRegsTypeDef; }MB_DataInRegsTypeDef;
@@ -69,8 +71,10 @@ typedef struct //MB_DataInRegsTypeDef
// DEFINES FOR INPUT REGISTERS ARRAYS // DEFINES FOR INPUT REGISTERS ARRAYS
#define R_TEMPERATURE_ADDR (0) #define R_TEMPERATURE_ADDR (0)
#define R_TEMPERATURE_QNT (DS18B20_DEVICE_AMOUNT) #define R_TEMPERATURE_QNT (DS18B20_DEVICE_AMOUNT)
#define R_SENS_PARAMS_ADDR (DS18B20_DEVICE_AMOUNT) #define R_SENS_PARAMS_ADDR (DS18B20_DEVICE_AMOUNT) // 30
#define R_SENS_PARAMS_QNT (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t)) #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 // DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_SENS_INIT_ADDR (0) #define R_SENS_INIT_ADDR (0)
@@ -119,14 +123,15 @@ typedef struct //MB_DataCoilsTypeDef
/* reg 2 - settings */ /* reg 2 - settings */
unsigned ConvertionDone:1; unsigned ConvertionDone:1;
unsigned LostedSensors:1; unsigned LostedSensors:1;
unsigned reserved2:11;
}MB_DataCoilsTypeDef; }MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS // DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR 0 #define C_CONTROL_ADDR 0
#define C_CONTROL_QNT 3 #define C_CONTROL_QNT 5
#define C_FLAGS_ADDR 16 #define C_FLAGS_ADDR 16
#define C_FLAGS_QNT 2 #define C_FLAGS_QNT 10
/** MODBUS_DATA_COILS_DEFINES /** 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); PYModule_ReadSensor(&hdallas1, &pchsens);
} MB_DATA.Coils.ReadSensor = 0;
else
{
scan_cnt = 0;
} }
// if(MB_DATA.Coils.ScanSensors)
// {
// PYModule_ScanSensor(&DallasBus);
// }
// else
// {
// scan_cnt = 0;
// }
if(MB_DATA.Coils.InitSensor) if(MB_DATA.Coils.InitSensor)
{ {
PYModule_InitSensor(&pchsens); PYModule_InitSensor(&pchsens);
@@ -79,8 +85,9 @@ void PYModule_FirstInit(void)
OW.DataPort = DS_GPIO_Port; OW.DataPort = DS_GPIO_Port;
/* Инициализация onewire и поиск датчиков*/ /* Инициализация onewire и поиск датчиков*/
DS = (DS18B20_Drv_t *)&MB_DATA.InRegs.AllROMs;
OneWire_Init(&OW); OneWire_Init(&OW);
DS18B20_Search(&DS, &OW); DS18B20_Search(DS, &OW);
/* Инициализация modbus */ /* Инициализация modbus */
@@ -90,13 +97,13 @@ void PYModule_FirstInit(void)
/* Инициализация структур датчиков ПЧ */ /* Инициализация структур датчиков ПЧ */
DallasBus.hdallas = &hdallas1; DallasBus.hdallas = &hdallas1;
DallasBus.hdallas->onewire = &OW; 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.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.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.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.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.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.module6, REG_PCH_NUMB_32|REG_PCH_DIODE_NUMB_1);
/* Поиск неизвестных сенсоров */ /* Поиск неизвестных сенсоров */
PCHSens_FindUnknownSensors(&DallasBus); 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) if(PCHSens_GetSensorByLocation(pchsens, (PCHSens_LocationTypeDef)MB_DATA.HoldRegs.InitStruct.Location, &sensor) != HAL_OK)
return; return;
uint64_t connectROM = 0; uint64_t connectROM = 0;
connectROM = ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[0]))<<48; connectROM = ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[0])))<<48;
connectROM |= ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[1]))<<32; connectROM |= ((uint64_t)(__REV16(MB_DATA.HoldRegs.InitStruct.ROM[1])))<<32;
connectROM |= ((uint64_t)(MB_DATA.HoldRegs.InitStruct.ROM[2]))<<16; connectROM |= ((uint64_t)(__REV16(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[3])));
if(PCHSens_InitNewSensor(&hdallas1, sensor, connectROM) == HAL_OK) if(PCHSens_InitNewSensor(&hdallas1, sensor, connectROM) == HAL_OK)
{ {
PYModule_FillResponse(sensor, STATUS_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) if(PCHSens_GetSensorByLocation(pchsens, (PCHSens_LocationTypeDef)MB_DATA.HoldRegs.InitStruct.Location, &sensor) != HAL_OK)
return; return;
if(PCHSens_UndefineSensor(sensor) != HAL_OK) if(PCHSens_UndefineSensor(sensor) == HAL_OK)
{ {
PYModule_FillResponse(sensor, STATUS_OK); PYModule_FillResponse(sensor, STATUS_OK);
} }

View File

@@ -199,7 +199,7 @@ HAL_StatusTypeDef PCHSens_FindUnknownSensors(PCHSens_DallasBusHandle *hbus)
for(int i = 0; i < hbus->hdallas->onewire->RomCnt; i++) 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); result = DS18B20_ReadScratchpad(hbus->hdallas->onewire, (uint8_t *)&hbus->hdallas->ds_devices->DevAddr[i], (uint8_t *)&hbus->hdallas->scratchpad);
if(result != HAL_OK) if(result != HAL_OK)
__NOP(); __NOP();

View File

@@ -153,7 +153,56 @@
<Name>(105=-1,-1,-1,-1,0)</Name> <Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </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> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>
@@ -168,92 +217,52 @@
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>module2</ItemText> <ItemText>ROM</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>3</count> <count>3</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>*(volatile uint32_t *)0xE0001000</ItemText> <ItemText>hmodbus1,0x10</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>4</count> <count>4</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>scratchpad</ItemText> <ItemText>RS_Buffer,0x10</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>5</count> <count>5</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>ROM</ItemText> <ItemText>mb_location</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>6</count> <count>6</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>start,0x0A</ItemText> <ItemText>*(uint64_t *)(ROM)</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>7</count> <count>7</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>end,0x0A</ItemText> <ItemText>*ROM</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>8</count> <count>8</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>(uint16_t)htim1.Instance-&gt;CNT-start,0x0A</ItemText> <ItemText>sensor-&gt;sensROM</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>9</count> <count>9</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>end-start,0x0A</ItemText> <ItemText>sensor</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>10</count> <count>10</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt;(end-start)),0x0A</ItemText> <ItemText>(uint64_t *)(ROM)</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>11</count> <count>11</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>((uint16_t)htim1.Instance-&gt;CNT-start &lt; us*tim_1us_period),0x0A</ItemText> <ItemText>(uint32_t *)(0x20000076)</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>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<WatchWindow2> <WatchWindow2>
@@ -265,24 +274,22 @@
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>2</WinNumber> <WinNumber>2</WinNumber>
<ItemText>DS,0x10</ItemText> <ItemText>MB_DATA,0x10</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>2</WinNumber> <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> <ItemText>hmodbus1</ItemText>
</Ww> </Ww>
</WatchWindow2> </WatchWindow2>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x20000058-2</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>