Команда записи младшего или старшего байта.

Стартовая страница Форумы Взаимодействие с устройствами Команда записи младшего или старшего байта.

Просмотр 14 сообщений - с 31 по 44 (из 44 всего)
  • Автор
    Сообщения
  • #24437
    manjey73
    Участник

    В принципе если сделать Бинарную команду и как строку то формула может быть одна на все ваши варианты.

    #24442
    Yakov_4e
    Участник

    Одна формула это было бы отлично. И запись младшего и старшего байтов в dec, через разделитель. Например 01.01, или 23.44.

    #24443
    manjey73
    Участник

    вы формулой можете проверять наличие . или ; и вырезать
    То есть если вы команду будете отправлять строкой то
    yurstring.Split(«.») превратить вашу строку в массив строк из 2-х ячеек
    Далее парсите эти числа в массиве и как надо формируйте число.

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

    Для записи Holding Register бинарная команда не требуется, достаточно стандартной.
    В канале управления будет формула MyFunc(Val(101), Val(102))
    где MyFunc — это функция, которую нужно разработать, а 101 и 102 — номера каналов, в которых хранятся значения. Либо для фиксированных значений MyFunc(1, 2), например.

    В таблице Формулы:

    public double MyFunc(double x, double y)
    {
    // здесь Ваш код...
    }
    #24451
    Mikhail
    Модератор

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

    #24584
    Yakov_4e
    Участник

    Mikhail, manjey73, возможно Вы меня не так поняли. Значения для записи не должны вычисляться скадой. Оператор решает что, когда и в какой регистр записать. Мне нужна лишь правильная формула для записи значения только младшего или старшего байта одного регистра, либо значений двух байтов одного регистра сразу. Но, к сожалению, я не программист и не знаю как составить правильную формулу. Поэтому я задал здесь этот вопрос.

    #24585
    manjey73
    Участник

    Yakov_4e еще раз, параметры времени и параметры уставок числовых значений это разные вещи.

    Например у вас время 23:44 — для этого нужна одна формула чтобы превратить в 0х172С
    Или например вам надо ввести просто в один байт 34 а в другой 45 и чтобы это для регистра уже было в HEХ 0x3445 или 0х4534 записалось в регистр. Это будет другая формула…

    Формула нужна не для вычисления Скадой, а для правильного приведения перед записью в прибор.
    То есть Оператор просто знает что ему нужно ввести время 14:00 он так и вводит
    Или знает что надо ввести в старший байт 0х34 а в младший 0х45 он так и вводит 3445
    Далее уже приведение с учетом как располагаются регистры.

    Чтобы понять как делать формулу, надо точно понимать, что требуется.
    Это можно сделать двумя формулами, а можно одной. Например строка ввода всегда будет выглядеть почти одинаково, например 34:45b — это ввод байт
    а 23:44t это ввод времени.
    А дальше просто работа со строками, получения чисел в массив, соответствующее приведение и отправка в прибор одним регистром.
    Можно в плоть до того, что вводить 45b или 45B — для младшего и старшего байтов.

    з.ы. Вот говорил Михаилу, подумайте как в окно ввода команды добавить Комментарии ДО ввода команды 🙂 Полезная штука очень, а то так инструкцию на монитор клеить придется 🙂

    #24586
    manjey73
    Участник

    Тут смысл в том, чтобы оператор не сидел с запущенным калькулятором в режиме Программист и не переводил числа времени в hex вид перед посылкой команды

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

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

    public double MergeBytes()
    {
      UInt16 x = (UInt16)Val(101);
      UInt16 y = (UInt16)CmdVal & 0x00FF;
      return x | y;
    }

    Затем используйте эту формулу в канале управления.

    #24718
    Yakov_4e
    Участник

    Добрый день. Михаил, добавил Вашу формулу в раздел «Формулы». Веб сервер не запускается.

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

    Добрый день!
    Смотрите ошибки в журнале Сервера и исправляйте.
    Как я написал выше, формула не проверялась — в бесплатную поддержку это не входит.

    #24721
    Yakov_4e
    Участник

    Ориентировочная стоимость формулы?

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

    По стоимости напишите вопрос на емаил. Но мы можем и здесь вместе посмотреть ошибки из журнала Сервера.

    #24818
    Yakov_4e
    Участник

    Добрый день. Михаил, отправил запрос на info@.

    • Этот ответ был изменен 1 год, 6 месяцев назад от Yakov_4e.
Просмотр 14 сообщений - с 31 по 44 (из 44 всего)
  • Вы должны авторизироваться для ответа в этой теме.