|
|
||||||
Определение изменения бит в байте27.08.2021, 19:18. Показов 11291. Ответов 128
Всем ку!
Возник вопрос по оптимальному методу определения изменившихся бит в байте. Два байта прилетают по сети и имеют следующий вид: Суть в следующем (на примере байта Е8): 0-й, 3-й и 6-й биты "работы", говорят о включенном или выключенном состоянии участка. 1-й, 2-й, 4-й, 5-й, ... биты - определения сторон (L/R) соотв. участков. Они всегда находятся в одном из двух состояний: 01 либо 10. Состояний 00 или 11 не бывает. Так вот, в идеале, требуется определить момент смены состояний, допустим с 01 на 10, при установленном бите "работы". Если бит "работы" не установлен, то изменения состояний бит сторон пофигу. Пока я делаю это так (без учета бита "работы"):
Можно ли как-то сделать иначе?
0
|
||||||
| 27.08.2021, 19:18 | |
|
Ответы с готовыми решениями:
128
Поменять порядок бит в байте
В байте не восемь бит. |
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
||||||||||||
| 31.08.2021, 11:56 | ||||||||||||
Сообщение было отмечено wizard41 как решение
Решение
Элд Хасп, ну я уж не знаю
). То ли вы код, который пишите не видите, то ли что еще. Ок, давайте ваш последний тест: Включаем первую и пятую - ОК включилось Отключаем первую - Отключили? Ну она же не отключена. Какое состояние на контроллере? Что касается кода, я подставлял в переменную oldReceived значение, которое было получено последним. У вас там происходит нечто странное, смысла которого я не понял. Отсюда и разные результаты у нас с вами. Добавлено через 19 минут Вообще, в связи с новыми открывшимися данными (ну или для меня они новые), а именно, что байты на конечном контроллере полностью заменяются, алгоритм может быть значительно проще. 1. Получаем новое состояние 2. Формируем 5 пар битов для отправки 3. Сверяемся с текущим состоянием контроллера (для этого храним его, вместо старого значения полученных байтов) 4. Если есть изменения - отправляем 5. Сохраняем текущее состояние контроллера. Добавлено через 33 минуты
1. Включается 1 и 5 2. Отключается 1 (5 работает) 3. Включается 3 и 4 (5 все еще работает)
1
|
||||||||||||
|
|
||||
| 31.08.2021, 13:17 [ТС] | ||||
|
0
|
||||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
||||||
| 31.08.2021, 13:48 | ||||||
|
Оппс, 28-я строка. Там же все короче должно быть:
0
|
||||||
|
Модератор
|
|||||
| 31.08.2021, 15:53 | |||||
|
Оно там и есть. Расписывал подробно для прозрачности и контроля самого алгоритма. Что должно произойти если получен 001_001_001_001_001?Выходной порт должен установиться на все нули? Или на нём должно сохраняться состояние бывшее перед получением таких данных?
0
|
|||||
|
|
||||||||||||||||||
| 31.08.2021, 19:50 [ТС] | ||||||||||||||||||
|
Я не сильно вдавался в ваши битовые операции, но думаю вот что: У вас стоит условие:
if идет формирование байт для отправки и собственно - отправка:
001_001_001_001_001 формируются нули, но они отправляются в сеть?Дело в том, что когда включены более 1-го участка, то все идет нормально, т.к. условие if ( newBits != 0 ) всегда срабатывает. Но когда остается последний участок (любой) и он выключается(!), то мы принимаем от контроллера как раз эти 001_001_001_001_001, условие if ( newBits != 0 ) НЕ срабатывает, и конечно отправки НЕ происходит. Последний оставшийся в работе выход НЕ сбрасывается, т.к. нет такой команды.Может быть вот эту всю конструкцию вынести ЗА блок if?
if не срабатывает и команда 00000000_00000000 не отправляется в контроллер.Я думаю вот что: 1. Для более наглядного представления того, что отправляется в сеть, можно перед отправкой выводить в консоль отправляемые биты. 2. Вообще, можно и вовсе не заморачиваться с приемом-передачей, т.к. этот момент вполне работоспособен и мы в этом убедились. Я уже сам там оформлю как что принимается и передается. Хорошо, что подняв этот вопрос, у меня дошли руки до разбирательства передачи байтовой информации, и это получилось. Считаю, что достаточно формировать в консоли "правильные" входные данные, аля полученные с контроллера, производить над ними нужные операции и в конце выводить полученный результат. Т.е. фактического участия оборудования не требуется. Единственно что, так это неудобство ввода в консоли этих "правильных ответов" от первого устройства. Или, как вариант, заранее сформировать массив значений, соответствующий тем или иным состояниям входов, и затем при вводе указывать нужный индекс определенного состояния. Так можно вполне проконтролировать правильность алгоритма(ов). Если у меня завтра будет время, я попробую набросать такую схему.
0
|
||||||||||||||||||
|
Модератор
|
|||||||||||||||||
| 31.08.2021, 20:18 | |||||||||||||||||
001_001_001_001_001 это, фактически, команда сброса и выход надо сбросить в нули?Тогда такой вариант:
0
|
|||||||||||||||||
|
Модератор
|
||
| 31.08.2021, 20:43 | ||
|
Я так вас понял. Я же этим специально интересовался, какое состояние должно быть у отключенной линии. Вы ответили, что сохраняться, то которое было перед отключением. А как должно быть? Добавлено через 48 секунд Мы обсуждали это в районе четвертого поста.
0
|
||
|
|
|||
| 31.08.2021, 21:49 [ТС] | |||
![]() Если линия выключается (принятый бит активности == 0), то немедленно выключаются его выхода (L/R) на целевом устройстве и потом не включаются, даже если имело место их изменение. В случае с последней выключенной линией - в сеть отправляются два байта 00000000_00000000, что гарантированно вырубает всё. Добавлено через 5 минут В вашем же алгоритме это реализовано: я вчера наглядно показывал этот процесс escoult.
0
|
|||
|
Модератор
|
|||
| 31.08.2021, 22:02 | |||
|
Завтра это переделаю. Но я не делал "отключение" выходов на время отключения входов. У меня было реализовано, сохранение состояния выходов, на время выключения входов.
0
|
|||
|
|
||
| 31.08.2021, 22:13 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 31.08.2021, 22:16 | ||
|
Но если надо обрабатывать ошибки (я за это тоже писал ранее), то нужен алгоритмы их определения и действий при их обнаружении.
0
|
||
|
|
||
| 31.08.2021, 22:25 [ТС] | ||
![]() Самое смешное: банальный вопрос "как отследить изменение бита в байте" разросся на 112+ постов
0
|
||
|
|
||
| 31.08.2021, 22:31 [ТС] | ||
|
Все завтра. Всем добра!
0
|
||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
|||||
| 01.09.2021, 00:49 | |||||
|
Добавлено через 7 минут Добавлено через 13 минут ![]() Какой вы молодец ). Могли бы коротко написать, что биты сбрасываются, и не заниматься ерундой с картинками. Но вы что то оба, не знаете, что у вас в коде происходит. И вы не знаете, и Элд Хасп, не знает Я не понял, что там в последней части кода творится. Но он вроде бы должен знать, что задумывал.
0
|
|||||
|
|
||||
| 01.09.2021, 08:38 [ТС] | ||||
|
0
|
||||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
||||
| 01.09.2021, 09:07 | ||||
![]() Ок, я вас понял.
0
|
||||
|
|
|
| 01.09.2021, 09:35 [ТС] | |
|
escoult, вы напрасно все иронизируете. У меня все давно решено и работает. Вопрос на форуме задан с целью, так сказать, пообсуждать возможные иные решения. Вы зря думаете, что я настолько беспомощен, что не в состоянии разобраться в битовых операциях, масках или циклах.
0
|
|
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
|
| 01.09.2021, 09:43 | |
|
0
|
|
| 01.09.2021, 09:43 | |
|
Изменить рандомный бит в байте Порядок байт в слове и бит в байте
последовательность инструкций для обнуления трех старших бит регистра 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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|