स्प्रेडशीट से PLC कोड तक
TIA Portal में ISA-88 स्टेट मशीनों की मैन्युअल कोडिंग थकाऊ और त्रुटि-प्रवण है। FDS (फ़ंक्शनल डिज़ाइन स्पेसिफ़िकेशन) मॉड्यूल आपको अपने उपकरणों (कंट्रोल मॉड्यूल) और फ़ेज़ अनुक्रमों का वर्णन एक सरल CSV फ़ाइल में करने देता है, फिर स्वचालित रूप से उत्पादन-तैयार SCL फ़ंक्शन ब्लॉक जनरेट करता है — HOLD/ABORT हैंडलिंग, स्टेट मशीन लॉजिक और उचित I/O डिक्लेरेशन के साथ।
पूर्वापेक्षाएँ
- 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 एक उपकरण मॉड्यूल के I/O इंटरफ़ेस को परिभाषित करता है, और प्रत्येक Phase स्टेप्स, एंट्री एक्शन और ट्रांज़िशन कंडीशन के साथ एक स्टेट मशीन को परिभाषित करता है।
चरण 2: डिज़ाइन स्पेक लोड करें
आप CSV को तीन तरीकों से लोड कर सकते हैं: डेस्कटॉप ऐप साइडबार में FDS पेज के माध्यम से, REST API के माध्यम से, या AI कोपायलट के 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 प्रोजेक्ट के बगल में .tia-connect/cdc/ फ़ोल्डर में सहेजी जाती है और अगली बार स्वचालित रूप से पुनः लोड होगी।
चरण 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 जनरेट करता है, इसे SimaticML XML में लपेटता है, 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
}