Стартовая страница › Форумы › Взаимодействие с устройствами › Команда записи младшего или старшего байта.
- В этой теме 43 ответа, 3 участника, последнее обновление 1 год, 7 месяцев назад сделано Yakov_4e.
-
АвторСообщения
-
15.08.2022 в 09:32 #24407Yakov_4eУчастник
Convert.ToUInt16(Cmd)/256 и Convert.ToUInt16(Cmd)%256 — так же, пишет младший байт и обнуляет старший. При этом в шаблоне — множественная команда, ushort (2байта), элементов — 2, порядок — 01.
15.08.2022 в 09:32 #24408manjey73Участникз.ы. честно бы подумал о формуле с преобразованием времени, можно ввести число 2344 а формула преобразует в 0х172С в виде UInt16
Но для этого придется формулу делать в Справочнике зато вводить проще. Можно даже сделать ввод в таком виде только выбрать строковой ввод 23:44
15.08.2022 в 09:34 #24409manjey73УчастникYakov_4e преобразование к байту это для записи в каждый регистр отдельно, не должно быть множественной записи.
Если делать множественную, то эти две формулы надо совмещать и складывать в одной формуле
15.08.2022 в 09:37 #24411manjey73Участник(Convert.ToUInt16(Cmd)/256) + (Convert.ToUInt16(Cmd)%256)
И оставить множественную команду
или даже так Convert.ToUInt16(Cmd)/256 + Convert.ToUInt16(Cmd)%256
- Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
15.08.2022 в 09:39 #24413manjey73УчастникConvert.ToUInt16(Cmd) а просто вот так работать не будет ? 🙂
и вводим 2344
не будет, там число что-то вроде 5932 по калькулятору
- Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
15.08.2022 в 09:52 #24423Yakov_4eУчастник(byte)(Convert.ToUInt16(Cmd)/256 >> 8) Так же…
15.08.2022 в 10:07 #24425Yakov_4eУчастникConvert.ToUInt16(Cmd), ввожу 0101 команду, записывает — 1ч42м.
15.08.2022 в 10:10 #24426Yakov_4eУчастникШаблон менял на множественную команду временно, для проверки.
15.08.2022 в 10:21 #24427Yakov_4eУчастникДобрый день. Алгоритма как такового нет.
Желательно менять значение только одного из байтов одного из holding регистров.
Либо записывать новые значения сразу двух байтов (например, время — «23:44»).Регистр с временем взят в качестве примера (удобнее проверять — на дисплее физически).
В устройстве есть разные регистры — например управление вентилятором: Мл.б. — количество скоростей; Ст.б. — тип управления.15.08.2022 в 10:41 #24428manjey73Участникз.ы. Время это не лучший вариант для сравнения на дисплее, если там скорости и тип управления, это совершенно разные сущности при преобразовании…
Потому что 0x172C это число 5932 ну совсем не похоже на ввод времени 23:44
- Этот ответ был изменен 1 год, 8 месяцев назад от manjey73.
15.08.2022 в 10:42 #24431manjey73УчастникВот введите вместо 0101 свое 5932 и посмотрите что получится
15.08.2022 в 10:44 #24432manjey73УчастникЛибо формула для ввода через строку, либо через HEX вариант.
Для разных каналов свое. Для времени свое, для просто цифровых значений свое… Иначе никак15.08.2022 в 10:59 #24433Yakov_4eУчастниккоманда 5932, получаю 23:44 и на дисплее и в веб-таблице скады. (формула — Convert.ToUInt16(Cmd)).
Таким образом: 23 — это 17, 44 — это 2с, но 172с — 5932.
Не очень юзабельно) только с калькулятором…
Попробую проверить это на других регистрах.15.08.2022 в 11:13 #24434Yakov_4eУчастникРегистр вентилятора: если я хочу записать значение 2 и в младший и в старший байт, то нужно отправить 514 (0202 hex). Проверил, физически так и есть.
15.08.2022 в 13:01 #24436manjey73УчастникВот вам надо тогда канал настроить как Бинарный для команды, выбирать строку или HEX при вводе и в зависимости что у вас за регистры, просто запись 0202 (это можно как HEX вводить) или время делать соответствующие преобразования.
Для времени строка 2344 формулой разбить и преобразовать строку в HEХ чтобы калькулятором не пользоваться.
А для других вариантов просто HEX вводить -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.