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

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

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - ARV

Страницы: [1] 2
1
Ваши вопросы / Ошибка SQL-запроса
« : 09 Января 2025, 11:38:39 »
Почему возникает такая ошибка, как на скриншоте?
Запрос вроде бы корректный SHOW TABLES LIKE 'ut_%';, во всяком случае в MySQL Workbench выполняется без проблем (второй скриншот).

2
Если попытаться установить "Не архивировать" для выделенной группы переменных, то это не происходит.

3
Вопрос такой: если имеется несколько скриптов типа "Выполнен SQL-запрос", каков порядок их обработки?
Или в проекте должен быть только один скрипт такого типа, который должен обрабатывать все возможные запросы?

Похоже, что вариант второй, но либо я проглядел, где это сказано, либо с этим надо что-то делать...

4
Ошибки / Баг редактора скриптов
« : 12 Декабря 2024, 09:33:34 »
Я обнаружил баг редактора скриптов, связанный с автозавершением ввода.
В глобальном модуле у меня есть константы, я их ввожу в скрипт, пользуясь Ctrl-Space - скриншот 1.
Однако, если я пытаюсь то же самое сделать для параметра функции, это не работает - скриншот 2.
НО!!! Если перед вызовом функции я начну и не закончу ввод (и даже не буду нажимать Ctrl-Space!!!), то внутри параметров функции автозавершение заработает! - скриншот 3.

Очень интересный баг, ведь недовведенная константа - это синтаксическая ошибка, и обычно при наличии синтаксических ошибок ПЕРЕД чем-либо делает это самое что-либо неподдающимся автоматизации... А тут наоборот.

P.S. Причем можно даже в параметре функции написать bs_ bs_ и на первом вхождении окно подстановок не появится, а на втором - появится.

5
Ваши вопросы / Copy-Paste
« : 10 Декабря 2024, 08:35:17 »
А что, Copy-Paste между проектами не работает?!
Попробовал в одном проекте скопировать в буфер обмена окно - вроде как скопировалось... Закрываю проект (редактор не закрываю!), открываю другой, открываю список окон - команда Paste недоступна!
Я понимаю, когда содержимое буфера обмена в спецформате исчезает при закрытии спецпрограммы, но внутри этой программы?!

6
Ваши вопросы / Пути при работе с файлами
« : 22 Ноября 2024, 08:57:13 »
По-моему, я обнаружил еще одну ошибку.
Функции FileExists и функции семейства TextFileXXXX по умолчанию используют путь к папке проекта на сервере, который, как правило, для записи доступен.
А вот метод TM_StringList.SaveToFile по умолчанию пытается писать в подпапку Program Files, которая от записи по умолчанию защищена.
Поскольку по умолчанию используется подпапка, правильное имя которой программно узнать нельзя, возникает сложность в сохранении и загрузке списков строк в скриптах.

По-моему, надо привести пути по умолчанию для всех функций файлового ввода-вывода к единообразию. Либо добавить функцию GetUserFilePath.

7
Ошибки / Доступ к группе трендов
« : 20 Ноября 2024, 12:45:42 »
Я создал группу трендов, назвал её UserTrends. ID у неё получился 46.
Теперь в скрипте я пытаюсь обратиться к этому ID для использования в SetTrendClient:
Код: (delphi)
id := UserTrends.ID; // это не работает, скрипт вылетает в исключение
id := GetTrendGroupByName('UserTrends').ID; // это работает
В редакторе автоподстановка работает, т.е. редактор в курсе существования объекта группы, а при исполнении скрипта "объект не существует".
При этом обращение к свойствам объектов другого типа, например, какому-нибудь Field12, подобных проблем не вызывает.

По-моему, это баг.

8
Возможно ли на одной странице скрыть панель сообщений, а на остальных оставить?
Панель страниц можно выборочно скрыть...

9
Ошибки / Неправильное выравнивание
« : 28 Октября 2024, 09:00:32 »
Ставим текстовое поле
Изменяем шрифт на самый мелкий "8pt - Средний"
Делаем высоту 16
Изменяем выравнивание по высоте - выравнивается наоборот: если активировать "снизу", то текст прилипает к верхней границе, а если "сверху", то наоборот, прилипает к нижней границе.

P.S. Надо бы отступ текста сделать, а то если включаешь рисование границы, текст касается этой границы и получается некрасиво

10
Отлаживаю свой проект.
На одном компьютере все запускаю, localhost. Среда разработки симулирует ПЛК и изменения переменных в режиме отладки показывает практически в реальном времени.

В arOPC примерно 7000 тегов, 625 блоков. Очень много блоков по 1-3 тега, но есть и по 125.

Обновление в Simple-Scada всех тегов длится секунд 40, хотя опрос установлен 1 раз в секунду.
После нажатия на кнопку в Simple-Scada реакция в симулируемом ПЛК наступает тоже секунд через 20-30, точно не измерял, но явно ооооочень не быстро. То де самое происходит, и когда в отладчике ПЛК я изменяю значения переменных - в скаду они попадают спустя ту же самую задержку.

То есть где-то бутылочное горлышко... Или для симуляции это нормальное явление? Что посоветуете?

11
Ошибки / Ошибка при импорте
« : 23 Октября 2024, 10:39:41 »
При импорте переменных их xlsx-файла всегда сообщается об импорте 0 новых шкал, даже если в редакторе шкал нет, а в таблице они заданы. Сами шкалы при этом добавляются.

Дополнение: похоже, и шкалы не обновляются. Новые шкалы из таблички экселя добавляются, а если были изменения в уже имевшихся, то в Simple-Scada шкалы не обновляются. Тут надо либо отдельно шкалы импортировать/экспортировать, либо при обновлении всякий раз заново строить таблицу шкал. В целом я бы предложил такое изменение импорта/экспорта:
  • Существующие в Scada переменные: пропускать/обновлять
  • Не существующие в Excel, но существующие в Scada переменные: удалять из Scada/оставлять
  • Существующие в Scada шкалы: пропускать/обновлять
  • Не существующие в Excel, но существующие в Scada шкалы: удалять из Scada/оставлять

12
Для OPC-UA есть опция "чтение после записи", а для OPC-DA?
Просто ряд переменных в моём проекте после однократного опроса при запуске SCADA можно вообще не опрашивать, пока нет управляющих действий пользователя. Есть смысл на этом экономить и как это сделать?

13
Ваши вопросы / Вопросы по руководству
« : 22 Октября 2024, 10:24:33 »
На схеме не показан класс TM_SubPage - он является наследником TM_Page?

14
Ваши вопросы / Методика отладки
« : 22 Октября 2024, 09:38:25 »
Не знаю, возможно, я открыл Америку и изобрел велосипед, но хочу поделиться методами отладки скриптов, чтобы другие начинающие меньше топтались на граблях.
Надо создать глобальный модуль и в нем определить процедуру вывода отладочной информации
Код: (delphi)
procedure Dbg(S : string);
begin
  if DEBUG_OFF then exit;
  // тут в зависимости от намерений либо создать сообщение функцией AddMessageToGroup с передачей строки S (хороший вариант),
  // либо вывести строку в файл (приемлемый вариант),
  // либо передать строку в отдельное текстовое поле (плоховатый вариант)
end;
Первый вариант требует уже подключенной базы данных, зато имеет большой плюс: сообщения видны на любой странице SCADA, могут сопровождаться звуком и выделяться цветом.
Второй вариант требует большего количества телодвижений: открыть файл, спозиционироваться в конец файла, дописать строку, закрыть файл, желательно контролировать ошибки ввода-вывода. Отладочный вывод полностью невидимый, т.е. посмотреть отладочный вывод можно только постфактум, да и чтобы посмотреть требуются телодвижения... Зато такой вывод можно не отключать и в переданной заказчику системе, чтобы время от времени отслеживать возможные ошибки.
Третий вариант плох тем, что текстовое поле может быть только одно на весь проект, и, соответственно, только на одной странице видимо.

Конечно, можно еще и сразу в базу писать сообщения, но это вообще неудобный вариант, имхо.

DEBUG_OFF - это так же глобальная константа типа boolean, установив которую в true можно выключить отладочный вывод.

В скриптах по мере надобности используется процедура Dbg, в результате мы всегда контролируем то, как скрипт выполняется.

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

Я для всех функций, которые ищут объекты, создал в глобальном модуле функции-обертки такого типа
Код: (delphi)
function GetVar(Nm : string) : TM_Variable;
// поиск переменной по имени
begin
  Result := GetVariableByName(Nm);
  if Result = NIL then Dbg('Переменная "'+Nm+'" не найдена');
end;
Теперь я могу не проверять в своих скриптах результат поиска, т.к. если я ошибся в имени переменной, я увижу сообщение сразу (у меня вариант с базой, т.е. пользуюсь сообщениями SCADA). Аналогично для поиска объектов, в т.ч. в шаблонах и окнах.

Надеюсь, это кому-нибудь пригодится...

15
Что-то не нахожу свойства переменной для задания зоны нечувствительности.
Его нет на самом деле, или я невнимательный?

Страницы: [1] 2