Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Побитовое AND  (Прочитано 2625 раз)

Серега

  • Старожил
  • ****
  • Сообщений: 290
    • Просмотр профиля
Побитовое AND
« : 02 Октября 2018, 13:51:25 »
Добрый день!
Столкнулся со "странной" работой оператора AND.
Есть ряд переменных.
1 группа - тестовые, заведены в симуляцию в arOPC и скаду. val1 и val2, тип smallint.
2 группа - реальные, из ПЛК, заведены в arOPC и скаду. val1_1 и val2_1, тип smallint.
3 группа - одна переменная для вывода значения функции, summa:longword и одна переменная временная test:smallint.
Есть 1 секундный скрипт. В нем ряд действий.
1-ое. Определение функции и ее вызов.
2-ое. Сложение двух переменных через AND
Код: (delphi)
  function Read (Place:smallint; Ready:smallint):longword;
  var
    PlaceReady := longword;
    medium: integer;
  begin
    medium := Place AND Ready;
    PlaceReady := medium Shl 24;
    if (Ready > 0) AND (Place > 0) then
      Result:= PlaceReady
    else
      Result:= 0;
  end;
begin
  count := count +1;
  if count = 5 then count := 0;
  case count of
    1: summa.value := Read (val1.value, val2.value);
    2: summa.value := Read (val1_1.value, val2_1.value);
  end;
  test.value := val1.value AND val2.value;                           // [b]2-ое[/b]
  test.value := val1_1.value AND val2_1.value;                       // [b]действие[/b]
end.
Вопрос следующий.
2-ое действие работает и с переменными из 1-ой группы и со 2-ой группы
1-ое действие работает только с 1-ой группой переменных.
Подскажите что делаю не так?
« Изменён: 02 Октября 2018, 16:04:22 от Simple-Scada »

Серега

  • Старожил
  • ****
  • Сообщений: 290
    • Просмотр профиля
Re: Побитовое AND
« Ответ #1 : 02 Октября 2018, 15:53:59 »
Ребята зря Вас тревожил.
Данный пример работать будет.
У меня был косяк в определении индексов для case.
Вопрос закрыт.