Стартовая страница › Форумы › Разработка и интеграция › Драйвер ODBC
- В этой теме 135 ответов, 7 участников, последнее обновление 1 месяц назад сделано
JurasskPark.
-
АвторСообщения
-
04.12.2024 в 16:52 #36013
OlegУчастникНаконец попробовал — спасибо!
Теперь с чтением проблемы определенные.
Драйвер зачем-то создает лишние каналы, по фото более наглядно)04.12.2024 в 16:54 #36014
manjey73УчастникЭто массивы, предполагаю для строковых переменных.
От этого не уйти если нужна вся строка а не только первые 8 байт строки.а, или чуть-чуть что-то не доделано. я вроде одной строкой выводил в лог устройства.
-
Ответ изменён 1 год, 6 месяцев назад пользователем
manjey73.
04.12.2024 в 17:03 #36016
JurasskParkУчастникСовершенно верно @manjey73 написал.
Это в предпоследней версии появилось, что когда вы указываете переменную Tag тип строковый, то указываете, сколько там будет максимально символов.
Соответственно, в системе под эти теги фиксируются теги, чтобы случайно не создать тег.А вы как-то придумали обход, как писать теги строковые. И наверное, сами делили в скрипте.
В итоге ваше технология делениям строки на теги, сошлась с моей.
Просто обычно самая большая проблема для обычных людей мутить со скриптами.
04.12.2024 в 19:46 #36017
manjey73УчастникВроде из самого драйвера можно задавать какой длины будет переменная. Тогда это в логе устройства выглядит одним тегом.
Например в дрв 61107 серийный номер с длиной 2. В логе устройства одна строка.-
Ответ изменён 1 год, 6 месяцев назад пользователем
manjey73.
04.12.2024 в 19:57 #36019
manjey73УчастникДругой пример, это драйвер Симулятора, где каждый элемент массива это свое значение.
В общем подхода два для разных случаев.На счёт скриптов там да, неудобно.
Дело в том, что одна и та же формула подставляется в каждый элемент массива.
Надо вычислять индекс массива и выполнять или не выполнять.
По идее, если индекс 0, то собираем весь массив во что нам надо, остальные побоку 😀-
Ответ изменён 1 год, 6 месяцев назад пользователем
manjey73.
05.12.2024 в 07:18 #36023
JurasskParkУчастникhttps://forum.rapidscada.ru/?topic=драйвер-odbc&paged=6#post-34877
Вот мой пост. Там даже скриншот есть. )
05.12.2024 в 09:48 #36024
manjey73Участник
Я вот об этом, если это строка как одно значение тега, зачем же ее так насиловать то?
Формула для версии 6 будет другая? ну это наверное меньшее из зол.Минусы — при неизвестной длине строки из ответа непонятно сколько задавать длину. Хотя этот же минус если вы разрываете строку на отдельные элементы массива и теги в том числе.
Если это блок данных, по принципу драйвера Симулятора — то да, надо создавать несколько тегов.
Если это строка — зачем?
Не, ну в качестве варианта предположим, но в целом зачем? 🙂05.12.2024 в 09:51 #36025
manjey73Участникз.ы. в очередной раз не понимаю стойкое нежелание Михаила сделать строковую БД, чтобы вот не было вот этих вот сколько надо задать элементов, как их потом обрабатывать и т.д. 🙂
Учитывая что в БД в канале и так есть вся инфа, что этот тег Строка ASCII или Unicode и то, что это самое главное СТРОКА. 🙂
05.12.2024 в 09:57 #36026
JurasskParkУчастникЧтобы никто не забыл и не занял пустое номер канала(тега), который физически не сохраняется при таком подходе.
А там при импорте тегов из коммуникатора в базу конфигурации создаются физически параметры и администратор на их месте не создаст новый тег.Михаил объяснял, что для это придется создать новый рядом элемент, который будет занимать место и память.
А это быстродействие.Я бы для таких вещей придумал бы просто новый тип БД, как для Сигнализации авари и событий. И у тега(канала) в конфигурации в Маске архива выбирали строковый архив.
Но может такой архив можно сделать самостоятельно. Подкладывать ему. А вот как веб научить оттуда тянуть данные — уже вопрос. )
05.12.2024 в 10:11 #36027
manjey73Участникда нет там вопросов, недоделки только 🙂
есть канал 100, есть его длина 3 (например)
Когда Администратор добавляет следующий канал, он добавляется с номером 101 — вот почему Администратор не смотрит, что у предыдущего канала длина задана другая?
Это чистой воды недоработка. Сам так постоянно нарываюсь.Опять же — есть канал 100 с длиной 3 и это СТРОКА. Учитывая, что в БД мы можем делать нумерацию с разрывами 100-150, 200-250 и для БД это нормально, есть id канала в базе.
То почему тот же Администратор, WEB, Сервер, зная, что канал СТРОКА тут же не могут обратиться с строковой БД, где будут непосредственно строки с каналами 100 и 200 например ?
То же со Временем.
Вполне можно было выделить Строки и Время в отдельные БД с теми же названиями + префикс даже на этапе простого создания архива.-
Ответ изменён 1 год, 6 месяцев назад пользователем
manjey73.
23.12.2024 в 22:34 #36258
JurasskParkУчастникhttps://rutube.ru/video/private/b07143ccd2366be0854bbb1d045a5652/?p=KL2yEPhLWJDdW1NK5vSJ9A
Вообщем, я исправил всё про что говорили, давно бы опубликовал… НО!!!
При попытке отправить команды без кода команды, валится ошибка, но команда выполняется.
Решил посмотреть как в DrvDbImport, а там отправка команды только через код команды.
Смотрю другой драйвер./// <summary> /// Finds a command configuration by command code or number. /// </summary> private bool FindCommandConfig(TeleCommand cmd, out DbCommand dbCommand) { if (dataSource.ExportCommandsCode != null && !string.IsNullOrEmpty(cmd.CmdCode) && dataSource.ExportCommandsCode.TryGetValue(cmd.CmdCode, out dbCommand)) { return true; } if (dataSource.ExportCommandsNum != null && cmd.CmdNum > 0 && dataSource.ExportCommandsNum.TryGetValue(cmd.CmdNum, out dbCommand)) { return true; } dbCommand = null; return false; }В итоге я сошёл с ума и не понимаю, почему команда без кода тега не выполняется. Думаю забить на это уже… 🙁
P.S. кому музыка в ролике не нравится, можете выключить звук. 🙂
23.12.2024 в 23:14 #36259
manjey73УчастникТам вроде проверку как-то делать надо, по которой определяется номер или код.
23.12.2024 в 23:16 #36260
JurasskParkУчастникТак я ее делаю. FindCommandConfig.
Вопрос почему самому SQL серверу не нравится такая команда…23.12.2024 в 23:24 #36261
manjey73УчастникSendCommand(TeleCommand cmd)
cmd.CmdNum — собственно номер команды
cmd.CmdCode != «» — можно проверить, что код команды пустой.23.12.2024 в 23:32 #36262
JurasskParkУчастникТак команда находиться.
Вопрос не в нахождении, а в выполнении.
https://github.com/JurasskPark/RapidScada_v6/blob/05f3ac4e2474680d70d9ac3fbeb29baf85ad9ae6/OpenDrivers/DrvDbImportPlus_v6/DrvDbImportPlus.Logic/DevDbImportPlusLogic.cs#L819Я думаю проблема в while (RequestNeeded(ref tryNum))
Поиосwhile (RequestNeeded(ref tryNum)) что она возвращает tryNum через RequestNeeded , а я не понимаю что это такое. ))) -
Ответ изменён 1 год, 6 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.
