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

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

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

    Convert.ToUInt16(Cmd)/256 и Convert.ToUInt16(Cmd)%256 — так же, пишет младший байт и обнуляет старший. При этом в шаблоне — множественная команда, ushort (2байта), элементов — 2, порядок — 01.

    #24408
    manjey73
    Участник

    з.ы. честно бы подумал о формуле с преобразованием времени, можно ввести число 2344 а формула преобразует в 0х172С в виде UInt16

    Но для этого придется формулу делать в Справочнике зато вводить проще. Можно даже сделать ввод в таком виде только выбрать строковой ввод 23:44

    #24409
    manjey73
    Участник

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

    Если делать множественную, то эти две формулы надо совмещать и складывать в одной формуле

    #24411
    manjey73
    Участник

    (Convert.ToUInt16(Cmd)/256) + (Convert.ToUInt16(Cmd)%256)

    И оставить множественную команду

    или даже так Convert.ToUInt16(Cmd)/256 + Convert.ToUInt16(Cmd)%256

    • Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
    #24413
    manjey73
    Участник

    Convert.ToUInt16(Cmd) а просто вот так работать не будет ? 🙂

    и вводим 2344

    не будет, там число что-то вроде 5932 по калькулятору

    • Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
    #24423
    Yakov_4e
    Участник

    (byte)(Convert.ToUInt16(Cmd)/256 >> 8) Так же…

    #24425
    Yakov_4e
    Участник

    Convert.ToUInt16(Cmd), ввожу 0101 команду, записывает — 1ч42м.

    #24426
    Yakov_4e
    Участник

    Шаблон менял на множественную команду временно, для проверки.

    #24427
    Yakov_4e
    Участник

    Добрый день. Алгоритма как такового нет.

    Желательно менять значение только одного из байтов одного из holding регистров.
    Либо записывать новые значения сразу двух байтов (например, время — «23:44»).

    Регистр с временем взят в качестве примера (удобнее проверять — на дисплее физически).
    В устройстве есть разные регистры — например управление вентилятором: Мл.б. — количество скоростей; Ст.б. — тип управления.

    #24428
    manjey73
    Участник

    з.ы. Время это не лучший вариант для сравнения на дисплее, если там скорости и тип управления, это совершенно разные сущности при преобразовании…

    Потому что 0x172C это число 5932 ну совсем не похоже на ввод времени 23:44

    • Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
    #24431
    manjey73
    Участник

    Вот введите вместо 0101 свое 5932 и посмотрите что получится

    #24432
    manjey73
    Участник

    Либо формула для ввода через строку, либо через HEX вариант.
    Для разных каналов свое. Для времени свое, для просто цифровых значений свое… Иначе никак

    #24433
    Yakov_4e
    Участник

    команда 5932, получаю 23:44 и на дисплее и в веб-таблице скады. (формула — Convert.ToUInt16(Cmd)).
    Таким образом: 23 — это 17, 44 — это 2с, но 172с — 5932.
    Не очень юзабельно) только с калькулятором…
    Попробую проверить это на других регистрах.

    #24434
    Yakov_4e
    Участник

    Регистр вентилятора: если я хочу записать значение 2 и в младший и в старший байт, то нужно отправить 514 (0202 hex). Проверил, физически так и есть.

    #24436
    manjey73
    Участник

    Вот вам надо тогда канал настроить как Бинарный для команды, выбирать строку или HEX при вводе и в зависимости что у вас за регистры, просто запись 0202 (это можно как HEX вводить) или время делать соответствующие преобразования.

    Для времени строка 2344 формулой разбить и преобразовать строку в HEХ чтобы калькулятором не пользоваться.
    А для других вариантов просто HEX вводить

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