|
|
||||||
Определение изменения бит в байте27.08.2021, 19:18. Показов 11399. Ответов 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 / 542 / 127
Регистрация: 09.01.2018
Сообщений: 1,763
|
||
| 30.08.2021, 15:40 | ||
|
010 - last 011 - current Ваш метод в результате даст 0. Биты не изменились, но участок включился. Я писал об этом уже.
0
|
||
|
|
||||||
| 30.08.2021, 16:00 [ТС] | ||||||
|
Полный код текущего проекта:
Кликните здесь для просмотра всего текста
Добавлено через 6 минут escoult, мы сейчас работаем с байтами, не перебирая их бит. Может быть вы немного упустили текущий ход проекта?
0
|
||||||
|
1534 / 542 / 127
Регистрация: 09.01.2018
Сообщений: 1,763
|
|||
| 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, без изменения остальных бит Есть ли функция которая может определить сколько бит в байте? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|