Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Сцепить каналы в строку
- В этой теме 75 ответов, 6 участников, последнее обновление 4 месяца, 3 недели назад сделано
Mihail.D..
-
АвторСообщения
-
23.04.2018 в 10:42 #9009
to0freakУчастникВы могли бы обобщить, как Вам было бы удобно настраивать? Чтобы можно было учесть на будущее.
Идеальный вариант — добавить поддержку строк с «тегами», т.е. строка вида «<Cnl(1)> (<Cnl(2)>)» в результате отобразит «20 (22)». Либо как вариант добавить к суффиксам (то что сейчас называется размерность), ещё и префиксы, в которых можно будет вписывать, например, название величины канала без использования дополнительной статичной надписи.
24.05.2025 в 21:34 #38486petuhovdmitry
УчастникДоброго!
Много ли воды утекло с тех пор?Вот к чему вопрос. Я пытаюсь выстроить внешний мониторинг процесса работы системы валидации кодов маркировки на линии фасовки продукции. Для этого, хорошо бы, получать складывать на хранение значения полученных кодов маркировки с камеры техзрения. С нее я умею по модбасу получать код маркировки длиной 31+ ASCII-символов (16+ даухбайтовых ячеек из регистра хранения). Но, далее, мне понадобится собрать этот код из 16+ двухбайтовых каналов, сцепить и записать в расчетный канал. Понятное дело, что для этого в скаде, нужно будет настроить хренения в PostgreSQL. Сие возможно нынче?
24.05.2025 в 21:39 #38487
manjey73УчастникВозможно сделать массив — Тип данных ASCII, Длина данных 8 или больше, Формат Строка
8, потому что 2 регистра можно закинуть в один канал, то есть вам просто настроить uint 4 байта в шаблоне.24.05.2025 в 21:40 #38488
manjey73Участникформулами нынче многое можно.
24.05.2025 в 21:52 #38489
manjey73УчастникКстати если в регистрах строго символы Ascii, то можно и по 4 регистра сразу настроить в шаблоне
24.05.2025 в 21:57 #38490petuhovdmitry
УчастникPLC Delta AS228T данные типа STRING хранит в двухбайтовых регистрах.
Как я их запихну?24.05.2025 в 22:14 #38491
manjey73Участниксколько регистров считать выбирает не ПЛК, а мастер. например у вас начало с 100 регистра (сами там смотрите с какого).
Читаете с 100 тип double (8 байт), потом со 104 еще 8 байт и так далее, сколько надо.Потом делаете расчетный канал с длиной 8, 9, 10 сколько требуется. Ну и написать соответствующую формулу, которая из считанных регистров сделает строку.
-
Ответ изменён 5 месяцев, 2 недели назад пользователем
manjey73.
24.05.2025 в 22:16 #38493
manjey73Участникз.ы. давно говорю, не хватает в драйвере всех этих процедур 🙂
24.05.2025 в 22:18 #38494
manjey73УчастникСделайте шаблон чтения вашей строки, читая как double по 8 байт сразу.
И лог запроса и ответа сюда.24.05.2025 в 22:25 #38495petuhovdmitry
Участник>> с 100 регистра (сами там смотрите с какого)
Понял, попробую.>> Потом делаете расчетный канал с длиной 8, 9, 10 сколько требуется.
Тут странно. Я создал расчетный канал ascii string. Размер его по-умолчанию, как я поняд — 8 символов.
Запихнул туда (вход): Val(43).ToString() + Val(44).ToString() + Val(45).ToString() + Val(46).ToString()и скада мне в табличке отобразила только 8 символов. если я в диълине данных канала укажу какое нибудь сисло, например двойку, то скада в табличке дважды отобразит мне результат работы входной формулы 🙂
24.05.2025 в 22:26 #38496petuhovdmitry
УчастникКстсти, я могу вместо Val(43) указать Val(код_тэга)?
-
Ответ изменён 5 месяцев, 2 недели назад пользователем
petuhovdmitry.
24.05.2025 в 22:30 #38498
manjey73УчастникНет, не можете. Посмотрите формулы, поймете.
Длина данных = 8 + Scada создаст массив каналов, если выведете в таблицу, вы это увидите.Чтобы потом работать с массивом в формулах, надо учитывать индекс. Смотрите допустимые выражения в скриптах — ArrIdx придется использовать
-
Ответ изменён 5 месяцев, 2 недели назад пользователем
manjey73.
24.05.2025 в 22:34 #38500
manjey73УчастникКод тега может быть одинаковым в рамках разных устройств, и должен быть уникальным в одном устройстве.
Как интересно система поймет, какой именно код тега применять? к какому из устройств?Так что оперируем номерами
24.05.2025 в 23:06 #38501petuhovdmitry
Участник>> Нет, не можете. Посмотрите формулы, поймете.
>> Длина данных = 8 + Scada создаст массив каналовЭто значит, что я в принципе в табличных представлениях не смогу, например, отобразить (и хранить изменения) GTIN продукта (14 цифр), не говоря уж о Коде маркировки 31+ символов, номер партии, который может быть 8+ символов, не раскладывая это по восьмибайтным кускам?
24.05.2025 в 23:26 #38502petuhovdmitry
Участник> Сделайте шаблон чтения вашей строки,
> читая как double по 8 байт сразу.
> И лог запроса и ответа сюда.
Пришлось сделать ulong, потому, что с double ничего не приходилоRequest element group «hr_50-54»
Send (12): 01 4C 00 00 00 06 01 03 00 32 00 05
Receive (7/7): 01 4C 00 00 00 0D 01
Receive (12/12): 03 0A 00 01 00 00 00 05 00 72 53 4E
OKи при этом:
| **************************** hr_50-54 ***************************** |
+——+—————+—————+———————+———+
| 61 | elem50-53 | elem50-53 | 281 474 977 038 450 | |
+——+—————+—————+———————+———+
| 62 | elem54-54 | elem54-54 | 21 326 | |
+——+—————+—————+———————+———+ -
Ответ изменён 5 месяцев, 2 недели назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.