Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
script [2025/09/18 06:05] root [Пример использования скриптов ПЛК] |
script [2025/09/18 12:38] (текущий) root [Пример вызова функции скрипта ПЛК из скрипта интерфейса] |
||
|---|---|---|---|
| Строка 123: | Строка 123: | ||
| <wrap ks> | <wrap ks> | ||
| - | Для примера, | + | Для примера, |
| </ | </ | ||
| - | ====== Взаимодействие скриптов интерфейса и ПЛК ====== | + | <code javascript> |
| + | async function init() { | ||
| + | while (true) { | ||
| + | log(' | ||
| + | await ds.sleep(1000); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| <wrap ks> | <wrap ks> | ||
| - | Скрипты интерфейса могут | + | Код скрипта разместим в функции |
| </ | </ | ||
| + | {{ :: | ||
| - | ====== | + | ====== |
| - | ====== Раздел проекта " | + | |
| <wrap ks> | <wrap ks> | ||
| - | Все скрипты проекта запускаются на исполнение при запуске среды | + | Скрипты интерфейса могут вызывать функции |
| </ | </ | ||
| + | |||
| + | ====== Пример вызова функции скрипта ПЛК из скрипта интерфейса ====== | ||
| + | |||
| <wrap ks> | <wrap ks> | ||
| - | При создании нового скрипта автоматически создается шаблон кода функции инициализации скрипта: | + | Создадим в скаде код логики работы |
| </ | </ | ||
| + | |||
| <code javascript> | <code javascript> | ||
| - | export async function init() { | + | let isActive = true; |
| - | + | ||
| - | } | + | |
| - | </ | + | |
| - | Эта функция вызывается ядром системы при каждом старте среды исполнения. Если скрипту не требуется инициализация при старте, | + | |
| - | Экспортируемые элементы скриптов можно в дальнейшем использовать в других скриптах. К примеру создадим скрипт с именем //script1// и содержимым: | + | |
| - | \\ | + | |
| - | **script1** | + | |
| - | <code javascript> | + | |
| - | export function f1() { | + | |
| - | alert(' | + | |
| - | } | + | |
| - | function | + | async function |
| - | | + | |
| - | } | + | |
| - | </ | + | await ds.sleep(3000); |
| - | Здесь функция f1 будет доступной из сторонних скриптов, | + | } |
| - | \\ | + | |
| - | **script2** | + | |
| - | <code javascript> | + | |
| - | export async function init() { | + | |
| - | dsScript.script1.f1(); | + | |
| - | } | + | |
| - | </ | + | |
| - | При запуске проекта на исполнение мы увидим сообщение: | + | |
| - | {{ :script1.png? | + | |
| - | Если мы попытаемся вызвать функцию //f2//, мы получим ошибку, | + | |
| - | \\ | + | |
| - | **script2** | + | |
| - | <code javascript> | + | |
| - | export async function init() { | + | |
| - | dsScript.script1.f2(); | + | |
| - | } | + | |
| - | </ | + | |
| - | {{ :: | + | |
| - | При этом функцию //f2// мы без проблем можем использовать внутри первого скрипта: | + | |
| - | \\ | + | |
| - | **script1** | + | |
| - | <code javascript> | + | |
| - | export function f1() { | + | |
| - | f2(); | + | |
| } | } | ||
| - | function | + | function |
| - | alert('Функция f2 скрипта 1'); | + | log('Set state:', state); |
| + | isActive = state; | ||
| } | } | ||
| </ | </ | ||
| - | \\ | + | |
| - | **script2** | + | <wrap ks> |
| + | Должен получиться проект следующего вида: | ||
| + | </ | ||
| + | |||
| + | {{ :: | ||
| + | |||
| + | <wrap ks> | ||
| + | Далее создадим на экране две кнопки для включения и отключения статуса отображения сообщения посредством вызова функции [[ds.plccall|ds.plcCall]], | ||
| + | </ | ||
| <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]] - установить значение свойства графического элемента.\\ | ||