Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Damir от 24 Апреля 2017, 22:47:27

Название: Нужна помощь
Отправлено: Damir от 24 Апреля 2017, 22:47:27
Добрый день! Я написал программу, когда включается солнечная батарея горит диод, если включается ветрогенератор и выключается солнечная батарея диод должен выключится,, через 2 секунды должен включится и так должен чередовать. Работаю с ардуино, и Arduino Opc Server. Подскажите
Название: Re: Нужна помощь
Отправлено: Simple-Scada от 26 Апреля 2017, 09:53:32
Здравствуйте.

Для этого можно добавить виртуальную переменную таймер vrTime с типом данных Integer. Затем создать один скрипт с типом события "Прошла секунда" и написать такой код:

Код
var
  aSetValue: Integer;
begin
  aSetValue := 0;

  { меняем переменную vrTime от 0 до 3 }
  vrTime.Value := vrTime.AsInt + 1;
  if vrTime.AsInt > 3 then
    vrTime.Value := 0;

  { если солнечная батарея выключена }
  if Sun.AsInt <= 100 then
  begin
    aSetValue := 0;

    { если выключился ветрогенератор, то включаем мигание
      диода }
    if Wind.AsInt > 100 then
      case vrTime.AsInt of
        0..1: aSetValue := 0;
        2..3: aSetValue := 150;
      end;
  end else
    { если солнечная батарея включена, то включаем диод
      без мигания и прерываем скрипт }
    aSetValue := 150;

  ArduinoSerial0_D3.Value := aSetValue;
end.

Получается следующее:
- когда солн. батарея включена диод будет гореть всегда;
- когда солн. батарея выключена и ветрогенератор включен - диод будет мигать;
- диод будет выключен когда солн. батарея выключена и ветрогенератор выключен.
Название: Re: Нужна помощь
Отправлено: VLAD от 29 Апреля 2017, 23:37:20
Добрый день. Как побитово прочитать теги с маски модуля дискретных выходов?
Название: Re: Нужна помощь
Отправлено: Simple-Scada от 01 Мая 2017, 11:01:37
Здравствуйте.

Для извлечения битов можно использовать функцию GetBit. С её помощью можно извлечь биты из любой численной переменной. Например у нас есть переменная vrMy с типом данных Integer (целое число), которая читается OPC-сервером из контроллера в скаду. Тогда, для извлечения бита номер 3 (биты считаются с нуля), можно использовать такой скрипт:

Код
var
  aBit: Boolean;
begin
  aBit := GetBit(vrMy.AsInt, 3);  // получаем состояние бита номер 3 (с нуля) из vrMy в локальную переменную aBit.
end.

Некоторые объекты поддерживают автоматическую работу с битами и у них для этого есть отдельное свойство Бит. Например Кнопка, Флажок, Сообщение. Т.е. объект связывается с переменной, в свойство "Бит" вводится номер бита с которым нужно работать и скада сама будет извлекать заданный бит из значения переменной и работать с ним.
Название: Re: Нужна помощь
Отправлено: VLAD от 01 Мая 2017, 14:38:48
Спасибо. Завтра попробую.