Сцепить каналы в строку

Просмотр 15 сообщений - с 16 по 30 (из 76 всего)
  • Автор
    Сообщения
  • #9009
    to0freak
    Участник

    Вы могли бы обобщить, как Вам было бы удобно настраивать? Чтобы можно было учесть на будущее.

    Идеальный вариант — добавить поддержку строк с «тегами», т.е. строка вида «<Cnl(1)> (<Cnl(2)>)» в результате отобразит «20 (22)». Либо как вариант добавить к суффиксам (то что сейчас называется размерность), ещё и префиксы, в которых можно будет вписывать, например, название величины канала без использования дополнительной статичной надписи.

    #38486
    petuhovdmitry
    Участник

    Доброго!
    Много ли воды утекло с тех пор?

    Вот к чему вопрос. Я пытаюсь выстроить внешний мониторинг процесса работы системы валидации кодов маркировки на линии фасовки продукции. Для этого, хорошо бы, получать складывать на хранение значения полученных кодов маркировки с камеры техзрения. С нее я умею по модбасу получать код маркировки длиной 31+ ASCII-символов (16+ даухбайтовых ячеек из регистра хранения). Но, далее, мне понадобится собрать этот код из 16+ двухбайтовых каналов, сцепить и записать в расчетный канал. Понятное дело, что для этого в скаде, нужно будет настроить хренения в PostgreSQL. Сие возможно нынче?

    #38487
    manjey73
    Участник

    Возможно сделать массив — Тип данных ASCII, Длина данных 8 или больше, Формат Строка
    8, потому что 2 регистра можно закинуть в один канал, то есть вам просто настроить uint 4 байта в шаблоне.

    #38488
    manjey73
    Участник

    формулами нынче многое можно.

    #38489
    manjey73
    Участник

    Кстати если в регистрах строго символы Ascii, то можно и по 4 регистра сразу настроить в шаблоне

    #38490
    petuhovdmitry
    Участник

    PLC Delta AS228T данные типа STRING хранит в двухбайтовых регистрах.
    Как я их запихну?

    #38491
    manjey73
    Участник

    сколько регистров считать выбирает не ПЛК, а мастер. например у вас начало с 100 регистра (сами там смотрите с какого).
    Читаете с 100 тип double (8 байт), потом со 104 еще 8 байт и так далее, сколько надо.

    Потом делаете расчетный канал с длиной 8, 9, 10 сколько требуется. Ну и написать соответствующую формулу, которая из считанных регистров сделает строку.

    • Ответ изменён 5 месяцев, 2 недели назад пользователем manjey73.
    #38493
    manjey73
    Участник

    з.ы. давно говорю, не хватает в драйвере всех этих процедур 🙂

    #38494
    manjey73
    Участник

    Сделайте шаблон чтения вашей строки, читая как double по 8 байт сразу.
    И лог запроса и ответа сюда.

    #38495
    petuhovdmitry
    Участник

    >> с 100 регистра (сами там смотрите с какого)
    Понял, попробую.

    >> Потом делаете расчетный канал с длиной 8, 9, 10 сколько требуется.
    Тут странно. Я создал расчетный канал ascii string. Размер его по-умолчанию, как я поняд — 8 символов.
    Запихнул туда (вход): Val(43).ToString() + Val(44).ToString() + Val(45).ToString() + Val(46).ToString()

    и скада мне в табличке отобразила только 8 символов. если я в диълине данных канала укажу какое нибудь сисло, например двойку, то скада в табличке дважды отобразит мне результат работы входной формулы 🙂

    #38496
    petuhovdmitry
    Участник

    Кстсти, я могу вместо Val(43) указать Val(код_тэга)?

    • Ответ изменён 5 месяцев, 2 недели назад пользователем petuhovdmitry.
    #38498
    manjey73
    Участник

    Нет, не можете. Посмотрите формулы, поймете.
    Длина данных = 8 + Scada создаст массив каналов, если выведете в таблицу, вы это увидите.

    Чтобы потом работать с массивом в формулах, надо учитывать индекс. Смотрите допустимые выражения в скриптах — ArrIdx придется использовать

    • Ответ изменён 5 месяцев, 2 недели назад пользователем manjey73.
    #38500
    manjey73
    Участник

    Код тега может быть одинаковым в рамках разных устройств, и должен быть уникальным в одном устройстве.
    Как интересно система поймет, какой именно код тега применять? к какому из устройств?

    Так что оперируем номерами

    #38501
    petuhovdmitry
    Участник

    >> Нет, не можете. Посмотрите формулы, поймете.
    >> Длина данных = 8 + Scada создаст массив каналов

    Это значит, что я в принципе в табличных представлениях не смогу, например, отобразить (и хранить изменения) GTIN продукта (14 цифр), не говоря уж о Коде маркировки 31+ символов, номер партии, который может быть 8+ символов, не раскладывая это по восьмибайтным кускам?

    #38502
    petuhovdmitry
    Участник

    > Сделайте шаблон чтения вашей строки,
    > читая как 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 | |
    +——+—————+—————+———————+———+

Просмотр 15 сообщений - с 16 по 30 (из 76 всего)
  • Для ответа в этой теме необходимо авторизоваться.