|
|
||||||
Определение изменения бит в байте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, 16:43 [ТС] | |||||||
|
Добавлено через 23 минуты Да, есть недоработка. Последний оставшийся в работе участок при выключении не сбрасывает свои выхода на втором контроллере. Добавлено через 10 минут Загвоздка тут или выше:
0
|
|||||||
|
Модератор
|
||||
| 30.08.2021, 19:38 | ||||
|
Конечно, делал без отладки и мог что-то упустить. Но обратите внимание на код и комменты в нём. Там не одна маска делается, а две. Именно для учёта описанной вам ситуации. Добавлено через 16 минут Я дал код метода. Может написать какую серию данных надо прогнать через него чтобы получить неверный результат.
0
|
||||
|
|
||
| 30.08.2021, 20:07 [ТС] | ||
0b_001_001_001_001_001, что соответствует int activeMask = 0b_001_001_001_001_001;. После этого все действия с newBits прекращаются.Это происходит потому, что мы не знаем текущего состояния бит на другой стороне. Следовательно, лучше все же их получать.
0
|
||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
||
| 30.08.2021, 20:10 | ||
|
Участок работал с активной линией L. Хотя это не важно, но для примера пусть будет L. Затем участок был отключен. После отключения, на нем начинаются ремонтные работы и состояние линий изменяется на R. Поскольку участок неактивен, эти изменения не отправляются на конечный контроллер, на нем все еще находится состояние активной линии L. Далее приходит байт опять с активной линией R, но на этот раз с битом работы участка. Теперь участок необходимо включить и активировать линию R. Однако, маска не фиксирует изменение линий на этом участке, и метод не отправляет бит R. В результате участок будет активирован с последним состоянием этого бита на контроллере, а он был L.
0
|
||
|
Модератор
|
||
| 30.08.2021, 20:45 | ||
|
Какие действия нужны в этом случае? Допустим, можно в самом начале просто сравнить received с activeMask.И если они равны - выйти из метода. Добавлено через 2 минуты Если ситуацию отсутствия инверсии на информационных битах нужно проверять по отдельности на каждой линии, то это тоже можно реализовать.
0
|
||
|
|
|
| 30.08.2021, 20:46 [ТС] | |
|
Так, начинаем сначала. Исходная ситуация:
Все участки выключены, стороны случайны. Соединяемся... Инициируем прием/передачу (жмем Ентер): В целевом контролере ничего не включилось - как и положено: Далее... (минуточку)
0
|
|
|
|
|
| 30.08.2021, 21:06 [ТС] | |
|
Сначала, включим 1-ю и, допустим, 5-ю линии:
В сеть мы пока еще ничего не передавали и не получали, поэтому целевой К спокойно спит: Считаем и запишем изменения: Пока все верно, включились 1L и 5L:
0
|
|
|
|
||
| 30.08.2021, 21:27 [ТС] | ||
|
На отключенном участке изменили стороны:
Затем участок включился: А теперь тот самый момент: сеанс приема/передачи... Иии.... Включился выход 1R, как и ожидалось: Предположение:
0
|
||
|
|
||
| 30.08.2021, 22:04 [ТС] | ||
|
Вообще, опыт с симуляцией оборудования показал, что мы вполне корректно получаем и передаем данные. Поэтому считаю, что нужно вернуться в плоскость чистого NET C#, и отработать модель формирования нужных байт в нем, без применения сторонних приложений.
Элд Хасп, escoult, я понимаю, что возможны некоторые недопонимания всего процесса в глобальном смысле. От сюда возможные ошибки в предположениях. Добавлено через 3 минуты
0
|
||
|
Модератор
|
||
| 30.08.2021, 22:12 | ||
001_001_001_001_001 на выходной стороне должны быть все нули.Возможно, что-то не учёл. Сейчас уже времени нет - проверю завтра. Добавлено через 1 минуту wizard41, составьте мне серии последовательностей приводящих к неправильному выводу и укажите какой должен быть правильный вывод. Чтобы я завтра "не гадал в потёмках".
0
|
||
|
1534 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
|
|||||||
| 31.08.2021, 09:34 | |||||||
|
ОК, биты сбрасываются, я не знал точно как у вас происходит отключение. То есть, отправили 00 - сторона отключилась. Но тогда все хуже становится. Если на каком то участке биты не изменились, то он отключится, хотя должен продолжать работать. И вот этого момента, я не вижу в вашей симуляции. Сначала вы включаете две линии 1-ю и 5-ю, потом отключаете 1-ю, а 5-я продолжает работать. Однако код (ну если вы используете тот код, что выложен в вашем посте), не сможет этого сделать, обе линии продолжат работу. Вот, я взял данные с ваших скринов отправки получения:
Но у вас 1-я линия сбрасывается и работает только 5-я. Каким образом?
0
|
|||||||
|
Модератор
|
|||||||||||||||||||||||||||||
| 31.08.2021, 10:30 | |||||||||||||||||||||||||||||
Он и не должен отправлять, поскольку состояние выходных битов не изменяется. Добавлено через 8 минут Вот другой тест:
0
|
|||||||||||||||||||||||||||||
| 31.08.2021, 10:30 | |
|
Изменить рандомный бит в байте Порядок байт в слове и бит в байте
последовательность инструкций для обнуления трех старших бит регистра 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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|