من جدول البيانات إلى كود PLC
البرمجة اليدوية لآلات الحالة ISA-88 في TIA Portal عملية مملة وعرضة للأخطاء. تتيح لك وحدة FDS (مواصفات التصميم الوظيفي) وصف معداتك (وحدات التحكم) وتسلسلات المراحل في ملف 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 الهرمي: المنطقة → خلية العملية → نوع الوحدة → وحدات التحكم + المراحل. يمكنك فحص النتيجة:
# 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
}