От таблицы к коду ПЛК
Ручное программирование конечных автоматов 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] для логики последовательностей (конечные автоматы). Вот минимальный пример:
[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 -X POST http://localhost:9000/api/design-spec/load \ -H "Content-Type: multipart/form-data" \ -F "file=@design-spec.csv"
{
"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. Вы можете просмотреть результат:
# 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
{
"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 -X POST http://localhost:9000/api/design-spec/generate \
-H "Content-Type: application/json" \
-d '{ "phase": "Fill" }'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 -X POST http://localhost:9000/api/design-spec/generate-and-import \
-H "Content-Type: application/json" \
-d '{ "phase": "Fill", "device": "PLC_1" }'{
"phase": "Fill",
"blockName": "FB_Fill",
"imported": true,
"compiled": true,
"errors": [],
"warnings": 0
}Что вы получаете
Полноценный функциональный блок ISA-88 с конечным автоматом, логикой HOLD/ABORT и типизированными вводами/выводами — сгенерированный за секунды из простой таблицы. Больше никакого ручного кодирования повторяющейся логики управления.
Попробуйте прямо сейчас с вашими собственными спецификациями, используя T-IA Connect.