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

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

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #900 : 14 Августа 2019, 11:19:10 »
И еще вопрос , может кому то покажется глупым , но подскажите правила расстановки  end  end;  и ;   и без ;  ...... компилятор пропускает много вариантов их расстановки и этим путает, в других языках , все как то наглядней
Символ ";" нужно ставить всегда в конце каждого блока кода. Примеры:
Код: (delphi)
// точка с запятой в конце блока if..then:
begin
  if (A = 0) then
    A := 1;
end.

// точка с запятой в конце блока if..then..else:
begin
  if (A = 0) then
    A := 1
  else
    A := 0;
end.

// точка с запятой в конце блока begin..end:
begin
  if (A = 0) then
  begin
    myProcedure_1;
    myProcedure_2;
  end;
end.

// точка с запятой в конце блока begin..end..else:
begin
  if (A = 0) then
  begin
    myProcedure_1;
    myProcedure_2;
  end else
    myProcedure_3;
end.

// точка с запятой и вложенные begin..end:
begin
  begin
    begin

    end else
      begin

      end;
  end;
end.

lipvasko

  • Пользователь
  • **
  • Сообщений: 65
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #901 : 15 Августа 2019, 17:43:44 »
Спасибо за ответы ,но  возник вопрос  есть запрос
Код: (delphi)
 procedure WriteValueToTable_1;
     var
    aQuery: string;
  begin
  aQuery := 'INSERT INTO `vesy_1` ' +
            '(`timestamp`, `silos_1`, `silos_2`, `silos_3`, `silos_4`, `ves`, `naklad`) VALUES ' +
            '(NOW(), ' +Vesy_1_silos_1.AsStr+ ', ' +Vesy_1_silos_2.AsStr+ ', '
             + Vesy_1_silos_3.AsStr+ ', ' + Vesy_1_silos_4.AsStr+ ', ' + Vesy_1_ves.AsStr+ ', ' +   vesy_1_naklad.AsStr+ ');';
 RunSQL(aQuery, nil, 0);
  end;
ну соответственно  есть и база созданная , в ней
Код
timestamp()
int
int
int
int
int
VARCHAR(20)
и все вроде в базу  грузится ,но  переменная  vesy_1_naklad. это строка , и  её содержание как правило  , что то вроде  99-356,  и вот я заметил ,что в базу грузится математическое выражение , в самом проекте все нормально и выводится , что надо, когда я сделал её кириллицей , загрузка прекратилась , т.е. SQL рассматривает ее так же интежером , где я ошибся в запросе на добавление и как сделать правильно
« Изменён: 16 Августа 2019, 11:42:10 от Simple-Scada »

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #902 : 16 Августа 2019, 08:05:13 »
Так QuotedStr(vesy_1_naklad.AsStr) нужно.

lipvasko

  • Пользователь
  • **
  • Сообщений: 65
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #903 : 16 Августа 2019, 16:28:14 »
Так QuotedStr(vesy_1_naklad.AsStr) нужно.
спасибо , заработало

Dmitry_Impuls

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #904 : 16 Августа 2019, 19:42:11 »
Добрый день.
Вопрос по работе с переменными...
Есть таблица (хранится в БД) ID переменной, еёимя и  требуемое значение.
Списки переменных и значений представляют собой наборы для проверок маршрутов (размеры списков разные).
Для проверки  сейчас используется запрос
Код: (delphi)
SELECT o.`VarName`,r.`Value` FROM `route` r,  `scadaobjects` o 

После его выполнения в цикле
Код: (delphi)
      aVar:=GetVariableByName(DataSet.Fields[0].AsUTF8String);
      if (Assigned(aVar)) and (aVar.Value=StrToInt(DataSet.Fields[1].AsUTF8String))
      then  ...
Но в таблице хранятся и ID переменной.

Вопрос - возможно ли обратиться к переменной по ID и не звать GetVariableByName?
« Изменён: 16 Августа 2019, 19:43:59 от Dmitry_Impuls »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #905 : 17 Августа 2019, 09:29:04 »
Здравствуйте.
Добавим поиск переменной по ID в ближайшем обновлении.

Kar

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #906 : 28 Августа 2019, 19:19:39 »
Здравствуйте,
Есть возможность наладить обмен сообщениями со сторонним приложением? Лучше через simple-scada сервер.
Укажите пожалуйста дорогу где копать?

Neskad

  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #907 : 29 Августа 2019, 09:00:12 »
Кажется, прямых документированных возможностей нет. Можно, например, через те-же OPC с виртуальными тегами, или через чтение-запись в общий файл, который можно и не на диске создать, а прямо в ОЗУ.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #908 : 29 Августа 2019, 09:22:29 »
Здравствуйте.

Обмениваться данными можно либо через общий OPC-сервер, либо через файлы, либо через БД. Например: приложение записало данные в БД, скада считала данные из БД. Или приложение изменило переменные на OPC-сервере, скада отобразила эти переменные. Аналогично от скады в приложение.

Миханик

  • Постоялец
  • ***
  • Сообщений: 182
    • Просмотр профиля
    • www.vpa-dv.ru
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #909 : 29 Августа 2019, 12:18:24 »
Добрый день.
Бьюсь с отправкой смс - если отправляю сообщение кирилицей, то всё нормально. Если отправляю на латинице, то приходит абракадабра (вложение). Что посоветуете?
Код: (delphi)
Level1 := 'L1=no data';
Level2 := 'L2=no data';
SendSMS(Field_PhoneNumber.AsStr, DateTimeToStr(Now) + ', s.Vozzhaevka, MK 492. Uroven mazuta: ' + Level1 + ', ' + Level2, false);

И второй вопрос: создаю внутренний тег типа String, включаю свойство "Автоматическое восстановление". В программе записываю в него номер телефона, и после перезапуска программы он не сохраняется, приходится заново его вбивать.
« Изменён: 29 Августа 2019, 12:21:17 от Миханик »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #910 : 29 Августа 2019, 12:53:12 »
Здравствуйте.
Какой тип данных у переменных Level1, Level2?

Цитировать
И второй вопрос: создаю внутренний тег типа String, включаю свойство "Автоматическое восстановление". В программе записываю в него номер телефона, и после перезапуска программы он не сохраняется, приходится заново его вбивать.
Можете выслать проект для проверки на support@simple-scada.com с указанием проблемной переменной?

Миханик

  • Постоялец
  • ***
  • Сообщений: 182
    • Просмотр профиля
    • www.vpa-dv.ru
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #911 : 30 Августа 2019, 04:41:04 »
По обоим вопросам написал на почту, так как проект общий.

Dmitry_Impuls

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #912 : 30 Августа 2019, 13:35:26 »
Добрый день.
Спасибо за оперативный ответ на предыдущий вопрос.

В документации сказано, что Ячейка (TM_TableCell) имеет свойство Variable и приведён пример
Код: (delphi)
  Table1.Columns[3].Cells[1].Variable.Value := 10;

В проекте есть 25 однотипных объектов с 64 свойствами.
Под объект приготовлено окно, делается привязка переменных при вызове окна OnShow
Код: (delphi)
var
  aNum : String;
  tblParam : TM_Table;
begin
  aNum:=IntToStr(Sender.Tag;);    // получили номер объекта
  tblParam := GetTableByName('tblParam'+aNum);
  if tblParam <> nil then
  begin
    tblParam.Tag:=IntToStr(Sender.Tag;); // передали его ниже
    tblParam.OnDataChangeEvent // обновили данные на объект
  end;
end;

Далее OnDataChangeEvent выводит актуальные данные (пример для времени шага)
Код: (delphi)
 tblParam := GetTableByName('tblParam'+aNum);
  if tblParam <> nil then
    with tblParam as TM_Table do
    begin
      Columns[2].Cells[1].Text:=SecondsToStr(GetVariableByName('StepRunTimeSet_T'+aNum+'_W').AsInt64);   
...
    end;

Оператору надо менять параметры техпроцесса. По OnCellClick попробовали менять переменную (тип в ОРС - на запись в контроллер)
Код: (delphi)
  begin
  with Cell do
    case Row of
       1:Variable.Value :=Text; // попытка присвоить отображаемое значение
       2:Variable.Value :=1800; // попытка писать число
...
    end;
  end;
Сервер выдаёт ошибку "Ошибка в скрипте Table_onClick в строке _номер_строки_с_присвоением_ Access violation at address 0389AA7. Read jf address 0CD1582."

Но варианты записи
Код: (delphi)
Table3.Columns[2].Cells[17].Variable:=GetVariableByName('StepMonTimeSet_T01_W');
StepMonTimeSet_T02_W.Value:=3600;
проходят успешно.

Получить тег объекта, чтоб определить имя переменной StepMonTimeSet_T01_W,StepMonTimeSet_T02_W ... StepMonTimeSet_T25_W нет возможности у процедуры параметр типа TM_TableCell.

Как быть в такой ситуации?

Dmitry_Impuls

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #913 : 30 Августа 2019, 14:57:24 »
:D
Как быть в такой ситуации?
очень просто... надо быть внимательней. Выводится текст, а меняется переменная... которой нет
после
  Columns[2].Cells[1].Text:=SecondsToStr(GetVariableByName('StepRunTimeSet_T'+aNum+'_W').AsInt64);
надо привязку всё-таки сделать...
  Columns[2].Cells[1].Variable:=(GetVariableByName('StepRunTimeSet_T'+aNum+'_W');
« Изменён: 30 Августа 2019, 15:15:15 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #914 : 31 Августа 2019, 09:42:55 »
И второй вопрос: создаю внутренний тег типа String, включаю свойство "Автоматическое восстановление". В программе записываю в него номер телефона, и после перезапуска программы он не сохраняется, приходится заново его вбивать.
Переменная успешно восстанавливает своё значение, но сразу стирается скриптом "Button_ClearPhoneNumber_OnDataChange", ведь при запуске проекта переменные инициализируются и происходит выполнение OnDataChange скриптов. Используйте событие OnClick вместо OnDataChange чтобы скрипт выполнялся только по клику на объект.

Бьюсь с отправкой смс - если отправляю сообщение кирилицей, то всё нормально. Если отправляю на латинице, то приходит абракадабра (вложение).
Сделали исправление при отправке на латинице,  обновление будет в ближайшее время.