Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 12 Сентября 2018, 18:28:45

Название: Внутренние и внешние теги
Отправлено: Серега от 12 Сентября 2018, 18:28:45
Добрый день!
Возможно тема не для этой ветки. Можно смело переносить.
Вопрос следующий.
Дано:
arOPC. Симуляция. 3 переменные (var1, var2, result : word). Диапазон изменения var1 и var2 0..12.
SCADA: те же переменные, объявлены как внешние с привязкой к OPC. Переменная result1 объявлена как внутренняя.
Надо:
При установке любого бита в переменных var1 и var2 установить соответствующие биты в result либо в 1 либо в 0 согласно правилу. Например var1 принимает значение 210 (102) и var2 принимает 010. Соответственно result должен из значения 1111 1111 1111 11112 принять значение 1111 1111 1111 11012.
Простой скрипт (односекудный):
begin
result1.value := NOT (var1.Value or var2.Value); (так же пробовали и с .AsInt)
result.value := NOT (var1.Value or var2.Value);
end;
Вопросы:
1. result1.value := NOT (var1 or var2); - работает, но есть вопрос №2. result.value := NOT (var1 or var2); - не работает.
2. Все переменные типа word (согласно руководству Word 16 бит Положительные целые числа 0…65535). НО result1 = -1. Почему?
Проверьте у себя. Возможно что- то делаю не так. Жду Ваших ответов или вопросов.
Название: Re: Внутренние и внешние теги
Отправлено: Simple-Scada от 13 Сентября 2018, 00:48:39
Здравствуйте.

Нужно явно указывать преобразование, чтобы работа со значениями велась с типом Word. Также у переменной результата нужно задать шкалу от 0 до 65535. Пример кода:
Код: (delphi)
begin
  vrResult.Value := Word(NOT (var1.AsInt or var2.AsInt));
end.