Перейти к содержанию

Консоль opencs

Консоль opencs открывает файл проекта OpenCS (.db) без графического интерфейса: показывает его состав, запускает расчётные задачи, проверки по КЭ и расчёты МКЭ-схем, выгружает результаты в JSON. Одна и та же сборка работает на Windows и Linux и даёт одинаковые результаты на обеих системах.

Консоль удобна для пакетных пересчётов (много проектов или все задачи проекта за один запуск), для расчётов на сервере без рабочего стола и для подключения OpenCS к собственным скриптам.

Экспериментальные команды

Набор команд и формат JSON-вывода пока не заморожены и могут меняться между версиями. Для скриптов, которые должны долго работать без правок, ориентируйтесь на коды возврата и поля status / resultId.

Что консоль не делает: не импортирует DXF, ЛИРА-САПР и SCAD, не формирует отчёты docx/pdf и картинки, не выгружает CSV. Связок с ЛИРА-САПР, SCAD и AutoCAD через COM в консоли нет — они доступны только в OpenCS.

Установка

Консоль требует установленной среды выполнения .NET 10. Папка программы одна для Windows и Linux; в ней лежат две короткие обёртки запуска:

Система Обёртка Как подключить
Windows opencs.cmd добавить папку программы в PATH
Linux opencs (скрипт sh) chmod +x opencs, затем символическая ссылка, например ln -s /opt/opencs-cli/opencs /usr/local/bin/opencs

После этого команда вызывается как opencs … из любого каталога. Без обёрток консоль запускается напрямую: OpenCS.Cli.exe … на Windows или dotnet OpenCS.Cli.dll … на любой системе.

Python-пакеты для OpenSees и gmsh

Большинство расчётов внешних программ не требует: сечения, проверки по КЭ и расчёт схем решателем CSfea выполняются самой консолью. Python нужен только двум видам расчётов:

  • задачам и постановкам OpenSees — консоль считает их через пакет OpenSeesPy, а не через OpenSees.exe;
  • построению сетки Gmsh — через пакет gmsh (это та же программа Gmsh, оформленная пакетом Python).
python -m pip install openseespy gmsh

На Linux дополнительно нужны системные пакеты (пример для Debian/Ubuntu):

sudo apt install python3-tk python3-venv python3-pip \
    libglu1-mesa libxcursor1 libxft2 libxinerama1 libxrender1 libgl1

python3-tk нужен для OpenSees (см. ниже), остальные библиотеки — для пакета gmsh.

Консоль ищет интерпретатор Python в таком порядке и берёт первый, у которого есть нужный пакет:

  1. переменная окружения OPENCS_PYTHON — полный путь к python / python.exe;
  2. активное виртуальное окружение (VIRTUAL_ENV) или окружение conda (CONDA_PREFIX);
  3. python из PATH (на Windows — без заглушки Microsoft Store, на Linux — python3, затем python).

Если пакеты установлены в отдельное окружение venv, укажите его интерпретатор, например export OPENCS_PYTHON=$HOME/opencs-py/bin/python.

Проверить, что найдено, можно командой opencs tools.

Работа с файлом проекта

Открытие проекта само по себе изменяет файл: программа обновляет структуру базы до текущей версии и дописывает недостающие настройки. Поэтому консоль по умолчанию работает с копией:

  1. файл проекта копируется во временную папку — исходный файл не меняется ни одним байтом, даже командами info и list;
  2. все расчёты выполняются и сохраняются в копии;
  3. по окончании копия удаляется, если не указан --out <файл> — тогда проект с результатами сохраняется в этот файл.
flowchart LR
    A["проект.db"] -->|копия| B["временная копия"]
    B --> C["расчёт, результаты"]
    C -->|--out| D["результат.db"]
    C -->|без --out| E["удаляется"]
    A -.->|--in-place| C
Опция Действие
без опций расчёт на копии, результаты не сохраняются (полезно для проверки)
--out <файл> проект с результатами сохраняется в новый файл; существующий файл перезаписывается только с --force
--in-place работа прямо с файлом проекта (только команда run; несовместимо с --out)

Если файл открыт в OpenCS, работа на копии разрешена, но изменения, ещё не сохранённые в OpenCS, в копию не попадут — консоль предупреждает об этом. С --in-place такой файл не открывается (код возврата 2). На Linux файл, открытый другой консолью с --in-place, недоступен до её завершения.

Если файл сохранён более новой версией OpenCS, работа на копии идёт с предупреждением, а --in-place отклоняется.

Команды

Общие опции всех команд:

Опция Назначение
--lang ru / --lang en язык сообщений и справки (по умолчанию русский)
--json машинный вывод JSON в stdout вместо таблиц
-q, --quiet не показывать прогресс расчёта
-h, --help справка по команде

Журнал расчёта (сообщения, предупреждения, ошибки) и прогресс всегда выводятся в stderr, результат — в stdout. Поэтому вывод --json можно сразу передавать другой программе.

info — состав проекта

opencs info проект.db

Версия схемы базы, количество материалов, диаграмм, сечений, наборов усилий, задач, результатов, МКЭ-схем, проверок по КЭ и постановок.

list — списки объектов

Команда Что показывает
opencs list tasks проект.db расчётные задачи: Id, №, имя, вид, сечение, последний результат
opencs list checks проект.db проверки по КЭ: схема, цель (КонЭ или КЭ), проверка, последний результат
opencs list analyses проект.db постановки расчёта МКЭ-схем: схема, вид, статус, результат
opencs list results проект.db [--task <id>] история результатов расчётных задач
Id  №   Имя        Вид                       Сечение           Результат
--  --  ---------  ------------------------  ----------------  -----------------------------
1   1   Задача 1   torsion_fem               30Б1              #24 error 2026-07-13 15:21:41
2   2   Задача 2   torsion_bem               30Б1              #18 ok 2026-07-13 14:51:46

Вид задачи — технический идентификатор из справочника расчётных задач.

run — расчёт

Команда Что считает
opencs run task проект.db <id…> \| --all расчётные задачи
opencs run check проект.db <id…> \| --all проверки по КЭ
opencs run analysis проект.db <id…> \| --all расчёты МКЭ-схем (постановки)

Объекты указываются по Id (их показывает list) или все сразу через --all; расчёт идёт по очереди. Дополнительные опции:

Опция Назначение
--out, --force, --in-place куда сохранить результаты, см. Работа с файлом проекта
-y, --yes отвечать «Да» на вопросы, которые в OpenCS задаются в окне (например, о неполной проверке по КЭ); без --yes принимается ответ «Нет» и пишется предупреждение
--with-data в выводе --json добавить данные результата (data); для расчётов схем они бывают большими
--artifacts <папка> сохранить промежуточные файлы OpenSees и Gmsh (сценарии, журналы, сетки) в папку; без опции они пишутся во временную папку и удаляются
opencs run task проект.db 6 7 --out результат.db
Задача «Задача 5» выполнена успешно.
Задача #6 «Задача 5»: ok, результат #89
Задача «Задача 6» выполнена успешно.
Задача #7 «Задача 6»: ok, результат #90
Проект с результатами сохранён: результат.db

С --json выводится массив — по элементу на каждый расчёт:

[
  {
    "kind": "task",
    "id": 6,
    "tag": "Задача 5",
    "status": "ok",
    "resultId": 89,
    "messages": [
      { "level": "info", "text": "Задача «Задача 5» выполнена успешно." }
    ]
  }
]

status — статус результата (ok, not_passed, not_applicable, not_converged, error, …) или not_run, если расчёт не запускался (например, у задачи нет сечения или набора усилий). Ctrl+C прерывает текущий расчёт; оставшиеся в очереди не запускаются.

export — выгрузка результата

opencs export result проект.db <id результата>
opencs export result проект.db --task <id>       # последний результат задачи
opencs export result проект.db --check <id>      # результат проверки по КЭ
opencs export result проект.db --analysis <id>   # результат постановки

Результат выводится в JSON (в stdout или в файл через -o <файл>): заголовок (id, taskId, taskKind, taskTag, status, created) и данные результата data в том виде, в каком их хранит проект. У проверок по КЭ добавляются построчные результаты femCheckRows. Пример для задачи НДС (поля data показаны частично):

{
  "id": 89,
  "taskId": 6,
  "taskKind": "strain_state",
  "taskTag": "Задача 5",
  "status": "ok",
  "created": "2026-10-14 19:40:45",
  "data": {
    "converged": true,
    "iterations": 4,
    "e0": -0.00016265,
    "ky": -0.00264619,
    "kz": 0.00212055
  }
}

Состав data зависит от вида задачи и совпадает с тем, что OpenCS показывает в окне результата.

tools — внешние программы

opencs tools [--json]

Показывает, откуда консоль возьмёт OpenSees и Gmsh, их версии и таблицу найденных интерпретаторов Python с пакетами openseespy, tkinter, gmsh. Команду удобно выполнить сразу после установки на новой машине. Отсутствие пакетов ошибкой не считается: расчёты, которым они не нужны, работают.

Коды возврата

Код Значение
0 все расчёты выполнены; результаты not_passed (проверка не пройдена) и not_applicable тоже считаются выполненным расчётом
1 хотя бы один расчёт завершился с error, not_converged, частично, был прерван или не запускался
2 ошибка аргументов, файл не найден, не является проектом OpenCS, занят или сохранён более новой версией

Непрохождение проверки — инженерный результат, а не сбой программы, поэтому оно не меняет код возврата. Статус каждого объекта виден в выводе и в --json.

OpenSees и Gmsh в консоли

OpenCS запускает OpenSees как программу OpenSees.exe и передаёт ей сценарий на языке Tcl. Консоль использует тот же сценарий, но исполняет его пакетом OpenSeesPy: интерпретатор Tcl берётся из стандартной библиотеки Python (tkinter, без окон), а каждая команда OpenSees передаётся в OpenSeesPy. Поэтому модель, нагрузки и порядок расчёта в OpenCS и в консоли одни и те же, а консоль работает одинаково на Windows и Linux.

Сверка на одних и тех же сценариях (OpenSees 3.8.0 в обоих вариантах):

Расчёт Отличие OpenSeesPy от OpenSees.exe
задача «момент–кривизна» сечения, 60 шагов до 4·10⁻¹²
оболочки многоэтажной колонны, нелинейный расчёт до 4,4·10⁻⁹
консоль на Windows и на Linux, одна задача совпадение до последнего знака

На численно вырожденных шагах результаты могут разойтись. Пример — полностью разупрочнённое сечение, когда касательная жёсткость всех волокон обращается в ноль: одна сборка OpenSees может формально пройти такой шаг за счёт округления, другая — остановиться. Это граница применимости расчёта, а не различие моделей. Такие шаги стоит разбирать по артефактам (--artifacts).

Gmsh в консоли берётся из пакета gmsh: он принимает те же параметры, что gmsh.exe, и строит сетку по тому же входному файлу. Для совпадения сеток версии пакета и программы должны совпадать.

Пути к OpenSees.exe и gmsh.exe из настроек проекта консоль не использует. Переменная окружения OPENCS_EXTERNAL_TOOLS=auto включает поиск программ как в OpenCS (явный путь, переменные окружения, PATH, Python-пакеты последними) — это нужно для сверок.

Примеры

Пересчитать все задачи нескольких проектов и сохранить результаты рядом (Linux, bash):

for f in проекты/*.db; do
    opencs run task "$f" --all --quiet --out "${f%.db}.результат.db" --force \
        || echo "есть ошибки: $f"
done

То же в PowerShell:

Get-ChildItem проекты\*.db | ForEach-Object {
    opencs run task $_.FullName --all --quiet --out ($_.FullName -replace '\.db$', '.результат.db') --force
    if ($LASTEXITCODE -ne 0) { "есть ошибки: $($_.Name)" }
}

Статусы всех задач проекта одной строкой на задачу (с утилитой jq):

opencs run task проект.db --all --json --quiet | jq -r '.[] | "\(.id)\t\(.tag)\t\(.status)"'

Диагностика

  1. opencs tools — найдены ли Python и пакеты, какие версии OpenSees и Gmsh будут использованы.
  2. Журнал в stderr — те же сообщения, что OpenCS пишет в окно журнала; --json переносит их в поле messages.
  3. --artifacts <папка> — сценарии Tcl, вывод OpenSees и файлы сетки остаются для разбора.
  4. Код 2 — проблема с аргументами или файлом, расчёт не начинался; код 1 — смотрите status и сообщения каждого объекта.

См. также: Интерфейс и команды, Справочник расчётных задач, OpenSees и МКЭ, Архитектура решения.