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

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

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

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


Сообщения - metamorphogenesis

Страницы: [1] 2 3 4
1
Ваши вопросы / Re: Вопросы по WEB в Simple-Scada 2
« : 21 Августа 2021, 09:58:04 »
Добрый день. В версии 2.5.9 в приложении и вебе разное отображение текста кнопки в шаблонном окне (в других ситуациях не проверял). Ниже ссылка на видео-демонстрацию, а также код присвоения текста кнопке.


https://dropmefiles.com/YU7T7


Код: (delphi)
var
    button: TM_Button;
begin
    if not (Sender is TM_Button) then exit;

    button := TM_Button(Sender);

    if tempStatusTrendsVisibilityCode.Value <> 65535 then
    begin
        tempStatusTrendsVisibilityCode.Value := 65535;
        button.Caption := 'Скрыть все';
    end
    else begin
        tempStatusTrendsVisibilityCode.Value := 0;
        button.Caption := 'Показать все';
    end;
end.

2
Лучше это реализовать прямо в контроллере, чтобы контроллер мог принимать меры предосторожности даже если ОРС не запущен/нет связи с ним.

3
Возможен ли скрипт: при изменении переменной с "1" в "0", записать в 5 переменных 5 значений и чтобы это делалось автоматически. Либо чтобы при нажатии одной кнопки записывалось 5 переменных.


Конечно. Вы можете создать скрипт с типом "изменилась переменная", затем справа вверху выбрать переменную, изменение с 1 в 0 которой вы отслеживаете, а в скрипте выполнить простую проверку и запись значений
Код: (delphi)
begin
    if variable.AsInt = 0 then
    begin
        var1.value := ...;
        var2.value := ...;
        var3.value := ...;
        var4.value := ...;
        var5.value := ...;
        // действия, когда сессия неактивна
{ если вам нужно действие, когда сессия активна, удалите строки 10 и 14
    end
    else begin
        // действия, когда сессия активна
}
    end;
end.

Во второй строке вы проверяете значение той переменной, изменение которой вызвало скрипт. Вы можете явно проверять значение переменной по ее имени, но это лучше делать, если вы уверены, что вам это необходимо (то есть изменилась одна переменная и вызвала скрипт, в котором вы проверяете значение, например, совершенно другой переменной). Так же учтите, что если вы добавите в скрипт какие-то другие переменные, то скрипт будет вызван и их изменением тоже, и поведение программы может оказаться отличным от ожидаемого.Чтобы записать переменные нажатием кнопки, перейдите во вкладку событий объекта (кнопки/картинки  и т.д.), в строке события onClick нажмите на кнопку "...", при этом создастся новый скрипт, который будет вызван по нажатию на объект. В тело скрипта вставьте само действие - строки 4-8 из выше приведенного примера.

4
Ваши вопросы / Re: Копирование окон
« : 25 Июля 2021, 17:41:38 »
Разработать и применить систему именования переменных и объектов, которая позволит использовать поиск по имени, подставив какой-то уникальный префикс, идентифицирующий источник данных, к заранее определённому имени, говорящему о назначении переменной/объекта, и пользоваться функциями getByName(). Например, у вас есть переменная count. Для одного плк этого достаточно, но если она будет хотя бы на двух и более, назовите их PLC1_count, PLC2_count, mainPLC_count, и для присвоения значения напишите такую процедуру:

Код: (delphi)
procedure setCount(const PLCName: string; const number: integer);
begin
    getVariableByName(PLCName + '_count').Value := number;
end.

Затем, вместо
Код: (delphi)
count.Value := number;

используйте вашу процедуру:
Код: (delphi)
setCount('PLC1', 4);
setCount('mainPLC', 0);

Точно так же можно поступить и с объектами. Вообще это просто общая идея, чтобы решить конкретную задачу, нужно конкретную задачу и поставить :)

5
Спасибо. Важное уточнение, думал что к объектам относятся все объекты без исключения. Тогда отменить/передумать рефакторинг.

На всякий случай дополните статью в справке об этом. Но если вы добавите возможность искать и такие объекты - будет вообще превосходно!  :)

6
Если под заголовком страницы Вы имеете ввиду панель на которой размещаются кнопки страниц, то у неё нет отдельного цвета, цвет берётся из цветовой схемы, заданной при разработке проекта (см. меню "Проект" - "Цветовая схема") и немного затемняется.


Блин,  я спешу куда-то и не проверяю, что пишу. Скорее всего я хотел написать цвет мигания. Чтобы было свойство цвета заливки и цвета мигания и у page,  и у subpage



7
Здравствуйте. Задавал такой вопрос ранее. На данный момент создавать учетки из клиента невозможно. Только в редакторе.
Надеюсь, что все же реализуют)


Так же, очень хотелось бы иметь возможность находить по имени созданные в скрипте объекты.

8
Еще вопрос.Сейчас рефакторится метод, и ссылки на объекты, с которыми работаю внутри, я теперь получаю по имени, которое скармливаю методу.

до рефакторинга:
Код: (delphi)
procedure refreshSettings(const productsNames: TM_StringList);  //  вызывается refreshSettings(sl800ProductsNames)
begin
    ...
    productsNames.Clear;                                        // очищается sl800ProductsNames
    ...
end;
после рефакторинга:
Код: (delphi)
procedure refreshSettings(const lineName: string);                               //  вызывается refreshSettings('sl800')
var
    productsNames: TM_StringList;
begin
    ...
    productsNames := TM_StringList(getObjectByName(lineName + 'ProductsNames')); // из имени получается ссылка на sl800ProductsNames
    productsNames.Clear;                                                         // EXCEPTION
    ...
end;

Проблема в том, что после рефакторинга я ловлю исключение
Unhandled exception in module "global" at line 570. Access violation at address 01776AFB in module 'Server.exe'. Read of address 00000004

Что я делаю не так? Благодарю за помощь.

9
Большое спасибо, есть из чего выбрать)

10
Доброго дня, ув. разработчики и коллеги! Возник такой вопрос.

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

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

Можете порекомендовать какой-то альтернативный способ однократно обновить одним скриптом свойство каждого объекта исходя из индивидуальных параметров каждого из них?


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

Разработчики, подскажите, эффективнее ли в теории такой подход, чем полноценное выполнение скрипта (в котором 20 строк, несколько математических операций и несколько уровней вложенности условий)?

11
Пожалуйста, добавьте свойство цвета заголовка страницы.

12
Блин,  это я хотел одну команду переименовать в минимайз и позабыл

Скрипт привязан к событию onClick, как я написал.

Попробую настроить имя клиента.


@пробует настроить имя

Да, имя по умолчанию пустое на всех клиентах, потому и так. Спасибо, переименование клиентов в настроках решило проблему.

13
при нажатии кнопки Win удаляется выделенный код скрипта из редактора. Исправьте плиз.


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


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

14
Добрый день. У меня два вопроса.


1. На двух клиентах разный интервал мигания, проект один. На дальнем ТВ правильно.
https://dropmefiles.com/YidkO


2. команды
Код: (delphi)
    CloseApplicationClient(getClientName);  
    MinimizeApplicationClient(getClientName); 
применяются ко всем открытым клиентам. Каждая команда размещена в своем отдельном скрипте, который привязан к событию онклик кнопки.

15
Добрый день. Аналогично описанной в первом ответе проблеме не отменяется выбор цветов в шаблонном окне

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