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

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

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

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #240 : 16 Марта 2017, 12:10:07 »
Как правильно присвоить переменной Time_1 значение времени 08.00.00, которая будет являться константой?

Код
const
    Time_1 =(08, 00, 00);

или

Код
 var Time_1: TDataTime;
begin
 Time_1 := (08, 00, 00);

При попытке сделать так - выдает ошибку при компиляции EncodeTime:

Код
var
 Time_1 : TDateTime;
begin
 Time_1.Value :=  EncodeTime(8, 0, 0, 0);
end.     
« Изменён: 16 Марта 2017, 12:35:03 от AutoCY »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #241 : 16 Марта 2017, 20:37:47 »
AutoCY, тип TDateTime этот тот же самый тип Double (вещественное число) и при создании константы время придется задавать именно как вещественное число и это неудобно. При попытке сделать так - выдает ошибку при компиляции EncodeTime. Сейчас EncodeDate, EncodeTime не вынесены в скрипты. Добавим их в очередном обновлении. Но возможно Вашу задачу можно решить проще. Можете описать то, что нужно сделать в скрипте? Мы предложим решение.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #242 : 17 Марта 2017, 13:13:30 »
Цитировать
Но возможно Вашу задачу можно решить проще. Можете описать то, что нужно сделать в скрипте? Мы предложим решение.

Задача заключается в следующем: необходимо сделать таймер наработки оборудования с тремя интервалами во времени. Например, таймер формирует отдельные отрезки времени с 8.00 до 12.00, далее с 12.00 до 16.00 и т.д. При этом компонент таблица регистрирует эти данные в соответствующие ячейки. В результате, чтобы можно было проследить сколько работало оборудование в трех сменах в течении суток, скажем, за месяц.

Таймер будет включаться не только от времени, но еще и от дополнительных переменных. Как управлять таймером от переменных на данный момент времени я разобрался.
« Изменён: 17 Марта 2017, 13:14:23 от AutoCY »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #243 : 17 Марта 2017, 16:39:03 »
Простите, но это работа контроллера, а не скады...

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #244 : 17 Марта 2017, 16:51:23 »
Простите, но это работа контроллера, а не скады...
Да мне бы пока понять как включить и выключить таймер по определенному времени. А с контроллером...увы, в этом проекте я занимаюсь только скадой.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #245 : 17 Марта 2017, 18:04:21 »
Таймер будет включаться не только от времени, но еще и от дополнительных переменных. Как управлять таймером от переменных на данный момент времени я разобрался.
Ну так, а время это что, не переменная? Задайте в секундном скрипте проверку времени, и зависимо от смены переменной смена присваивайте значение 1,2,3.

Таймера тогда собсно тоже 3.
1 стартует если железо включено и смена=1, иначе стоп.
2...
3...


Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #246 : 20 Марта 2017, 09:44:50 »
необходимо сделать таймер наработки оборудования с тремя интервалами во времени. Например, таймер формирует отдельные отрезки времени с 8.00 до 12.00, далее с 12.00 до 16.00 и т.д. При этом компонент таблица регистрирует эти данные в соответствующие ячейки. В результате, чтобы можно было проследить сколько работало оборудование в трех сменах в течении суток, скажем, за месяц.
Но ведь в этом случае все накопленные в таблице записи будут потеряны при первом перезапуске сервера скады или проекта. К тому же, чтобы они добавлялись в таблицу придется на каждый интервал времени выделить переменные и связать ячейки таблицы с этими переменными. Причем если планируется выводить наработку за месяц добавляя по 3 новых строки в день, то получается что нужно создать 90 строк в таблице и заполнить все строки переменными. Плюс остается проблема с потерей данных при перезапусках. Такая система совсем не подходит для нормальной работы.

Правильнее было бы выводить наработки получая их из архива. Т.е. включить у нужных тегов архивацию а затем выполнять выборку из БД за нужный интервал времени и подсчитывать время наработки. Тогда даже после перезапуска сервера все наработки сохранятся. Только сейчас все это нужно делать в запросе и готовых функций для вычисления наработок средствами скады нет. Постараемся их добавить в ближайших обновлениях.
« Изменён: 20 Марта 2017, 09:45:29 от Simple-Scada »

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #247 : 20 Марта 2017, 12:41:09 »
Цитировать
Но ведь в этом случае все накопленные в таблице записи будут потеряны при первом перезапуске сервера скады или проекта. К тому же, чтобы они добавлялись в таблицу придется на каждый интервал времени выделить переменные и связать ячейки таблицы с этими переменными. Причем если планируется выводить наработку за месяц добавляя по 3 новых строки в день, то получается что нужно создать 90 строк в таблице и заполнить все строки переменными. Плюс остается проблема с потерей данных при перезапусках. Такая система совсем не подходит для нормальной работы.

Правильнее было бы выводить наработки получая их из архива. Т.е. включить у нужных тегов архивацию а затем выполнять выборку из БД за нужный интервал времени и подсчитывать время наработки. Тогда даже после перезапуска сервера все наработки сохранятся. Только сейчас все это нужно делать в запросе и готовых функций для вычисления наработок средствами скады нет. Постараемся их добавить в ближайших обновлениях.
C БД я займусь немного позже. А пока не пойму как сделать правильным сравнение по отрезку времени в четвертой строке:

Код
begin
      Timer_1.Value := Now;
       txtTimer_4.Text := TimeToStr(Now);
       if(Timer_1.Value > 07:00:00) and (Timer_1.Value < 15:00:00)  then
            begin
               { если выполнено условие, то включается таймер }
               vrIntervalInSec_3.Value := SecondsBetween(Now, vrTime_3.Value);
               { При включении таймера выводим накопленное время }
               txtTimer_3.Text := TimeToStr(Now - vrTime_3.Value);
               Image8.Color := clRed

            end
      else
         begin
         { если таймер ещё не включен }
         Timer_1.Value := IncSecond(Now, -vrIntervalInSec_3.AsInt);
         Image8.Color := clNone
         end;
  end.             
« Изменён: 20 Марта 2017, 12:42:34 от AutoCY »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #248 : 20 Марта 2017, 23:26:33 »
Цитировать
А пока не пойму как сделать правильным сравнение по отрезку времени в четвертой строке:
Т.е. нужно проверить, что час из значения Timer_1 больше 7 и меньше 15? Тогда нужно делать так:

Код
var
  aHour: Byte;
begin
  aHour := HourOf(Timer_1.AsDateTime);   // достаём час из переменной Timer_1 в переменную aHour
  if (aHour > 7) and (aHour < 15) then
    // ...
end.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #249 : 21 Марта 2017, 09:15:36 »
Цитировать
Тогда нужно делать так:
Спасибо за ответ.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #250 : 21 Марта 2017, 17:00:09 »
При попытке повторить видео-пример по работе с файлами, компиляция не получается: в первой строке выбивает ошибку Not enough actual parametrs:
 
Код
begin
  if FileOpen ('Hello.sbm') then
  begin
      FileWriteString (Field9.ValueAsStr);
      FileWriteInteger (Field7.ValueAsInt);
      FileWriteSingle (Field8.ValueAsFloat);
      FileWriteString (Text13.Text);
      FileWriteDateTime (Now);
  end;
end.
     

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #251 : 21 Марта 2017, 17:45:06 »
Здравствуйте!

С момента записи видеоурока функции FileOpen, FileRecreate, FileExists получили еще один параметр APath - задает полный путь к файлу. Если этот параметр оставить пустым (= ''), то будет взят стандартный путь: «..\Simple-Scada 2\Projects\Папка_проекта\User files\». Важно! При указании пути к файлу в конце обязательно должен быть символ «\».

Поэтому скрипт нужно изменить так:
Код
begin
  if FileOpen ('Hello.sbm', '') then  // если файл по стандартному пути успешно открыт, то …
  begin
      FileWriteString (Field9.ValueAsStr);
      FileWriteInteger (Field7.ValueAsInt);
      FileWriteSingle (Field8.ValueAsFloat);
      FileWriteString (Text13.Text);
      FileWriteDateTime (Now);
  end;
end.

AutoCY

  • Пользователь
  • **
  • Сообщений: 92
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #252 : 22 Марта 2017, 10:28:11 »
Цитировать
С момента записи видеоурока функции FileOpen, FileRecreate, FileExists получили еще один параметр APath - задает полный путь к файлу. Если этот параметр оставить пустым (= ''), то будет взят стандартный путь: «..\Simple-Scada 2\Projects\Папка_проекта\User files\». Важно! При указании пути к файлу в конце обязательно должен быть символ «\».

Рабочий код получился таким (без Value):
Код
begin
  if FileOpen ('Hello.sbm', '') then
  begin
      FileWriteString (Field9.AsStr);
      FileWriteInteger (Field7.AsInt);
      FileWriteSingle (Field8.AsFloat);
      FileWriteString (Text13.Text);
      FileWriteDateTime (Now)
  end;
end.             
По умолчанию файл сохранился там, где Вы и сказали. Но я не совсем понял, как указать пользовательский путь сохранения файла. Не могли бы пример привести для наглядности. Например, путь такой:
D:\Simple-Scada 2\Папка_файла\.
« Изменён: 22 Марта 2017, 10:39:34 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #253 : 22 Марта 2017, 10:38:14 »
Здравствуйте!

Пример:
Код
begin
  if FileOpen('Hello.sbm', 'D:\Simple-Scada 2\Папка_файла\') then
  begin
      FileWriteString (Field9.AsStr);
      FileWriteInteger (Field7.AsInt);
      FileWriteSingle (Field8.AsFloat);
      FileWriteString (Text13.Text);
      FileWriteDateTime (Now);
  end;
end.   
   
« Изменён: 22 Марта 2017, 10:39:48 от Simple-Scada »

ksapp

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #254 : 30 Марта 2017, 06:33:16 »
Здравствуйте.
Недавно начал изучать Simple-SCADA. Система интересная. Видимо, остановлюсь на ней (раньше не использовал SCADA, пробовал многие, но по разным причинам отказывался и продолжал создавать своё ПО для АСУ на Делфи). Появилось несколько вопросов по скриптам:

1) Можно ли как-то вызвать скрипт из другого скрипта
2) Можно ли как-то объявить глобальную процедуру/функцию
3) Можно ли выполнять скрипты, которые находятся во внешних файлах
4) Можно ли объявить глобальный класс/объект и связать с ним глобальную переменную, или, например, глобальный массив
5) Можно ли использовать API-Windows и DLL
6) Можно ли выводить в поля значения в двоичном или шестнадцатеричном виде
7) Немного напрягает отсутствие отмены изменений в редакторе скриптов (хотя кого я обманываю - сильно напрягает)))

Всем заранее спасибо.
« Изменён: 30 Марта 2017, 06:34:25 от ksapp »