Пример использования шаблона
В данном примере показан вариант использования шаблона в проекте, содержащем несколько источников сигналов. Исходный состав проекта включает в себя шесть источников. Наша задача будет состоять в том, чтобы с помощью текстовых примитивов отображать текущие значения, получаемые от этих источников. При этом для каждого источника должен использоваться свой текстовый примитив, а отображение должно включаться и отключаться по кнопке.

Сначала добавим необходимые блоки в проект. В первую очередь добавим приемники значений
источников и соединим их с блоками источников. Для этого в палитре компонентов Схемного окна
откроем вкладку "Данные", а в ней выберем блок "
Запись в список сигналов" и добавим его в Схемное окно. Затем соединим выход первого
источника и вход данного блока. Повторим данную операцию для оставшихся источников. Также
добавим примитив "
Кнопка" с панели примитивов. Промежуточный результат должен выглядеть
аналогично иллюстрации ниже.

Добавим примитив "
Текст" из панели примитивов, вызвав её через меню Схемного
окна:"СО: Вставка ® Панель примитивов...". Затем откроем редактор
свойства "Шаблон автозаполнения". Для этого по ПКМ вызовем контекстное меню и выберем пункт
"Свойства объекта".

В открывшемся окне, во вкладке "Общие" выберем строку "Шаблон автозаполнения" и в правой
ячейке нажмём кнопку
. Откроется текстовый редактор, в котором мы запишем команды шаблона.
С помощью шаблона мы создадим сигнал для нашего текстового примитива, опишем поясняющий текст
и логику отображения значения сигнала с учётом положения кнопки с именем "Button":
SIGNAL sig_$self.Name$
SCRIPT $self.Name$.Text = "data_$self.Name$ ="
SCRIPT if button.down then $self.Name$.Values = sig_$self.Name$ else $self.Name$.Values = 0
Закроем окно текстового редактора по кнопке
.
Затем в окне свойств обязательно нужно нажать кнопку "Применить", иначе все изменения будут
утеряны.
Рассмотрим подробнее команды нашего шаблона. Первая строка создаст сигнал с именем, включающим
в себя имя объекта, содержащего шаблон, т.е. в нашем случае будет создан сигнал sig_txt_1.
Вторая строка создаст строку скрипта в Схемном окне, которая будет присваивать свойству "Text"
нашего примитива строку "data_txt_1 =". В третьей строке задаётся условие, по которому при
нажатой кнопке button свойству Values нашего текстового примитива присваиваются значения
сигнала sig_txt_1, а при отжатой – ноль. Мы воспользовались скриптом для связывания сигнала и
свойства примитива, т.к. эта связь должна подчиняться дополнительным условиям. В более простом
случае, если значения сигнала всегда должны отображаться нашим текстовым примитивом, третью
строку можно было бы заменить на команду CONNECT, создающую прямую связь
между сигналом и свойством объекта:
CONNECT sig_$self.Name$, $self.Name$.Values
Далее изменим имя текстового примитива с "TextLabel" на "txt_1". Тогда при копировании
данного примитива новые примитивы будут автоматически именоваться как
<текст><n+1>, т.е. в нашем случае: "txt_2", "txt_3" и т.д.
Для отображения числовых значений сигналов установим свойство "Values" в значение "Показывать справа". Теперь окно свойств нашего текстового примитива можно закрыть.
Теперь нужно размножить наш текстовый примитив с шаблоном простым копированием. Всего в проекте должно получиться шесть текстовых примитивов с именами "txt_1", "txt_2", "txt_3", "txt_4", "txt_5", "txt_6". На рисунке ниже представлен примерный вид Схемного окна на данном этапе.

Теперь нужно воспользоваться нашим шаблоном. Для этого выделим все текстовые примитивы и в меню Схемного окна выберем пункт СО: Сервис → Генерация сигналов и связей. После этого нужно проверить список сигналов проекта и содержимое скрипта в Схемном окне. Для просмотра списка сигналов нужно выбрать пункт меню Схемного окна СО: Сервис → Сигналы..., а для проверки скрипта в левой части схемного окна выбрать вкладку "Параметры". Данные окна должны выглядеть следующим образом.

txt_1.Text = "data_txt_1 ="
if button.down then txt_1.Values = sig_txt_1 else txt_1.Values = 0
txt_2.Text = "data_txt_2 ="
if button.down then txt_2.Values = sig_txt_2 else txt_2.Values = 0
txt_3.Text = "data_txt_3 ="
if button.down then txt_3.Values = sig_txt_3 else txt_3.Values = 0
txt_4.Text = "data_txt_4 ="
if button.down then txt_4.Values = sig_txt_4 else txt_4.Values = 0
txt_5.Text = "data_txt_5 ="
if button.down then txt_5.Values = sig_txt_5 else txt_5.Values = 0
txt_6.Text = "data_txt_6 ="
if button.down then txt_6.Values = sig_txt_6 else txt_6.Values = 0
В качестве завершающего действия необходимо указать имена сигналов в блоках "Приёмник", подключённых к источникам. Для этого нужно выделить блок, по клику ПКМ вызвать контекстное меню и выбрать пункт "Свойства объекта". В открывшемся окне выбрать вкладку "Свойства", строку "Имена сигналов" и вписать имя сигнала в ячейку справа.



Ниже представлены виды Схемного окна при отжатой и при нажатой кнопке.


Данный пример несложно модифицировать так, чтобы каждый текстовый примитив включался и отключался по своей кнопке. Сначала вернём проект на несколько шагов назад. Для этого удалим все текстовые примитивы кроме первого с именем "txt_1", очистим список сигналов проекта и удалим все сгенерированные скрипты.
Далее переименуем кнопку из "Button" в "Button_txt_1" и скопируем её пять раз.

В итоге проект должен содержать кнопки с именами "Button_txt_1", "Button_txt_2", "Button_txt_3", "Button_txt_4", "Button_txt_5", "Button_txt_6".
После этого отредактируем шаблон, содержащийся в примитиве "txt_1". Заменим третью строку:
SCRIPT if button.down then $self.Name$.Values = sig_$self.Name$ else $self.Name$.Values = 0
на строку:
SCRIPT if button_$self.Name$.down then $self.Name$.Values = sig_$self.Name$ else $self.Name$.Values = 0
Схемное окно должно выглядеть следующим образом. На данном этапе текст в текстовых примитивах может отличаться от приведённого на изображении, это не существенно.
После этого снова размножим этот текстовый примитив, чтобы получить шесть однотипных объектов, выделим их и проведём генерацию сигналов и скриптов.

Состав сигналов будет аналогичен тому, что был получен в первый раз, а текст скрипта изменится в том месте, где проверяется состояние кнопки, поскольку теперь каждому примитиву важно состояние именно его кнопки.

В итоге при запуске расчёта мы должны получить подобную картину.

Каждый текстовый примитив управляется своей собственной кнопкой.
При использовании различных языковых конструкций типа "formattext-end", "getstrformat" и т.п. можно добиться большей автоматизации при создании проекта, однако это требует более тесного знакомства с языком программирования SimInTech.