Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

AJR


lipvasko

добрый день ,подскажите , а почему многие скрипты не работают в вэб , например  вызов окна,  как то можно в будущем это изменить

Simple_Scada

#887
Здравствуйте.

ЦитироватьМожно подробнее?
Поясните пожалуйста, что именно требуется объяснить подробнее?

Цитироватьдобрый день ,подскажите , а почему многие скрипты не работают в вэб , например  вызов окна,  как то можно в будущем это изменить
С ограничениями, имеющимися при работе через web-клиент можно ознакомиться по ссылке. Привязка окон в web-клиенте, а также событие OnClick работает только у компонентов "Кнопка", "Флажок", "Список" "Фигура", "Текст", "Изображение", "Трубопровод", "Линия", "Резервуар", "Заслонка". Посмотреть пример вызова окон в web через скрипты можно на нашем web-сервере -> страница "Скрипты" -> пример №8. Если не получится разобраться, пришлите нам для проверки папку с проектом из директории "\Simple-Scada 2\Projects\Имя_проекта" на support@simple-scada.com и укажите какой скрипт не работает.

AJR

Подробнее о скрипте. Как два тега с опс сервера привязать.

Victor_P.

Цитата: AJR от 02 августа 2019, 10:02:11Подробнее о скрипте. Как два тега с опс сервера привязать.
А инструкцию читать не пробовал? Говорят, что помогает иногда.

Simple_Scada

Здравствуйте.

ЦитироватьПодробнее о скрипте. Как два тега с опс сервера привязать.
Добавить теги с OPC-сервера можно одним из следующих способов:

1. Импорт тегов с OPC DA, OPC UA сервера.
2. Импорт из файла.
3. Добавление вручную.

После этого теги будут видны в редакторе переменных и с ними можно работать в проекте и скриптах.

lipvasko

#891
Добрый день , возможно ли сделать разбор строки , несколько значений через разделитель, и второе главное , возможно из одного скрипта вызвать другой скрипт, если да то как , какой синтаксис.

lipvasko

#892
Добрый день , ещё вопрос есть скрипт  в редакторе проходит компиляцию, а при сохранении нет , постоянно ищет begin или пишет внутренняя ошибка в ядре скады строка 0 символ 0, менял конструкцию разными способами , результат 0. Насколько понимаю работать это не хочет , а мне очень надо, что бы не плодить кучу скриптов .
Код: pascal
var
  i: integer;
  sw: string;
begin
  i := 99;
  while i <= 0 do
  begin
    sw := IntToStr(i);
    if FileExists('vesy_1_'+sw.'txt', 'C:Base/') and (read.Value) then
      RenameFile('C:Base/vesy_1_'+sw.'txt', 'C:Base/vesy_1.txt')
  end;

  i := i - 1;
  end;
end.

Миханик

Странно почему проходит компиляцию в редакторе - у вас в этом цикле один "end;" лишний, скорее всего первый
Код: pascal
  begin
    sw := IntToStr(i);
    if FileExists('vesy_1_'+sw.'txt', 'C:Base/') and (read.Value) then
      RenameFile('C:Base/vesy_1_'+sw.'txt', 'C:Base/vesy_1.txt')
  end;
 
  i := i - 1;
  end;
и вы уверены, что вот здесь: "while i <= 0 do" правильное условие? Может нужно изменить знак на ">"?

lipvasko

Цитата: Миханик от 14 августа 2019, 04:57:41Странно почему проходит компиляцию в редакторе - у вас в этом цикле один "end;" лишний, скорее всего первый
Код: pascal
  begin
    sw := IntToStr(i);
    if FileExists('vesy_1_'+sw.'txt', 'C:Base/') and (read.Value) then
      RenameFile('C:Base/vesy_1_'+sw.'txt', 'C:Base/vesy_1.txt')
  end;
 
  i := i - 1;
  end;
и вы уверены, что вот здесь: "while i <= 0 do" правильное условие? Может нужно изменить знак на ">"?
да уверен, а по поводу енда, я же писал использовал разные конструкции , и энд убирал и добавлял беги и тд всегда один результат

pan2000

#895
Цитата: lipvasko от 13 августа 2019, 13:35:34Добрый день , возможно ли сделать разбор строки , несколько значений через разделитель, ...

Пример функции по разбору CSV-строки. Функция возвращает n-ое поле (n = 1..) или "пусто" для несуществующего поля.
Код: pascal
  function GetField(aStr: string; n: integer): string;
  var i, j: integer;
     aStr1: string;
  begin
    j := 1;                              // номер собираемого поля
    aStr1 := '';                         // собственно собираемое поле
    for i := 1 to Length(aStr) do begin
      if aStr[i] = ';' then begin        // проверить на разделитель 
        if j = n then begin 
          GetField := aStr1;             // поле найдено
          exit;
        end;
        aStr1 := ''; j := j + 1;         // на следующие поле
      end
      else aStr1 := aStr1 + aStr[i];     // продолжить собирать поле
    end;
    GetField := aStr1;                   // поле с номером n не найдено в строке
  end;


Цитировать. .  и второе главное , возможно из одного скрипта вызвать другой скрипт, если да то как , какой синтаксис.
Единственный вызвыаемый из другого скрипт это "Изменились переменные". Можно было использовать для общего кода.


Цитата: lipvasko от 13 августа 2019, 21:12:21Добрый день , ещё вопрос есть скрипт  в редакторе проходит компиляцию, а при сохранении нет ...
Исправленный код:
Код: pascal
var
  i: integer;
  sw: string;
begin
  i := 99;
Цитата: Миханик от 14 августа 2019, 04:57:41... и вы уверены, что вот здесь: "while i <= 0 do" правильное условие? Может нужно изменить знак на ">"?
Код: pascal
  while i > 0 do        // цикл выполнится 99 раз, i >= 0  - выполнится 100 раз 
  begin
    sw := IntToStr(i);
    if FileExists('vesy_1_' + sw + 'txt', 'C:Base/') and (read.Value) then  // ошибка выражения  +sw.'txt'
      RenameFile('C:Base/vesy_1_'+sw+'txt', 'C:Base/vesy_1.txt');
    i := i - 1;
  end;
end.

lipvasko

Спасибо , за + , все получилось !

lipvasko

#897
И еще вопрос , может кому то покажется глупым , но подскажите правила расстановки  end  end;  и ;   и без ;  ...... компилятор пропускает много вариантов их расстановки и этим путает, в других языках , все как то наглядней

Victor_P.

если в блоке всего одна строка кода, то ";" после нее можно не ставить
но лучше все-же ставить для однообразности кода

Neskad

Цитата: lipvasko от 13 августа 2019, 13:35:34Добрый день , возможно ли сделать разбор строки , несколько значений через разделитель, и второе главное , возможно из одного скрипта вызвать другой скрипт, если да то как , какой синтаксис.
Напрямую вызвать скрипт на выполнение из другого скрипта нельзя. Можно делать это косвенными методами (через событие "изменились переменные", "выполнен SQL-запрос"). Но вообще это обычно и не требуется. Если создать скрипт "глобальный модуль", то функции и переменные из этого модуля можно использовать в дальнейшем практически в любом другом скрипте. (насчет переменных - желательно не злоупотреблять).