Инструменты пользователя

Инструменты сайта


script

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

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