|
|
||||||
Определение изменения бит в байте27.08.2021, 19:18. Показов 11572. Ответов 128
Всем ку!
Возник вопрос по оптимальному методу определения изменившихся бит в байте. Два байта прилетают по сети и имеют следующий вид: Суть в следующем (на примере байта Е8): 0-й, 3-й и 6-й биты "работы", говорят о включенном или выключенном состоянии участка. 1-й, 2-й, 4-й, 5-й, ... биты - определения сторон (L/R) соотв. участков. Они всегда находятся в одном из двух состояний: 01 либо 10. Состояний 00 или 11 не бывает. Так вот, в идеале, требуется определить момент смены состояний, допустим с 01 на 10, при установленном бите "работы". Если бит "работы" не установлен, то изменения состояний бит сторон пофигу. Пока я делаю это так (без учета бита "работы"):
Можно ли как-то сделать иначе?
0
|
||||||
| 27.08.2021, 19:18 | |
|
Ответы с готовыми решениями:
128
Поменять порядок бит в байте
В байте не восемь бит. |
|
1536 / 545 / 127
Регистрация: 09.01.2018
Сообщений: 1,785
|
||||||||||||
| 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
|
||||
|
1536 / 545 / 127
Регистрация: 09.01.2018
Сообщений: 1,785
|
||||||
| 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
|
||
|
1536 / 545 / 127
Регистрация: 09.01.2018
Сообщений: 1,785
|
|||||
| 01.09.2021, 00:49 | |||||
|
Добавлено через 7 минут Добавлено через 13 минут ![]() Какой вы молодец ). Могли бы коротко написать, что биты сбрасываются, и не заниматься ерундой с картинками. Но вы что то оба, не знаете, что у вас в коде происходит. И вы не знаете, и Элд Хасп, не знает Я не понял, что там в последней части кода творится. Но он вроде бы должен знать, что задумывал.
0
|
|||||
|
|
||||
| 01.09.2021, 08:38 [ТС] | ||||
|
0
|
||||
|
1536 / 545 / 127
Регистрация: 09.01.2018
Сообщений: 1,785
|
||||
| 01.09.2021, 09:07 | ||||
![]() Ок, я вас понял.
0
|
||||
|
|
|
| 01.09.2021, 09:35 [ТС] | |
|
escoult, вы напрасно все иронизируете. У меня все давно решено и работает. Вопрос на форуме задан с целью, так сказать, пообсуждать возможные иные решения. Вы зря думаете, что я настолько беспомощен, что не в состоянии разобраться в битовых операциях, масках или циклах.
0
|
|
|
1536 / 545 / 127
Регистрация: 09.01.2018
Сообщений: 1,785
|
|
| 01.09.2021, 09:43 | |
|
0
|
|
| 01.09.2021, 09:43 | |
|
Изменить рандомный бит в байте Порядок байт в слове и бит в байте
последовательность инструкций для обнуления трех старших бит регистра DH, без изменения остальных бит Есть ли функция которая может определить сколько бит в байте? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|