Просмотр полной версии : Битовая маска
Lisithea
04.02.2020, 14:59
Есть переменная AlarmFlags. Тип данных uint16.
Требуется создать событие по выставлению битов в переменной AlarmFlags. Например,
бит 0 равен 1 -> Событие: "авария №1"
бит 1 равен 1 -> Событие: "авария №2"
бит 2 равен 1 -> Событие: "авария №3"
Как я понял, при написании выражений для создания нового события есть только логические операторы, побитовых нет.
Какое требуется написать вырождение при создании событий?
С помощью битовой маски можно создать 16 отдельных переменных с булевыми значениями. Но городить столько лишних переменных крайне не хочется.
AlarmFlags.0=1 >> Событие: "авария №1"
AlarmFlags.1=1 >> Событие: "авария №2"
AlarmFlags.2=1 >> Событие: "авария №3"
Так пробовали?
Lisithea
05.02.2020, 09:01
Попробовал, результат:
Bad Request (#400): Выражение содержит ошибки.
Если правильно понял из предыдущих тем, логические операторы не умеют работать с битами в Овен клауд. Сделали только создание переменных выдергивая биты и только.
Bad Request (#400)
Полный текст хотя бы одной строчки можете привести? Интересует синтаксис.
Lisithea
05.02.2020, 09:45
Полный текст хотя бы одной строчки можете привести? Интересует синтаксис.
Скрин
47079
Lisithea
В КДС правильный синтаксис будет
IF AlarmFlags.0=true THEN *действие 1*; END_IF;
Но если уважаемый capzap говорит, что в облаке синтаксис через точку не работает, то значит так оно и есть.
Ему в этом вопросе я доверяю больше чем себе.
capzap непонятна логика. Например пришло число 9 (1001), 3 бит выдерните ?
capzap так я про то же, что создание переменных по маске в облаке пока единственный вариант, хотя вроде присутствуют логические операторы в системе и во многих других это делается при помощи них.
А так получается, что для каждого бита, надо рассчитывать на что умножать и на что делить :)
Lisithea
05.02.2020, 12:27
Грустно (((
dimon_ag
22.03.2020, 08:47
Не пинайте сильно. Подскажите кто нибудь, где можно почитать подробную инструкцию по работе с битовыми масками.
Есть объект. Все работает чудесно, но возникло желание расширить функционал управления из облака. В результате возникла проблема с недостаточностью сетевых переменных. Понятно что использовать переменную для чтения и записи одного бита это расточительно. Как в лоджике записывать читать бит в-из одной переменной разобрался быстро, но вот как с этим работать в облаке извлекать и записывать в эту переменную биты нигде подробно не описано. Метод научного тыка не проканал.
Помогите разобраться.
manjey73
22.03.2020, 09:44
Читать вроде создавать разные переменные и накладывать битовую маску.
А писать, смотрите в документации на ПР как рассчитать регистр для записи одного бита. petera еще выкладывал для работы с панелями и ПР, поищите в темах. Правда не знаю, с облаком прокатит или нет, не использую...
dimon_ag
23.03.2020, 08:24
Читать вроде создавать разные переменные и накладывать битовую маску.
А писать, смотрите в документации на ПР как рассчитать регистр для записи одного бита. petera еще выкладывал для работы с панелями и ПР, поищите в темах. Правда не знаю, с облаком прокатит или нет, не использую...
Нет не то. В ПР я сделал переменную с чтением и записью в эту переменную необходимых мне бит. Далее в облаке делаю следующие настройки...
48034 ставлю нулевой бит в 1 я так думал будет читаться и записываться только 0 бит. Но нет.
Далее у меня в этой переменной еще 15 бит которые нужно читать и записывать....
Нажимаю создать еще один параметр и выбираю уже 1 бит 48037
Выходит такое окно 48038
Т.е. суть, переменную я читаю без проблем. Но как в облаке вытащить из нее нужные биты? Либо для чего вообще нужна битовая маска в облаке? Как с ней работать?
Николай Суриков
23.03.2020, 08:46
Нет не то. В ПР я сделал переменную с чтением и записью в эту переменную необходимых мне бит. Далее в облаке делаю следующие настройки...
48034 ставлю нулевой бит в 1 я так думал будет читаться и записываться только 0 бит. Но нет.
Далее у меня в этой переменной еще 15 бит которые нужно читать и записывать....
Нажимаю создать еще один параметр и выбираю уже 1 бит 48037
Выходит такое окно 48038
Т.е. суть, переменную я читаю без проблем. Но как в облаке вытащить из нее нужные биты? Либо для чего вообще нужна битовая маска в облаке? Как с ней работать?
Окно появляется и говорит что в этой переменной вы уже используете другой бит, нажимаете применить и все, не обращайте внимание. Просто предупреждение и не более.
Что бы писать из облака в бит, в настройках укажите функцию записи
48039
dimon_ag
25.03.2020, 09:56
Разобрался. Проблема все таки в слабой инструкции.
Суть в том что в ПР200 код и адрес сетевой переменной совпадают, только в разных форматах. Вот я и думал что в облаке нужно все точно прописывать как в контролере. В результате выползала ошибка что переменная с таким именем уже существует, которая меня и смущала. Но как выяснилось код устанавливается другой, а адрес регистра тот же что и в контролере. В общем все заработало.
Отличный сервис.
ilham345
19.06.2025, 14:07
Разобрался. Проблема все таки в слабой инструкции.
Суть в том что в ПР200 код и адрес сетевой переменной совпадают, только в разных форматах. Вот я и думал что в облаке нужно все точно прописывать как в контролере. В результате выползала ошибка что переменная с таким именем уже существует, которая меня и смущала. Но как выяснилось код устанавливается другой, а адрес регистра тот же что и в контролере. В общем все заработало.
Отличный сервис.
Помогите пожалуйста с ИНСТРУКЦИЕЙ. Как в облаке из маски взять 16 переменных? все облазил, понажимал... не пойму интерфейса!
ilham345
19.06.2025, 17:31
Спасибо за оперативный ответ! А нельзя ли как то список таких переменных импортировать? кроме варианта с JSON конечно?
Я бы попробовал пойти по такому пути - он несколько замороченный, но может быть сработает...
В облаке описать одну переменную.
Сделать экспорт из облака в json.
Утилитой конвертировать json в cvs
Полученный cvs открыть в Exel и там "протягиванием" и копированием получить 16 строк с описаниями битовых переменных. UUID или поправить руками для уникальности или сделать пустым. Сохранить.
Конвертировать cvs в json.
Импортировать в облако.
Утилиты конвертации встречал недавно в internet.
Или можно сделать собственную утилиту на Python/Delphi/C#, которая некоторый список строк преобразует в json.
Кстати, можно сделать экспорт в cvs "Стандартных" переменных, выделить среди них нужные и утилитой получить из cvs нужный json.
https://owen.ru/forum/showthread.php?t=41462&p=465851&viewfull=1#post465851
Попробуйте
Недавно в облаке работал с битами двумя способами:
- для описания событий делал формулу (X & 1) > 0 - вместо 1 для следующих бит использовал 2, 4, 8, 16...
- в программе (на FreePascal) доступны все средства FPC для работы с битами - AND/OR/SHR
ilham345
21.06.2025, 17:12
Всем спасибо! Буду изучать.
Алексей Фомин
23.06.2025, 13:10
А нельзя ли как то список таких переменных импортировать? кроме варианта с JSON конечно?
Добрый день, говоря об импортировании. А в виде какого файла вы собственно храните этот список переменных?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot