Описание языка PradiSLang (PSL)
Назначение PSL
PSL (PradiSLang) — это непроцедурный (описательный) язык системы Pradis. Он предназначен для формального описания технических объектов и задания параметров расчёта.
В отличие от процедурных языков (Fortran, C++), где требуется прописывать алгоритм решения, PSL требует только описания самого объекта: его структуры, параметров, связей между элементами и требуемых результатов.
Ключевые возможности PSL
- 1. Формализация физической модели
На PSL задаются узлы, элементы, связи, материалы, нагрузки и граничные условия — всё, что необходимо решателю Pradis для построения математической модели.
- 2. Описательный подход
Работа на уровне физики задачи без погружения в численные методы. Снижается риск ошибок, связанных с реализацией алгоритмов.
- 3. Иерархическое построение
Поддержка вложенных фрагментов (субмоделей) произвольной глубины для моделирования крупных систем: автомобилей, промышленных роботов, станков.
- 4. Разделение данных и описание структуры модели
Параметры выносятся в раздел $DATA, что улучшает читаемость кода и позволяет изменять параметры модели без правки всех обращений к ним.
- 5. Полное управление расчётом
Задание временного интервала, шага сохранения результатов, метода интегрирования (SHTERM, NEWMARK), перечня выходных переменных и их масштабирования.
Область применения
PSL применяется как непосредственный входной язык решателя Pradis:
модель создаётся вручную или генерируется автоматически;
файл с расширением .psl передаётся решателю;
решатель выполняет расчёт и возвращает результаты.
Использование PSL целесообразно для любых моделей, поскольку это единственный язык, который понимает решатель Pradis.
Структура программы на PSL
Программа на PSL в общем случае включает следующие основные части:
Описание данных ($DATA) — определение параметров, констант, списков.
Описание объекта ($FRAGMENT) — задание узлов, элементов, связей, иерархии.
Описание изображения ($SHOW) — настройка графического отображения объекта.
Описание задания ($RUN, $PRINT) — управление расчётом и выводом результатов.
Файл с расширением .psl формируется решателем Pradis в каталоге проекта и представляет собой текстовое описание модели.
Разделы языка PSL
Общий перечень разделов
Язык PSL состоит из следующих разделов. Заголовки разделов начинаются с символа $, подзаголовки (внутри разделов) — с символа #.
Раздел |
Назначение |
|---|---|
$DATA |
Описание данных: списки параметров, константы |
$FRAGMENT |
Описание объекта (фрагмент модели) |
$SHOW |
Описание изображения объекта (визуализация) |
$REPLACE |
Замена параметров без перестроения модели |
$RESTORE |
Восстановление и продолжение расчёта |
$RUN |
Выполнение расчёта (задание параметров) |
Отображение результатов |
|
$INCLUDE |
Включение содержимого другого файла |
$END |
Завершение программы (обязателен) |
Примечание: Подразделы #BASE, #STRUCTURE, #EXTERNAL, #OUTPUT, #MAP входят в состав раздела $FRAGMENT и не являются самостоятельными разделами.
Подробное описание разделов
$DATA — описание данных
Назначение
В PSL параметры элементов (жёсткость, масса, длина и т.д.) задаются числами. Раздел $DATA позволяет дать этим числам имена и использовать имена вместо чисел.
Практическая выгода:
Если параметр нужно изменить — правите в одном месте ($DATA), а не во всех элементах, где он используется.
Сложные списки параметров можно собрать из простых, как конструктор.
Программу легче читать: вместо 1000 написано ЖесткостьПружины.
Как это выглядит на практике
Без $DATA (числа разбросаны по коду):
$FRAGMENT:
#STRUCTURE:
Пружина 'K (1 2; 1000)
Пружина 'K2 (3 4; 1000)
Пружина 'K3 (5 6; 1000)
Масса 'M (2; 10)
Масса 'M2 (4; 10)
Чтобы изменить жёсткость со 1000 на 2000, нужно править три строки. Чтобы изменить массу с 10 на 15 — две строки.
С $DATA:
$DATA:
Жесткость = 1000
Масса = 10
$FRAGMENT:
#STRUCTURE:
Пружина 'K (1 2; Жесткость)
Пружина 'K2 (3 4; Жесткость)
Пружина 'K3 (5 6; Жесткость)
Масса 'M (2; Масса)
Масса 'M2 (4; Масса)
Теперь: - Чтобы изменить жёсткость — меняете число в одной строке Жесткость = 2000 - Чтобы изменить массу — меняете Масса = 15
Более сложный пример: список параметров для стержня
Стержню (модель BALKAD) нужно передать 7 чисел: координаты двух точек (4 числа) и параметры сечения (3 числа: площадь, момент инерции, модуль упругости).
Без $DATA (все числа на месте):
$FRAGMENT:
#STRUCTURE:
Стержень 'B (2 3 4 5 6 7; 0.,0., 1.,0., 0.001, 1e-5, 2e11)
Это трудно читать и править.
С $DATA (разбиваем на осмысленные части):
$DATA:
{ Координаты }
ТочкаA = 0., 0.
ТочкаB = 1., 0.
{ Свойства сечения: площадь, момент инерции, модуль упругости }
Сечение = 0.001, 1e-5, 2e11
{ Полный список параметров стержня из частей }
ПараметрыСтержня = ТочкаA, ТочкаB, Сечение
$FRAGMENT:
#STRUCTURE:
Стержень 'B (2 3 4 5 6 7; ПараметрыСтержня)
Результат: ПараметрыСтержня автоматически превращается в список 0.,0., 1.,0., 0.001, 1e-5, 2e11 ровно в том порядке, который ожидает модель.
Как изменить один элемент внутри списка
Допустим, есть готовый список Сечение = 0.001, 1e-5, 2e11. Нужно получить такой же список, но с другим модулем упругости.
$DATA:
Сечение = 0.001, 1e-5, 2e11
ДругоеСечение = ~Сечение (3=2.5e11) { заменяем третий элемент }
Результат: ДругоеСечение = 0.001, 1e-5, 2.5e11
Глобальные и локальные блоки данных
Глобальный блок (без имени) — в начале программы, доступен всем фрагментам.
$DATA:
УниверсальнаяЖесткость = 5000
Масштаб = 1.0
Локальный блок (с именем фрагмента) — только для конкретного фрагмента, располагается непосредственно перед ним.
$DATA: Маятник
Длина = 1.0
Масса = 10
$FRAGMENT: Маятник
...
Параметры из локального блока видны только внутри фрагмента Маятник. Параметры из глобального блока видны везде (если не переопределены локально).
Что означают символы в синтаксисе
Символ |
Название |
Что означает |
|---|---|---|
= |
знак присваивания |
присвоить списку значение справа |
, |
запятая |
разделитель элементов в списке |
; |
точка с запятой |
конец определения (можно не ставить в конце строки) |
~ |
тильда |
ссылка на другой список |
(номер=значение) |
переопределение |
заменить номер-тый элемент в ссылаемом списке |
$FRAGMENT — описание объекта
Назначение
Любая модель в Pradis состоит из элементов (пружины, массы, стержни и т.д.), которые соединены между собой. Раздел $FRAGMENT описывает, из каких элементов состоит объект и как они соединены.
Фрагменты могут быть вложенными: один фрагмент может включать другие фрагменты. Это позволяет строить сложные иерархические модели, например:
фрагмент Колесо вложен во фрагмент Автомобиль;
фрагмент Автомобиль вложен во фрагмент Дорога.
Синтаксис заголовка
$FRAGMENT: [имя]
$FRAGMENT: (без имени) — главный (глобальный) фрагмент. Описывает модель целиком. Такой фрагмент должен быть один.
$FRAGMENT: Имя (с именем) — именованный фрагмент. Может быть вложен в другой фрагмент. Имя может содержать латиницу, кириллицу, цифры и подчёркивание.
Структура фрагмента
Фрагмент состоит из подразделов, которые идут в строгом порядке:
$FRAGMENT: [имя]
#BASE: узлы
#STRUCTURE:
описания элементов и фрагментов
#EXTERNAL: узлы
#OUTPUT:
описания выходных переменных
#MAP:
Подразделы #BASE, #EXTERNAL, #OUTPUT, #MAP — необязательны. Обязателен только #STRUCTURE.
Подраздел #BASE — задание закреплений
Определяет узлы, которые считаются неподвижными (закреплёнными, соединёнными с землёй, тепловым резервуаром и т.п.).
#BASE: 1, 3, 5
Если подраздел #BASE отсутствует, базовым считается первый узел, встретившийся в #STRUCTURE.
Подраздел #STRUCTURE — описание состава
Самый важный подраздел. Здесь перечисляются все элементы и вложенные фрагменты, из которых состоит объект.
Описание элемента:
идентификатор ' ИмяМодели (узлы; список_параметров)
идентификатор — локальное имя экземпляра (например, Пружина1).
ИмяМодели — имя модели из библиотеки Pradis (например, MD, BALKA).
узлы — номера узлов, к которым подключается элемент.
список_параметров — параметры элемента (жёсткость, масса и т.д.).
Пример элемента:
Пружина 'K (1 2; 1000)
Масса 'M (2; 10)
Здесь: - пружина с именем K подключена к узлам 1 и 2, жёсткость 1000; - масса с именем M подключена к узлу 2, масса 10.
Описание вложенного фрагмента:
идентификатор ' ИмяФрагмента (узлы; замена_параметров)
ИмяФрагмента — имя ранее определённого фрагмента.
узлы — номера узлов текущего фрагмента, подключаемые к внешним узлам вкладываемого фрагмента.
замена_параметров (опционально) — подстановка параметров вида ~список1 = ~список2.
Пример вложенного фрагмента:
Колесо 'Колесо (1 2)
Подраздел #EXTERNAL — внешние узлы
Определяет, какие узлы фрагмента доступны для подключения к родительскому фрагменту. Это разъёмы фрагмента.
#EXTERNAL: 1, 3
В этом примере узлы 1 и 3 будут подключены к узлам родительского фрагмента.
Подраздел #OUTPUT — выходные переменные
Определяет величины, которые нужно сохранять после расчёта (перемещения, скорости, усилия и т.д.).
идентификатор ' ИмяПрограммы (указатели; список_параметров)
идентификатор — имя выходной переменной.
ИмяПрограммы — имя программы расчёта из библиотеки.
указатели — ссылки на внутренние переменные (узлы, силы и т.д.).
Примеры выходных переменных:
Перемещение 'S (2; 1) { перемещение узла 2 }
Скорость 'V (2'; 1) { скорость узла 2 }
Усилие 'X (I:Пружина; 1) { сила в элементе Пружина }
Подраздел #MAP — отладочная информация
Выводит внутренние номера узлов после оптимизации. Полезно при отладке, когда решатель сообщает об ошибке с неожиданным номером узла.
#MAP:
Пример: фрагмент Маятник
Рассмотрим фрагмент, описывающий математический маятник с упругой опорой.
$FRAGMENT: Маятник
#BASE: 1
#STRUCTURE:
Опора 'K (2 1; 10000)
Стержень 'B (2 3; 0.,0., 1.,0., 0.001, 1e-5, 2e11)
Масса 'M (2; 10)
#EXTERNAL: 1, 3
#OUTPUT:
Перемещение 'S (2; 1)
Усилие 'X (I:Опора; 1)
Как устроена эта модель:
Узел 1 закреплён (#BASE: 1). Это точка подвеса.
Между узлом 2 и узлом 1 стоит пружина (Опора K). Она моделирует упругость подвеса.
Между узлом 2 и узлом 3 стоит стержень (B). Он задаёт длину маятника.
В узле 2 находится масса (M) величиной 10.
Узлы 1 и 3 объявлены внешними (#EXTERNAL: 1, 3). Это значит, что фрагмент Маятник можно вставить в другой фрагмент, подключив его узлы 1 и 3 к узлам родительской модели.
После расчёта будут сохранены перемещение узла 2 и усилие в опоре K.
Зачем нужны #EXTERNAL в этом примере?
Фрагмент Маятник описан так, что его можно использовать как самостоятельную модель, а можно вставить в более сложную модель (например, подвесить маятник к движущейся тележке). Внешние узлы 1 и 3 — это точки, через которые фрагмент соединяется с внешним миром.
Сводка подразделов фрагмента
Подраздел |
Обязательность |
Назначение |
|---|---|---|
#BASE |
Нет |
Задание закреплённых (базовых) узлов |
#STRUCTURE |
Да |
Перечень элементов и вложенных фрагментов |
#EXTERNAL |
Нет |
Узлы для подключения к родительскому фрагменту |
#OUTPUT |
Нет |
Определение сохраняемых переменных |
#MAP |
Нет |
Вывод отладочной информации |
Краткая памятка
Если нужно… |
То используйте… |
|---|---|
Описать новый объект |
$FRAGMENT: (без имени) |
Описать часть объекта для переиспользования |
$FRAGMENT: Имя |
Закрепить узлы |
#BASE: номера_узлов |
Перечислить элементы и фрагменты |
#STRUCTURE: |
Сделать узлы доступными для подключения |
#EXTERNAL: номера_узлов |
Задать сохраняемые величины |
#OUTPUT: |
Увидеть внутренние номера узлов |
#MAP: |
$SHOW — изображение объекта
Назначение
Раздел $SHOW описывает, как объект будет отображаться на экране в процессе расчёта или при просмотре результатов. Без этого раздела объект либо не визуализируется, либо используется стандартное изображение по умолчанию.
С помощью $SHOW можно:
задать цвет, форму и размер элементов;
объединить элементы в слои для независимого управления видимостью;
привязать изображение к определённым узлам (например, чтобы картинка двигалась вместе с механизмом);
использовать готовые графические образы из библиотеки или создавать свои.
Синтаксис заголовка
$SHOW:
Заголовок не имеет параметров. Сам раздел располагается после глобального (безымянного) раздела $FRAGMENT и перед разделом $RUN.
Структура раздела
Внутри раздела перечисляются слои изображения. Каждый слой описывается специальной конструкцией:
~идентификатор 'LAYER ( список_элементов ; параметры_слоя ; узлы_привязки )
идентификатор — имя слоя (начинается с ~).
LAYER — ключевое слово, обозначающее описание слоя.
список_элементов — какие элементы модели включаются в слой.
параметры_слоя — настройки отображения (масштаб, цвет, прозрачность и т.п.).
узлы_привязки — степени свободы, с которыми связан слой (по умолчанию — базовый узел фрагмента).
Список элементов
Список элементов может быть:
пустым — тогда слой считается неподвижным фоном;
перечислением имён элементов через запятую — тогда в слой включаются графические образы только этих элементов;
отсутствовать — тогда в слой включаются образы всех элементов, имеющих идентификаторы.
Каждый элемент в списке может быть указан с уточнениями:
идентификатор (имя_образа ; параметры_образа)
идентификатор — имя элемента из #STRUCTURE.
имя_образа — какой графический примитив использовать (например, RECTD, CIRCLE).
параметры_образа — настройки именно этого образа (размеры, цвет и т.д.).
Примеры
Пример 1. Простейший слой (все элементы, стандартные образы):
$SHOW:
~Картинка 'LAYER(; ;)
Создаётся слой с именем Картинка, в который попадают все элементы со стандартными образами. Слой привязан к базовому узлу.
Пример 2. Слой с параметрами и привязкой к узлам:
$SHOW:
~Анимация 'LAYER(; Масштаб=0.5, Цвет=красный; 1 2 3)
Слой Анимация привязан к узлам 1, 2 и 3. Параметры слоя: масштаб 0.5, цвет красный.
Пример 3. С указанием конкретных элементов и их образов:
$SHOW:
~Детали 'LAYER( Пружина (SPRING; 0.1, 10),
Тело (RECTD; 2, 4, золотой);
Параметры слоя )
В слой Детали входят: - элемент Пружина, который рисуется образом SPRING с параметрами 0.1 и 10; - элемент Тело, который рисуется прямоугольником RECTD с размерами 2 и 4, цвет золотой; - параметры слоя заданы списком Параметры слоя (определённым в $DATA).
Пример 4. Только параметры слоя (без указания элементов):
$SHOW:
~Фон 'LAYER(; Параметры фона; 9)
Слой Фон не содержит элементов (пустой список). Это может быть статическое изображение или подложка. Слой привязан к узлу 9.
Практический пример
Рассмотрим модель маятника из предыдущих разделов. Добавим к ней визуализацию.
$SHOW:
~МаятникНаЭкране 'LAYER( Стержень (LINE; 0,0, 1,0, синий),
Масса (CIRCLE; 0.2, красный);
Масштаб=1.0;
1 2 )
$DATA:
Масштаб = 1.0
Что здесь описано:
Слой с именем МаятникНаЭкране.
В слой входят два элемента: Стержень и Масса.
Стержень рисуется как линия (LINE) синего цвета от точки (0,0) до (1,0).
Масса рисуется как круг (CIRCLE) радиусом 0.2 красного цвета.
Параметры слоя: Масштаб=1.0 (может быть взят из $DATA).
Слой привязан к узлам 1 и 2. Это означает, что изображение будет перемещаться и поворачиваться вместе с этими узлами (например, если узел 2 движется, то и картинка маятника будет двигаться).
Сводка
Часть описания слоя |
Формат |
Назначение |
|---|---|---|
Имя слоя |
~имя |
Идентификатор для управления слоем |
Ключевое слово |
LAYER |
Обозначает описание слоя |
Список элементов |
[элемент1, элемент2, …] |
Какие элементы модели отображать |
Параметры слоя |
список параметров |
Настройки отображения (масштаб, цвет и т.д.) |
Узлы привязки |
номера узлов |
К каким узлам привязано изображение |
Краткая памятка
Если нужно… |
То используйте… |
|---|---|
Создать слой изображения |
~имя „LAYER( … ) |
Включить все элементы в слой |
Первый аргумент оставить пустым |
Включить конкретные элементы |
Перечислить их идентификаторы |
Задать нестандартный образ |
элемент (имя_образа; параметры) |
Задать параметры слоя |
Второй аргумент (после ;) |
Привязать слой к узлам |
Третий аргумент (через ;) |
$REPLACE — замена параметров
Назначение
В процессе работы над моделью часто требуется изменить числовые параметры (жёсткость, массу, силу и т.д.) и посмотреть, как изменится результат. Обычный способ — открыть PSL-файл, найти нужные числа, исправить их и запустить расчёт заново.
Раздел $REPLACE позволяет сделать это проще. Он меняет значения параметров в уже собранной модели без повторного описания структуры. Не нужно заново перечислять все элементы, узлы и связи — достаточно указать, какие параметры и на какие значения заменить.
Когда это полезно
Параметрический анализ: нужно прогнать расчёт с разными значениями жёсткости или массы.
Подбор параметров: меняете одно число, запускаете расчёт, смотрите результат, меняете снова.
Автоматизация: внешняя программа (например, PPL) генерирует только раздел $REPLACE и запускает расчёт, не пересоздавая всю модель.
Продолжение расчёта: после восстановления ($RESTORE) можно изменить параметры для оставшейся части процесса.
Синтаксис заголовка
$REPLACE:
Заголовок не имеет параметров.
Содержимое раздела
Внутри раздела перечисляются заменяемые списки параметров:
имя_списка = новое_значение
имя_списка = значение1, значение2, значение3
имя_списка — имя списка параметров, который был определён в $DATA или непосредственно в #STRUCTURE / #OUTPUT.
новое_значение — число или список чисел, которые подставляются вместо старых.
Важное ограничение
При использовании $REPLACE в программе должны отсутствовать разделы $FRAGMENT и $SHOW. Решатель уже имеет собранную модель (например, от предыдущего запуска) и только заменяет в ней параметры.
То есть PSL-файл с $REPLACE выглядит так:
$DATA: { может быть, но необязательно }
$REPLACE:
...
$RUN:
...
$PRINT:
...
$END
Без $FRAGMENT, без #STRUCTURE, без $SHOW.
Пример
Допустим, есть модель пружинного маятника, описанная в файле model.psl:
$DATA:
Жесткость = 1000
Масса = 10
$FRAGMENT:
#BASE: 1
#STRUCTURE:
Пружина 'K (1 2; Жесткость)
Масса 'M (2; Масса)
#OUTPUT:
Перемещение 'S (2; 1)
$RUN:
Расчет 'SHTERM (END=1.0)
$PRINT:
График 'DISP ()
$END
Чтобы изменить жёсткость на 2000 и массу на 15, не нужно переписывать весь файл. Достаточно создать новый файл с таким содержанием:
$REPLACE:
Жесткость = 2000
Масса = 15
$RUN:
Расчет 'SHTERM (END=1.0)
$PRINT:
График 'DISP ()
$END
Что здесь происходит:
Решатель уже имеет модель из предыдущего расчёта (или модель была собрана ранее и сохранена).
Раздел $REPLACE заменяет значения списков Жесткость и Масса.
Запускается расчёт с новыми параметрами.
Выводятся результаты.
Если модель ещё не была собрана, $REPLACE не сработает. Поэтому типичный сценарий:
Первый запуск: полный PSL-файл с $FRAGMENT (модель собирается).
Последующие запуски: только $REPLACE + $RUN + $PRINT (параметры меняются).
Замена элемента списка
Если список содержит несколько чисел, можно заменить только одно из них. Синтаксис: имя_списка (номер=новое_значение)
Пример:
$REPLACE:
Параметры стержня (3=2.5E11)
Здесь в списке Параметры стержня заменяется третий элемент на 2.5E11, остальные остаются без изменений.
Совместное использование с $RESTORE
$REPLACE можно использовать вместе с $RESTORE для продолжения расчёта с изменёнными параметрами:
$REPLACE:
Жесткость = 5000
$RESTORE
$RUN:
Продолжение 'SHTERM (END=2.0)
$PRINT:
График 'DISP ()
$END
Сначала заменяется жёсткость, затем восстанавливается состояние из последнего сохранения, и расчёт продолжается до момента времени 2.0 уже с новой жёсткостью.
Сводка
Если нужно… |
То используйте… |
|---|---|
Изменить отдельный параметр |
имя = новое_значение |
Изменить несколько параметров |
имя1 = значение, имя2 = значение |
Изменить один элемент в списке |
имя (номер=новое_значение) |
Заменить параметры без перестроения модели |
$REPLACE (без $FRAGMENT и $SHOW) |
Заменить параметры и продолжить расчёт |
$REPLACE + $RESTORE + $RUN |
$RESTORE — восстановление расчёта
Назначение
При моделировании динамических систем расчёт часто занимает много времени. Если нужно остановиться, посмотреть промежуточные результаты, а потом продолжить — не обязательно начинать всё заново.
Раздел $RESTORE позволяет продолжить расчёт с того места, где он был остановлен в прошлый раз. Решатель загружает сохранённое состояние системы (положения, скорости, силы и т.д.) и продолжает интегрирование.
Когда это полезно
Долгий расчёт: модель считалась несколько часов, но нужно добавить ещё один интервал времени.
Аварийная остановка: электричество отключилось, но расчёт сохранялся с определённым шагом — можно продолжить с последней сохранённой точки.
Пошаговый анализ: сначала рассчитать до момента 1.0, проанализировать результаты, затем продолжить до 2.0 с другими параметрами.
Совместно с $REPLACE: изменить параметры (например, увеличить жёсткость после удара) и продолжить расчёт с новыми значениями.
Синтаксис заголовка
$RESTORE
Заголовок не имеет параметров. Он просто указывает решателю: восстанови состояние из последнего сохранённого файла.
Важные ограничения
При наличии $RESTORE в программе должны отсутствовать разделы $FRAGMENT и $SHOW. Модель уже собрана, нужно только восстановить состояние и продолжить.
Расчёт должен быть предварительно сохранён с помощью параметра SAVE в разделе $RUN (например, SAVE=0.1 — сохранять состояние каждые 0.1 секунды).
$RESTORE может быть: - первым заголовком в программе (только $RESTORE, затем $RUN, $PRINT); - следовать после $REPLACE (сначала заменить параметры, потом продолжить).
Где хранится сохранённое состояние
Решатель сохраняет состояние системы в специальных файлах (обычно с расширением .res или .sav) в каталоге проекта. При запуске с $RESTORE решатель находит самый свежий файл сохранения и загружает его.
Параметр SAVE в $RUN
Чтобы $RESTORE работал, нужно заранее указать решателю сохранять состояние. Это делается в разделе $RUN с помощью параметра SAVE:
$RUN:
Расчет 'SHTERM (END=1.0, SAVE=0.1)
Здесь SAVE=0.1 означает: сохранять состояние каждые 0.1 секунды. Чем меньше шаг сохранения, тем больше места на диске, но тем точнее можно восстановить расчёт после остановки.
Пример 1. Простое продолжение расчёта
Первый запуск (модель собирается и считается до 1.0):
$FRAGMENT:
...
$RUN:
Расчет 'SHTERM (END=1.0, SAVE=0.1)
$PRINT:
...
$END
Второй запуск (продолжение с места остановки до 2.0):
$RESTORE
$RUN:
Продолжение 'SHTERM (END=2.0)
$PRINT:
...
$END
Что здесь происходит:
Решатель видит $RESTORE и загружает последнее сохранённое состояние (скорее всего, в момент времени 1.0, если расчёт дошёл до конца).
Запускается расчёт с момента восстановления до 2.0.
Результаты сохраняются и выводятся.
Пример 2. Продолжение с заменой параметров
Допустим, моделируется удар: до удара одна жёсткость, после удара — другая.
Первый запуск (до удара):
$DATA:
Жесткость = 1000
$FRAGMENT:
#STRUCTURE:
Пружина 'K (1 2; Жесткость)
...
$RUN:
До_удара 'SHTERM (END=0.5, SAVE=0.01)
$END
Второй запуск (после удара, с изменённой жёсткостью):
$REPLACE:
Жесткость = 5000
$RESTORE
$RUN:
После_удара 'SHTERM (END=1.0)
$PRINT:
...
$END
Последовательность:
$REPLACE меняет жёсткость с 1000 на 5000.
$RESTORE загружает состояние в момент 0.5.
Расчёт продолжается до 1.0 уже с новой жёсткостью.
Пример 3. Программа только с $RESTORE (без $FRAGMENT)
Если модель уже собрана и сохранена ранее, минимальная программа для продолжения выглядит так:
$RESTORE
$RUN:
'SHTERM (END=3.0)
$PRINT:
'DISP ()
$END
Это всё. Ни $DATA, ни $FRAGMENT, ни $SHOW не нужны.
Что если сохранений несколько?
Решатель использует самое свежее сохранение. Если расчёт останавливался несколько раз, будет загружено состояние с максимальным временем.
Чтобы начать с конкретного момента, нужно либо удалить более новые файлы сохранения, либо использовать разные каталоги для разных этапов расчёта.
Сводка
Если нужно… |
То используйте… |
|---|---|
Продолжить расчёт с места остановки |
$RESTORE перед $RUN |
Сохранять состояние для последующего продолжения |
Параметр SAVE в $RUN |
Изменить параметры и продолжить |
$REPLACE + $RESTORE + $RUN |
Продолжить без перестроения модели |
$RESTORE (без $FRAGMENT и $SHOW) |
Начать новую программу с восстановления |
$RESTORE первым заголовком |
Типичная последовательность
Первый запуск (полная программа):
$FRAGMENT: ...
$RUN: ... SAVE=0.1 ...
$PRINT: ...
$END
Второй и последующие запуски (только продолжение):
$RESTORE
$RUN: ... END=новое_время ...
$PRINT: ...
$END
$RUN — выполнение расчёта
Назначение
Раздел $RUN запускает численное решение уравнений движения модели. Здесь задаются параметры расчёта: на какой промежуток времени считать, с каким шагом сохранять результаты, какой метод интегрирования использовать.
Без этого раздела решатель не выполнит расчёт.
Синтаксис заголовка
$RUN:
Заголовок не имеет параметров. Всё, что нужно для расчёта, описывается в строке (или нескольких строках) после заголовка.
Формат вызова решателя
[~имя] ' ИмяМетода (параметры ; список_переменных)
~имя (необязательно) — идентификатор вызова (можно дать имя этому конкретному запуску).
ИмяМетода — какой численный метод использовать. Допустимые значения: - SHTERM — метод Штермера (для механических систем); - NEWMARK — метод Ньюмарка (более общий, для систем с жёсткими уравнениями).
параметры — ключевые настройки расчёта (END, SAVE, OUT, START и др.).
список_переменных (необязательно) — какие выходные переменные выводить на экран в процессе расчёта (оперативный вывод).
Параметры расчёта
Параметр |
Значение по умолчанию |
Назначение |
|---|---|---|
END |
Нет (обязателен) |
Конечное время расчёта |
START |
0 |
Начальное время (если не 0) |
SAVE |
0 (не сохранять) |
Шаг сохранения результатов в файл |
OUT |
END (сохранять все) |
Шаг вывода на экран (оперативная информация) |
STEP |
Автоматически |
Максимальный шаг интегрирования |
EPS |
1e-6 |
Относительная точность интегрирования |
Примеры параметров:
END=1.0 { расчёт до 1 секунды }
SAVE=0.1 { сохранять результаты каждые 0.1 секунды }
OUT=0.05 { выводить на экран каждые 0.05 секунды }
START=0.5 { начать расчёт с 0.5 секунды (если есть сохранение) }
STEP=0.001 { максимальный шаг интегрирования 0.001 }
EPS=1e-8 { точность 1e-8 }
Список переменных для оперативного вывода
Второй аргумент (после точки с запятой) — перечень выходных переменных, которые будут отображаться на экране в процессе расчёта (не путать с $PRINT, который сохраняет графики и таблицы после расчёта).
Формат:
переменная1 = (мин, макс), переменная2, переменная3 = (мин, макс)
Если указать только имя переменной — будет выводиться её значение.
Если указать (мин, макс) — определяется диапазон оси Y на графике.
Если оставить пустым — выводятся все выходные переменные.
Пример:
Перемещение = (-0.1, 0.1), Скорость, Усилие = (0, 1000)
Здесь: - Перемещение будет отображаться на графике с осью Y от -0.1 до 0.1. - Скорость — с автоматическим масштабированием. - Усилие — от 0 до 1000.
Пример 1. Простейший расчёт
$RUN:
'SHTERM (END=1.0)
Решатель посчитает модель от 0 до 1.0 с шагами по умолчанию. Результаты будут сохранены только в конце (если не указано SAVE). Оперативный вывод отключён (нет списка переменных).
Пример 2. Расчёт с сохранением и выводом
$RUN:
МойРасчёт 'SHTERM (END=2.0, SAVE=0.1, OUT=0.05;
Перемещение = (-0.5, 0.5),
Скорость,
Усилие)
END=2.0 — посчитать до 2 секунд.
SAVE=0.1 — сохранять результаты каждые 0.1 секунды.
OUT=0.05 — выводить на экран каждые 0.05 секунды.
В процессе расчёта будут отображаться графики Перемещения (ось Y от -0.5 до 0.5), Скорости и Усилия (автоматический масштаб).
Пример 3. Использование метода NEWMARK
$RUN:
'NEWMARK (END=5.0, STEP=0.001, EPS=1e-10)
NEWMARK лучше подходит для жёстких систем (где есть быстрые и медленные процессы). Здесь дополнительно заданы максимальный шаг (STEP=0.001) и точность (EPS=1e-10).
Пример 4. Параметры из $DATA
Параметры расчёта могут быть заданы через списки из $DATA:
$DATA:
Время_конца = 2.5
Шаг_сохранения = 0.05
$RUN:
'SHTERM (END=Время_конца, SAVE=Шаг_сохранения)
Это удобно, когда нужно менять параметры расчёта так же, как и параметры модели — через раздел $REPLACE.
Пример 5. Начало расчёта не с нуля
Если предыдущий расчёт сохранил состояние (SAVE), можно начать новый расчёт с промежуточного момента:
$RUN:
'SHTERM (START=0.5, END=1.0, SAVE=0.05)
Решатель загрузит сохранённое состояние в момент 0.5 и продолжит расчёт до 1.0. При этом START должен соответствовать моменту, для которого есть сохранённые данные.
Влияние на $PRINT и $RESTORE
Если после $RUN идёт $PRINT — результаты текущего расчёта будут выведены (графики, таблицы).
Если перед $RUN стоит $RESTORE — расчёт продолжается с места остановки, а не начинается с нуля.
Если $RUN отсутствует, а $PRINT есть — решатель только отображает ранее полученные результаты (не выполняя расчёт).
Сводка
Если нужно… |
То используйте… |
|---|---|
Задать конечное время |
END=время |
Сохранять результаты |
SAVE=шаг |
Выводить на экран в процессе |
OUT=шаг |
Начать не с нуля |
START=время |
Использовать метод Ньюмарка |
„NEWMARK (…) |
Контролировать точность |
EPS=значение |
Ограничить шаг интегрирования |
STEP=значение |
Выводить переменные на график |
переменная = (мин, макс) |
Параметры по умолчанию
Если какой-то параметр не указан, решатель использует значения по умолчанию:
Параметр |
Значение по умолчанию |
Примечание |
|---|---|---|
START |
0 |
Начало с нуля |
SAVE |
Не сохранять |
Только финальное состояние |
OUT |
Не выводить |
Нет оперативной информации |
STEP |
Автоматический |
Решатель сам выбирает шаг |
EPS |
1e-6 |
Для большинства задач достаточно |
$PRINT — отображение результатов
Назначение
После того как расчёт выполнен, нужно увидеть результаты: графики, таблицы, числовые значения. Раздел $PRINT управляет тем, что, как и в каком виде будет выведено на экран или сохранено в файл.
$PRINT — обязательный раздел программы. Без него решатель не покажет никаких результатов, даже если расчёт успешно завершён.
Синтаксис заголовка
$PRINT:
Заголовок не имеет параметров. После него идут вызовы программ отображения.
Формат вызова программы отображения
[~имя] ' ИмяПрограммы (параметры ; список_переменных)
~имя (необязательно) — идентификатор вызова (можно дать имя этому конкретному выводу).
ИмяПрограммы — какая программа формирует вывод. Основные варианты: - DISP — построение графиков (по умолчанию); - TABL — вывод в виде таблицы чисел; - другие программы отображения (зависят от конкретной версии Pradis).
параметры (необязательно) — настройки вывода (например, END, START).
список_переменных — какие выходные переменные показывать и как их масштабировать.
Два режима работы $PRINT
Режим 1. Вывод результатов текущего расчёта
$PRINT следует после $RUN:
$RUN:
...
$PRINT:
...
Решатель сначала выполняет расчёт, затем выводит его результаты.
Режим 2. Вывод ранее полученных результатов
$PRINT — первый заголовок в программе, $RUN отсутствует:
$PRINT:
...
$END
Решатель не выполняет расчёт, а загружает уже посчитанные результаты из файлов (с расширением .res, .out и т.д.) и отображает их. Это полезно, если нужно:
посмотреть результаты предыдущего расчёта заново;
изменить масштаб или состав графиков без повторного расчёта;
вывести другой тип отображения (таблицу вместо графика).
Список переменных
Формат:
переменная1, переменная2
переменная1 = (мин, макс)
переменная2 = (мин, макс), переменная3
Если указано только имя переменной — строится график с автоматическим масштабированием по оси Y.
Если указана пара чисел в скобках (мин, макс) — задаётся диапазон оси Y.
Пропуск обозначается запятой: (,10) — мин автоматический, макс = 10.
Если список переменных отсутствует — выводятся все выходные переменные.
Примеры:
{ все переменные с автоматическим масштабом }
'DISP (; )
{ только перемещение и скорость }
'DISP (; Перемещение, Скорость)
{ перемещение с ограничением по оси Y }
'DISP (; Перемещение = (-0.1, 0.1))
{ смешанный: у перемещения задан диапазон, у скорости - автоматический }
'DISP (; Перемещение = (-0.1, 0.1), Скорость)
Параметры программ отображения
Некоторые программы отображения (например, TABL) принимают параметры, аналогичные $RUN:
'TABL (START=0.5, END=1.0, OUT=0.1; список_переменных)
START — начальное время для вывода (по умолчанию 0).
END — конечное время для вывода (по умолчанию конец расчёта).
OUT — шаг вывода (если нужно прореживать данные).
Пример 1. Простейший вывод (все переменные)
$PRINT:
'DISP ()
Результаты: все выходные переменные отображаются в виде графиков с автоматическим масштабированием.
Пример 2. Вывод конкретных переменных с заданием диапазонов
$PRINT:
Графики 'DISP (;
Перемещение груза = (-0.1, 0.1),
Скорость груза,
Усилие на пружине = (0, 1000) )
Перемещение груза — ось Y от -0.1 до 0.1.
Скорость груза — автоматический масштаб.
Усилие на пружине — ось Y от 0 до 1000.
Пример 3. Вывод в виде таблицы
$PRINT:
Таблица 'TABL (START=0, END=1.0, OUT=0.05;
Перемещение, Усилие)
Результаты будут выведены в виде таблицы чисел с шагом 0.05 секунды от 0 до 1.0. Для каждой строки таблицы — время, перемещение, усилие.
Пример 4. Только отображение результатов (без расчёта)
Предположим, расчёт уже был выполнен и результаты сохранены. Теперь нужно только посмотреть график перемещения.
$PRINT:
Повтор 'DISP (;
Перемещение = (-0.2, 0.2) )
$END
Решатель не запускает расчёт, а сразу открывает окно с графиком перемещения с новым диапазоном оси Y от -0.2 до 0.2.
Пример 5. Путь к переменной во вложенном фрагменте
Если модель имеет вложенные фрагменты, к выходной переменной нужно обращаться через полный путь, разделяя имена фрагментов знаком / :
$PRINT:
'DISP (;
Маятник/Перемещение = (-0.1, 0.1),
Маятник/Привод/Угловая скорость )
Здесь: - Маятник — имя фрагмента верхнего уровня. - Привод — вложенный фрагмент. - Угловая скорость — выходная переменная внутри фрагмента Привод.
По умолчанию
Если программа отображения не указана — используется DISP.
Если список переменных не указан — выводятся все выходные переменные.
Если диапазон (мин, макс) не указан — масштаб автоматический.
Если опущена левая или правая граница — автоматическая для пропущенной.
Примеры пропусков:
= (,0.1) { мин автоматический, макс = 0.1 }
= (0,) { мин = 0, макс автоматический }
= (,) { оба автоматические (как без диапазона) }
Сводка
Если нужно… |
То используйте… |
|---|---|
Построить графики |
„DISP (; список) |
Вывести таблицу чисел |
„TABL (; список) |
Вывести все переменные |
„DISP () |
Вывести конкретные переменные |
„DISP (; Перем1, Перем2) |
Задать диапазон оси Y |
Перем = (мин, макс) |
Оставить границу автоматической |
(,10) или (0,) |
Вывести результаты без нового расчёта |
$PRINT первым заголовком |
Обратиться к переменной во вложенном фрагменте |
Фрагмент/Подфрагмент/Переменная |
Памятка
Конструкция |
Значение |
|---|---|
$PRINT: |
Начало раздела (обязателен) |
„DISP |
Программа построения графиков |
„TABL |
Программа вывода таблицы |
(; ) |
Пустой список = все переменные |
(; Перемещение) |
Только одна переменная Перемещение |
Перемещение = (-0.1,0.1) |
Диапазон оси Y от -0.1 до 0.1 |
,0.1 |
Пропуск мин (авто), макс 0.1 |
$END — завершение программы
Назначение
Раздел $END обозначает конец программы на языке PSL. Всё, что идёт после него, игнорируется решателем. Это обязательный заголовок — без него решатель выдаст ошибку.
Синтаксис
$END
Заголовок не имеет параметров. Он просто показывает решателю, что программа закончена.
Что происходит после $END
Текст, расположенный после $END, не анализируется. Туда можно помещать:
комментарии и пояснения;
старые версии программы;
справочную информацию;
любые другие данные (не содержащие символов вне алфавита PSL).
Решатель просто игнорирует этот текст.
Ограничение
Текст после $END не должен содержать символов, которые отсутствуют в алфавите языка PSL (например, управляющие символы, некоторые спецзнаки). Такие символы могут вызвать ошибку при чтении файла, даже если они находятся после $END.
Лучше всего помещать после $END только:
обычный текст на русском или английском;
цифры и знаки пунктуации;
пробелы и переводы строк.
Пример 1. Минимальная программа
$END
Это минимальная допустимая программа на PSL (хотя и бесполезная, так как нет $PRINT). Решатель просто завершит работу без ошибки.
Пример 2. Программа с комментариями после $END
$DATA:
Масштаб = 1.0
$FRAGMENT:
#STRUCTURE:
Пружина 'K (1 2; 1000)
Масса 'M (2; 10)
$RUN:
'SHTERM (END=1.0)
$PRINT:
'DISP ()
$END
----------------------------------------------------------------
Ниже этой строки решатель ничего не читает.
Здесь можно хранить:
- пояснения к модели,
- список изменений,
- альтернативные варианты параметров.
----------------------------------------------------------------
Пример 3. Что нельзя писать после $END
$END
$FRAGMENT: ДругаяМодель { Это не будет обработано! }
#STRUCTURE: ...
Любые заголовки, разделы или инструкции после $END игнорируются. Если нужно включить другую модель — используйте $INCLUDE до $END.
Чего нельзя делать
Писать $END в середине программы — всё, что после него, будет потеряно.
Ожидать, что после $END решатель что-то выполнит.
Использовать $END как комментарий (для комментариев есть { }).
Связь с $INCLUDE
Если в программе есть $INCLUDE, решатель обрабатывает содержимое включённого файла до его конца, а затем продолжает основной файл. $END в основном файле завершает всю программу целиком.
Пример:
$INCLUDE: параметры.psl
$FRAGMENT: ...
$RUN: ...
$PRINT: ...
$END
Решатель: 1. Обрабатывает содержимое файла параметры.psl. 2. Обрабатывает $FRAGMENT, $RUN, $PRINT. 3. Встречает $END и завершает работу.
Частые ошибки
Отсутствие $END — решатель дойдёт до конца файла и выдаст ошибку «Unexpected end of file».
$END с параметрами — $END=1.0 вызовет ошибку. $END не принимает аргументов.
Лишний текст до $END — недопустимые символы в комментариях без { }.
Сводка
Если нужно… |
То используйте… |
|---|---|
Завершить программу |
$END в конце файла |
Добавить пояснения после программы |
Текст после $END |
Проверить, что программа корректна |
Убедитесь, что $END есть |
Понять, почему решатель игнорирует часть файла |
Проверьте, нет ли $END раньше |
Памятка
Конструкция |
Значение |
|---|---|
$END |
Конец программы (обязателен) |
Текст после $END |
Игнорируется решателем |
Отсутствие $END |
Ошибка «Unexpected end of file» |
$END в середине |
Оставшаяся часть программы не выполнится |
Краткая памятка по разделам
Раздел |
Обязательность |
Где может быть |
|---|---|---|
$DATA |
Необязателен |
В начале |
$FRAGMENT |
Необязателен (но обычно есть) |
После $DATA |
$SHOW |
Необязателен |
После $FRAGMENT |
$REPLACE |
Необязателен |
Вместо $FRAGMENT |
$RESTORE |
Необязателен |
Вместо $FRAGMENT |
$RUN |
Необязателен (но обычно есть) |
После описания |
Обязателен |
Почти всегда |
|
$INCLUDE |
Необязателен |
В любом месте |
$END |
Обязателен |
В конце |
Как работает PSL
PSL-файл (с расширением .psl) — текстовое описание модели
│
▼
Решатель Pradis читает PSL (F2 или Моделирование → Моделировать)
│
▼
Решатель собирает модель и выполняет расчёт
│
▼
Результат расчёта
Примечание: Решатель Pradis понимает только PSL. PSL — это входной язык решателя.
Ограничения PSL
Отсутствие управляющих конструкций (циклов, условий) — чистый описательный язык.
Параметры — только константы. Невозможно задать параметр как результат вычисления или импортировать данные из внешних источников.
Отсутствие обработки исключений.
Один PSL-файл описывает ровно один расчёт.
Пример программы на PSL
Следующий пример демонстрирует описание расчётной модели на PSL — стержневой маятник с упругой опорой, сосредоточенными массами и двигателем с линейной характеристикой.
$DATA:
{ Глобальные данные }
Модуль упругости = 2.E11 ; { Па }
Масштаб = 1.; { для вывода }
$DATA: Привод
Пусковой момент двигателя = 45 ; { н*м }
Скорость холостого хода = 2 ; { 1/с }
К.п.д. редуктора = 0.95;
Передаточное отношение = 2;
Параметры двигателя = Пусковой момент двигателя, Скорость холостого хода;
$FRAGMENT: Привод
#BASE: 1
#STRUCTURE:
Двигатель 'DVL (2 1; Параметры двигателя);
Ротор 'M (2; 0.1);
Редуктор 'REDN (2 3; Передаточное отношение, К.п.д. редуктора);
#EXTERNAL: 1, 3
#OUTPUT:
Угловая скорость двигателя 'V (2; Масштаб);
$DATA: Маятник
Точка A = 0.,0.; Точка B = 1.,0.;
Материал = 1.E-8, 1.E-5, Модуль упругости;
Масса = 10.;
Жесткость опоры = 1.E4 ;
Сила тяжести = 98.1;
$FRAGMENT: Маятник
#BASE: 1
#STRUCTURE:
Опора X 'K (2 1; Жесткость опоры);
Стержень 'BALKAD (2 3 4 5 6 7; Точка A, Точка B, Материал);
'M (2; Масса);
Привод 'Привод (1 4);
Сила в опоре 'F (3; Сила тяжести);
#OUTPUT:
Момент на двигателе 'X (I:Двигатель; Масштаб);
Перемещение в опоре по оси X 'S (2; Масштаб);
Угол поворота маятника 'S (4; Масштаб);
$RUN:
Расчет поведения маятника 'SHTERM (END = 1., SAVE = 0.1)
$PRINT:
Результаты расчета маятника 'DISP ()
$END
Пример простейшей программы (одномерная колебательная система):
{ описание данных }
$DATA:
Масса = 7.5;
Коэффициент жесткости = 2;
Масштаб = 1
{ описание объекта }
$FRAGMENT:
#BASE: 1
#STRUCTURE:
Пружина 'K (1 2; Коэффициент жесткости);
Масса 'M (2; Масса);
Сила 'F (2; 1.)
#OUTPUT:
Перемещение груза 'S (2; Масштаб)
Скорость груза 'V (2; Масштаб)
Усилие на пружине 'X (I:Пружина; 1.)
{ описание задания на расчёт }
$RUN:
Расчет колебаний груза 'SHTERM (END=1.0)
{ описание задания на отображение }
$PRINT:
Колебания груза 'DISP ()
$END
Справочные материалы
Допустимые последовательности разделов
Разделы в PSL-программе должны следовать в строго определённом порядке. Нарушение порядка приводит к ошибкам при разборе файла решателем Pradis.
Вариант 1. Создание новой модели
Используется, когда нужно полностью описать новую модель и выполнить её расчёт.
$DATA (неименованный, глобальный)
$DATA именованные (перед каждым $FRAGMENT)
$FRAGMENT именованные
$FRAGMENT (глобальный, неименованный)
$SHOW
$RUN
$PRINT
$END
Вариант 2. Расчёт для уже сформированной модели
Используется, когда модель уже описана, и нужно только изменить параметры или выполнить новый расчёт без повторного описания структуры.
$DATA (глобальный)
$REPLACE
$RESTORE (опционально)
$RUN
$PRINT
$END
Вариант 3. Отображение ранее полученных результатов
Используется, когда расчёт уже выполнен, результаты сохранены, и нужно только вывести другие переменные или построить другие графики.
$DATA (глобальный)
$PRINT
$END
Общее правило
Все три последовательности подчиняются одному принципу: каждый последующий раздел использует информацию из предыдущих.
Нельзя написать $PRINT раньше $RUN при новом расчёте — нечего будет выводить.
Нельзя написать $REPLACE без предварительно сформированной модели.
Нельзя написать $FRAGMENT после $RUN — решатель уже начал расчёт.
Если порядок нарушен, решатель выдаст ошибку синтаксического анализа, как правило, с сообщением вида «Unexpected section» или «Section out of order».
Синтаксические единицы
Инструкции. Записываются в пределах первых 72 позиций строки. Возможно продолжение на следующей строке, если предыдущая завершается разделителем.
Числа. Действительное число — в обычной форме или с десятичным множителем: -3, -3.5, 1.5E-3. Целые положительные числа — последовательностью цифр без пробелов. Отрицательные целые и ноль не используются.
Имена. Длина ≤8 символов, начинаются с буквы, прописные латиница (кроме имён фрагментов). Имена фрагментов могут включать прописные/строчные латиницу/кириллицу, цифры и подчёркивание.
Идентификаторы. Длина ≤32 символов, начинаются с буквы. Включают буквы, цифры, пробелы, точки, подчёркивание.
Комментарии. Любая группа символов в фигурных скобках { }. Вложенные комментарии не допускаются.
Русскоязычные синонимы заголовков
Для удобства допускается использование русскоязычных эквивалентов:
$DATA: |
$ДАННЫЕ: |
|---|---|
$FRAGMENT: |
$ФРАГМЕНТ: |
#BASE: |
#БАЗА: |
#STRUCTURE: |
#СТРУКТУРА: |
#OUTPUT: |
#ВЫВОД: |
#EXTERNAL: |
#ВНЕШНИЕ: |
$SHOW: |
$ПРОСМОТР: |
$RESTORE: |
$ПРОДОЛЖИТЬ: |
$REPLACE: |
$ЗАМЕНИТЬ: |
$RUN: |
$ВЫПОЛНИТЬ: |
$PRINT: |
$ОТОБРАЗИТЬ: |
$END |
$КОНЕЦ |
Правила использования русских синонимов полностью эквивалентны правилам использования соответствующих английских конструкций.
Алфавит языка PradiSLang
В языке PradiSLang используются следующие символы:
прописные и строчные буквы латинского алфавита |
A-Z, a-z |
|---|---|
прописные и строчные буквы русского алфавита |
A-Я, а-я |
цифры |
0-9 |
знаки унарных арифметических операций |
|
знак присваивания |
= |
круглые скобки |
)( |
десятичная точка |
. |
разделители и признаки производной |
«,;:“/ <CR> |
признаки заголовка и подзаголовка |
$ # |
символы комментариев |
}{ |
символ подчеркивания |
_ |
пробел |
Словарь терминов
- Узел
Степень свободы объекта. Состояние точки соединения элементов характеризуется обобщёнными координатами и их производными. Узлы нумеруются положительными целыми числами.
- Ветвь
Степень свободы элемента. Номер ветви определяется порядком указания узлов при описании элемента.
- Внутренние переменные
Величины, которые решатель вычисляет в процессе решения: силы, перемещения, скорости, ускорения.
- Выходные переменные
Величины, заданные для наблюдения. Вычисляются на основе внутренних переменных по заданным алгоритмам и сохраняются после расчёта.
- Фрагмент
Описание объекта или его части. Поддерживается вложенность произвольной глубины.