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

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


script

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
script [2025/09/18 06:57]
root [Пример вызова функции скрипта ПЛК из скрипта интерфейса]
script [2025/09/18 12:38] (текущий)
root [Пример вызова функции скрипта ПЛК из скрипта интерфейса]
Строка 149: Строка 149:
  
 <wrap ks> <wrap ks>
-Создадим в скаде код логики работы некоего устройства. К примеру это будет таймер на 3 секунды, выводить сообщение в журнал. Так же создадим функцию, которая будет управлять состоянием видимости сообщения. Так как этот код должен работать постоянно при работе проекта, его необходимо создать в скрипте ПЛК. Для этого создадим скрипт следующего вида:+Создадим в скаде код логики работы некоего устройства. К примеру сделаем таймер на 3 секунды, который будет выводить сообщение в журнал. Так же создадим функцию, которая будет управлять состоянием видимости сообщения. Так как этот код должен работать постоянно при работе проекта, его необходимо создать в скрипте ПЛК. Для этого создадим скрипт следующего вида:
 </wrap> </wrap>
  
Строка 163: Строка 163:
  
 function setActive(state) { function setActive(state) {
 +    log('Set state:', state);
     isActive = state;     isActive = state;
 } }
 </code> </code>
  
-====== Дальше все херня, переделываю... ====== 
-====== Раздел проекта "Скрипты" ====== 
 <wrap ks> <wrap ks>
-Все скрипты проекта запускаются на исполнение при запуске среды исполнения. Сами по себе скрипты подключаются к проекту в виде JavaScript модулей, поэтому для доступа к элементам скрипта их необходимо явно экспортировать, те функции и переменные скриптов имеют свою область видимости только в пределах своего скрипта и по умолчанию не видны из других. Для доступа к элементам скрипта извне используется ключевое слово //export//.+Должен получиться проект следующего вида:
 </wrap> </wrap>
 +
 +{{ ::script12.png?nolink&400 |}}
 +
 <wrap ks> <wrap ks>
-При создании нового скрипта автоматически создается шаблон кода функции инициализации скрипта:+Далее создадим на экране две кнопки для включения и отключения статуса отображения сообщения посредством вызова функции [[ds.plccall|ds.plcCall]], которая вызывает функцию из скрипта ПЛК. Создадим в кнопках скрипты следующего содержания:
 </wrap> </wrap>
-<code javascript> 
-export async function init() { 
-     
-} 
-</code> 
-Эта функция вызывается ядром системы при каждом старте среды исполнения. Если скрипту не требуется инициализация при старте, эту функцию можно удалить.\\ 
-Экспортируемые элементы скриптов можно в дальнейшем использовать в других скриптах. К примеру создадим скрипт с именем //script1// и содержимым:\\ 
-\\ 
-**script1** 
-<code javascript> 
-export function f1() { 
-    alert('Функция f1 скрипта 1'); 
-} 
  
-function f2() { 
-    alert('Функция f2 скрипта 1'); 
-} 
-</code> 
-Здесь функция f1 будет доступной из сторонних скриптов, при этом функция f2 доступна только внутри текущего скрипта. Теперь можно создать скрипт с именем //script2//, в котором можно вызвать функцию f1 первого скрипта. Все загруженные модули доступны в глобальном объекте системы с именем //dsSript//, соответственно чтобы вызвать функцию из первого модуля необходимо написать следующий код:\\ 
-\\ 
-**script2** 
 <code javascript> <code javascript>
-export async function init() { +async function main(val) { 
- dsScript.script1.f1();+    await ds.plcCall('script_plc0.setActive', [ true ]);
 } }
 </code> </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+
-\\ +
-**script2** +
-<code javascript> +
-export async function init() { +
- dsScript.script1.f1(); +
-} +
-</code> +
-{{ ::script3.png?nolink&400 |}}\\+
  
-====== Скрипты элементов визуализации ====== 
-Скрипты так же можно использовать как действие на событие элементов визуализации (на данный момент доступно только событие "Нажатие" элемента "Кнопка"). Для примера создадим скрипт с именем //script1// и следующим содержимым:\\ 
-\\ 
-**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.1758167858.txt.gz · Последнее изменение: 2025/09/18 06:57 — root