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

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

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

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


Сообщения - azrael454

Страницы: [1] 2
1
Ваши вопросы / Re: Сервер на OS Linux
« : 01 Июля 2021, 13:28:42 »
Здравствуйте.

В ближайшем будущем не планируется. Работа сервера пока будет доступна только под Windows. В данный момент на Linux могут работать только клиенты скады.

Добрый день. А что такое клиент под Линукс? Это какой-то отдельный клиент или уже имеющийся в дистрибутиве? Какая у него процедура установки? Информации в руководстве нет.

2
Ошибки / Re: Ошибка с фиксацией окон
« : 29 Октября 2020, 10:04:34 »
Здравствуйте.

Для текущей версии первый раз на странице окно открывается в положении задаваемым редактором, далее повторно открывается по внутренним координатам, включая их изменение пользователем или скриптом.
Для Вашей задачи можно использовать окно с положением "По заданным координатам", для которого начальное положение определяется парой свойств окна (.X, .Y).
Скрипт "Пользователь перешел на эту страницу" устанавливает значение пар (X, Y) для всех окон (с таким правилом поведения) данной страницы. Например, для одного окна при индивидуальным положении на каждой странице скрипт выглядит так (переменные или константы (X1,Y1) - координаты окна на первой странице, (X2,Y2) - на второй и т.д., свойство Tag страницы определяет номер набора):
Код: (delphi)
begin
  Window1.X := GetVariableByName('X' + IntToStr(Sender.Tag)).Value;
  Window1.Y := GetVariableByName('Y' + IntToStr(Sender.Tag)).Value;
end.
Для восстановления начального положения при повторном открывании окна необходимо установить координаты окна скриптом "Пользователь закрыл это окно":
Код: (delphi)
begin
  Window1.SetPosAll(Window1.X, Window1.Y);
end.
Пример во вложении (после разархивирования проекта его необходимо пересохранить).


Добрый день.

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

"Для Вашей задачи можно использовать окно с положением "По заданным координатам", для которого начальное положение определяется парой свойств окна (.X, .Y)." - я так и реализовывал.

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

Записал гифку с моими действиями. Попробовал интегрировать ваш код в свой, не срабатывается.
Внизу координаты окна, которые ему задаются и при которых оно открывается в первый раз и после смены страниц.
Открытие окна по событию кнопки OnClick
Код
begin
//Отображение текущих значений температуры и кнопок уставок
ShowWindow_Fix(Set_Temp,   //кнопка вызова настроек температуры
               Task_TempMenu,    //окно настроек температуры
               344,80 //координаты окна
               );
if Set_Switch_Set_Temp.AsBool then begin  //нажата кнопка вызова экрана настроек температур
  Set_Press.Visible := false;//скрыть кнопку вызова экрана настроек давления
end
else begin
  Set_Press.Visible := true;//показать кнопку вызова экрана настроек давления
end;
end.

Функция открытия окна с фиксированным положением
Код
function ShowWindow_Fix (CallButt   : TM_Button;
                        CallWin     : TM_Window;
                        XCall,YCall : Single
                        ): boolean;
begin
if CallButt.AsBool = true then begin                //нажата кнопка
   CallWin.ShowAll;                                 //показать экран
   CallButt.States[1].Color := RGB(137,197,214);    //поменять цвет кнопки, индикация открытия окна
end

else begin                                          //отжата кнопка
  CallWin.CloseAll;                                 //спрятать экран
  CallButt.States[1].Color := RGB(255,255,255);     //поменять цвет кнопки, индикация закрытия окна
  CallWin.X := XCall;                               //Х - окно настроек
  CallWin.Y := YCall;                               //У - окно настроек
  CallWin.SetPosAll(XCall,YCall);
end;
end;

Стоит галка "Запоминать положение" и выбран вариант "По заданным координатам"

http://g.recordit.co/W7BD4VJ7UU.gif

3
Ошибки / Re: Ошибка с фиксацией окон
« : 27 Октября 2020, 08:32:41 »
То есть, при снятой галке "Запоминать положение", окно после закрытия будет открываться на том месте, которое задано в редакторе?

Моя задача в том, что у пользователя есть возможность перемещать окна, но после того как он закрывает какое-либо окно, оно должно открываться в том месте, которое задается из редактора/скрипта. Сейчас получается, что после закрытия окна после перемещения, окно открывается в последней точке, в которой оно оказалось после перемещения. И задание из скрипта координат не работает или не получается у меня правильно реализовать.

Добавлял функцию SetPosAll по событию OnShow и OnClose. Не реагирует на эту функцию.

4
Ошибки / Ошибка с фиксацией окон
« : 23 Октября 2020, 12:39:49 »
Добрый день. Появилась такая проблема недавно, после обновление было все ок, а через какое-то время открыл снова проект и окна больше не фиксируются после перемещения и как-будто им координаты не задаются.

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

Начал тестить с просто по кнопке задавать координаты (нажали-открыли/записали, переместили, закрыли, нажали-открыли/записали). Галка все еще снята на запоминание положения. Так вот вроде окно должно быть в задаваемых координатах, а оно остается в последней позиции после перемещения.

Может я чего не так делаю?
Код
function TTMS_BT_CLR_CHNG (CallButt           :TM_Button;   //кнопка вызова экрана
                           CallWin            :TM_Window;

                           MenuSwitch         :TM_Variable; //отслеживание работы битов меню

                           Num_Bit,                         //номер бита
                           RON,GON,BON,                     //цвет нажатой кнопки
                           ROFF,GOFF,BOFF     :Integer      //цвет ненажатой кнопки
                           ):boolean;
begin
if GetBit(MenuSwitch.AsInt, Num_Bit) = true then begin      //нажата кнопка
  CallButt.States[1].Color := RGB(RON,GON,BON);             //поменяли цвет
  CallWin.ShowAll;
end
else begin                                                  //не нажата кнопка
  CallButt.States[1].Color := RGB(ROFF,GOFF,BOFF);          //поменяли цвет
  CallWin.CloseAll;
  CallWin.X :=80;
  CallWin.Y :=80;

end;
end;

Это функция которая вызывает окно, меняет цвет кнопки по биту слова, на которые затянуты кнопки. Пытался ее модифицировать, писал, что по изменению бита меняется цвет кнопки, закрывается окно и записываются координаты окна (заготовка, чтобы снова его открыть на первоначальном месте). В итоге он первый раз открывает там где надо, а после перемещения открывает там где остановились. Хотя галка на запоминание снята.

Есть сразу предложение: ввести возможность запрета перемещений окон. Сейчас такого параметра нет.


5
Добрый день. Демо - версии включают в себя последние изменения, которые были в 2.6.4.0 и новее?

6
Добрый день. Нашел баг в редакторе. Когда делаешь множественное выделение обьектов и хочешь у них всех поменять цвет шрифта, то при подтверждении цвета он меняется, а после закрытия окна настроек цвета снова сбрасывается на предыдущий цвет. Это актуально только, когда хочешь поменять цвет на черный (2 ячейка в таблице цветов).

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

8
Я поэтому и пишу, что не совсем подходит.

Я правильно понял, что при проекте на несколько клиентов, если нажимается на одном клиенте одна кнопка и выделяется цветом, то это увидят все, не смотря на права доступа и прочее?

9
Добрый день.

Думаю, что уже когда-то предлагали. Планируется ли в среду, где пишутся скрипты добавить возможность сворачивать блоки кода по ключевым словам? Условно свернуть if..else в одну строчку. Часто встречающаяся возможность в различных средах.

10
Спасибо, не совсем подходит.

Задача у меня стоит такая, что я спроектировал маленькое меню, кнопками которых я вызываю отдельные окна. Соответственно, чтобы понимать какое окно открыто / закрыто, я меняю цвет у кнопки, привязанной к окну. На нее же я могу закрыть окно, но при этом я могу закрыть окно "крестиком", который не скроешь никак и отслеживать его нажатие или отжатие тоже нельзя.

То есть баг вот в чем. Есть две цепочки:
  • Нажал на кнопку - открыл окно - кнопка поменяла цвет 1 - нажал на ту же кнопку - окно закрылось - кнопка поменяла на цвет 0.
  • Нажал на кнопку - открыл окно - кнопка поменяла цвет 1 - закрыл окно крестиком - кнопка не сбросила своего состояния и не поменяла цвет
Чтобы мне еще раз окно вызвать, мне нужно нажать на кнопку, чтобы скинуть ей состояние и она поменяет цвет, и только потом я снова могу открыть окно. Решений этой задачки я вижу два:
  • Если есть параметр у окна, который завязан на "крестик", то надо отслеживать этот параметр
  • Если появится возможность скрывать "крестик" и заменять его своей кнопкой, то все становится сводится к событию OnCLick

11
Добрый день.

Имеется ли возможность отслеживать состояние окна? Если оно открыто, то делать те действия, а если закрыто, то другие.

12
Добрый день.

Возможно ли реализация вот такого паттерна.

Есть обьект - кнопка настроек. Есть два пользователя: 1 и 2.

Может ли объект кнопка выполнять разные функции, в зависимости от того, какой пользователь сейчас авторизован?

При нажатии пользователем 1 открывается доп.окно настроек.
При нажатии пользователем 2, кнопка является своего рода выпадающим списком, который показывает другие кнопки, каждая из которых вызывает свое доп.окно настроек.

Можно конечно не усложнять и просто завязать через доступ к кнопкам настроек, но получается перегруженный интерфейс.

Как подобное можно в скриптах реализовать?

Спасибо.

13
Добрый день.

Возможна ли реализация копирования обьектов в редакторе с помощью ALT + ЛКМ с перетаскиванием, по аналогии с граф. редакторами Adobe. Очень сильно вырастет скорость проектирования. Хотелось бы иметь возможность настраивать цвета у запрограммированных состояний задвижки.

И еще. Может уже добавили, но неплохо было бы сделать возможность настройки выравнивания значения в поле. Сейчас оно жестко привязано к середине поля, что не всегда может быть удобно.

В редакторе есть баг. При задании координат объекта, клавишей Tab можно проскочить только X, Y , W. На высоту уже не попасть табом, он деактивирует поле настройки. Если мышку использовать, приходится два раза выбирать поле редактирования.


14
Ваши вопросы / Вопрос по шрифтам
« : 14 Июля 2020, 16:09:48 »
Добрый день. Какой шрифт вы используете в SCADA? Хочу некие "гайдлайны" сделать, чтобы соблюдать стилистику в дальнейших проектах.

 Появится ли возможность добавлять свои шрифты в будущем?

15
Ваши вопросы / Вопрос по фильтрам
« : 06 Марта 2020, 10:41:08 »
Добрый день, вопрос следующий.

Имеется датчик давления, с которого считывается аналог 4-20 мА, который идет через S7-1200, который потом выглядит как число от 0 до 27648. Датчик иногда капризничает и выдает меньше 4 мА, что сказывается на сигнале, у которого значение становится больше 27648 (специфика Сименса, дело не в этом). Зная этот факт, хочу ввести фильтр на значение давления. Ввел фильтр мин-макс, на диапазон датчика, но вижу картину на трендах, что он как бы просто рубит значения выше установленного предела. А надо так, чтобы при капризе датчика ( значение > 27648 или значение < 0), масштабируемое значение давление было равно 0. 

пытался скриптом по изменению переменных реализовать, но не увидел пока результата. Может что-то неправильно делаю?
Код: (delphi)
//ФИЛЬТР ПОМЕХ ЗНАЧЕНИЯ ДАВЛЕНИЯ С КОНТРОЛЛЕРА S7-1200
begin
if p5_BP1_DownArchiPress.Value < 0 then     //проверка на нижнюю границу аналогового значения
   p5_PressureSC.Value:=0;                  //обнуление масштабируемого значения давления
if p5_BP1_DownArchiPress.Value > 27648 then //проверка на верхнюю границу аналогового значения
   p5_PressureSC.Value:=0;                  //обнуление масштабируемого значения давления
end.
Есть вопрос и предложение:
вопрос: фильтр отклонений имеет смысл пробовать здесь использовать? так как по картинке примера работы я вижу примерно то, что и нужно, что он присваивает 0 при превышении значение на отклонение.
предложение: добавить в UI настройки фильтра мин-макс поля для ввода значений, которые будут присвоены при превышении верхней и нижней границ с возможностью их не указывать. мне кажется это сделает применение этого фильтра более гибким.

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