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

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

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

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1170 : 04 Февраля 2021, 10:20:00 »
Потому, что true это только true и больше ничего, а false это все, что не true.
А вот фразу "понятно, что лучше использовать  AsBool и т.д.,но это часто неудобно." вообще не понял. Это требования/условия/синтаксис конкретного языка программирования. При чем тут удобство вообще?

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1171 : 23 Февраля 2021, 17:22:44 »
Я хочу добавить коды смайлов для отправки в телегу сообщений, дав им какие-то имена, чтобы можно было вставить нужный смайл в сообщение, обратившись к имени переменной(константы).

Я попробовал создать внутреннюю переменную String и предустановить в качестве значения код смайла, но обращение к этой переменной при формировании строки возможно только посредством обращения к свойству .Value. Но в таком случае вместо смайла в строку вставляется сам код.

Подскажите, можно ли, и если да, то как реализовать такой подход, чтобы я мог сопоставить коду смайла какое-то имя и использовать в коде скриптов именно это имя?
« Изменён: 23 Февраля 2021, 17:27:39 от metamorphogenesis »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3195
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1172 : 26 Февраля 2021, 22:23:36 »
Я попробовал создать внутреннюю переменную String и предустановить в качестве значения код смайла, но обращение к этой переменной при формировании строки возможно только посредством обращения к свойству .Value. Но в таком случае вместо смайла в строку вставляется сам код.
Не нужно создавать отдельную переменную через меню "Переменные". Объявите константу в коде скрипта, или в глобальном модуле и используйте её.
Код: (delphi)
const
  smile: string = #$274C;
begin
  //...
end.

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1173 : 08 Апреля 2021, 19:27:42 »
Добрый день. Спасибо за ответ. константы пробовал использовать, но компиляция почему-то не выполнялась (и было сообщение о внутренней ошибке компиляции без каких-либо ссылок на мои скрипты). Возможно это было связано с использованием версии 2.5.3 (у вас отмечалось, что в обновлении 2.5.4 исправлены какие-то проблемы с компиляцией строковых констант). Пока выкрутился написанием скрипта, который принимает строку с названием и возвращает строку с кодом. Вариант с константами мне нравится больше. Но это мелочи, и на данный момент проблема решена.

Сейчас вопрос в другом. Я хочу создать два виртуальных списка, один список содержит код продукта, второй список - название продукта (в роли второго списка будет выступать ComboBox). То есть человек будет видеть вменяемое название продукта и выбирать его из выпадающего списка, а дальше скрипт сопоставит выбранному продукту код из другого списка и выполнит некоторое действие над ним.
Все содержимое предполагается парсить снаружи из csv-файла.

Пытался применить код из руководства чтобы создать два списка в глобальном модуле, но при попытке компилировать указывает ошибку и выделяет строку с объявлением самой первой глобальной функции, которая следует сразу за этим кодом.

Код
var
    sl800ProductsNames, sl800ProductsCodes: TM_StringList;

implementation

initialization
    sl800ProductsNames := TM_StringList.Create;
    sl800ProductsCodes := TM_StringList.Create;

finalization
    FreeAndNil(sl800ProductsNames);
    FreeAndNil(sl800ProductsCodes);

Подскажите, пожалуйста, где ошибся? Если приведенный участок кода удалить, то компилируется без ошибок.

Вот скриншот редактора:

« Изменён: 08 Апреля 2021, 19:36:04 от metamorphogenesis »

pan2000

  • Постоялец
  • ***
  • Сообщений: 216
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1174 : 10 Апреля 2021, 00:52:11 »
   Здравствуйте, metamorphogenesis.

  Ошибка в том, что функция repeatSign оказалась в разделе finalization. Её нужно перенести в раздел implementation:
Код: (delphi)
interface
var
    sl800ProductsNames, sl800ProductsCodes: TM_StringList;

function repeatSign(const sign: string; const count: integer): string;

implementation

function repeatSign(const sign: string; const count: integer): string;
var i: integer;
    temp: string;
begin
  temp := '';
  for i := 1 to count do temp := temp + sign;
  Result := temp;
end;

initialization
    sl800ProductsNames := TM_StringList.Create;
    sl800ProductsCodes := TM_StringList.Create;

finalization
    FreeAndNil(sl800ProductsNames);
    FreeAndNil(sl800ProductsCodes);
end.

Достаточно ли обосновано применение списков строк? Возможно проще использовать пару объектов ComboBox.

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1175 : 12 Апреля 2021, 08:26:21 »
Ошибка в том, что функция repeatSign оказалась в разделе finalization. Её нужно перенести в раздел implementation:

Спасибо большое. Теперь структура понятнее.


Достаточно ли обосновано применение списков строк? Возможно проще использовать пару объектов ComboBox.

Тогда один из комбо-боксов мне придется прятать, потому что пользователь будет взаимодействовать только с одним из них. А если комбо-бокс нужен только для того, чтобы хранить список, то разве создание самого списка без визуальной оболочки не было бы логичнее?

pan2000

  • Постоялец
  • ***
  • Сообщений: 216
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1176 : 12 Апреля 2021, 23:47:10 »
Тогда один из комбо-боксов мне придется прятать, потому что пользователь будет взаимодействовать только с одним из них. А если комбо-бокс нужен только для того, чтобы хранить список, то разве создание самого списка без визуальной оболочки не было бы логичнее?
Да, конечно.

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1177 : 13 Апреля 2021, 16:36:30 »
Коллеги, подскажите.

Почему этот код работает
Код: (delphi)
while not TextFileEOF do 
    AddMessage(Now, mkMessage, TextFileReadLn, True, True);

А этот - нет?
Код: (delphi)
var line: String;
...
while not TextFileEOF do begin
    line := TextFileReadLn;
    AddMessage(Now, mkMessage, line, True, True);
end;

Уже два дня бьюсь над скриптом, пока методом исключения не добрался до данного вопроса.  :-\
И еще второй, чуть туповатый вопрос: Как вы прикладываете именно delphi-код в сообщение на форуме?
« Изменён: 14 Апреля 2021, 08:26:25 от metamorphogenesis »

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 166
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1178 : 14 Апреля 2021, 08:14:22 »
Коллеги, подскажите.
Могу конечно ошибаться, но может функция не принимает значение переменной
procedure AddMessage(ATime: TDateTime; AKind: TM_MessageKind; const AText: string; AUnconfirmed, ASound: Boolean);
там указано const, важно это или нет хз. То есть текст в ' ' она берет нормально, возвращаемое значение из функции чтения из файла тоже, а из локальной переменной нет. А пробовали не в локальную переменную писать а во внешнюю?
P.S. для выделения кода надо указать "code=delphi"
« Изменён: 14 Апреля 2021, 08:16:41 от Timothy Clement »

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1179 : 14 Апреля 2021, 08:46:39 »
Могу конечно ошибаться, но может функция не принимает значение переменной
Проверил ваше предположение. Скорее всего причина не в этом, потому что этот код работает:
Код: (delphi)
var line: String;
...
line := 'test';
AddMessage(Now, mkMessage, line, True, True);
По всей видимости проблема именно в строке line := TextFileReadLn;

За подсказку по делфи благодарю.
« Изменён: 14 Апреля 2021, 09:43:20 от metamorphogenesis »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3195
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1180 : 14 Апреля 2021, 11:28:27 »
metamorphogenesis, почему Вы решили что код не работает? Оба варианта о которых Вы пишете работают правильно, в том числе в Вашем проекте, который Вы высылали на почту техподдержки (оба варианта одинаково выводят строки из текстового файла в сообщения). После вызова скрипта проверьте журнал сервера скады, может быть у Вас скрипт вовсе не выполняется из-за ошибок в других частях кода и его выполнение прерывается. Если так, то в журнале сервера будет выведено аварийное сообщение.

Если разобраться не получается, то вышлите новую версию проекта, в которой, как Вы считаете есть проблема, потому что проверять приведённые Вами части кода бессмысленно, т.к. они идентичны и работают одинаково.

Кстати, в ходе теста обнаружили грубую ошибку в скрипте "Global_script". Ключевое слово "end." стоит перед секциями "initialization" и "finalization", поэтому они никогда не выполняются. В результате скрипт "load_OnClick" будет прерываться на 68 строке. "end." обязательно должен быть в конце модуля:
Код: (delphi)
...
// warning sending
procedure sendWarning;
begin
    sendDirect('А сообщения об аварии я буду отмечать таким значком - ' + ICON_WARNING);
end;

initialization
    sl800ProductsNames := TM_StringList.Create;
    sl800ProductsCodes := TM_StringList.Create;

finalization
    FreeAndNil(sl800ProductsNames);
    FreeAndNil(sl800ProductsCodes);

end.

metamorphogenesis

  • Пользователь
  • **
  • Сообщений: 58
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1181 : 14 Апреля 2021, 13:17:07 »
Кстати, в ходе теста обнаружили грубую ошибку в скрипте "Global_script". Ключевое слово "end." стоит перед секциями "initialization" и "finalization", поэтому они никогда не выполняются. В результате скрипт "load_OnClick" будет прерываться на 68 строке. "end." обязательно должен быть в конце модуля:
Именно это и было причиной проблемы. Большое спасибо за указание на эту ошибку, даже не знаю, сколько я бы искал еще.

strs

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1182 : 15 Апреля 2021, 09:59:49 »
Здравствуйте!

Есть необходимость перехода на другие подстраницы по нажатию на текст. Я взял код из примера и заменил на нем TM_Button на TM_Text

Код
var
  aSubPage: TM_SubPage;
begin
{ ищем подстраницу с именем SubPage + значение свойства Тэг }
  aSubPage := GetSubPageByName('SubPage' + IntToStr((Sender as TM_Text).Tag));
  if aSubPage <> nil then                      // если подстраница существует
    aSubPage.GoToSubPageClient(GetClientName); // то, перейти на нее
end.

В обычном клиенте все прекрасно работает, а в web-клиенте - нет. Текст выделяется при наведении, но при клике ничего не происходит.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1363
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1183 : 15 Апреля 2021, 11:07:23 »
Здравствуйте.

Проверили, переход по страницам по нажатию на текст в web работает корректно.

1. Откройте настройки проекта -> Общие -> опция Web-доступ. У Вас установлен доступ "с управлением"? Если нет, то скрипты по нажатию на объекты выполняться не будут. Установите данную опцию "с управлением", сохраните проект, перезапустите его на сервере и протестируйте снова.
2. В web отрисовка производится средствами браузера, поэтому важно, чтобы объект который должен быть доступен для клика находился в верхнем слое и не был перекрыт другими объектами. Можно выделить объект текст, перейти в меню "Действия" и нажать "На передний план". После чего можно сохранить проект, перезапустить его на сервере и протестировать работает ли переход?

Если причина не в перечисленном выше, то пришлите нам для проверки на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\Имя_проекта" и укажите, какие объекты Текст нужно проверить.

strs

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1184 : 15 Апреля 2021, 11:29:26 »
Причина была в веб-доступе без управления, спасибо!