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

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

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

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


Сообщения - torchinsky

Страницы: [1]
1
Доброго времени суток.
Вопрос про работу нескольких версий скады на одной машине (в режиме разработки).
Например:
Версия 2.5.10.0 - на ней разработаны проекты для Объектов А и Б.
Версия 2.5.14.0 - на ней разработан проект для Объектов С.

Установлены в разные директории. Папки с проектами и ярлыками (та что выводится на рабочий стол при установке) - тоже разные.

Если я открываю Editor версии 2.5.14.0 - то доступны проекты из папки версии 2.5.14.0
Если я открываю Editor версии 2.5.10.0 - то доступны проекты из папки версии 2.5.14.0...Как так?) Должны же по идее старые проекты открыться.

2
Спасибо.

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

3
Код: (delphi)
 (Variable.IsGoodQuality = TRUE)

Я так и сделал. Но не знаю, сработает ли событие изменилась переменная, если изменится "качество".

Логи отправлю. Я понимаю что скада точно ничего не модифицирует и из воздуха значения брать не будет. Вопрос был больше к Вашему и сообщества опыту. Потому что я не понимаю откуда могли взяться значения, если электричества небыло и контроллер с OPC не работал... Надеюсь посмотрев логи Вы сможете меня натолкнуть на путь истинный))

4
Какой ОРС используете? В некоторых ОРС-серверах есть системные переменные которые позволяют отслеживать соединение с ПЛК

Встроенный OPC сервер в контроллер Шнайдера.

5
Здравствуйте коллеги.

Помогите разобраться с ситуацией...

Дано:

1) Шнайдеровский контроллер (модель не помню, но какой то обычный) - помимо всей логики работы установки, так же является OPC сервером. Находится непосредственно возле "железа" и запитан электричеством от той же ветки ЛЭП.
2) Скада для визуализации процессов.

Что произошло:

На объекте периодически отключают электричество. Отключается именно установка с контроллером. Скада продолжает работать. Но у клиента происходит небольшая "паника", т.к. он видит что все показатели "горят" восклицательным знаком, но иконки вентиляторов продолжают вращаться (именно это их только и смущает :-\). (Короткое видео прилагаю)

Суть (тут будет многословно, извините  :-[):

После очередного такого отключения, поступил запрос на исправление ситуации с вентиляторами. Состояние вентиляторов передается в "запакованной" переменной, где определенный бит отвечает за состояние. У объекта TM_Image на событии "Изменилась переменная" висит скрипт :

Код
begin
if Sender is TM_Image then
    with Sender as TM_Image do
      if GetBit(AsInt, Tag) = TRUE then
      begin
          AnimSpeed := 20;
      end else
          begin
            AnimSpeed := 0;
          end;
end.

Первым делом, для решения проблемы было добавлено условие Variable.IsGoodQuality = TRUE в надежде что это решит проблему.

Но решил копнуть дальше и посмотреть на графики, и увидел оч странные данные.... Они на скриншотах.

Клиент утверждает, что, грубо говоря, с 11.00 и до 14.00 электричества не было. Но откуда тогда взялось значение в переменных? Тем более значения такие, что никак не могут быть в установке. На скриншоте с давлениями видны значения и признак плохого качества. Установка не могла выдавать такие значения, так как логика работы ПЛК аварийно выключит установку при таких значениях. Откуда они могли взяться? Тип архивации комбинированный для давлений и по времени для электроэнергии.

Собственно вопрос: как такие значения могли появиться или откуда они взялись, если ПЛК был выключен, а следовательно и OPC сервер, который встроен в ПЛК.

И дополнительный вопрос: я не уверен что проверка на качество исправит проблему с продолжением анимации вращения вентиляторов. Как мне можно определить факт того, что OPC "лег" и остановить анимацию? Думал воспользоваться пингом, но не увидел как мне найти в скриптах адрес OPC сервера. Жестко забивать его в скрипт не хочу, т.к. проект тиражируемый. 2 объекта уже работает и планируются еще (проект реализован при помощи функционала шаблонов). На каждом объекте от 1го до 4х контроллеров, в зависимости от размеров. И адреса разные. Понятно что визуал мне и так менять под каждый проект, но не хотелось бы в скрипты лезть каждый раз.

6
1. Хотелось бы иметь возможность менять цвет строк ComboBox.  А так же указывать выравнивание по горизонтали текста (по центру).
2. возможность кнопке с n состояниями при нажатии применять одно и тоже значение при любом состоянии.
Тут я мб не до конца понял филосифию....но кнопка имеет оч удобный функционал для отображения состояний. и при некоторых реализациях интерфейса может понадобиться указанный функционал. (например 1 переменная, 3 состояния, 3 кнопки. В зависимости от значения меняют цвет но при нажатии всегда принимает значение 1 для первой кнопки, 2 для второй и т.д.) Это в принципе можно реализовать скриптом, но вроде простой интерфейсный момент...и почти все есть для этого...но мы не можем указывать одно и то же значение для разных состояний...

7
Здравствуйте!
Это кнопка с восьмью состояниями. Бонусом - индикация запрещенных комбинаций. При отсутствии оных - можно обойтись кнопкой с пятью состояниями. См. пример во вложении.

За пример спасибо. Возьму на вооружение прием с кнопкой и состояниями. Но этот пример не совсем решает мою проблему. Во вложении примерный вид элемента управления как я его себе представляю. Это все заблокированные кнопки. по ним нажимать нельзя. Только в качестве отображения)

8
И еще один вопрос...не совсем по скриптам: никто не пробовал проекты делать и синхронизировать работу через git или другие системы контроля версий? Есть какие либо рекомендации или не вариант совсем?


9
Есть переменная с контроллера типа Word.
Первые 3 бита показывают в каком режиме работает установка.
0 - Режим 1
1 - Режим 2
2 - Режим 3

На экране рисую отображение всего этого дела. Оч удобно и красиво получилось сделать с помощью button с enabled = false. По факту это не кнопка уже, красивая такая метка. НО! Нужно отобразить 4ю кнопку "Неактивное"....
Решил попробовать через второстепенную переменную и событие на ее изменение. Написал скрипт и не нашел способа программно изменить текущий state кнопки.
Я понимаю, что можно создать локальную переменную, ее привязать как основную и в скрипте менять значение...но я не хочу так, ибо их придется делать 36 ибо 36 установок...
Можно не рисовать вообще или по другому выводить сообщение, о том что установка неактивна....
Еще можно оставить у кнопки 1 state и просто менять ей цвет...Но хотелось бы большей однотипности в поведении этих кнопок...

Просто хочется без таких решений сказать кнопке "измени состояние"...Такое как нить возможно?

Пример скрипта

Код
begin
  if Sender is TM_Button then
      with Sender as TM_Button do
        if GetBit(VariableEx.Value , 0) = false and GetBit(VariableEx.Value , 1) = false and GetBit(VariableEx.Value , 2) = false then
           setState(1);   // это фантазии
        else
           setState(0);   // это фантазии
end.

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

Возможным вариантом наименования переменных - использование суффикса, ссылающегося на набор переменных, например:
 <имя переменной>_<номер Модуля><номер Камеры из двух цифр, начиная с 1>.

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

Формально, я проблему решил через окно, но как я понял, это все при условии что 1 клиент....

Если больше 1го то как не крути придется копипастить и менять потом в 36 местах.

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

11
В общем сделал следующее. На Page добавил 3 кнопки с Тэгами 1 - 3. Создал Окно. Создал следующий универсальный скрипт (пока префиксы переменных по модулям не делал)

Код
var
   callerIndex, counter, offset : integer;
   tempText : TM_Text;
   tempField : TM_Field;
begin
  callerIndex := (Sender as TM_Button).Tag;
  offset := (callerIndex - 1) * 12;
  BlockInfoWindow.Title := "Обзор работы камер Модуля " + IntToStr(callerIndex);

  for counter := 1 to 12 do begin
    tempText := GetTextByName("TextCamNameInfo" + IntToStr(counter));
    if tempText <> nil then tempText.Text := "Камера " + IntToStr(tempText.Tag + offset);

    tempField := GetFieldByName("WBlockInfoAirTemp" + IntToStr(counter));
    if tempField <> nil then tempField.Variable := GetVariableByName("test_var" + IntToStr(tempField.Tag));

  end;
  BlockInfoWindow.ShowClient(GetClientName);
end.

Вроде работает, но смущает то, что окно открывается и через долю секунды ток перерисовывается....мелькает типа. Что навело меня на мысль....а точно ли такой подход нормально отработает одновременно на 2х и более клиентах? Проверить не могу, т.к. никаких ключей у заказчика не взял...
Та и судя по мануалам...
Цитировать
Важно! Следует учитывать, что подмена переменных происходит одновременно на всех клиентах. Поэтому, если клиентов несколько, то использовать подмену переменных следует с осторожностью

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

12
Для описанного проекта с множеством однотипных объектов хорошо подошла бы система шаблонов, разработкой которой мы сейчас занимаемся. С ее помощью можно будет к примеру сделать шаблон страницы/объекта/окна и при однотипном наименовании переменных использовать шаблон для быстрого создания однотипных объектов. Но система шаблонов появится не в ближайшем будущем, т.к. для ее внедрения необходимо внести значительные изменения в работу клиента и пока не ясно сколько времени на это потребуется. Когда работа над системой шаблонов будет подходить к концу мы выпустим beta-версию для тестирования шаблонов.

Да, чего то такого не хватает очень...

Сейчас, в отсутствие системы шаблонов можно только копировать страницы созданные ранее и заменять переменные у объектов. Также, сейчас имеется возможность подмены переменных у объектов, как рассмотрено в этом примере, но такой способ будет работать только если в проекте используется не более 1 клиента. Если клиентов более одного или предполагается в будущем использовать более одного клиента, то вариант с подменой переменных не подойдет, потому что подмена переменных происходит одновременно на всех клиентах и будет возникать ситуация когда пользователь при просмотре одного объекта будет видеть переменные другого объекта, т.к. во втором клиенте выбрали другую страницу.

Эта проблема с несколькими клиентами при использовании глобальных переменных просматривалась сразу. Я даже начал искать как у клиента что то хранить. Оказывается никакого хранилища у клиента нет, а жаль)) Иногда было бы полезно. Поэтому данный вариант не подходит однозначно.

В общем я понял. Буду все сам разрисовывать руками используя Окна, т.к. совсем не хочу даже 2 раза одну и ту же форму рисовать. Это слишком плохо сказывается на поддержке. Спасибо)

13
Доброго времени суток коллеги!
Помогите пожалуйста лучше сориентировать на начальном этапе проекта. (первый проект на SimpleScada)

Дано: объект пищевой промышленности, разделенный на 3 идентичные части, за работу которого отвечают 3 контроллера (в каждом свой OPC; по контроллеру на каждую часть). В каждой части имеется 12 модулей с кучей датчиков, алярмов, контролов и установок (настроек) + агрегаторная (по 4 компрессора + обвязки с кучей датчиков, алярмов, контролов и установок (настроек)).

Что хочу: чтобы это работало на simpleScada.

Чего не хочу: говнокодить и копиппастить. Нет желания рисовать, грубо говоря, 36 одинковых форм.... (я такую ошибку по незнаю совершил когда HMI панель для модуля рисовал...12 форм... и в каждой что то менять...ужас)

До чего докопался:
Вариант первый: хотел использовать штатные Page и Subpage.

  • Модуль 1
    • Камера 1
    • Камера 2
       
  • Модуль 2
    • Камера 1
    • Камера 2

Но, как я понял, каждый Page и Subpage - это отдельные экземляры. Т.е. нельзя создать свой базовый Page/Subpage и при открытии скриптом просто подпихивать ему нужные мне переменные. Единственный Выход в таком случае это создавать свое Окно во весь экран и открывать его при переходе на SubPage и передавать ему переменные. но выглядит это костылем каким то...тем более что окно можно закрыть, а запретить закрытие не нашел как сделать (хотя было бы достаточно просто убрать "крестик"). Та и в общем при таком способе надо за многим следить...в общем костыль.

Вариант второй: Почти все тоже самое, ток на Page/SubPage рисовать кнопки открывающие соответствующие мне окна. Т.е. Останутся Page "Модуль 1" "Модуль 2" "Модуль 3" в них всего 3 почти одинаковых формы, на которых кнопками вызов Окна. Не так красиво как хотелось бы это выглядит... и одинаковые формы все равно остались в  нескольких экземплярах...но зато без костылей вроде.

Но в обоих случаях возникает следующий вопрос: как я понял основным механизмом для определения того, с каким параметрами необходимо что необходимо открыть, является свойство "Тэг" у элементов. И тут у меня снова 2 выбора пока просматриваются:
1) Именовать переменные как block[1-3]_Camera[1-12]_AirTemp. Номер блока тогда должен вычисляться от того, какой Page выбран...и при этом знать какой SubPage/Button нажат в последствии...и вот как 2 Тэга прокинуть в скрипт я уже не нашел...
2) Именовать переменные как сamera[1-36]_AirTemp. Такой вариант я вижу как реализовать, но такое мне просто не особо нравится....на мой вкус неоднозначность/неточность в названии переменной....Ну и придется вычислить номер камеры как то на основании сторонних переменных.

Есть еще третий вариант - полностью отказаться от встроенной панели станиц в части выбора модуля. оставить одну и все реализовывать своими кнопками. Больше работы, но вроде все можно выкрутить будет. Так же, можно свести к минимуму количество одинаковых форм, если организовать правильную последовательность. Но мне кажется такой вариант будет менее удобным.

В общем, направьте меня пожалуйста в нужную сторону, т.к. я еще тонкостей этой системы не знаю и не могу предвидеть всех моментов. Пока склоняюсь к третьему варианту и именованию переменных как block[1-3]_Camera[1-12]_AirTemp, т.к. не вижу как решить проблемы первых двух....

Заранее спасибо)

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