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

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

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 375281 раз)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #45 : 16 Марта 2016, 09:47:22 »
deldemo, да, будет в ближайшем обновлении.

a_sergeevich

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #46 : 18 Марта 2016, 15:05:19 »
Подскажите, правильно ли я использую следующие функции.
Есть три переменных типа word : den, chas, minuta.

den := DayOfTheWeek ( Date ); получаю из даты день недели значение от 1 до 7.
chas := HourOf ( Now ); получаю часы из текущего времени.
minuta := MinuteOf ( Now ); получаю минуты из текущего времени.

Хочу сделать скрипт для работы котла по таймеру, типа с понедельника по пятницу котёл работает с 6:00 до 9:00 и с 16:00 до 18:00. Время включения и выключения можно будет задавать произвольно в полях ввода.
Скрипт этот хочу вставить в скрипт OnSecondTimer.
Как думаете в правильном направлении двигаюсь ? Может у вас есть готовый пример реализации такого таймера ?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #47 : 18 Марта 2016, 15:15:19 »
Т.к. у вас работа котла контролируется по часам, то Вы можете сделать проверку в OnHourTimer (брать текущий час и в сравнении проверять наступил ли нужный час), чтобы не выполнять скрипт каждую секунду. Но и в OneSecondTimer всё будет работать. Но, Вы хотите вынести команды управления котлом в скаду, т.е. по сути скада будет управлять котлом. Это неправильно, скада не должна отвечать за управление оборудованием и описанные вами проверки должны выполняться на контроллере, который и должен выполнять пуск и останов котла. Если управление берет на себя скада, то что будет если временно выйдет из строя компьютер, или произойдет сбой в ОС, или самой скада-системе? Процесс нарушится, даже если контроллер будет в это время работать.
« Изменён: 18 Марта 2016, 15:25:43 от Simple-Scada »

a_sergeevich

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #48 : 18 Марта 2016, 15:51:08 »
 В плк у меня уже есть блок работы по температурному графику, в скаде будет кнопка переключения работы котла с темп.графика на работу по таймеру и в режиме по таймеру скада будет управлять выходом плк, который используется и при работе по графику. Если слетит скада или комп, котёл просто переключится на работу по графику и всё.

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #49 : 22 Марта 2016, 13:05:39 »
Добрый день уважаемые форумчане и хозяева этой великолепной программы "Simple-Scada 2".

Подскажите пожалуйста в правильном направлении я мыслю или есть другой вариант решения этой задачи.
Задача:
   Есть переменные типа DWORD, в них хоронятся состояния 225 кнопок управления двигателями (ну типа АВТО, РУЧНОЙ включен. РУЧНОЙ выключен,) мне нужно забрать эту информацию и отоброзить в SCADA.
Как видно из кода ниже, я использовал виртуальную переменную.
Может быть есть возможность на прямую работать с битом переменной  ? 

Код: (delphi)
begin
bool1.Value := GetBit(dword.Value,0); // Забираем нужный bit из "dword" в виртуальную переменную "bool1".
  case bool1.ValueAsInt of // Дальше работаем с виртуальной переменной "bool1".
    0:Button1.States[0].Color  := RGB(60,70,80);
    1:Button1.States[0].Color  := RGB(0,95,88);
  end;
  case bool1.ValueAsInt of
    0:Button1.States[0].BorderColor := RGB(60,70,80);
    1:Button1.States[0].BorderColor := RGB(0,95,88);
  end;

bool2.Value := GetBit(dword.Value,1);
  case bool2.ValueAsInt of
    0:Button2.States[0].Color  := RGB(60,70,80);
    1:Button2.States[0].Color  := RGB(0,95,88);
  end;
  case bool2.ValueAsInt of
    0:Button2.States[0].BorderColor := RGB(60,70,80);
    1:Button2.States[0].BorderColor := RGB(0,95,88);
  end;

  // и тд. и тп.
end.
« Изменён: 26 Мая 2018, 10:26:33 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #50 : 22 Марта 2016, 13:38:10 »
Да, есть такая возможность. Можно изменить код вот так, не используя виртуальные переменные:
Код: (delphi)
begin
  // если нулевой бит равен 1
  if GetBit(dword.Value, 0) then
  begin
    Button1.States[0].Color  := RGB(0,95,88);
    Button1.States[0].BorderColor := RGB(0,95,88);
  end else
    // если нулевой бит равен 0
    begin
       Button1.States[0].Color  := RGB(60,70,80);
       Button1.States[0].BorderColor := RGB(60,70,80);
    end;

  // если первый бит равен 1
  if GetBit(dword.Value, 1) then
  begin
    Button1.States[0].Color  := RGB(0,95,88);
    Button1.States[0].BorderColor := RGB(0,95,88);
  end else
    // если первый бит равен 0
    begin
      Button1.States[0].Color  := RGB(60,70,80);
      Button1.States[0].BorderColor := RGB(60,70,80);
    end;
end.
Может быть мы бы могли посоветовать решение ещё лучше, но нужно подробнее понять задачу. Опишите подробно, как должна работать кнопка и как она должна менять свои состояния? Вы точно хотите менять состояние кнопки в зависимости от разных битов? Т.е. сначала в коде вы проверяете нулевой бит, потом проверяете первый бит. Так и должно быть?
« Изменён: 26 Мая 2018, 10:27:01 от Simple-Scada »

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #51 : 22 Марта 2016, 14:15:07 »
Извините но я в скрипте выше допустил ошибку. там кнопки разные. сей час исправил.
Цитировать
Может быть мы бы могли посоветовать решение ещё лучше, но нужно подробнее понять задачу. Опишите подробно, как должна работать кнопка и как она должна менять свои состояния? Вы точно хотите менять состояние кнопки в зависимости от разных битов? Т.е. сначала в коде вы проверяете нулевой бит, потом проверяете первый бит. Так и должно быть?
Сама кнопка(без фиксации) в SCADA работает c bool переменной PLC.(т.е. включает АВТО режим узла/агрегата с помощью переменной btnAUTO, ручной режим работы с помощью btnMANUAL) а вот состояние этого узла/агрегата(что он действительно переключился в тот или иной режим работы) приходит из PLC другой переменной типа DWORD. У каждого состояня того или иного узла/агригата свой bit той самой DWORD.
Мне бы хотелось что бы кнопка в SCADA ,которая отвечает за переключение режима ,меняла свой цвет при смене бита отвечающего за ее состояние. 

В принципе скрипт который Вы написали мне очень даже подходит. Спасибо огромное за помощь.
P.S
Так как я не очень силен в паскале (Точнее совсем не силен) объясните дурачку пожалуйста(если не сложно) от куда берется состояние бита , ведь в условии только только бит с которым нужно работать. 
Все понял сдесь как в ST он при вызове априори TRUE а далее ELSE делает свое дело.
« Изменён: 22 Марта 2016, 15:30:10 от deldemo »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #52 : 22 Марта 2016, 18:45:28 »
Да, исходя из всего вышеописанного Вы должны использовать скрипт, который мы предложили. Т.к. кнопки должны работать с одной переменной, а менять свой вид (цвет и цвет рамки) должны в зависимости от значения бита другой переменной - то здесь можно предложить только это решение.

Цитировать
от куда берется состояние бита , ведь в условии только только бит с которым нужно работать
Если подробно, то GetBit - это функция, которая берет нужный бит из целого числа и возвращает его значение как тип Boolean. Т.е. если этот бит равен 1, то она вернёт True, если этот бит равен 0 то она вернёт False. Это позволяет писать так:

Код
if GetBit(dword.Value, 0) then
  ...
else
  ...

, а это одно и то же, что и:
Код
if GetBit(dword.Value, 0) = True then
  ...
else
  ...

Т.к. GetBit возвращает Boolean, а не какой-то другой тип, то мы может использовать сокращенное сравнение, как в первом варианте.

А ещё можно писать так:

Код
if not GetBit(dword.Value, 0) then
  ...
else
  ...

, это одно и то же, что и:
Код
if GetBit(dword.Value, 0) = False then
  ...
else
  ...
« Изменён: 22 Марта 2016, 18:48:00 от Simple-Scada »

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #53 : 22 Марта 2016, 21:01:39 »
Спасибо большое за пояснение.!!!!!

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #54 : 22 Марта 2016, 22:31:06 »
Вечер добрый. Работая со скриптом обнаружил проблему, что поле ввода через которое запускается скрипт OnDataChange (тот самый который вы мне посоветовали) не может принять максимальное значение переменной DWORD (или longWORD) так как максимальную ШКАЛУ можно сделать только от -2147483648 до 2147483647,
 а вот от 0 до 4294967295 (в принципе те же 32 бита) нельзя.

Провел сегодня опыт :
Создал 32 кнопки каждой кнопке присвоил свой бит одной переменной типа longWord.
Создал поле , прикрепил к этому полю  longWord.
При присвоении 31 биту (или кнопке) TRUE значение отображается в поле нормально ,
а вот 32 бит уводит значение поля в -1. что есть не очень хорошо.
Будьте добры добавьте Шкалу от 0 до 4294967295


« Изменён: 23 Марта 2016, 15:05:24 от deldemo »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #55 : 23 Марта 2016, 23:44:47 »
deldemo, исправим!

int2246

  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #56 : 07 Апреля 2016, 09:35:49 »
Здравствуйте. Интересует вот такой вопрос. Можно ли с помощью скриптов вписать в фигуру допустим  прямоугольник отображения программы допустим браузера  или программы отображения изображений с камеры?  И чтобы она отобразилась в этом прямоугольники со свойствами как на весь экран? Если это возможно то хотелось бы удивить пример скрипта.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #57 : 07 Апреля 2016, 09:40:24 »
Нет, такой возможности нет. Если Вам, к примеру, нужно вывести изображение с камеры и постоянно видеть его, то придется делать это сторонней программой и выводить на второй монитор. Или делать всё с одним монитором, но в этом случае придется постоянно сворачивать скаду, чтобы посмотреть камеру.
« Изменён: 07 Апреля 2016, 09:41:16 от Simple-Scada »

int2246

  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #58 : 07 Апреля 2016, 09:51:54 »
Это само самой разумеется, просто хотелось наблюдать из скады  за происходящим.  А на всею страницу сделать нельзя?
« Изменён: 07 Апреля 2016, 10:06:18 от int2246 »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3110
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #59 : 07 Апреля 2016, 13:03:56 »
Нет, в данном случае Вы по сути хотите вставить в окно скады другое приложение. Это не получится из-за особенностей отрисовки скады. Добавить такую возможность - можно, но это может привести к появлению недостатков связанных со скоростью и стабильностью работы и добавит в скаду несколько уязвимостей.