Отправка набора байт через Модуль упр.

Стартовая страница Форумы Понять, как работает ПО Формулы Отправка набора байт через Модуль упр.

Просмотр 15 сообщений - с 1 по 15 (из 24 всего)
  • Автор
    Сообщения
  • #29713
    manjey73
    Участник

    есть набор 8-ми байт HEX
    11 22 33 44 55 66 77 88 — если задать фиксировано в модуле автоуправления проблем нет.

    Как отправить набор байт, где 44 это изменяемый байт в настройках Scada ?

    Собственно как сделать канал с фиксированным набором байт, среди которых один надо менять — Уставка параметра ?

    #29714
    manjey73
    Участник

    Собственно отправка должна происходить так же через Модуль но не за счет изменения уставки а просто.

    #29715
    manjey73
    Участник

    Собственно не увидел, как в Модуле автоуправления в качестве значения команды отправить данные расчетного канала ?

    Как это реализовать ?

    #29716
    manjey73
    Участник

    Банальный вопрос, при вводе в строке HEX будет работать {n} ?

    То есть будет преобразовываться значение канала n в byte ?

    • Ответ изменён 2 года, 9 месяцев назад пользователем manjey73.
    #29718
    Mikhail
    Модератор

    В свойствах команды нужно указать канал, через который будет отправляться команда. Затем в формуле канала заменить байт.
    Формулы типа {n} и т.п. для HEX не будут работать.

    #29719
    manjey73
    Участник

    в свойствах команды применяется канал, который связан драйвером, а данные надо отправить из расчетного канала, а не связанного с драйвером.

    #29720
    manjey73
    Участник

    Ну представьте, что это Modbus драйвер — значение получаем из регистра, а при отправке должны подменить значение из другого расчетного канала массивом байт в нужной последовательности. Как он будет сформирован уже дело десятое.

    з.ы. плохо, что в МАУ в строке HEX не действует {n} с соответствующим преобразованиями до байта, было бы куда проще и быстрее.

    #29721
    Mikhail
    Модератор

    в свойствах команды применяется канал, который связан драйвером, а данные надо отправить из расчетного канала, а не связанного с драйвером

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

    #29724
    manjey73
    Участник

    имеем массив байт, который преобразуем в double и возвращаем в канал
    public double MassByte()
    {
    byte[] kmass = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x88 };
    return BitConverter.ToDouble(kmass, 0);
    }

    это очень маленькое число
    -4,051953737621203E-270

    Но, почему я не могу его отобразить как HEX 16, добавил в форматы HEX c X16
    выставил данный формат для отображения и получаю в таблице

    0000000000000000h

    И в чем подвох ?

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

    немного для понимания. Я хочу переменную видеть в HEX исполнении.
    и если в канале double, представленный массивом 00 00 00 00 00 20 01 88
    или обратная последовательность 88 01 20 00 00 00 00 00

    то в канале хотелось бы видеть 8801200000000000h или 0000000000200188h
    а не сплошные нули.
    При этом в команде требуется вводить нормальное число, а не 16-чное.

    Такое возможно ?

    #29752
    Mikhail
    Модератор

    Потому что HEX отображает целую часть числа. Попробуйте в данном случае использовать тип данных канала Integer (Int64 на самом деле).

    #29755
    manjey73
    Участник

    очень странно, почему это HEX отображает только целую часть числа, а не набор байт канала, будь то double или integer, да хоть что там будет в 8-мь байт записано.

    Тут еще немного другая проблема, выставляя HEX, и команда становится как ввод HEX числа, а мне надо чтобы команда продолжала записывать обычное число, так как не предусмотрено ввода 1A, 1B, 2C и так далее.

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

    Каким образом происходит отображение HEX? в обратную сторону?

    попробовал поставить Integer и формат HEX

    входная формула для примера
    public long SetMass()
    {
    byte[] m = new byte[] {0x88, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 };
    long ml = BitConverter.ToInt64(m, 0);
    return ml;
    }

    Показывает 200188h — если я этот канал отправлю в устройство, передастся так, как я задал массив байт?
    Ну, команда при этом опять 16-чное число. Есть возможность изменить поведение на ввод простого числа?

    #29758
    manjey73
    Участник

    з.ы. с командой разобрался.
    Если не задавать формат команды, то берется из Формата.
    Если задать формат команды, будет применен он.

    с Integer вариант подойдет, надо будет только формулу правильно сделать.
    Спасибо.

    последовательность отправки понять только, если я это значение возьму другим каналом…
    В канале все равно ведь хранится double или при параметре Integer уже хранится long ?

    #29759
    manjey73
    Участник

    Не могу понять что не так с формулами.
    Например Val() при выставленном типе канала Integer ?
    Аналогично SetVal

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