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

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

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #90 : 24 Мая 2016, 11:49:36 »
Demo-версия обновлена. beloleg86, теперь Ваш скрипт должен корректно работать для аналоговых заслонок (т.е. для заслонок у которых включено свойство "Показать поле").

Вай-Вай, ошибка со слоями устранена.

Вообще, в этом обновлении довольно много изменений, но пока не будем публиковать официальное обновление, т.к. на днях решим ещё несколько вопросов и выложим официально.

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #91 : 24 Мая 2016, 14:39:23 »
Спасибо а как обновить версию Стандарт на 1000 точек, при покупке вы дали ссылку на скаду, можно ли с нее обновиться? Лицензия оформлена на ОАО "ЮКЭК-Белоярский" "и еще в редакторе и в клиенте выскакивает ошибка и система закрывается когда заходишь в меню О программе

Код
Сигнатура проблемы:
  Имя события проблемы: APPCRASH
  Имя приложения: Editor.exe
  Версия приложения: 2.0.0.0
  Отметка времени приложения: 573aa805
  Имя модуля с ошибкой: KERNELBASE.dll
  Версия модуля с ошибкой: 6.1.7601.18229
  Отметка времени модуля с ошибкой: 51fb1116
  Код исключения: 0eedfade
  Смещение исключения: 0000c41f
  Версия ОС: 6.1.7601.2.1.0.256.1
  Код языка: 1049
  Дополнительные сведения 1: f26e
  Дополнительные сведения 2: f26e409a6454e93683a6b9f907943f95
  Дополнительные сведения 3: 8c82
  Дополнительные сведения 4: 8c82d1f2107cefd2c06d5af805433944
« Изменён: 24 Мая 2016, 15:03:35 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #92 : 24 Мая 2016, 14:44:42 »
beloleg86, ближе к ночи мы добавим ещё несколько изменений и исправлений и вышлем Вам ссылку на обновление.

Цитировать
и еще в редакторе и в клиенте выскакивает ошибка и система закрывается когда заходишь в меню О программе
Сейчас проверим.

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #93 : 24 Мая 2016, 23:11:24 »
Вопрос по скрипту ToExcel. Пробовал его использовать, но результат - создается пустой Excel`евский файл.
   Переменная Try2 - внутренний тег с частотой записи в тренд 1сек. База подключена и я через WorkBench вижу что значения туда пишутся. Скрипт я использовал из руководства с небольшими изменениями.
Код
var
aBegin, aEnd: TDateTime;
begin
   aEnd := Now; // конец интервала – текущая дата;
   aBegin := IncSecond(aEnd, -10); // начало интервала – текущая дата – 10 секунд;
   Try2.ToExcel ('', aBegin, aEnd, evtAll, False);
end.           
Результатом по идее должно быть 10 значений. В базе записей меньше, явно не с секундным интервалом, а по изменению - видимо это оптимизация. Все равно что-то же должно быть выведено в файл, а  он пустой. Что я делаю не так?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #94 : 24 Мая 2016, 23:22:43 »
Цитировать
В базе записей меньше, явно не с секундным интервалом, а по изменению - видимо это оптимизация.
Да, это из-за оптимизации. Помимо неё, есть ещё одна оптимизация из-за которой Вы можете получать пустой файл экспорта. Дело в том, что вершины трендов не добавляются в БД сразу, т.к. это может привести к плохим последствиям, если таких трендов будет много. Поэтому вершины сначала накапливаются в специальном буфере и только затем загружаются в БД одним большим SQL-запросом. Поэтому при формировании отчета за последние 10 секунд в БД с большой вероятностью этих данных не окажется. Но здесь есть, что улучшить. Например, мы можем сделать так, чтобы в результат выборки из БД добавлялись данные из буферов... и тогда экспорт всегда будет правильным (не касается экспорта по часам/дням/месяцам).
« Изменён: 24 Мая 2016, 23:24:11 от Simple-Scada »

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #95 : 24 Мая 2016, 23:38:46 »
Да в принципе это была тестовая задача. Мне лень было ждать, поэтому я и взял короткий интервал. Так что если переделка будет трудозатратна/ухудшит производительность скады  то и не надо.

Цитировать
Поэтому вершины сначала накапливаются в специальном буфере и только затем загружаются в БД одним большим SQL-запросом.
   А вот тогда другой вопрос, возникла мысль использовать БД для хранения массива значений. Выбрал фунцию записи в тренд при каждом изменении значения. Так вот сколько я не менял значение переменной -  в БД, судя по WorkBench ни одно изменение не записалось. А второй тренд пишущийся с интервалом в 1 сек туда заносится по изменению +когда нет изменений значения пишутся каждые 30 сек.
   Прошло уже минут 10 времени, в 1м тренде так обновлений и не было. Это из-за буфера? Похоже да. Поскольку все значения появились в БД при закрытии клиента. Если весь этот буфер висит в оперативке, то так  при аварийном отключении питания можно большой кусок данных(по времени/ не по размеру) потерять. Выигрывает те, кто используют большое кол-во трендов -> большие объемы записываемых данных -> буфер быстро заполняется -> часто сбрасывается. Но задачи то бывают разные. Иногда пишутся показания нескольких счетчиков/регуляторов, там объемы данных небольшие. Может привязать оптимизацию/буфер к кол-ву трендов/частоте записи в проекте?
« Изменён: 25 Мая 2016, 10:26:50 от TeNQ »

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #96 : 25 Мая 2016, 10:06:35 »
Добрый день все мои вопросы решены, Теперь О программе вылетов нет как в редакторе так и в клиенте, заслонка работает как и надо как я и хотел... спасибо

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #97 : 25 Мая 2016, 14:38:23 »
TeNQ, да, выгрузка буфера в БД должна зависеть от времени. Особенно это применимо для варианта "при каждом изменении". На выходных планируем сделать официальное обновление. В нем этот вопрос будет решен.

toreto

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #98 : 26 Мая 2016, 14:26:50 »
Хотел организовать настройки цветовой темы проекта для каждого клиента, пробую записывать в файл, а потом во время инициализации читать, но как то не получается, может кто поделится идеей

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #99 : 26 Мая 2016, 17:03:44 »
Хотел организовать настройки цветовой темы проекта для каждого клиента, пробую записывать в файл, а потом во время инициализации читать, но как то не получается, может кто поделится идеей
   Ну тут наверное надо разделить задачи - сохранение/чтение в файл и задание цветовой темы для конкретного клиента.
   С первой задачей можно разобраться. Создать численные переменные Client_Colour_Scheme_X для каждого клиента соотвественно и сохранять/считывать их. Значения они будут принимать
0 - csGrey //тема серого цвета
1 - csDarkGrey //тема темно серого цвета. и тд.
   Со второй задачей у меня возникли проблемы. Я задал имя клиента через Options.exe. Читаю имя клиента функцией
GetClientName. А она ничего не возвращает. Хотя должна была вернуть строку с именем клиента. А значит и функция выбора цветовой схемы для конкретного клиента procedure SetColorSchemeClient (AClientName: UTF8String; AScheme: TM_ColorScheme); у меня не заработала.
« Изменён: 26 Мая 2016, 17:13:08 от TeNQ »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #100 : 26 Мая 2016, 19:01:59 »
toreto, для корректного решения данной задачи не хватает события OnInitializationClient, которое вызывалось бы клиентом при подключении к серверу, т.к. обычное событие OnInitialization не подойдёт, ведь оно вызывается сервером единожды - во время активации проекта. На выходных мы сделаем обновление, в котором эту задачу можно будет легко решить.

Цитировать
Читаю имя клиента функцией GetClientName. А она ничего не возвращает.
Видимо потому что она вызывается в скрипте OnDataChange? Если так, то все верно, ведь GetClientName возвращает имя клиента, который вызвал скрипт. А клиенты не имеют отношения к OnDataChange событиям, т.к. они вызываются сервером. Поэтому имя клиента в этом событии получить не удастся. В этом плане событие OnDataChange уникально и отличается от всех других, которые вызываются клиентами (OnClick, OnDblClick и т.д.). Сейчас опишем это в справке.
« Изменён: 26 Мая 2016, 19:04:17 от Simple-Scada »

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #101 : 26 Мая 2016, 19:38:48 »
Цитировать
Видимо потому что она вызывается в скрипте OnDataChange?
В скриптах OnInitialization.
Код
if GetClientName = 'Test' then 
    SetColorSchemeClient ('Test', csBrown);
Просто, чтобы проверить я написал в  OnSecondTimer.
Код
begin
  Text1.Text := 'Имя клиента = ' + GetClientName ;
  SetColorSchemeClient (GetClientName ,csBrown);
end.       
Имя не вывелось и схема не поменялась.
« Изменён: 26 Мая 2016, 19:46:24 от TeNQ »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #102 : 26 Мая 2016, 20:10:47 »
Верно, это же касается и всех других событий, которые вызываются сервером (OnInitialization, OnSecondTimer, OnHourTimer, OnExit).

Цитировать
Имя не вывелось и схема не поменялась.
Как Вы успели заметить SetColorSchemeClient не выполнилась, как и не выполнятся многие другие методы, т.к. этот скрипт будет вызван сервером. Как раз вчера мы сделали несколько изменений и теперь в серверных скриптах все методы будут работать, кроме тех, которые работают с данными клиента (на сегодняшний день это только одна функция GetClientName). А мы надеялись, что никто не заметит этого до очередного обновления.
« Изменён: 26 Мая 2016, 20:11:46 от Simple-Scada »

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #103 : 26 Мая 2016, 20:29:53 »
Вопрос о свойстве кнопке ActiveState. В редакторе состояний кнопки есть свойство Номер - порядковый номер состояния. Но порядковый номер состояния не соответствует таковому состоянию ButtonX.ActiveState. Например, для кнопки с фиксацией номер состояния в редакторе Отпущено - 1, Нажата - 2. В реальности при исполнении скрипта ActiveState кнопки в состоянии Отпущено - 0, Нажата - 1. Возможно это разные свойства и все работает так как надо, но сейчас в них можно запутаться, тем более что для кнопки с фиксацией доступно множество состояний.
« Изменён: 26 Мая 2016, 20:42:43 от TeNQ »

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #104 : 28 Мая 2016, 21:13:29 »
Дайте пример по скрипту пожалуйста, например есть три переменных типа Boolean: opened, closed, average есть изображение с тремя кадрами: 0 кадр - открыто, 1 кадр - закрыто,  2 кадр - промежуточное.
задача при изменении состояния переменных показывался кадр изображения соответствующей этой переменной