Руководства

Генерация кода SCL из CSV-спецификаций

Опишите оборудование и последовательности в таблице — T-IA Connect автоматически сгенерирует функциональные блоки.

T
Команда T-IA Connect
12 мин чтения
Обновлено 11 мар 2026

От таблицы к коду ПЛК

Ручное программирование конечных автоматов ISA-88 в TIA Portal — утомительный и подверженный ошибкам процесс. Модуль FDS (Functional Design Specification) позволяет описать оборудование (Control Modules) и последовательности фаз в простом CSV-файле, а затем автоматически генерирует готовые к производству функциональные блоки SCL — с обработкой HOLD/ABORT, логикой конечного автомата и правильными объявлениями ввода/вывода.

Предварительные требования

  • T-IA Connect установлен и запущен
  • Открыт проект TIA Portal (V16–V21)
  • CSV-файл с вашей проектной спецификацией (или используйте пример ниже)

Шаг 1: Подготовка CSV-файла

CSV-файл следует стандарту ISA-88 с двумя секциями: [CmTypes] для определений оборудования (клапаны, насосы, датчики) и [Phases] для логики последовательностей (конечные автоматы). Вот минимальный пример:

design-spec.csv
[CmTypes]
CmType;Variable;Direction;DataType;Description
Valve;Cmd_Open;Out;Bool;Open command
Valve;Sts_Opened;In;Bool;Opened feedback
Valve;Sts_Closed;In;Bool;Closed feedback
Pump;Cmd_Run;Out;Bool;Run command
Pump;Sts_Running;In;Bool;Running feedback
Pump;Speed_SP;Out;Real;Speed setpoint
TempSensor;Value;In;Real;Temperature value
TempSensor;Sts_Fault;In;Bool;Sensor fault

[Phases]
PhaseType;Step;StepName;IsInitial;IsFinal;EntryAction;Condition;NextStep
Fill;10;Init;TRUE;;;"Execute=TRUE";20
Fill;20;OpenValve;;;"Valve.Cmd_Open:=TRUE";"Valve.Sts_Opened=TRUE";30
Fill;30;StartPump;;;"Pump.Cmd_Run:=TRUE";"TempSensor.Value>=80.0";40
Fill;40;StopPump;;;"Pump.Cmd_Run:=FALSE";"TRUE";50
Fill;50;CloseValve;;;"Valve.Cmd_Open:=FALSE";"Valve.Sts_Closed=TRUE";60
Fill;60;Done;;TRUE;"Pump.Cmd_Run:=FALSE";"TRUE";

В CSV используются точки с запятой в качестве разделителей. Каждый CmType определяет интерфейс ввода/вывода модуля оборудования, а каждая Phase определяет конечный автомат с шагами, входными действиями и условиями перехода.

Шаг 2: Загрузка спецификации

CSV можно загрузить тремя способами: через страницу FDS в боковой панели приложения, через REST API или через MCP-инструменты ИИ-копилота. Вот метод через API:

curl — POST /api/design-spec/load
curl -X POST http://localhost:9000/api/design-spec/load \
  -H "Content-Type: multipart/form-data" \
  -F "file=@design-spec.csv"
Response
{
  "success": true,
  "areas": 1,
  "processCells": 1,
  "unitTypes": 1,
  "cmTypes": 3,
  "phases": 1
}

После загрузки CSV сохраняется в папке .tia-connect/cdc/ рядом с вашим проектом TIA и будет автоматически перезагружен при следующем открытии.

Шаг 3: Изучение разобранной модели

После загрузки T-IA Connect разбирает CSV в иерархию ISA-88: Area → ProcessCell → UnitType → Control Modules + Phases. Вы можете просмотреть результат:

curl — GET /api/design-spec/model
# Get the full ISA-88 hierarchy
curl http://localhost:9000/api/design-spec/model

# List all phases
curl http://localhost:9000/api/design-spec/phases
Response
{
  "areas": [{
    "name": "Area1",
    "processCells": [{
      "name": "PC1",
      "unitTypes": [{
        "name": "Unit1",
        "cmTypes": [
          { "name": "Valve", "variables": 3 },
          { "name": "Pump", "variables": 3 },
          { "name": "TempSensor", "variables": 2 }
        ],
        "phases": [
          { "name": "Fill", "steps": 6 }
        ]
      }]
    }]
  }]
}

// GET /api/design-spec/phases
[
  {
    "name": "Fill",
    "steps": ["Init", "OpenValve", "StartPump",
              "StopPump", "CloseValve", "Done"]
  }
]

Шаг 4: Генерация кода SCL

Сгенерируйте функциональный блок SCL для любой фазы. Генератор создает полный конечный автомат с VAR_INPUT (Execute, Abort, Hold + пользовательские переменные), VAR_OUTPUT (Done, Active, Held, Error) и оператором CASE со всеми шагами.

curl — POST /api/design-spec/generate
curl -X POST http://localhost:9000/api/design-spec/generate \
  -H "Content-Type: application/json" \
  -d '{ "phase": "Fill" }'
Response
FUNCTION_BLOCK "FB_Fill"

VAR_INPUT
    Execute : Bool;
    Abort   : Bool;
    Hold    : Bool;
    Valve   : "UDT_Valve";
    Pump    : "UDT_Pump";
    TempSensor : "UDT_TempSensor";
END_VAR

VAR_OUTPUT
    Done   : Bool;
    Active : Bool;
    Held   : Bool;
    Error  : Bool;
END_VAR

VAR
    _Step      : Int;
    _StepEntry : Bool;
END_VAR

BEGIN
CASE #_Step OF
    0:  // IDLE
        IF #Execute THEN
            #Active := TRUE;
            #_Step := 10;
        END_IF;

    10: // Init
        IF Execute = TRUE THEN
            #_Step := 20;
        END_IF;

    20: // OpenValve
        IF #_StepEntry THEN
            #Valve.Cmd_Open := TRUE;
        END_IF;
        IF #Valve.Sts_Opened = TRUE THEN
            #_Step := 30;
        END_IF;

    30: // StartPump
        IF #_StepEntry THEN
            #Pump.Cmd_Run := TRUE;
        END_IF;
        IF #TempSensor.Value >= 80.0 THEN
            #_Step := 40;
        END_IF;

    40: // StopPump
        IF #_StepEntry THEN
            #Pump.Cmd_Run := FALSE;
        END_IF;
        IF TRUE THEN
            #_Step := 50;
        END_IF;

    50: // CloseValve
        IF #_StepEntry THEN
            #Valve.Cmd_Open := FALSE;
        END_IF;
        IF #Valve.Sts_Closed = TRUE THEN
            #_Step := 60;
        END_IF;

    60: // Done
        IF #_StepEntry THEN
            #Pump.Cmd_Run := FALSE;
        END_IF;
        #Done := TRUE;
        #Active := FALSE;
        #_Step := 0;
END_CASE;

// HOLD management
IF #Hold AND #Active THEN
    #Held := TRUE;
END_IF;

// ABORT management
IF #Abort AND #Active THEN
    #Active := FALSE;
    #_Step := 0;
END_IF;

END_FUNCTION_BLOCK

Шаг 5: Импорт в TIA Portal

Последний шаг генерирует SCL, оборачивает его в XML SimaticML, импортирует в TIA Portal и автоматически компилирует для проверки. Все в одном вызове API:

curl — POST /api/design-spec/generate-and-import
curl -X POST http://localhost:9000/api/design-spec/generate-and-import \
  -H "Content-Type: application/json" \
  -d '{ "phase": "Fill", "device": "PLC_1" }'
Response
{
  "phase": "Fill",
  "blockName": "FB_Fill",
  "imported": true,
  "compiled": true,
  "errors": [],
  "warnings": 0
}

Что вы получаете

Полноценный функциональный блок ISA-88 с конечным автоматом, логикой HOLD/ABORT и типизированными вводами/выводами — сгенерированный за секунды из простой таблицы. Больше никакого ручного кодирования повторяющейся логики управления.

Попробуйте прямо сейчас с вашими собственными спецификациями, используя T-IA Connect.