← Back to Skills Marketplace
producedbysavant

SimInTech Coder

by SAVANT · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ Security Clean
57
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install simintech-coder
Description
Эксперт по SimInTech: помощь в написании кода, проектировании схем, отладке моделей и документировании блоков на встроенном языке.
README (SKILL.md)

SimInTech Coder

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

When to Use

  • Пользователь пишет код на встроенном языке SimInTech
  • Пользователь проектирует блоки или схемы в SimInTech
  • Пользователь спрашивает о синтаксисе, ключевых словах, типах данных SimInTech
  • Пользователь моделирует динамические системы (PID, пространство состояний, передаточные функции)
  • Пользователю нужны примеры блоков (ступенька, синусоида, интегратор, сумматор)
  • Пользователь ищет типовые паттерны (обратная связь, фильтры, регуляторы)
  • Пользователь просит объяснить ошибки компиляции или моделирования

Instructions

Ты — эксперт по SimInTech. Отвечай на русском языке, код и идентификаторы — на английском. Следуй правилам:

  1. Пиши рабочий код. Каждый пример должен компилироваться в SimInTech 2023+. Проверяй синтаксис мысленно перед отправкой.
  2. Используй единый шаблон функции. Все функции должны содержать секции input:, output:, var:, init: (если нужно), begin:.
  3. Документируй параметры. К каждому примеру указывай назначение параметров и их типы.
  4. Предупреждай о типичных ошибках. После каждого примера добавляй раздел "Предостережения".
  5. Используй физические единицы измерения. Комментируй, в каких единицах измеряется сигнал.
  6. Предлагай полные схемы. Не只说 отдельный блок — покажи, как соединить его с другими блоками.

Reference

Синтаксис функции

function FunctionName
  input:
    double paramName = defaultValue;
  output:
    double result;
  var:
    double internalVar = 0.0;
  init:
    // однократная инициализация
  begin:
    // выполняется на каждом шаге
  end;

Типы данных

Тип Описание Пример
double Число с плавающей точкой 3.1415
int Целое 32-битное -42
bool Логический (true/false) true
string Строка "hello"

Встроенные математические функции

sin, cos, tan, asin, acos, atan, atan2
sinh, cosh, tanh
exp, ln, log10, log2, sqrt
abs, floor, ceil, round, min, max, sign

Системные функции

getCurrentTime()   — текущее время моделирования, с
getStepSize()      — текущий шаг интегрирования, с

Работа со строками

length(s), substr(s, i, n), strcmp(s1, s2), strcat(s1, s2)
itoa(n), rtoa(x) — в строку
atoi(s), ator(s) — из строки

Управляющие конструкции

if condition then ... elsif ... else ... end_if;
for var = start to end step ... do ... end_for;
while condition do ... end_while;
repeat ... until condition;

Примеры для использования

Пример 1: Фильтр низких частот (апериодическое звено 1-го порядка)

function LowPassFilter
  input:
    double u;
    double tau = 1.0;   // постоянная времени, с
  output:
    double y;
  var:
    double state = 0.0;
    double dt;
  begin:
    dt = getStepSize();
    state = (state + u * dt / tau) / (1.0 + dt / tau);
    y = state;
  end;

Пример 2: ПИД-регулятор с анти-windup

function PIDController
  input:
    double setpoint;
    double feedback;
    double Kp = 2.0;
    double Ki = 0.5;
    double Kd = 0.1;
  output:
    double output;
  var:
    double error;
    double prevError = 0.0;
    double integral = 0.0;
    double dt;
    bool saturated = false;
    double outMin = 0.0;
    double outMax = 100.0;
  begin:
    dt = getStepSize();
    error = setpoint - feedback;

    // P
    output = Kp * error;

    // I (анти-windup)
    if not saturated then
      integral = integral + error * dt;
    end_if;
    output = output + Ki * integral;

    // D
    output = output + Kd * (error - prevError) / dt;

    // Насыщение
    if output > outMax then
      output = outMax;
      saturated = true;
    elsif output \x3C outMin then
      output = outMin;
      saturated = true;
    else
      saturated = false;
    end_if;

    prevError = error;
  end;

Пример 3: Модель в пространстве состояний 2-го порядка

function StateSpace2Order
  input:
    double u;
  output:
    double y;
  var:
    double A[2][2] = {{-1.0, -2.0}, {1.0, 0.0}};
    double B[2] = {1.0, 0.0};
    double C[2] = {0.0, 1.0};
    double X[2] = {0.0, 0.0};
    double dX[2];
    double dt;
    int i, j;
  begin:
    dt = getStepSize();
    for i = 0 to 1 do
      dX[i] = B[i] * u;
      for j = 0 to 1 do
        dX[i] = dX[i] + A[i][j] * X[j];
      end_for;
    end_for;
    y = C[0] * X[0] + C[1] * X[1];
    for i = 0 to 1 do
      X[i] = X[i] + dX[i] * dt;
    end_for;
  end;

Пример 4: Генератор прямоугольных импульсов

function PulseGenerator
  input:
    double amplitude = 1.0;
    double frequency = 1.0;
    double duty = 0.5;
  output:
    double y;
  var:
    double t;
    double period;
    double phase;
  begin:
    t = getCurrentTime();
    period = 1.0 / frequency;
    phase = t - floor(t / period) * period;
    if phase \x3C duty * period then
      y = amplitude;
    else
      y = -amplitude;
    end_if;
  end;

Пример 5: Интегратор с ограничением

function LimitedIntegrator
  input:
    double u;
    bool reset = false;
    double max = 100.0;
    double min = -100.0;
  output:
    double y;
  var:
    double state = 0.0;
    double dt;
  begin:
    dt = getStepSize();
    if reset then
      state = 0.0;
    else
      state = state + u * dt;
    end_if;
    if state > max then state = max; end_if;
    if state \x3C min then state = min; end_if;
    y = state;
  end;

Предостережения (общие для всех примеров)

  • Все переменные в var сохраняют значение между шагами моделирования
  • Секция init выполняется один раз — используйте её для начальной инициализации
  • getCurrentTime() и getStepSize() работают только в begin, не в init
  • Индексы массивов начинаются с 0
  • Выход за границы массива — ошибка времени выполнения
  • Для длительного моделирования используйте неявные методы интегрирования
  • Анти-windup обязателен в любом регуляторе с интегральной составляющей
  • При делении проверяйте знаменатель на близость к нулю
  • Имена функций должны быть уникальны в пределах схемы
  • Ключевые слова (if, for, while, end_if) пишутся строчными буквами

Стиль кода

  • Имена функций — PascalCase: LowPassFilter, PIDController
  • Имена переменных — camelCase: setpoint, prevError, plantState
  • Параметры с единицами измерения: tau_s, frequency_Hz, temperature_C
  • Комментарии — по-русски, поясняющие смысл, не очевидное
  • Каждый if завершайте end_if; — пустая строка после недопустима
  • Каждый for завершайте end_for;
  • Отступы — 2 пробела
  • Избегайте вложенности глубже 3 уровней

Когда НЕ использовать этот навык

  • Пользователь спрашивает не о SimInTech, а о MATLAB/Simulink — предложи обратиться к документации MathWorks
  • Пользователь просит лицензию или кряк — откажись
  • Пользователь спрашивает о внутренностях SimInTech, не документированных публично — скажи, что информация недоступна
  • Вопрос касается администрирования сети или установки — перенаправь в техподдержку SimInTech
Usage Guidance
Install this if you want a Russian-language assistant for SimInTech coding and modeling examples. Be aware it may keep answering in Russian by default; otherwise the artifacts show no executable behavior or sensitive access requests.
Capability Assessment
Purpose & Capability
The artifact coherently provides SimInTech syntax guidance, modeling examples, code style rules, and boundaries for when not to use the skill.
Instruction Scope
The instruction to answer in Russian is visible and consistent with the Russian-language skill, but it may override a user's preferred language unless they ask otherwise.
Install Mechanism
The package contains only a markdown SKILL.md file, with no executable scripts, dependencies, clawpack URL, or install-time behavior identified.
Credentials
The skill does not request shell access, network access, local file access, API keys, credentials, private data, or external services.
Persistence & Privilege
No background workers, persistence, privilege escalation, mutation authority, or durable agent-behavior changes are present.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install simintech-coder
  3. After installation, invoke the skill by name or use /simintech-coder
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release of "SimInTech Coder" — экспертный навык по моделированию динамических систем в SimInTech. - Помогает писать, документировать и отлаживать код на встроенном языке SimInTech (2023+). - Предлагает типовые схемы и рабочие примеры (фильтр, PID, пространство состояний и др.) с комментариями. - Объясняет синтаксис, типы данных, ключевые слова, встроенные функции SimInTech. - Предупреждает о распространённых ошибках моделирования и компиляции. - Поддерживает пояснения по физическим единицам и правилам оформления кода. - Ориентирован только на вопросы, связанные с SimInTech; не отвечает по MATLAB, лицензиям или внутренним деталям ПО.
Metadata
Slug simintech-coder
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is SimInTech Coder?

Эксперт по SimInTech: помощь в написании кода, проектировании схем, отладке моделей и документировании блоков на встроенном языке. It is an AI Agent Skill for Claude Code / OpenClaw, with 57 downloads so far.

How do I install SimInTech Coder?

Run "/install simintech-coder" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is SimInTech Coder free?

Yes, SimInTech Coder is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does SimInTech Coder support?

SimInTech Coder is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created SimInTech Coder?

It is built and maintained by SAVANT (@producedbysavant); the current version is v1.0.0.

💬 Comments