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

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

Автор Тема: Вызов своего скрипта другим скриптом или своего метода  (Прочитано 1824 раз)

yukiaire

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Здравствуйте, подскажите пожалуйста, могу ли я вызвать один скрипт в другом в проекте? Я  новый пользователь, не могу найти информацию по данному вопросу в руководстве

Или другой вопрос, как мне вызвать метод который я написала в теле этого же скрипта?
Код: (delphi)
var
  flag: Boolean;
begin
  If Button1.ActiveState=1 then
     flag:=True;
     if S7Tag_Q00.AsBool then
     begin
     Button1.Color := clGreen;
     Button2.Color := clRed;
     end;
     if not S7Tag_Q00.AsBool then
     begin
     Button1.Color := clRed;
     Button2.Color := ClGreen;
     end;
     if flag then
     begin
 While (Shape2.X < 488) AND (Shape3.X < 528)  do
   begin
   Shape2.X := Shape2.X + 8;
   Shape3.X := Shape3.X + 8;
   end;
   Buttons.Delay(5); // например, здесь мне нужно вызвать свой метод Delay - как это правильно реализовать?

 end;
   If Button2.ActiveState=1 then
     flag:=False;
     if flag=False then
     begin
 While (Shape2.X > 192) AND (Shape3.X >232)  do
   Shape2.X := Shape2.X - 8;
   Shape3.X := Shape3.X - 8;
 end;
end.

procedure Delay(Time: Integer);
var
  aTimer: Byte;

begin
  if aTimer < Time then

    aTimer := aTimer + 1;  // каждую секунду увеличиваем счетчик на 1
    if aTimer = Time then     // если прошло 5 секунд
      aTimer := 0;        // то обнуляем переменную
 end.
« Изменён: 24 Ноября 2022, 18:01:22 от Simple Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1173
    • Просмотр профиля
Здравствуйте.

Цитировать
могу ли я вызвать один скрипт в другом в проекте?
Если требуется вызывать свои процедуры/функции в разных скриптах, то для этого можно использовать глобальный модуль.

Цитировать
как мне вызвать метод который я написала в теле этого же скрипта?
Пример использования подпроцедур можно найти по ссылке.


Приведенный код выполняется по нажатию на кнопку? Тогда подпроцедура Delay работать не будет, т.к. данный код будет выполнен один раз при нажатии на кнопку, а также из-за того что в подпроцедуре используется локальная переменная aTimer. Локальные переменные скрипта инициализируются при каждом выполнении скрипта, поэтому их нельзя использовать для подсчета секунд.

Код "While (Shape2.X > 192) AND (Shape3.X >232)  do" в данном скрипте также не имеет смысла, т.к. выполнится мгновенно и это будет аналогично записи:
Код: (delphi)
Shape2.X := 192;
Shape3.X := 232;

Если в скрипте требуется написать обратное условие, то используйте ключевое слово else:
Код: (delphi)
if S7Tag_Q00.AsBool then
  begin
    Button1.Color := clGreen;
    Button2.Color := clRed;
  end else
  begin
    Button1.Color := clRed;
    Button2.Color := ClGreen;
  end;

Судя по Вашему скрипту, Вы пытаетесь сделать задержку при выполнении скрипта. В скаде задержку можно реализовать только на основе таймеров или событий. Таймерные функции рассмотрены по ссылке. Пример работы с таймерами можно найти в демо-проекте -> страница "Скрипты" -> "Простые скрипты (1)" -> пример №3. Пример простейшего таймера можно посмотреть по ссылке. Реализация подобных задержек - это максимально плохой и ненадежный способ. Правильнее и проще решать подобные задачи на контроллере.

Также, Вы можете прислать на support@simple-scada.com текущую версию Вашего проекта и максимально подробно описать, что именно требуется сделать. Возможно мы предложим решение.
« Изменён: 25 Ноября 2022, 12:23:02 от Simple_Scada »

yukiaire

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
спасибо большое за такое подробное разъяснение, буду пробовать)