Стартовая страница › Форумы › Понять, как работает ПО › Получение данных через HTTP запрос
- В этой теме 19 ответов, 4 участника, последнее обновление 2 недели, 4 дня назад сделано
Mikhail.
-
АвторСообщения
-
24.02.2026 в 14:30 #42111
Politen
УчастникДобрый день.
Требуется получить данные с устройства через http-запросы. Используя DrvHttpNotif мне удалось сформировать запрос, чтоб устройство ответило. Проблема в том, что данные содержащиеся в ответа не могу использовать. Возможно как то привязать эти данные к каналам?
Журнал линии:
«Отправка запроса:
http://10.10.4.150/WTEM.HTM
Ответ получен за 88 мс. Статус: 200 (OK)
Содержимое ответа:
30.5»24.02.2026 в 15:14 #42112
a80808УчастникУвы, HttpNotif только для отправки. Разве что в файл писать а потом разбирать его скриптом…
Сам с этим мучался24.02.2026 в 15:25 #42115
MikhailМодераторДобрый день!
Универсального драйвера, который бы разбирал ответы по HTTP, на данный момент не существует. Необходимо либо разработать драйвер под конкретное API, либо разработать универсальный драйвер.24.02.2026 в 16:05 #42120Politen
УчастникСпасибо. Изучив код, пришел к выводу что нужно писать свой драйвер.
24.02.2026 в 16:17 #42121
manjey73Участникя тоже писал свой. На базе HttpNotif
Универсальный вряд ли получится написать, разве что ответы простые, а если завернутые там в json или еще во что-то то скорее всего не получится
в принципе, если ответом всегда является строка, то может быть и получится что-то универсальное
-
Ответ изменён 1 месяц, 2 недели назад пользователем
manjey73.
19.03.2026 в 11:15 #42560Politen
УчастникДрайвер написал. Но появилась следующая проблема. Часть данных, которое передает устройство в ответе — текст:»Нагрев включен». В драйвере не получается передать это значение. DeviceData.SetUnicode(Code, text,1) — ни чего не записывает. Есть какие-то ограничения по текстовым значениям (может надо делить на 8 символов)?
19.03.2026 в 11:43 #42561
manjey73УчастникНужно, чтобы формат канала был создан как Текст Unicode (прямо из драйвера можно указывать, в том числе и при создании через Мастер).
И скорее всего вам надо это в массив загонять, так как на один канал у вас 4 символа Unicode19.03.2026 в 11:45 #42562
manjey73Участникelse if (channel.Value.ValType.ToLower() == "string") { try { dataLen = int.Parse(channel.Value.Length); format = FormatCode.String; dataType = (int)TagDataType.ASCII; } catch { } }это во View части.
Указывается длина данных (хм, странно что у меня тут не делится на 8 🙂 )19.03.2026 в 11:46 #42563
manjey73УчастникЕсли что, то перед тем как
string format = FormatCode.N2; int cnlTypeId = CnlTypeID.Input; int? dataType = null; int? dataLen = null;19.03.2026 в 11:49 #42564
manjey73УчастникА когда в Logic создаете
DeviceTag deviceTag = new DeviceTag();То там у меня
else if (type == "string") { if (tags.StrLen != 0) { deviceTag.Format = TagFormat.String; deviceTag.DataType = TagDataType.ASCII; deviceTag.SetDataLen(tags.StrLen); } }19.03.2026 в 11:50 #42565
manjey73Участникхм, тоже странно, тоже не делю на 8 ? 🙂
видимо ядро само это делает, или я еще где-то делаю, быстро не найду
-
Ответ изменён 3 недели, 4 дня назад пользователем
manjey73.
19.03.2026 в 11:56 #42567
manjey73Участникпохоже я где-то в файле шаблона задавал длину, определив самостоятельно по полученной строке
19.03.2026 в 13:09 #42570Politen
УчастникУ меня в View эти данные не нужны.
В Logic в void Session() и идет запрос и получение данных от оборудования (в журнале линии они отображаются:
Содержимое ответа:
Нагрев включен
Нет потока
23.9
10.0
после обработки в журнал устройства я получаю:
Текущие данные
+——-+—————+———————————+———-+——-+
| Номер | Код | Наименование | Значение | Канал |
+——-+—————+———————————+———-+——-+
| 1 | HeatingSt | Статус системы нагрева | — | |
+——-+—————+———————————+———-+——-+
| 2 | FiltrationSt | Статус системы фильтрации | — | |
+——-+—————+———————————+———-+——-+
| 3 | Twater | Температура воды [гр.С] | 23,800 | |
+——-+—————+———————————+———-+——-+
| 4 | TSPwater | Уставка температуры воды [гр.С] | 10,000 | |
+——-+—————+———————————+———-+——-+
| 5 | Error | Общее сообщение об ошибке | 1,000 | |
+——-+—————+———————————+———-+——-+
значение первых двух параметров пустые. Вопрос в том, вообще возможно в значение передать полученный текст?19.03.2026 в 14:25 #42571
manjey73УчастникДа, надо при создании тегов внутри Logic указать, что это строковые данные.
я же выше код привел, вы же знаете какие именно каналы у вас строковые, вот им и надо назначитьdeviceTag.Format = TagFormat.String; deviceTag.DataType = TagDataType.ASCII; deviceTag.SetDataLen(tags.StrLen);tags.StrLen — это скорее всего длина данных канала, например 5 = 20 символов Unicode, ну и соответственно вместо ASCII у вас будет Unicode
19.03.2026 в 14:26 #42572
manjey73УчастникТам, где вы в Logic создаете Twater, TSPwater и так далее надо явно указать, какие они будут.
Иначе Коммуникатор все в double по умолчанию преобразовывает.Во View нужно подобное, чтобы создавать каналы мастером создания каналов.
-
Ответ изменён 3 недели, 4 дня назад пользователем
manjey73.
-
Ответ изменён 1 месяц, 2 недели назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.