|
|
||||||
Определение изменения бит в байте27.08.2021, 19:18. Показов 11293. Ответов 128
Всем ку!
Возник вопрос по оптимальному методу определения изменившихся бит в байте. Два байта прилетают по сети и имеют следующий вид: Суть в следующем (на примере байта Е8): 0-й, 3-й и 6-й биты "работы", говорят о включенном или выключенном состоянии участка. 1-й, 2-й, 4-й, 5-й, ... биты - определения сторон (L/R) соотв. участков. Они всегда находятся в одном из двух состояний: 01 либо 10. Состояний 00 или 11 не бывает. Так вот, в идеале, требуется определить момент смены состояний, допустим с 01 на 10, при установленном бите "работы". Если бит "работы" не установлен, то изменения состояний бит сторон пофигу. Пока я делаю это так (без учета бита "работы"):
Можно ли как-то сделать иначе?
0
|
||||||
| 27.08.2021, 19:18 | |
|
Ответы с готовыми решениями:
128
Поменять порядок бит в байте
В байте не восемь бит. |
|
|
|||
| 30.08.2021, 12:04 [ТС] | |||
|
Теперь, необходимо скопировать состояния сторон в целевой контроллер, но передать только те стороны, участки которых активны.
Сейчас я поразбираюсь немного с передачей байтом. Если не выйдет, то вернемся к битам и циклам... Добавлено через 25 минут Upd: Upd2:
0
|
|||
|
|
||||||
| 30.08.2021, 12:33 [ТС] | ||||||
|
Ну как я и предположил вчера, при передаче байта я ошибся в индексе начала записи в порт: начинал записывать с 0-го адреса, а надо было с 8.
Добавлено в код:
В устройстве: Здесь я просто скопировал входа на выхода, без всяких условий. Теперь правая панель в точности повторяет левую.
0
|
||||||
|
|
||||||
| 30.08.2021, 14:36 [ТС] | ||||||
|
Поехал и купил второй монитор, ибо с одним совсем печально переключаться между окнами. С двумя веселее будет наблюдать за происходящим:
Но вернемся к сути вопроса. Несмотря на то, что я могу считывать из контроллера слово (Word) целиком, функция все равно кладет это в байтовый массив:
поэтому, как ни крути, но на начальном этапе обработки все равно приходится работать с байтами. Следующая задача - сформировать два байта для отправки, в которых будут находится биты задействованных сторон. Продолжение следует...
0
|
||||||
|
Модератор
|
|||||||
| 30.08.2021, 14:57 | |||||||
0
|
|||||||
|
|
|||
| 30.08.2021, 15:04 [ТС] | |||
|
В прочем, это была вторая часть вопроса, мы ее рассмотрим чуть позже. Элд Хасп, какой-то из ваших предыдущих примеров я слегка переработал для собирания бит из двух байт в один. Но по спешке его затер. Добавлено через 1 минуту Добавлено через 1 минуту Т.е. мы собираем байты целиком на стороне ПК и отправляем в сеть 2 штуки.
0
|
|||
|
Модератор
|
||||||
| 30.08.2021, 15:15 | ||||||
|
wizard41, там же формат выходных бит иной.
Надо немного изменить:
0
|
||||||
|
|
|
| 30.08.2021, 15:17 [ТС] | |
|
Целевой порт (выходы) выглядят так:
Обратите внимание, что тут занят весь 8-й порт + два бита 9-го. Хоть 9-й порт пустой (ничем не занят), все же технически не совсем правильно переписывать его оставшиеся 6 бит нулевыми значениями, в то время как они могут выполнять иные технологические функции, согласно той же программе внутри контроллера. Поэтому, предварительное чтение состояния этого порта все же выглядит правильной реализацией. Это и была вторая часть вопроса. Еще нюанс: почему следует пересылать именно новые состояния - потому что там вдалеке, работающие могут сбросить определенные выхода кнопкой на местных постах. Мы же об этом как-бы не знаем, и если мы снова отправим свой байт с предыдущим состоянием, то сброшенные вручную выхода снова включаться, хотя этого не нужно.
0
|
|
|
Модератор
|
|||||||
| 30.08.2021, 15:24 | |||||||
|
В более законченном виде:
Для ushort битовая арифметика не переопределена. Придётся делать постоянное приведение типов. Применяем int, но реально используем из него только два младших байта.
0
|
|||||||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
||
| 30.08.2021, 15:40 | ||
|
010 - last 011 - current Ваш метод в результате даст 0. Биты не изменились, но участок включился. Я писал об этом уже.
0
|
||
|
|
||||||
| 30.08.2021, 16:00 [ТС] | ||||||
|
Полный код текущего проекта:
Кликните здесь для просмотра всего текста
Добавлено через 6 минут escoult, мы сейчас работаем с байтами, не перебирая их бит. Может быть вы немного упустили текущий ход проекта?
0
|
||||||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
|||
| 30.08.2021, 16:06 | |||
![]() 010 - last 011 - current 001 - activeMask 001 - active (3 & 1 = 1) 110 - listen 001 - changed (3 ^ 2 = 1) 000 - changedListen (6 & 1 = 0) 000 - newBits (3 & 0 = 0) Писал я уже об этом на прошлой странице. Маска не видит, что бит изменился (это логично, он не менялся). НО включился участок и теперь биты нужно отправить, не смотря на то что изменений в них не было. Добавлено через 4 минуты
0
|
|||
|
|
||
| 30.08.2021, 16:06 [ТС] | ||
|
Исходное состояние - картинки из предыдущего моего поста, когда 1-я линия выключена. Включаем: Нужный байт (1R) отправился в сеть и включил свой выход... Пока не пойму что не так.
0
|
||
| 30.08.2021, 16:06 | |
|
Изменить рандомный бит в байте Порядок байт в слове и бит в байте
последовательность инструкций для обнуления трех старших бит регистра DH, без изменения остальных бит Есть ли функция которая может определить сколько бит в байте? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|