Стартовая страница › Форумы › Разработка и интеграция › Тип канала и тип команды V6
- В этой теме 19 ответов, 3 участника, последнее обновление 1 год, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
20.04.2022 в 17:42 #23166manjey73Участник
Вот опять ступор, тип канала должен быть Double но при этом тип команды должен быть бинарным в виде HEX строки
Не пойму как включить ?
20.04.2022 в 18:38 #23173MikhailМодераторВ этом случае всё же потребуется отдельный канал типа «Выходной». У него может быть тот же код тега.
20.04.2022 в 21:44 #23179manjey73УчастникТип канала OUTPUT в принципе и так, но при вызове окна команды я могу вводить только цифры, даже если переключаю тип канала на ASCII.
Что делаю не так?
И опять же, а если канал INPUT/OUTPUT но нужно показывать числовое значение, а в команде отправлять строку или строку HEХ ?
Вот что-то данный момент вы как-то упустили, объединяя входные каналы и каналы управления
- Этот ответ был изменен 1 год, 12 месяцев назад от manjey73.
21.04.2022 в 14:11 #23189manjey73УчастникЧто-то какие-то недоработки в системе…
Канал Output, Тип данных — Double, Формат данных — Hexadecimal 8 digits
При подаче команды появляется окно в котором предлагается ввести
Значение команды (16-ричное число)
Но отправляется стандартная команда, то есть некое число, хоть 1, что приводит к выполнению другого кода в драйвере.
if (!double.IsNaN(cmd.CmdVal)) — а именно этого участка, а должно было бы выполнить этот участок
if (cmd.CmdData != null && cmd.CmdData.Length != 0)
Так почему так, если окно команды в WEB предлагает ввести 16-ричное число, а действия выполняются другие?
Если непосредственно в Коммуникаторе выбрать Команда — 16-чное число, то все корректно, выполняется именно второй участок кода.
Это отправка через Коммуникатор — Команда
Отправка команды SyncTime4min Отправка (8): 52 03 0D 00 10 14 46 CA Приём (4/4): 52 00 3C D0 OK OK: Команда SyncTime4min выполнена успешно Получение Бинарной команды
Недавние команды +---------------------+-----------------------+ | Время | Описание | +---------------------+-----------------------+ | 21.04.2022 14:01:57 | Code=100, Val=276,000 | +---------------------+-----------------------+ | 21.04.2022 14:10:15 | Code=100, Data=001014 | +---------------------+-----------------------+
Тут в первом случае ввод команды в hex через отправку в WEB,
Во втором случае отправка команды через Коммуникатор — Команда- Этот ответ был изменен 1 год, 12 месяцев назад от manjey73.
21.04.2022 в 14:13 #23191manjey73УчастникВот не продуман данный момент. как отображать и сохранять в базе и при этом как отправлять.
В 5-й версии было четкое разделение Стандартная/Бинарная, указываемое в БД, что делать теперь неясно.21.04.2022 в 15:59 #23193manjey73УчастникОбъясните, почему когда ставишь Формат Hexadecimal, останавливаешь и запускаешь WEB (рестарт не помогает, вроде было где-то об этом), при вызове команды в окне указано
Значение команды (16-ричное число) но по факту сервер отправляет Стандартную команду а не набор байт ?????21.04.2022 в 17:09 #23194manjey73УчастникУпс, кто бы мог подумать…
Отправка команды SyncTime4min Отправка (8): 52 03 0D 00 55 16 F5 9B Приём (4/4): 52 04 3D 13 Ошибка: Внутренние часы корректировались Ошибка: Команда SyncTime4min не выполнена Получение Бинарной команды
При выборе Формата — String появляется выбор в окне
Данные команды
Строка / 16-ричные данныеИ только тогда можно отправить действительно набор 16-ричных данных.
В идеале должно быть однозначное определение Число, Строка, 16-ричные данные
А не что-то непонятное в виде преобразования HEX в Double, что полностью сбивает с толку.21.04.2022 в 17:12 #23195manjey73УчастникИ хотелось бы пояснений по поводу Форматов — Есть Custom format но как этим управлять непонятно.
Что здесь является Форматом и что здесь является Кодом ?
21.04.2022 в 18:33 #23196manjey73УчастникЕще момент заметил.
Ячейка «Тип данных» вообще для чего? она никак не участвует в отображении данных, так как за это отвечает ячейка «Формат» когда мы в ней выбираем Hexadecimal например.
С которым тоже что-то непонятное, так как у меняю Hex 8 digits на просто HEX а отображение как было 80000000h так и осталось21.04.2022 в 19:28 #23201MikhailМодератор16-ричное число — это и есть обычное целое число, записанное цифрами 0..9A..F, а не массив байт.
Тип данных существенно влияет на кодирование данных. Например тип double не сможет сохранить такое же большое целое число как Int64. Если поставить тип Int64 для даты и времени, то можно достичь большей точности как в Unix time (но тогда в драйвере тег должен быть соответствующего типа).
Hex 8 digits добавит нули слева, если необходимо.21.04.2022 в 19:31 #23202MikhailМодераторCustom format — это просто строчка в таблице, чтобы идентификаторы своих форматов делали достаточно большими, избегая коллизий со стандартными форматами.
Вы можете добавить свои строки ниже, форматирование применяется по правилам C# метода ToString(format)
Для дат и чисел допустимые форматы разные, их нужно посмотреть в документации .NET.21.04.2022 в 19:54 #23203manjey73УчастникНо при этом мы все равно ограничены 8-мью байтами?
Есть возможность доработать ядро так, чтобы однозначно можно было идентифицировать окно команд в WEB ?
1. Команда с выбором типа отправки Число, Hex Число (раз появился такой вариант), Строка, Hex строка
2. Только один из перечисленных типов
3. Как вариант выбор по маскеКогда я говорил о подсказке в окне Команд WEB имел ввиду вывод текста туда не в процессе ошибки, а именно текстом в дополнение к этому
Канал: [232] SyncTime4min Объект: [1] Enterprise Устройство: [2] Mercury23x_82 Данные команды Строка 16-ричные данные
То есть указание, что и как вводить оператору. Например «Введите число в диапазоне 1 — 100 в процентах» ну и так далее.
Например можно сделать в Вспомогательной таблице и ссылаться на нее в канале. Если ссылки нет, то ничего не выводить.22.04.2022 в 10:01 #23210manjey73УчастникФорматы времени допускают определения в каком виде передавать время или время передается в виде строки согласно локальным установкам ПК ?
А то мы вчера с @Romiros разбирались со строчкой 0x323032322D30342D….
2022-04- и так далее… Но ведь передать время в виде строки на любом ПК можно в том виде, в каком его определишь сам, например вот в таком
ddd.dd.MM.yy
или в такомyyyy-MM-dd,HH:mm:ss
Или мы ограничены примитивами G, T, t и так далее ?
22.04.2022 в 20:36 #23211a80808Участникостанавливаешь и запускаешь WEB (рестарт не помогает, вроде было где-то об этом),
У меня такое на Win7, на Win10 вроде нормально перезапускалось. А на Win7 так и есть — захожу в «Статус экземпляра» и последовательно жму кнопки на WEB «Стоп» — «Старт» ну и Ctrl+F5 на браузере…
22.04.2022 в 21:56 #23212 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.