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

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

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

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


Сообщения - pan2000

Страницы: [1] 2 3 ... 12
1
   Здравствуйте.

  Вполне рабочий вариант 2 - использование шаблонов, причем возможны два варианта реализации:
- отключить штатную навигацию по страницам, что позволит для мнемосхемы создать необходимое число страниц с двумя шаблонами - мнемосхемы и навигации;
- "замонолитить" шаблон мнемосхемы на этапе инициализации - создается односторонняя цепочка ссылок между объектами шаблона (спасибо разработчикам за свойство объекта UserData). Теперь у шаблона, как единого целого, можно управлять видимостью или перемещением.
Пример с управлением видимостью во вложении.

2
  Здравствуйте.

Штатную систему трендов можно использовать для предварительного просмотра и подготовке к формированию отчета.
В основе предпросмотра - таблица графиков, управление архивированием переменной и переход в меню трендов.
При выполнении критерия начала запуска измерения (в примере - просто порог) в таблицу записывается текущее время, разрешается архивирование переменной и запускается таймер.
По окончании таймера архивирование переменной выключается.
По клику на строку таблицы вызывается просмотр тренда в пределах 1 минуты (самый минимальный интервал отображения, разрешение графики примерно 30 элементов на 1 секунду). Выключение архивирования дает слева и справа от графика пустые поля (разумеется если графики следуют по времени не слишком часто).
В примере для переменной используется возрастающая последовательность типа пилы. Генератор пилы дает примерно 20 отсчетов в секунду и работает после запуска ограниченное время (иначе графики "пилы" пойдут сплошным потоком :-\).
Устанавливаются порог начала измерения и начальное значение генератора. При маленькой разнице от момента запуска генератора до момента начала измерения могут получится два близко расположенных на тренде графика.   

3
Ваши вопросы / Re: Создать Амперметр
« : 05 Мая 2024, 08:35:25 »
   Здравствуйте.

  В Simple-Scada можно реализовать стрелку, а в качестве собственно стрелочного прибора использовать пользовательское изображение (да получится амперметр).
Во вложении пример амперметра. Пример построен с использованием шаблонов.
Шаблон имеет подстановки: измеряемая переменная, полный угол отклонения стрелки и внутренний радиус. Последние два параметра исключительно для правильного совмещения изображения и стрелок, и при желании могут быть забиты в объект изображение.
Стрелка состоит из двух тонких прямоугольников, представляющие радиальные сегменты с одинаковым внутренними радиусами и различными наружными. Для вращения такого объекта необходимы следующие параметры: координаты центра вращения, наружный радиус, высота объекта и угол поворота. В этом случае для всех "стрелок" достаточно одного универсального скрипта по изменению измеряемой переменной.
Угол поворота вычисляется из значения измеряемой величины, в пределах минимума и максимума переменной для полного угла отклонения стрелки. Высота объекта есть собственное свойство. Координаты центра вращения определяются при инициализации по одной из стрелок, которая должна быть вертикальна, а ее вертикальная проекция проходит через предполагаемый центр вращения стрелки прибора. Аналогично и для наружного радиуса, при инициализации он вычисляется как высота стрелки плюс внутренний радиус.
Файл примера не содержит графику прибора, и предварительно должен быть считан в пользовательские изображения из вложения предыдущего сообщения.

4
   Здравствуйте.

  Если под исторической таблицей Вы понимаете что-то похожее на "Периодический отчет", но непосредственно на клиенте, то построение такой таблицы требует заметного времени.
  Задаются период просмотра и число интервалов. Копия исторической таблицы предварительно накапливается в БД при циклическом обращении к стандартным функциям извлечения значений переменной из архива.
  Пример небольшой статической таблицы (в смысле фиксированного набора переменных для которого не требуется горизонтальный скролл) во вложении.
  Для удобства просмотра можно добавить возможности выбора переменных, перестановку столбцов, горизонтальный скролл и вычисление значения переменной в интервале по своим правилам.

5
Ваши вопросы / Re: Расписание. Schedule
« : 28 Апреля 2024, 18:07:15 »
  Здравствуйте.

Самодельный способ реализации зависит от количества интервалов, кванта интервала, способа хранения данных, вида отображения состояния и т.д, например:
- предполагая, что для интервалов достаточно точности в 1 мин, в качестве метки времени можно использовать целочисленное значение (при некотором увеличении количества вычислений можно и в секундах);
- хранение данных об интервалах БД (MySQL), файл, набор виртуальных переменных при малом числе интервалов;
- интервалы не перекрываются (оно конечно можно и перекрыванием разобраться, однако собственно управление может оказаться сложнее остального проекта). Включение осуществляется в начале минуты, а выключение в конце, что для смежных интервалов означает отсутствие провалов управления. Это актуально для смежных интервалов для разных суток (например, включили в среду, а выключили в пятницу).
- для каждого интервала можно установить своё оповещение в пределах 1-255 минут, значение 0 - без оповещения;
- использование графики объекта "Расписание" требует для отображения интервала одного объекта и еще одного объекта для ненулевого оповещения, в данном примере таких объектов 128, т.е. минимально 64 интервала - самое существенное ограничение.
Для управления используется таблица, заполняемая из БД. Для упрощения проекта (и снижения информативности) можно заменить графику объекта "Расписание" на группу окон с текущими параметрами.
Во вложении пример (и только пример без тщательной проверки) проекта на неделю, включающий три части: редактирование интервалов в БД, отображение процесса на основе графики объекта "Расписание" и получение текущих значений включения/выключения и оповещения.


6
    Здравствуйте.

... Агрегаты должны запускаться и останавливаться по ранее созданному маршруту с определенным интервалом времени...
  Simple-Scada может обеспечить управление агрегатами с шагом длительности в 1 сек и разбросом длительности в пределах 1-2 сек.
  1. Варианты независимого управления агрегатами с возможностью настройки (по усложнению реализации).
- маршрут на сутки или неделю - объект "Расписание", маршрут привязан к началу суток/недели;
- циклический (фиксированные времена включенного и выключенного состояния агрегата) - скрипт по таймеру 1 сек;
- последовательность временных меток изменения состояния агрегата с единым таймером. Для фиксированного маршрута - массив констант, для изменяемого - файл или база данных.
  2. Зависимая работа группы агрегатов - решение существенно зависит от характера взаимодействия агрегатов. Например, к одному "Расписанию" можно подключить несколько агрегатов, работающих синхронно или с настраиваемыми задержками.
Во вложении пример для первых двух вариантов независимого управления.

7
  Здравствуйте.

...Есть большое количество однотипных агрегатов у которых 8 переменных по которым определяется аварийное и рабочее состояние. Задача заключается в создании шаблона который менял цвет в зависимости от 5 переменных, в шаблонном окне по нажатию кнопки сбрасывались 4 булевские переменные, ...
Как правильно заметили разработчики Simple-Scada, то что можно следует загонять в ПЛК. Однако, если такой возможности нет, а количество агрегатов большое, то можно использовать шаблоны.
При проектировании шаблона следует стремиться к минимуму подстановок, количеству и объёму скриптов. Собственно подстановки шаблона сводятся к подстановкам в объекты этого шаблона.
Минимальный набор подстановок объекта включает основную и дополнительную переменную (имена переменных), свойства Tag (целое число) и Hint (строка). По изменению переменных возможен вызов соответствующих скриптов.
Для минимизации подстановок переменных следует использовать для каждого агрегата однотипные наборы имен, включающие поле номера агрегата, тогда единственной подстановкой будет только номер агрегата.
Пример построения шаблона с тремя отображаемыми отдельными параметрами и некоторой групповой логикой от 5-ти булевых переменных (упрощенная модель координатного стола: пуск/стоп, выход за границы, координаты):
- для отображения параметров используются три объекта "Поле" с подстановкой основной переменной, скрипт не требуется;
- три из 5-ти булевых переменных используют подстановку в дополнительные переменные объектов "Поле", а две оставшиеся подстановку в переменные объекта "Текст". Т.е. шаблон содержит четыре объекта с однотипными именами TempObj_<i=1..4>.
Булевы переменные по изменению (основной и дополнительной) собираются в вектор скриптом:
Код: (delphi)
var i, j: integer;
begin
  j := SetBit(0, 0, GetTemplateObject('TempObj_1').AsBool);   // младший бит вкл./выкл.
  for i := 1 to 4 do
    with GetTemplateObject('TempObj_' + IntToStr(i)) do
      j := SetBit(j, i, VariableEx.AsBool);              // собрать весь вектор
// интерпретация вектора - по таблице, case - оператором или набором условных операторов
end.
 
Во вложении пример для 4-х моделей агрегатов, которые связаны через встроенный OPC UA сервер собственно с шаблонами.

8
   Здравствуйте.

... Из минусов только то, что надо пройтись по всем экранным формам, где используется этот шаблон и "ручками" вбить номер кнопки, которая должна подсвечиваться.
  Определить, что кнопка должна подсвечиваться, можно по совпадению владельца и страницы перехода. В шаблоне редактируются ссылки на страницы и заголовки кнопок.
  А "ленивым" можно не заморачиваться связкой кнопок и страниц, достаточно считать, что порядок расположения кнопок соответствует порядку экранных форм (страниц/подстраниц). В шаблоне редактируются только заголовки кнопок.
  Пример во вложении.

9
  Здравствуйте.

 Один из вариантов реализации задачи:
- измерение интервала времени по разности значений даты-времени на концах интервала;
- условием записи в таблицу является превышение на 1 градус порогового значения, которое увеличивается на 1 градус после записи в таблицу;
- запись в таблицу осуществляется по индексу, который увеличивается на 1 после каждой записи.
Пример с моделью линейно возрастающей температурой во вложении.

 Это только пример. Модель специально выбрана так, что значения температуры вещественные числа, причем разность с пороговым (целочисленным) значением возрастает.
Реальный проект определяется (тех)заданием и, возможно, придётся интерполировать временной интервал или использовать базу данных.

10
  Здравствуйте.

Переменная Work_and_alarm состоит из набора отдельных битов, логическая функция GetBit возвращает значение отдельно бита из переменной по его номеру.
Всё множество скриптов проекта можно заменить на один универсальный, параметром которого будет свойство Tag объекта, которое должно быть номером бита конкретного объекта.
Далее выбрать все объекты, к которым применяется скрипт, и связать его с событием OnDataChange. А вот свойство Tag прийдется править для каждой группы (в проекте по два объекта) индивидуально.
Код: (delphi)
begin
  if Sender is TM_Object then         // проверяем, что Sender это объект
    with Sender as TM_Object do       // приводим Sender к типу "TM_Object"
      Visible := GetBit(AsInt, Tag);  // показать/скрыть объект
end.

Проект с исправлениями во вложении.

11
   Здравствуйте.
Есть возможность вычислить в скрипте, какая страница открыта на клиенте?
Такая возможность есть. Парные события "Пользователь перешел на эту страницу" и "Пользователь покинул эту страницу" позволяют контролировать пару страница - клиент (у которого по определению только ОДИН пользователь).
Собственно, необходимые действия можно выполнить в этих скриптах или отложить до скрипта, который понимает клиента (работает GetClietName) или варианта с одним клиентом (тому всё равно). Отельная неприятность от анонимных (без имени) десктоп-клиентов, неразличимых по определению (хотя у каждого клиента уникальный ID).
А зачем это всё нужно?
В проекте сделана замена штатного интерфейса кнопками и все на шаблонах. Хочется менять границу кнопки открытой подстраницы.
При замене штатной системы навигации страниц на каждой странице присутствуют уникальные кнопки навигации, либо как набор отдельных кнопок, либо в составе шаблона. В первом случае кнопку выбранной страницы можно изменить на этапе редактирования проекта, во втором - при инициализации шаблона.
 Пример слежения за клиентами-страницами и инициализации шаблона кнопок во вложении.

   Добавлено 25.02.2024
При инициализации шаблонов можно построить массив ссылок на активную кнопку страниц, что позволит изменять отображение кнопки из скриптов. Поиском по имени/ID клиента в парах "клиент-индекс открытой страницы" определяется индекс страницы, а по нему ссылку на объект-кнопку.
Однако следует помнить, что изменения видны у всех клиентов, перешедших на эту страницу.
Наличие таблицы клиентов позволяет передавать текстовые сообщения от клиента к клиенту.
См. "Граница_кнопки_3".

12
Ваши вопросы / Re: Рисование линий
« : 22 Февраля 2024, 15:40:28 »
  Здравствуйте.

1. Для создания изменяемого изображения можно манипулировать только уже созданными объектами, как-то перемещение, масштабирование, видимость в экранной области (либо собственно свойство Visible, либо перемещение вне экрана), вращения для ограниченного набора объектов.
См. пример "Манипуляции_с_объектом".
2. Рисование линий из скриптов, с ограниченным на этапе редактирования проекта максимальным числом линий, можно построить на основе объекта "Прямоугольник" единичной ширины.
Аналогичным образом можно рисовать и статические наклонные линии в редакторе, но это дело крайне неблагодарное по части "сшивки" линий (хотя можно нарисовать по координатам при запуске проекта).
Пример "Рисование_линий" - процедура построения линии по начальным и конечным координатам.

13
Ваши вопросы / Re: Векторная Диаграмма
« : 03 Февраля 2024, 11:53:16 »
   Здравствуйте.
  Наклонные линии можно строить из объектов имеющих возможность поворота, таких как "Фигура" и "Изображение". Некоторую сложность представляет перерасчет координат, причем вращается объект относительно центра, при этом его координаты (X, Y) не изменяются.
  При небольшой ширине объекта будет отображаться линия. Во вложении пример векторной диаграммы с использованием всех трех вращаемых объектов.
  При уменьшении размера диаграммы её информативность будет снижаться. В примере есть режим "Лупа", который масштабирует величины напряжений и кратно увеличивает углы отклонения от 120, 240 градусов.
  К сожалению, "Изображение" не подходит для WEB-клиента, объект позиционируется отличным от обычного клиента способом.

14
Ваши вопросы / Re: Отслеживание клиентов
« : 24 Января 2024, 17:40:29 »
 "Большой_брат" - проект контроля за клиентами и пользователями других проектов сервера. Контроль осуществляется на основе единой таблицы пользователей по событиям проектов. Отслеживаемые проекты должны быть подключены к базе данных и иметь возможность записи/изменения в таблицу пользователей по событиям "Авторизация пользователя", "Пользователь перешел на страницу", "Пользователь покинул страницу", "Остановка проекта".
Соответствующие скрипты должны быть включены или изменены в отслеживаемых проектах.
По данным из этой таблицы можно получить обобщенную информацию, как-то текущее состояние пользователей и клиентов, учет времени пользователей и т.д.
В примере проект контроля (состояние активных пользователей, статистика по времени пользователей и проектам/проекту) и тестовый проект с авторизацией и без. Для тестирования можно размножить тестовые проекты.


          Добавлено 3.02.2024

  Окончательная версия проекта, без отслеживания переходов по страницам, что позволяет уменьшить размер таблицы users.
Добавленные события контролируемого проекта:
- "Полностью запущен" - получение имени проекта в переменную ProjectName;
- "Остановка проекта" - перевод в неактивное состояние всех записей клиентов-пользователей этого проекта;
- "Авторизация пользователя" (проект с авторизацией) или "Клиент подключен" (без авторизации) - перевод в неактивное состояние всех записей этого клиента и создание активной записи этого пользователя;
- "Пользователь перешел на эту страницу" - перевод в активное состояние самой поздней записи этого клиента;
- "Пользователь покинул эту страницу" - перевод всех в неактивное состояние всех активных записей этого клиента.
Обоснования:
- в промежутках между сменой пользователя или проекта, клиент однозначно идентифицирует пользователя и проект;
- при смене проекта обязательно меняется клиент;
- перевод записи в неактивное состояние выполняется для всех пользователей, связанных с данным клиентом;
- перевод только одной записи в активное состояние совместно с предыдущим пунктом гарантирует наличие единственного пользователя данного клиента (устраняет возможный сбой: наличие записей о нескольких активных пользователях данного клиента, правда в случае такого сбоя время завершения работы пользователя будет некорректным);
- контроль переходов по страницам исключительно для контроля отключения клиента. По крайней мере в текущей (2.6.10.0) версии Simple-Scada, при отключении клиента возникает событие "Пользователь покинул эту страницу".
В качестве имени неавторизованного пользователя используется имя обычного клиента или идентификатор WEB-клиента.
Во вложении проект контроля и тестовые клиенты для проектов с авторизацией и без.


15
Ваши вопросы / Re: Отслеживание клиентов
« : 18 Января 2024, 05:57:20 »
    Здравствуйте.

  Список клиентов по подстраницам можно получить отслеживая входы/выходы на подстраницы.
  Пример во вложении. Пример только для иллюстрации алгоритма. В качестве списка клиентов используется строковая переменная.
  Конкретный код и используемые объекты определяются количеством подстраниц и клиентов, удобным видом расположения информации. В частности, в качестве списков клиентов и средства отображения могут использоваться таблица/таблицы.
  Отслеживать имеет смысл только обычных клиентов, да и то при условии уникальных имен. WEB-клиенты в качестве имени используют 32-разрядный идентификатор, изменяющийся после перезапуска клиента.

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