Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 52

Тема: Помогите разобраться с блоком PUTBIT

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Sergej_ Посмотреть сообщение
    Так справку прочтите. PUTBIT записывает бит в переменную INT. а EXTRACT извлекает, это обратное действие. Применять можно во многих случаях. Можете упаковать несколько дискретных сигналов (бит) в INT , передать одним регистром по сети , регистр 2 байта или иными словами 16 бит. А потом извлечь и использовать по назначению.
    Справку я читал там очень урезано написано.Пример не понятен.Как можно с помощью данных блоках управлять вкл и выключением насоса или дискретной логикой сменой насоса с 1го на 2й.

  2. #2
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,133

    По умолчанию

    Цитата Сообщение от Андрей 77 Посмотреть сообщение
    Справку я читал там очень урезано написано.Пример не понятен.Как можно с помощью данных блоках управлять вкл и выключением насоса или дискретной логикой сменой насоса с 1го на 2й.
    Я же вам приводил картинку с примером.
    А так, у нас есть некоторая целочисленная переменная А которая отвечает за то какой из насосов будет работать. Если хотим, чтобы работал первый насос, в бит №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.

  3. #3

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Я же вам приводил картинку с примером.
    А так, у нас есть некоторая целочисленная переменная А которая отвечает за то какой из насосов будет работать. Если хотим, чтобы работал первый насос, в бит №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 - должны работать оба насоса
    Спасибо за ответ я просто тогда не понял вашу логику с битовыми функциями с насосами.А вы в своем примере взяли целочисленная переменная А может это не а в вход Х блока PUTBIT вместо А?А это Х блока?А почему вы используете блок чтения бита EXTRACT когда же можно сигнал 1 или 0 передать через блок ИЛИ ?

  4. #4

    По умолчанию

    Цитата Сообщение от Андрей 77 Посмотреть сообщение
    Спасибо за ответ я просто тогда не понял вашу логику с битовыми функциями с насосами.А вы в своем примере взяли целочисленная переменная А может это не а в вход Х блока 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.

  5. #5

    По умолчанию

    Цитата Сообщение от Андрей 77 Посмотреть сообщение
    Спасибо за ответ я просто тогда не понял вашу логику с битовыми функциями с насосами.А вы в своем примере взяли целочисленная переменная А может это не а в вход Х блока PUTBIT вместо А?А это Х блока?А почему вы используете блок чтения бита EXTRACT когда же можно сигнал 1 или 0 передать через блок ИЛИ ?
    Вы разобрались с байтом? Применительно к ОЛ, в нем целочисленные переменные 32 разряда, т.е. 4 байта 32 бита с нумерацией от 0 младший, до 31 старший . PUBIT пишет значение бита в соответствующий разряд, совокупность всех 32 разрядов формирует число на выходе этого блока. Т.е. Вы можете упаковать 32 дискретных сигнала. Но в регистр, через который передается сетевая переменная в ПР 16 разрядный (сам регистр это не число, а ячейка памяти) в него 32 разряда не помещаются , это нужно учитывать.

  6. #6
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,133

    По умолчанию

    Цитата Сообщение от Андрей 77 Посмотреть сообщение
    Спасибо за ответ я просто тогда не понял вашу логику с битовыми функциями с насосами.А вы в своем примере взяли целочисленная переменная А может это не а в вход Х блока PUTBIT вместо А?А это Х блока?А почему вы используете блок чтения бита EXTRACT когда же можно сигнал 1 или 0 передать через блок ИЛИ ?
    Вот еще раз картинка

    Безымянный.png

  7. #7

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Вот еще раз картинка

    Безымянный.png
    Вы не подскажите где эту переменную вы взяли?Screenshot_3789.jpgЯ сейчас скопировал ваш код и пробую его моделировать что бы понять что как работает.

  8. #8
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,133

    По умолчанию

    Цитата Сообщение от Андрей 77 Посмотреть сообщение
    Вы не подскажите где эту переменную вы взяли? Я сейчас скопировал ваш код и пробую его моделировать что бы понять что как работает.
    это константа - если В меньше трех, то имеется авария

  9. #9

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    это константа - если В меньше трех, то имеется авария
    Немного начал понимать.А зачем в этой логики использовать битовые функции если это же самое можно построить на обычных булевский переменных?
    2й вопрос.Почему при нажатие кнопки пуск мы записываем в переменную А 1 то понимаем что включен насос, но при включение второго насоса на выходе блока PUTBIT появляется число 2?Я так понимаю то что на входе этого блока стоит 1 он ее записывает в ячейку памяти переменной?Он их как бы складывает?

  10. #10
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    9,766

    По умолчанию

    Цитата Сообщение от Dimensy Посмотреть сообщение
    Вот еще раз картинка

    Безымянный.png
    Для аварий(в подобных случаях) я обычно инверсию на выходе ставлю для целочисленной переменной, тогда один элемент может заменить собой до 32 элементов на входе.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. ПР200 и PUTBIT
    от Safron в разделе Программируемые реле
    Ответов: 14
    Последнее сообщение: 24.10.2018, 13:52
  2. PutBit
    от Keldish в разделе Программируемые реле
    Ответов: 2
    Последнее сообщение: 21.09.2015, 17:07
  3. ТРМ 148.Помогите разобраться.
    от VVS_123 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 18.08.2015, 09:48
  4. Ответов: 5
    Последнее сообщение: 21.12.2014, 13:24
  5. Ответов: 1
    Последнее сообщение: 08.04.2013, 13:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •