Ответы в темах
-
АвторЗаписи
-
Imya
УчастникПерепроверил на 6.4.6, к сожалению не работает. Проект
— Пользовательские скрипты выполняются в режиме редактирования
Это то что обсуждалось в этой теме? Если да, то тоже не работает.
Насчет примеров с гитхаба, если я правильно понял, то про исполнение скриптов дочерних компонентов говорится в контексте панелей? Фейсплейтов это не касалось?Imya
УчастникОбнаружил что уже пару дней как есть новое обновление 🙂
Всё о чем я писал тестировалось на 6.4.5, нашел список изменений, по идее в новой версии должно работать. Буду пробоватьImya
УчастникЕсли честно, мне трудно в более упрощенной форме донести, в чем именно проблема. На скриншоте — то, что видит конечный пользователь. Грубо говоря, слева и справа должны быть одинаковые надписи, но из-за того, что слева компонент помещен в фейсплейт, скрипт компонента не работает.
Возможно, это только то, как мне видится работа фейсплейтов, и то, что мы обсуждаем, изначально не должно работать. Не знаю.Давайте попробуем по порядку:
Фейсплейт
Компонент внутри фейсплейта — текст
Скрипт компонента
Мнемосхема на которой расположен фейсплейт
Та-же мнемосхема, компонент — текст
Скрипт компонента
Всё это то, как выглядит в редакторе. По логике, у пользователя должно быть два квадрата с надписями «Пример 1», «Пример 2».
Как выглядит в итогеImya
УчастникImya
УчастникСейчас вспомнил что с самого начала не работали скрипты у компонентов фейсплейта, т.е. я могу из главного окна найти дочерний компонент и его отредактировать, но не могу через скрипт этого компонента отредактировать его-же самого. Вероятно по этой причине и не работают фейсплейты в фейсплейтах.
К примеру на обычной мнемосхеме я могу хоть с одного компонента редактировать другой: найти родителя, потом найти дочерний компонент.Imya
УчастникЯ допускаю что указать путь к конкретному свойству может заработать, но это получится не совсем то что мне нужно. Пример с текстом я описал исключительно для наглядности, мне нужно чтобы работал именно скрипт фейсплейта.
Реальный пример:
1. Фейсплейт со статусом:
передаю в фейсплейт *название состояния* — фейсплейт становится красным, определенного размера, с определенной иконкой, определенной надписью;
передаю *другое из возможных состояний* — статус по той же логике меняется в соответствии с другим состоянием, ну и т.д.
2. Помещаю этот «первый» фейсплейт в другой фейсплейт и хочу просто туда передать нужное мне состояние без необходимости как-либо контактировать с тем что происходит внутри фейсплейта.
3. Помещаю эту строку с состояниями в третий фейсплейт: на этом этапе мне в принципе хватит просто через привязки свойств перенаправить данные с канала ко второму фейсплейту.Разновидностей «третьего» фейсплейта десять и не хочется чтобы когда мне надоест иконка, или вдруг захочу поменять логику, мне пришлось редактировать каждый экземпляр.
Если отойти от примера хочется некую матрешку-конструктор: возможность создавать базовые фейсплейты которые будут использоваться во многих других фейсплейтах и при необходимости редактирования повлияют на всю цепочкуImya
Участникprops.BackColor=
попробуйте backColor с маленькой буквы
Imya
УчастникНа странице каждого объекта есть небольшое меню навигации, но поскольку масштаб на каждой схеме свой — по размеру экрана, меню может быть микроскопическим. Хотелось бы конечно чтобы везде размер был нормальным не прибегая к масштабированию через «увеличить/уменьшить», слишком масштаб по экрану удобный
Imya
Участник2025-10-08 15:23:45 [scada-test][root][ACT] Вебстанция 6.2.2.0 запущена
2025-10-08 15:23:45 [scada-test][root][ACT] Хранилище FileStorage 6.4.0.0 загружено из файла /opt/scada/ScadaWeb/FileStorage.dll
2025-10-08 15:23:46 [scada-test][root][ERR] Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/ScadaCommon.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/ScadaWeb.ru.xml
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgChart 6.1.0.0 загружен из файла /opt/scada/ScadaWeb/PlgChart.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgMain 6.1.1.0 загружен из файла /opt/scada/ScadaWeb/PlgMain.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgMimic 6.0.0.0 загружен из файла /opt/scada/ScadaWeb/PlgMimic.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgMimicEditor 6.0.0.0 загружен из файла /opt/scada/ScadaWeb/PlgMimicEditor.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgMimBasicComp 6.0.0.0 загружен из файла /opt/scada/ScadaWeb/PlgMimBasicComp.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgScheme 6.1.1.0 загружен из файла /opt/scada/ScadaWeb/PlgScheme.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgSchBasicComp 6.1.0.0 загружен из файла /opt/scada/ScadaWeb/PlgSchBasicComp.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgStore 6.1.0.1 загружен из файла /opt/scada/ScadaWeb/PlgStore.dll
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgWebPage 6.1.1.0 загружен из файла /opt/scada/ScadaWeb/PlgWebPage.dll
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgChart: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgChart.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgMain: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgMain.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgMimic: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgMimic.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgMimicEditor: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgMimicEditor.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgMimBasicComp: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgMimBasicComp.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgScheme: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgScheme.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgStore: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgStore.ru.xml
2025-10-08 15:23:46 [scada-test][root][ERR] Плагин PlgWebPage: Файл словарей не найден и заменён файлом по умолчанию: /opt/scada/ScadaWeb/lang/PlgWebPage.ru.xml
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgMimic: Добавление компонентов из плагина PlgMimBasicComp
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgScheme: Извлечение компонентов схем из установленных плагинов
2025-10-08 15:23:46 [scada-test][root][ACT] Плагин PlgScheme: Добавлены компоненты из плагина PlgSchBasicComp
2025-10-08 15:23:46 [scada-test][root][ACT] Приём базы конфигурации
2025-10-08 15:23:46 [scada-test][root][ACT] База конфигурации получена успешно
2025-10-08 15:23:46 [scada-test][root][INF] Приложение готово к работе
2025-10-08 15:23:48 [scada-test][root][ERR] Пользователь с ид. 107 не найден при создании контекста пользователя
2025-10-08 15:23:48 [scada-test][root][ERR] Пользователь с ид. 107 не найден при создании контекста пользователя
2025-10-08 15:23:48 [scada-test][root][ERR] Ошибка при загрузке представления с ид. 2300 по пути Тест\Главная.mim:
Scada.Protocol.ProtocolException: Ошибка при чтении файла [View]\Faceplates/GUI/Objects/guiObjMainPageName.fp: Файл не найден
at Scada.Client.ClientBase.DownloadFile(RelativePath path, Int64 offset, Int32 count, Boolean readFromEnd, DateTime newerThan, Boolean throwOnFail, Func`1 createStreamFunc, DateTime& lastWriteTime, FileReadingResult& readingResult, Stream& stream)
at Scada.Client.ClientBase.DownloadFile(RelativePath path, Stream stream, Boolean throwOnFail)
at Scada.Web.Code.ViewLoader.LoadViewFromServer(ViewBase view, String path)
at Scada.Web.Code.ViewLoader.GetView(View viewEntity, Type viewType, ViewBase& view, String& errMsg)Imya
УчастникПопытался добавить console.log() и потом найти что-нибудь, но в итоге понял что скрипты будто вообще перестали работать. Оставил на тест один параметр ..
class extends ComponentScript {
domCreated(args) {
const objectName = args.component.children.find(c => c.name == «objectName»);
objectName.properties.foreColor = «red»;
console.log(«test»);
args.propertyChanged = true;
}
domUpdated(args) {
const objectName = args.component.children.find(c => c.name == «objectName»);
objectName.properties.foreColor = «red»;
console.log(«test»);
args.propertyChanged = true;
}
dataUpdated(args) {
const objectName = args.component.children.find(c => c.name == «objectName»);
objectName.properties.foreColor = «red»;
console.log(«test»);
args.propertyChanged = true;
}
}.. и все равно никакого результата. Если делаю привязку через свойства то все хорошо, пытаюсь через скрипт — никак.
Imya
Участник
class extends ComponentScript { dataUpdated(args) { const absObjectNum = args.component.properties.deviceNumber / 100; let connectionLevel = args.component.properties.connectionLevel; let additionalStatus = args.component.properties.additionalStatus; const background = args.component.children.find(c => c.name == "background"); const objectLink = args.component.children.find(c => c.name == "objectLink"); const connection = args.component.children.find(c => c.name == "connection"); const addlStat = args.component.children.find(c => c.name == "addlStat"); const frame1 = args.component.children.find(c => c.name == "frame1"); // Ссылка на главную страницу объекта objectLink.properties.clickAction.linkArgs.viewID = absObjectNum * 100; // Связь connection.properties.foreColor = (connectionLevel == 1) ? "red" : // цвет связи (connectionLevel > 1) && (connectionLevel < 5) ? "yellow" : (connectionLevel == 5) ? "green" : "white"; connection.properties.blinking = (connectionLevel == 1) ? true : false; // мигание // Дополнительный статус addlStat.properties.text = (additionalStatus == 2) ? "Тех.работы" : // текст доп.статуса (additionalStatus == 1) ? "Авария" : "Доп.статус"; addlStat.properties.foreColor = (additionalStatus == 1) ? "red" : "white"; // цвет доп.статуса addlStat.properties.visible = (additionalStatus == 0) ? false : true; // видимость // args.propertyChanged = true; } }-
Ответ изменён 11 месяцев, 1 неделя назад пользователем
Mikhail.
Imya
УчастникНа текущий момент всё получилось или остались вопросы?
Появился вопрос по обновлению данных, если передаю значения через экспортируемые параметры и привязку свойств, данные на мнемосхеме обновляются только после перезагрузки страницы. Как можно сделать обновление на мнемосхеме сразу после обновления значения канала?
-
Ответ изменён 11 месяцев, 2 недели назад пользователем
Imya.
Imya
УчастникС экспортируемыми параметрами у меня получалось использовать только статически — записать при редактировании. Хотелось бы узнать возможно ли передавать значение канала без скриптов.
С передачей значения нашелся ответ, если вдруг кому надо: в привязке свойств готового фейсплейта (который уже расположен на мнемосхеме) в имени свойства указывается название экспортируемого параметра в который нужно передать значение, в источник — номер канала.

Насчет моей проблемы вопрос закрыт, спасибо за помощь.
Задумка была такова: передавать фейсплейту номер объекта (или устройства), несколько дополнительный параметров (по типу наименования объекта) и иметь некое самостоятельное окно, по сути шаблон, которое в несколько кликов можно вынести и настроить.
Imya
УчастникЗадумка была такова: передавать фейсплейту номер объекта (или устройства), несколько дополнительный параметров (по типу наименования объекта) и иметь некое самостоятельное окно, по сути шаблон, которое в несколько кликов можно вынести и настроить.
На мой взгляд, нужно подойти к созданию фейсплейта с другой стороны — у фейсплейта есть экспортируемые свойства. К конкретным каналам они привязываются уже на той схеме, на которую добавлен фейсплейт. Скрипт фейсплейта может реагировать на значения этих свойств, но не извлекать данные каналов напрямую.
С экспортируемыми параметрами у меня получалось использовать только статически — записать при редактировании. Хотелось бы узнать возможно ли передавать значение канала без скриптов.
Сделайте, пожалуйста, скриншоты, чтобы была понятнее ситуация в целом.

const addlStatData = args.dataProvider.getCurData(absObjectNum * 1000 + 1); // хотел брать по тегу
addlStat.properties.text = (addlStatData.d.val == 2) ? «Тех.работы» :
(addlStatData.d.val == 1) ? «Авария» : «Доп.статус»;
addlStat.properties.foreColor = (addlStatData.d.val == 1) ? «red» : «white»;
addlStat.properties.visible = (addlStatData.d.val == 0) ? false : true;-
Ответ изменён 11 месяцев, 2 недели назад пользователем
Imya. Причина: Картинка
-
Ответ изменён 11 месяцев, 1 неделя назад пользователем
-
АвторЗаписи