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

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

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

Genrosol

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #630 : 12 Мая 2018, 14:36:03 »
Здравствуйте, уважаемые разработчики!
Некоторое время назад обсуждался такой вопрос:
Цитировать
Может в базе данных SQL стоит создать дополнительную таблицу, состоящую из двух или трех столбцов (ID переменной, имя переменной в Simple-Scada, описание переменной в Simple-Scada)? Таким образом SQL-клиент смог бы выдать пользователю список переменных с именами и описанием для дальнейшей работы с архивами.
Где вы ответили:
Цитировать
Можем реализовать такую таблицу, нот только после решения более популярных задач.
Это кстати помогло бы в решении проблемы, озвученной kedr'ом:
Цитировать
Можно ли в скрипте пробежаться по всем переменным проекта, группы или тем, у которых имя начинается с определённой строки?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #631 : 14 Мая 2018, 10:05:08 »
Здравствуйте.
Это кстати помогло бы в решении проблемы, озвученной kedr'ом:
ID переменных не подходят для перечисления в цикле, т.к. ID не упорядочиваются и могут содержать пропуски любого размера, соответственно поиск переменной по ID будет именно поиском (т.е. относительно "тяжелой" операцией), а не извлечением элемента по прямой ссылке. Для корректного перечисления переменных в цикле может подойти только глобальная переменная-массив со списком переменных.

Genrosol

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #632 : 14 Мая 2018, 15:59:02 »
Если я правильно понял, задача kedr'а изначально заключалась в поиске переменных, у которых имя начинается с определённой строки, а уже потом появилось предложение реализовать поиск по ID. Соответственно, имею в БД таблицу со списком всех переменных, через SQL-запросы можно получать список переменных в любом необходимом виде.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #633 : 14 Мая 2018, 16:04:24 »
Да, но это будет список имён переменных и их ID. Судя по всему с ними нужно как-то работать после получения списка, а чтобы работать с самими переменными нужно получить объекты TM_Variable.
« Изменён: 14 Мая 2018, 16:04:56 от Simple-Scada »

Genrosol

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #634 : 14 Мая 2018, 16:38:50 »
Имеете ввиду, что придется пробежаться по каждому элементу полученного списка, используя при этом функцию GetVariableByName, и вся эта процедура отнимет много ресурсов ПК?

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
GetPing / StartPing
« Ответ #635 : 14 Мая 2018, 17:36:11 »
Подскажите, пожалуйста, логику работы StartPing / GetPing.
У меня в проекте несколько устройств часто "отваливаются" на время ATimeOut в StartPing.

Обычно принято считать связь утерянной после нескольких потерянных пингов подряд.
Но для StartPing нельзя задать кол-во пингов.

Неужели GetPing выдает False после первого же утерянного пинга?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #636 : 14 Мая 2018, 17:45:45 »
Имеете ввиду, что придется пробежаться по каждому элементу полученного списка, используя при этом функцию GetVariableByName, и вся эта процедура отнимет много ресурсов ПК?
Нагрузка на ПК будет зависеть от его конфигурации. Это будет просто плохой подход, вместо прямого перебора будет поиск переменной по имени / ID.

Неужели GetPing выдает False после первого же утерянного пинга?
Функция GetPing не учитывает кол-во попыток или предыдущие попытки. Она возвращает False, если последняя попытка пинга не удалась, т.е. устройство не ответило за отведённое ему время. Возвращает True в ином случае.

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #637 : 14 Мая 2018, 20:12:46 »
Плохо.
Даже невозможно ввести собственный счетчик неудачных GetPing для устройства, поскольку программа не поддерживает массивы, сохраняющие значения между вызовами скрипта.
Какие будут советы и предложения? Кол-во пингуемых устройств - около сотни.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #638 : 15 Мая 2018, 09:40:19 »
Подсчет неудачных попыток сейчас можно реализовать только используя отдельные внутренние переменные в качестве счетчиков. Если останется немного свободного времени, то постараемся включить в ближайшее обновление отдельное событие для пинга.

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #639 : 15 Мая 2018, 16:02:18 »
Да, создал переменные vNumPing1, vNumPing2... в отдельной группе.
Суть не сильно отличается от использования массива, хотя более ресурсоемко.

По поводу события для пинга.
Это хорошо, но придётся в любом случае от IP-адреса как-то переходить к объекту. Напрашивается глобальный хэшированный массив. Или объект типа TCollection с поиском по ключу.
Ну, или можно в TM_Control добавить текстовое поле Key и реализовать глобальную функцию типа GetControlByKey.
« Изменён: 15 Мая 2018, 16:07:38 от kedr »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #640 : 15 Мая 2018, 16:03:21 »
Подскажите плз, можно ли обратиться с SQL-запросом к чужой (не своей) базе данных?

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #641 : 16 Мая 2018, 05:30:00 »
Цитировать
Подскажите плз, можно ли обратиться с SQL-запросом к чужой (не своей) базе данных?
Для БД MySQL (при наличии прав доступа) удаётся обратиться с запросом к системной (чужой?) БД при условии,
что имя таблицы полное и не заключено в кавычки ``.

Кавычки ``, судя по сообщению об ошибке запроса, добавляют имя выбранной БД к имени таблицы.
Как и для всякой недокументированной возможности, применение остается на свой страх и риск.

Скрипт типа "Полностью запущен" заполняет таблицу информацией о всех таблицах БД, выбранной в проекте.
Код: (delphi)
begin
  Table1.Title := 'Таблицы БД    ' + GetDatabaseName;
  Table1.RunSQL('SELECT `TABLE_NAME`, `TABLE_ROWS`, `TABLE_COMMENT` FROM '
    + 'INFORMATION_SCHEMA.TABLES'              // полное имя таблицы не заключено в кавычки  ` `
    + ' WHERE `TABLE_SCHEMA` = ''' + GetDatabaseName + ''';', tsAll);
end.

Полностью пример (с отключенной БД) в приложении.
« Изменён: 26 Мая 2018, 10:08:07 от Simple-Scada »

kedr

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #642 : 16 Мая 2018, 23:02:22 »
Речь идет о БД другой системы, не Simple-Scada, на другом компьютере.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #643 : 16 Мая 2018, 23:47:03 »
Подключиться к сторонней БД и получить из неё данные можно только в отчеты, используя систему отчетов (Reports.exe). Работать напрямую из проекта со сторонней БД сейчас нельзя.
« Изменён: 16 Мая 2018, 23:48:06 от Simple-Scada »

EricFlat

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #644 : 23 Мая 2018, 15:06:56 »
Здравствуйте. Отладчика скриптов нет и не планируется в системе? Вопрос для меня критичный, не хочется для проверки скриптов каждый раз перезапускать клиента