Вход

Просмотр полной версии : Кнопка... или это не кнопка? Скрипт... или это не скрипт?



dimioks
12.02.2026, 22:00
Снова начинаю работать в MaterSCADa 3.12.
Задача: по быстрому накидать экран для Заказчика, 200-300 тегов через OPC UA, частично дублировав управление от HMI.
PLC давно в работе на линии, управление сейчас через HMI Weintek.

Имеем:
Аналоговый тег OPC типа int, Only Write.
Цифровой тег OPC тип bool, Only Write.
SCADa может быть запущена, или закрыта, независимо от тех.процесса линии, т.е. рандомно, т.е. даже в моменты процессов запуска, останова или паузы линии, т.е запуск/останов SCADa никак не должны отражаться на тех.процессе.

Задача:
С помощью одной кнопки установить значения этих тегов ТОЛЬКО по нажатию ЛКМ, и никак иначе.
Ни при каких обстоятельствах запись в эти теги не должна производиться, кроме как по решению оператора в строго определённые моменты тех.процесса.

Я попробовал:
- Поставил некую сущность "Команда", в закладке "Действия" которой назначил установку значений этих тегов. Результат: Не пойдёт, пишет нули в эти теги при старте Runtime. "Опрос" в настройка этой самой "команды", обратная связь не пойдёт .
- Написал скрипт, запуск с помощью "команды". Не пойдёт, пишет значения в коде в теги при старте Runtime. После изменения тега в PLC НЕ пишет тег, пока с помощью другой "команды" не изменишь выходное(!!!) значение скрипта.
- В скрипте объявил счётчик кол-ва запусков скрипта для контроля разных вариантов запуска.
- В настройках скрипта менял опрос с цикла на изменение переменных - всё равно срабатывает при старте Runtime.
- Удалил "команду" с действием запуска скрипта. Скрипт всё равно сработал при старте Runtime!!! Хотя даже макроса нет для запуска данного скирта. Вообще ни одной команды, ни в одном месте на запуск срипта!!! Это как вообще???
- "Опрос", обратная связь, и всё, что с этим связано в настройках, - невозможно из-за Only Write.

Вопрос: Какие ещё есть варианты установки значения тега OPC только по событию "одинарное нажатие ЛКМ", при условии, что целевые теги OPC UA Only Write?

melky
13.02.2026, 08:32
в MasterScada так все печально для каналов Only Write ?

SCADAMaster
13.02.2026, 09:45
- Поставил некую сущность "Команда", в закладке "Действия" которой назначил установку значений этих тегов. Результат: Не пойдёт, пишет нули в эти теги при старте Runtime. "Опрос" в настройка этой самой "команды", обратная связь не пойдёт .

Не должно быть такого - если значения до опроса у параметров не заданы, то ничего писаться при старте не должно.
Приложите ваш проект (Проект - Экспортировать), укажите путь к проблемной команде.

dimioks
16.02.2026, 12:12
Не должно быть такого - если значения до опроса у параметров не заданы, то ничего писаться при старте не должно.
Приложите ваш проект (Проект - Экспортировать), укажите путь к проблемной команде.

Ссылка на проект:
https://mega.nz/file/c18wzZrC#RC_ooUzRnDeen3H3a6LOMVSG5NPbh5H-yWWuA35-rKM

Спасибо за ответ! Умом я понимаю, что так не должно быть. Но по факту...
Пример скрипта:
public partial class ФБ : ScriptBase
{
int iTemp_1 = 0;
public override void Execute()
{
iTemp_1 = iTemp_1 + 1;
iCount = iTemp_1;
}
}
, где: iCount - выходной параметр, аналог. Если в Runtime с помощью команды изменить значение входа скрипта, то получается бесконечная рекурсия какая то...
Настройки скрипта: опрос по изменению входов.
bIn1 - цифровой вход, предназначен только для пуска скрипта.

Путь к проблемному скрипту:
Объект -> MainForm -> Управление В1 - > № картинки и другое v2
Скрипт запускается командой Объект -> MainForm -> Управление В1 - > Скрипт (временно в виде кнопки на главном экране). При старте скрипт срабатывает 2 раза. В Runtime при запуске с кнопки "Скрипт" уходит в бесконечную рекурсию.

Путь к проблемным кнопкам:
Объект -> MainForm -> Управление ХХХ - > Команду пуск
, где "Управление ХХХ" - это все экземпляры шаблона "Объект.Шаблоны.Ручное управления станками". Во всех экземплярах эта команда ведёт себя подобным образом. В случае, если запустить Runtime во время работы, все станки тупо останавливаются...

ЗЫ: Обновление: дело не в кнопке, а в переменных шаблона:
Объект.Шаблоны.Ручное управления станками.iReqMode
Объект.Шаблоны.Ручное управления станками.bPusk
Скорее всего, дело в том, что в "значение" не могу установить периодический опрос. Доступны только константа и имитация.

ЗЫ: Теперь в проекте в целом не могу поставить новое "Значение" с циклическим опросом. Что происходит??? Ключ активации работает, Runtime запускается...
Пару дней назад "Значение" вставлялась с любыми вариантами опроса...

Где тут собака порылась?

dimioks
16.02.2026, 12:15
в MasterScada так все печально для каналов Only Write ?

Не знаю. Эта SCADa для меня новая. Обычно я работаю с другими.

1exan
16.02.2026, 13:21
Не знаю. Эта SCADa для меня новая. Обычно я работаю с другими.

"Повторитель по условию" из библиотеки "Обработка сигналов" не поможет? По-моему на этом элементе такие штуки делались

dimioks
16.02.2026, 13:45
"Повторитель по условию" из библиотеки "Обработка сигналов" не поможет? По-моему на этом элементе такие штуки делались
Попробую...

SCADAMaster
16.02.2026, 13:49
Ссылка на проект:
https://mega.nz/file/c18wzZrC#RC_ooUzRnDeen3H3a6LOMVSG5NPbh5H-yWWuA35-rKM


Не качается отсюда. Выложите на Yandex.Disk или Google.Drive

dimioks
16.02.2026, 15:23
Не качается отсюда. Выложите на Yandex.Disk или Google.Drive

https://disk.yandex.ru/d/leJh9UJU_bpN6w

SCADAMaster
16.02.2026, 18:18
На какую ОРС переменную поступает значение при старте? Укажите путь к ней.

dimioks
16.02.2026, 21:44
На какую ОРС переменную поступает значение при старте? Укажите путь к ней.
Система.К1.OPC UA сервер1.MainPLC.Tags.B1.iReqMode
Система.К1.OPC UA сервер1.MainPLC.Tags.B1.bPusk

Так же значения поступают на все подобные теги др.станков:

Система.К1.OPC UA сервер1.MainPLC.Tags.B2.iReqMode
Система.К1.OPC UA сервер1.MainPLC.Tags.B2.bPusk

Система.К1.OPC UA сервер1.MainPLC.Tags.B3.iReqMode
Система.К1.OPC UA сервер1.MainPLC.Tags.B3.bPusk

... и т.д. вплоть до...

Система.К1.OPC UA сервер1.MainPLC.Tags.С6.iReqMode
Система.К1.OPC UA сервер1.MainPLC.Tags.С6.bPusk

Выявлено в реальном режиме на объекте, со связью на PLC, подтверждено в режиме симуляции панельки Weintek.

SCADAMaster
17.02.2026, 09:36
Проверили, ни у одной, ни у другой переменной значение при старте не записывается.
После старта в дереве системы что у вас у этих значений (см. скриншот) ?

dimioks
18.02.2026, 22:05
Проверили, ни у одной, ни у другой переменной значение при старте не записывается.
После старта в дереве системы что у вас у этих значений (см. скриншот) ?
Приеду с командировки - ещё раз посмотрю. Сейчас не могу.

То, что пишется при старте - нет сомнений. Проверяется просто: на стороне сервера устанавливаются значения, отличные от дефолтных. Запускается Runtime. Значения сбрасываются в "0" и "false" во всех вышеуказанных тегах (это видно на сервере). Хотя никакой команды на выполнение интерфейсного метода "Write" клиента OPC при старте я не даю...

Кстати, даже у Вас на скринах переменная "Значение1" =2. Это означает, как я писал выше, что скрипт при старте уже выполнился 2 раза. Теперь попробуйте запустить скрипт кнопкой на экране - и он уйдёт в бесконечную "рекурсию". В данном проекте это не имеет отношение к тому, что теги пишутся при старте, но такое поведение скрипта вызывает вопросы.

SCADAMaster
19.02.2026, 10:04
То, что пишется при старте - нет сомнений. Проверяется просто: на стороне сервера устанавливаются значения, отличные от дефолтных. Запускается Runtime. Значения сбрасываются в "0" и "false" во всех вышеуказанных тегах (это видно на сервере). Хотя никакой команды на выполнение интерфейсного метода "Write" клиента OPC при старте я не даю...

У указанных вами переменных у значений стоят константы - выкл и 0. Конечно они запишут эти значения при старте.

melky
19.02.2026, 10:14
вот у автора и вопрос, как не писать переменную при старте? з.ы. по опыту знаю, что иногда нужно записывать, а иногда нет и выбор такой настройки просто необходим.
А тут в случае с версией 3 видимо развития уже не будет, максимум как-то скриптами это сделать. При этом, это может быть просто команда в устройстве, без всякой переменной для опроса.

SCADAMaster
19.02.2026, 10:41
Нет. Здесь явная ошибка в проекте.

dimioks
24.02.2026, 10:25
См.выше:


ЗЫ: Обновление: дело не в кнопке, а в переменных шаблона:
Объект.Шаблоны.Ручное управления станками.iReqMode
Объект.Шаблоны.Ручное управления станками.bPusk
Скорее всего, дело в том, что в "значение" не могу установить периодический опрос. Доступны только константа и имитация.

ЗЫ: Теперь в проекте в целом не могу поставить новое "Значение" с циклическим опросом. Что происходит??? Ключ активации работает, Runtime запускается...
Пару дней назад "Значение" вставлялась с любыми вариантами опроса...

Где тут собака порылась?


У указанных вами переменных у значений стоят константы - выкл и 0. Конечно они запишут эти значения при старте.

Нет. Здесь явная ошибка в проекте.

Я про опрос уже писал!!!
Повторяю: я не могу выставить в переменной значение опроса "Периодический", доступно только "Константа" и "Имитация". "Периодический" - затемнено и недоступно для выбора.

Теперь я вообще не могу вставить любое "Значение" с опросом "Периодический" во всём проекте!!!
Может где есть настройка в проекте какая?

************************************************** **

Второй вопрос по работе скрипта я уже задавал:

Ссылка на проект:
https://mega.nz/file/c18wzZrC#RC_ooUzRnDeen3H3a6LOMVSG5NPbh5H-yWWuA35-rKM

Спасибо за ответ! Умом я понимаю, что так не должно быть. Но по факту...
Пример скрипта:
public partial class ФБ : ScriptBase
{
int iTemp_1 = 0;
public override void Execute()
{
iTemp_1 = iTemp_1 + 1;
iCount = iTemp_1;
}
}
, где: iCount - выходной параметр, аналог. Если в Runtime с помощью команды изменить значение входа скрипта, то получается бесконечная рекурсия какая то...
Настройки скрипта: опрос по изменению входов.
bIn1 - цифровой вход, предназначен только для пуска скрипта.

Путь к проблемному скрипту:
Объект -> MainForm -> Управление В1 - > № картинки и другое v2
Скрипт запускается командой Объект -> MainForm -> Управление В1 - > Скрипт (временно в виде кнопки на главном экране). При старте скрипт срабатывает 2 раза. В Runtime при запуске с кнопки "Скрипт" уходит в бесконечную рекурсию.


При старте проекта скрипт выполняется 2 раза. Я это вижу даже у вас на скриншоте.
При работе проекта, на главном экране при запуске с кнопки "Скрипт" уходит в бесконечную рекурсию.

SCADAMaster
24.02.2026, 10:33
я не могу выставить в переменной значение опроса "Периодический"

Потому что у этой переменной нет входной связи.

Что вы в конечном счете хотите сделать? Опишите изначальную задачу.

dimioks
24.02.2026, 10:53
Потому что у этой переменной нет входной связи.

Это... Шаблон!!! Какие могут быть "связи" у локальной переменной в шаблоне???
Мне что, кинуть "связь" в шаблоне с какой-нибудь временной переменной только для того, чтобы настроить опрос локальной переменной шаблона???


Что вы в конечном счете хотите сделать? Опишите изначальную задачу.
1. Мне нужна кнопка в шаблоне, которая одновременно(асинхронно с небольшой разницей по времени) установит значения 2-х тегов (Only Write) по клику ЛКМ.
2. Решить вопрос со скриптом. Где моя ошибка. Такая работа скрипта - абсолютно неадекватная, невозможная в принципе ни на какой SCADa.

SCADAMaster
24.02.2026, 11:18
1. Замените значения на команды. У команды должно быть выключено значение до опроса и восстановление при рестарте. На эти команды точно также через действия записывайте значения.
2. Вам нужно изменить код скрипта. Как мы понимаем, вам нужно чтобы код выполнялся по переднему фронту входа bIn1. Исправьте код на:
int iTemp_1 = 0;
bool? M=false;
public override void Execute()
{
if (bIn1==true && M==false)
{
//int iTemp_1 = 0;
//iNum = 2;
//bAlarm = true;
iTemp_1 = iTemp_1 + 1;
iCount = iTemp_1;
//bRun = false;

/*if (bAlarm == true) {iNum = 2;}
else {if (bRun == true) {iNum = 1;} else {iNum = 0;};
};*/
//bNotAlarm = !bAlarm;
}
M=bIn1;

}

dimioks
03.03.2026, 13:37
...Сделал. Работает. Спасибо.