Я же вам приводил картинку с примером.
А так, у нас есть некоторая целочисленная переменная А которая отвечает за то какой из насосов будет работать. Если хотим, чтобы работал первый насос, в бит №0 этой переменной записываем единичку, не хотим чтобы работал - пишем нолик. То же самое со вторым насосом, но там пишем 1 или 0 в бит №1 этой переменной. Далее, у нас есть целочисленная переменная В, которая отвечает за аварии. Если первый насос находится в аварии, то пишем в бит №0 нолик, иначе пишем 1. Тоже самое с аварией второго насоса, бит №1, 0 - авария, 1 - нет аварии. Дальше мы выполняем логическую операцию И с переменными А и В, пусть это будет С. Логические операции с целочисленными переменными выполняются побитово, т.е. бит №0 переменной А перемножится с битом №0 переменной В, бит №1 переменной А с битом №1 переменной В и т.д. В результате мы получим следующий результат: допустим насос 1 должен работать (бит №0 переменной А = 1), но он находится в аварии (бит №0 переменной В = 0), тогда в переменной С бит №0 будет равен 0, т.е. в итоге насос нельзя запускать. Насос 2 тоже должен работать (бит №1 переменной А = 1) и он не находится в аварии (бит №1 переменной В = 1), тогда в переменной С бит №1 будет равен 1, что дает разрешение на работу насоса. Ну а на выходе мы просто извлекаем из С бит №0 и результат присваиваем его к выходу Насос 1, а бит №1 присваиваем выходу Насос 2.
Ну и общая обработка: если С больше 0, то один или оба насоса работают, если В меньше 3, то имеется авария. А=1 - должен работать Насос 1, А=2 - должен работать насос 2, А=3 - должны работать оба насоса
Последний раз редактировалось Dimensy; 16.12.2022 в 19:33.
Спасибо за ответ я просто тогда не понял вашу логику с битовыми функциями с насосами.А вы в своем примере взяли целочисленная переменная А может это не а в вход Х блока PUTBIT вместо А?А это Х блока?А почему вы используете блок чтения бита EXTRACT когда же можно сигнал 1 или 0 передать через блок ИЛИ ?
Бит имеет только два состояния 0 (FALSE - Ложь) и 1 (TRUE- Истина),
Регистр (целое число), состоит из 16 бит ( с 0 по 15),
включен 0 бит- 1, включен 1 бит- 2, включен 2 бит- 4, включен 3 бит- 8, включен 4 бит- 16, 5-32, 6-64, 7-128, 8-256, 9-512 и т. д.
Число 7 например включены биты 0,1,2, а 8 - уже включён только бит 3.
В Лоджике всё упрощено, вместо Бит = TRUE показывает 1.
Для этого и существует упаковка битов в Маску (целое число) и распаковка.
Последний раз редактировалось kondor3000; 17.12.2022 в 00:20.
Вы разобрались с байтом? Применительно к ОЛ, в нем целочисленные переменные 32 разряда, т.е. 4 байта 32 бита с нумерацией от 0 младший, до 31 старший . PUBIT пишет значение бита в соответствующий разряд, совокупность всех 32 разрядов формирует число на выходе этого блока. Т.е. Вы можете упаковать 32 дискретных сигнала. Но в регистр, через который передается сетевая переменная в ПР 16 разрядный (сам регистр это не число, а ячейка памяти) в него 32 разряда не помещаются , это нужно учитывать.
Вот еще раз картинка
Безымянный.png
Вы не подскажите где эту переменную вы взяли?Screenshot_3789.jpgЯ сейчас скопировал ваш код и пробую его моделировать что бы понять что как работает.
Немного начал понимать.А зачем в этой логики использовать битовые функции если это же самое можно построить на обычных булевский переменных?
2й вопрос.Почему при нажатие кнопки пуск мы записываем в переменную А 1 то понимаем что включен насос, но при включение второго насоса на выходе блока PUTBIT появляется число 2?Я так понимаю то что на входе этого блока стоит 1 он ее записывает в ячейку памяти переменной?Он их как бы складывает?
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.