- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Подсчет сработанных битов
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 27
- Зарегистрирован: 10 янв 2019, 17:13
- Имя: Алексей
- Благодарил (а): 19 раз
- Поблагодарили: 4 раза
Подсчет сработанных битов
Всем привет! Такой вопрос: как можно посчитать сработанные биты в переменной типа INT. Использую RSLogix5000 v33. Например, имею переменную "MODE" типа INT. Раскрывая переменную, имею вид:
MODE.0 ---------- 0
MODE.1 ---------- 0
MODE.2 ---------- 0
MODE.3 ---------- 1
MODE.4 ---------- 0
MODE.5 ---------- 1
MODE.6 ---------- 0
MODE.7 ---------- 0
MODE.8 ---------- 0
MODE.9 ---------- 0
MODE.10 ---------- 0
MODE.11 ---------- 0
MODE.12 ---------- 0
MODE.13 ---------- 0
MODE.14 ---------- 0
MODE.15 ---------- 1
Сработаны 3 бита (".3", ".5", ".15"). Как их посчитать? Спасибо за ответы.
MODE.0 ---------- 0
MODE.1 ---------- 0
MODE.2 ---------- 0
MODE.3 ---------- 1
MODE.4 ---------- 0
MODE.5 ---------- 1
MODE.6 ---------- 0
MODE.7 ---------- 0
MODE.8 ---------- 0
MODE.9 ---------- 0
MODE.10 ---------- 0
MODE.11 ---------- 0
MODE.12 ---------- 0
MODE.13 ---------- 0
MODE.14 ---------- 0
MODE.15 ---------- 1
Сработаны 3 бита (".3", ".5", ".15"). Как их посчитать? Спасибо за ответы.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Подсчет сработанных битов
Цикл из 16 итераций не такой уж и большой, можно использовать инкремент INC 16 раз по условию.
-
- эксперт
- Сообщения: 1146
- Зарегистрирован: 25 июл 2008, 10:06
- Имя: Леонид
- Страна: РФ
- Благодарил (а): 49 раз
- Поблагодарили: 134 раза
Подсчет сработанных битов
У меня дежавю, что этот вопрос уже обсуждали недавно?
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.
-
- здесь недавно
- Сообщения: 27
- Зарегистрирован: 10 янв 2019, 17:13
- Имя: Алексей
- Благодарил (а): 19 раз
- Поблагодарили: 4 раза
-
- здесь недавно
- Сообщения: 27
- Зарегистрирован: 10 янв 2019, 17:13
- Имя: Алексей
- Благодарил (а): 19 раз
- Поблагодарили: 4 раза
-
- почётный участник форума
- Сообщения: 5790
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 673 раза
- Поблагодарили: 840 раз
Подсчет сработанных битов
Всё там есть, и даже конструкция FOR ... DO на языке ST, внутрь которой никто не мешает вставить IF... THEN.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- здесь недавно
- Сообщения: 36
- Зарегистрирован: 12 май 2020, 06:21
- Имя: Андрей
- Страна: Россия
- город/регион: Новосибирск
- Благодарил (а): 9 раз
- Поблагодарили: 29 раз
Подсчет сработанных битов
Добрый день! Пример цикла FOR на языке ST для подсчета сработанных битов:
Где переменная "Integer" является переменной типа INT. В Вашем случае "MODE".
Код: Выделить всё
// Инициализируем переменную счетчика
Bit_Count_Value := 0;
//Создаем цикл FOR для побитового обхода целочисленного тэга (используем косвенную адресацию)
FOR Index := 0 TO 15 BY 1 DO
IF Integer.[Index] THEN
Bit_Count_Value := (Bit_Count_Value + 1);
END_IF;
END_FOR;