Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
script [2025/09/18 06:15] root [Взаимодействие скриптов интерфейса и ПЛК] |
script [2025/09/18 12:38] (текущий) root [Пример вызова функции скрипта ПЛК из скрипта интерфейса] |
||
|---|---|---|---|
| Строка 146: | Строка 146: | ||
| </ | </ | ||
| + | ====== Пример вызова функции скрипта ПЛК из скрипта интерфейса ====== | ||
| - | ====== Дальше все херня, переделываю... ====== | ||
| - | ====== Раздел проекта " | ||
| <wrap ks> | <wrap ks> | ||
| - | Все скрипты проекта запускаются на исполнение при запуске среды исполнения. Сами по себе скрипты подключаются к проекту в виде JavaScript модулей, поэтому для доступа к элементам скрипта их необходимо явно экспортировать, | + | Создадим в скаде код логики работы некоего |
| - | </ | + | |
| - | <wrap ks> | + | |
| - | При создании нового | + | |
| </ | </ | ||
| + | |||
| <code javascript> | <code javascript> | ||
| - | export | + | let isActive = true; |
| - | | + | |
| - | } | + | async function init() { |
| - | </ | + | |
| - | Эта функция вызывается ядром системы при каждом старте среды исполнения. Если скрипту не требуется инициализация при старте, | + | if (isActive) log('hi'); |
| - | Экспортируемые элементы скриптов можно в дальнейшем использовать в других скриптах. К примеру создадим скрипт с именем //script1// и содержимым: | + | await ds.sleep(3000); |
| - | \\ | + | } |
| - | **script1** | + | |
| - | <code javascript> | + | |
| - | export function f1() { | + | |
| - | alert('Функция f1 скрипта 1'); | + | |
| } | } | ||
| - | function | + | function |
| - | | + | |
| + | isActive = state; | ||
| } | } | ||
| </ | </ | ||
| - | Здесь функция f1 будет доступной из сторонних скриптов, | ||
| - | \\ | ||
| - | **script2** | ||
| - | <code javascript> | ||
| - | export async function init() { | ||
| - | dsScript.script1.f1(); | ||
| - | } | ||
| - | </ | ||
| - | При запуске проекта на исполнение мы увидим сообщение: | ||
| - | {{ : | ||
| - | Если мы попытаемся вызвать функцию //f2//, мы получим ошибку, | ||
| - | \\ | ||
| - | **script2** | ||
| - | <code javascript> | ||
| - | export async function init() { | ||
| - | dsScript.script1.f2(); | ||
| - | } | ||
| - | </ | ||
| - | {{ :: | ||
| - | При этом функцию //f2// мы без проблем можем использовать внутри первого скрипта: | ||
| - | \\ | ||
| - | **script1** | ||
| - | <code javascript> | ||
| - | export function f1() { | ||
| - | f2(); | ||
| - | } | ||
| - | function f2() { | + | <wrap ks> |
| - | alert(' | + | Должен получиться проект следующего вида: |
| - | } | + | </ |
| - | </code> | + | |
| - | \\ | + | {{ :: |
| - | **script2** | + | |
| + | <wrap ks> | ||
| + | Далее создадим на экране две кнопки для включения и отключения статуса отображения сообщения посредством вызова функции [[ds.plccall|ds.plcCall]], | ||
| + | </wrap> | ||
| <code javascript> | <code javascript> | ||
| - | export | + | async function |
| - | dsScript.script1.f1(); | + | await ds.plcCall(' |
| } | } | ||
| </ | </ | ||
| - | {{ :: | ||
| - | ====== Скрипты элементов визуализации ====== | + | <wrap ks> |
| - | Скрипты так же можно использовать как действие на событие элементов визуализации (на данный момент доступно только событие " | + | и |
| - | \\ | + | </wrap> |
| - | **script1** | + | |
| <code javascript> | <code javascript> | ||
| - | export | + | async function |
| - | alert('hi'); | + | await ds.plcCall('script_plc0.setActive', [ false ]); |
| } | } | ||
| </ | </ | ||
| - | Чтобы использовать код скрипта проекта в своем коде, его необходимо подключить функцией // | ||
| - | Далее добавляем на экран кнопку, | ||
| - | {{ :: | ||
| - | Пропишем следующий код скрипта: | ||
| - | <code javascript> | ||
| - | const script1 = ds.include(' | ||
| - | script1.f1(); | ||
| - | </ | ||
| - | Теперь при запуске проекта и нажатии кнопки будет вызываться функция скрипта: | ||
| - | {{ :: | ||
| - | ====== Глобальные | + | <wrap ks> |
| - | В любых | + | Запустим проект и понажимаем кнопки, в журнале будет видно |
| - | Для примера создадим две кнопки, первая | + | </ |
| - | {{ :: | + | |
| - | После чего пропишем следующий код:\\ | + | {{ :: |
| - | \\ | + | |
| - | **Кнопка " | + | |
| - | <code javascript> | + | |
| - | ds.global.x = Date(); | + | |
| - | </ | + | |
| - | \\ | + | |
| - | **Кнопка " | + | |
| - | <code javascript> | + | |
| - | alert(ds.global.x); | + | |
| - | </ | + | |
| - | При нажатии кнопки "Сохранить дату" | + | |
| - | ====== Функции ядра ====== | ||
| - | Скада система помимо стандартных функций языка JavaScript предоставляет дополнительные инструменты для работы с ядром системы. Системные функции находятся в объекте //ds//, доступном из всех скриптов. Большинство функций являются асинхронными, | ||
| - | На данный момент доступны следующие функции: | ||
| - | \\ | ||
| - | [[ds.sleep|sleep]] - задержка выполнения кода на указанное количество миллисекунд; | ||
| - | [[ds.goto|goto]] - переход на указанный экран; | ||
| - | [[ds.getDev |getDev]] - получить значение переменной устройства; | ||
| - | [[ds.setDev |setDev]] - записать значение переменной устройства; | ||
| - | [[ds.getProp |getProp]] - получить значение свойства графического элемента; | ||
| - | [[ds.setProp |setProp]] - установить значение свойства графического элемента.\\ | ||