This commit is contained in:
2026-07-07 11:46:17 +02:00
40 changed files with 173171 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
@echo off
REM ================================================================
REM HundM_Fortna - Python Virtual Environment aktivieren
REM ================================================================
call "%~dp0setenv.bat"
if not exist "%PROJECT%\.venv" (
echo FEHLER: Virtual environment nicht gefunden.
echo Bitte zuerst bin\install_py.bat ausfuehren.
exit /b 1
)
call "%PROJECT%\.venv\Scripts\activate.bat"
echo Virtuelle Umgebung aktiviert.
echo Python-Version:
python --version
echo.
echo Installierte Pakete:
pip list
+22
View File
@@ -0,0 +1,22 @@
@echo off
REM ================================================================
REM HundM_Fortna - DXF-Uebersicht der TROs erzeugen
REM
REM Liest die Skeleton-Dateien (%PV_RESULTS%\skeleton_UH0x.json) und
REM erzeugt %PV_RESULTS%\ST500592_TROs.dxf (TRO-Kaesten als Bloecke,
REM Sensoren als Kreise mit Verbindungslinien) fuer AutoCAD/BricsCAD.
REM ================================================================
call "%~dp0setenv.bat"
REM .venv bevorzugen, sonst System-Python
set "PYTHON=python"
if exist "%PROJECT%\.venv\Scripts\python.exe" (
set "PYTHON=%PROJECT%\.venv\Scripts\python.exe"
)
"%PYTHON%" "%PV_LIB%\create_dxf.py" %*
if errorlevel 1 (
echo FEHLER: create_dxf.py wurde mit Fehler beendet.
exit /b 1
)
+22
View File
@@ -0,0 +1,22 @@
@echo off
REM ================================================================
REM HundM_Fortna - Skeleton-Generator aufrufen
REM
REM Liest die Eingabelisten (%PV_DATA%) und erzeugt je Steuerung
REM ein Skeleton der JSON-Zwischendatei sowie ein SCL-Grundgeruest
REM nach %PV_RESULTS%.
REM ================================================================
call "%~dp0setenv.bat"
REM .venv bevorzugen, sonst System-Python
set "PYTHON=python"
if exist "%PROJECT%\.venv\Scripts\python.exe" (
set "PYTHON=%PROJECT%\.venv\Scripts\python.exe"
)
"%PYTHON%" "%PV_LIB%\create_skel.py" %*
if errorlevel 1 (
echo FEHLER: create_skel.py wurde mit Fehler beendet.
exit /b 1
)
+41
View File
@@ -0,0 +1,41 @@
@echo off
REM Erzeugt den TRO-Topologie-Graphen (DOT) aus den FB_Main.scl-Dateien
REM und rendert ihn anschliessend mit Graphviz als SVG.
REM
REM Voraussetzung: Graphviz (dot.exe) muss installiert sein, z.B. per
REM winget install --id Graphviz.Graphviz -e
setlocal
set "SCRIPT_DIR=%~dp0"
set "REPO_DIR=%SCRIPT_DIR%.."
set "DOT_FILE=%REPO_DIR%\doc\TRO_Graph_UH01-UH05.dot"
set "SVG_FILE=%REPO_DIR%\doc\TRO_Graph_UH01-UH05.svg"
echo Erzeuge %DOT_FILE% ...
python "%SCRIPT_DIR%generate_tro_graph.py" "%DOT_FILE%"
if errorlevel 1 (
echo Fehler bei der Erzeugung der DOT-Datei.
exit /b 1
)
set "DOT_EXE=dot"
where %DOT_EXE% >nul 2>nul
if errorlevel 1 (
if exist "C:\Program Files\Graphviz\bin\dot.exe" (
set "DOT_EXE=C:\Program Files\Graphviz\bin\dot.exe"
) else (
echo dot.exe wurde nicht gefunden. Bitte Graphviz installieren:
echo winget install --id Graphviz.Graphviz -e
exit /b 1
)
)
echo Rendere %SVG_FILE% ...
"%DOT_EXE%" -Tsvg "%DOT_FILE%" -o "%SVG_FILE%"
if errorlevel 1 (
echo Fehler beim Rendern der SVG-Datei.
exit /b 1
)
echo Fertig: %SVG_FILE%
endlocal
+325
View File
@@ -0,0 +1,325 @@
# -*- coding: utf-8 -*-
"""Extrahiert den TRO-Topologie-Graphen aller 5 UH-Steuerungen aus FB_Main.scl
und erzeugt eine Graphviz-DOT-Datei.
Prinzip: Jeder TRO-Baustein bekommt JamArea-Slots als Parameter
(arInOutJamEntr*, arInOutJamExit*, arInOutJamBypass, arInOutJamFinger).
Zwei TROs sind verbunden, wenn der Exit-Slot des einen dieselbe JamArea
referenziert wie der Entry-Slot des anderen.
Aufruf:
python bin/generate_tro_graph.py [ausgabe.dot]
Ohne Argument wird nach doc/TRO_Graph_UH01-UH05.dot geschrieben.
Zum Rendern als SVG anschliessend:
dot -Tsvg doc/TRO_Graph_UH01-UH05.dot -o doc/TRO_Graph_UH01-UH05.svg
"""
import re
import sys
from collections import defaultdict
from pathlib import Path
REPO = Path(__file__).resolve().parent.parent
UHS = ["UH01", "UH02", "UH03", "UH04", "UH05"]
decl_re = re.compile(r'^\s*(\w+)\s*(?:\{[^}]*\})?\s*:\s*"([\w.]+)"\s*;')
jamparam_re = re.compile(
r'arInOut(Jam\w+|StorageLines|CarrierStopper|CarrierExit)'
r'\s*:=\s*"([^"]+)"\.(\w+)')
call_start_re = re.compile(r'#(\w+)\s*\(')
region_re = re.compile(r'^\s*REGION\b\s*(.*)$')
endregion_re = re.compile(r'^\s*END_REGION')
def parse_uh(uh):
path = REPO / f"=A01+{uh}-KF00" / "Programmbausteine" / "100_Main" / "FB_Main.scl"
text = path.read_text(encoding="utf-8-sig")
text = re.sub(r'\(\*.*?\*\)', '', text, flags=re.S) # Blockkommentare
lines = [re.sub(r'//.*$', '', ln) for ln in text.splitlines()]
# 1) Instanz-Deklarationen -> FB-Typ
types = {}
for ln in lines:
m = decl_re.match(ln)
if m:
types[m.group(1)] = m.group(2)
# 2) Aufrufe finden inkl. REGION-Kontext
nodes = {} # inst -> dict(type, region, jams=[(role, jamref)])
region_stack = []
i = 0
while i < len(lines):
ln = lines[i]
if endregion_re.match(ln):
if region_stack:
region_stack.pop()
i += 1
continue
m = region_re.match(ln)
if m and "END_REGION" not in ln.split("REGION")[0]:
region_stack.append(m.group(1).strip())
i += 1
continue
m = call_start_re.search(ln)
if m and types.get(m.group(1)):
inst = m.group(1)
# Parameterblock bis zur schliessenden Klammer einsammeln
buf = ln[m.end() - 1:]
depth = 0
j = i
done = False
while j < len(lines) and not done:
seg = lines[j] if j > i else buf
for ch in seg:
if ch == "(":
depth += 1
elif ch == ")":
depth -= 1
if depth == 0:
done = True
break
j += 1
block = "\n".join([buf] + lines[i + 1:j])
jams = []
for jm in jamparam_re.finditer(block):
role, db, member = jm.group(1), jm.group(2), jm.group(3)
jams.append((role, f"{db}.{member}"))
if jams:
# aussagekraeftigste REGION waehlen (generische wie "CALL",
# "TRO 101 CALL", "Enable und RequestRun" ueberspringen)
region = ""
for r in reversed(region_stack):
if not re.match(r'^(.*\bCALL\b.*|Enable und RequestRun)$',
r, re.I):
region = r
break
node = nodes.setdefault(inst, {
"type": types[inst],
"region": region,
"jams": []})
for j2 in jams:
if j2 not in node["jams"]:
node["jams"].append(j2)
i = j
continue
i += 1
return nodes
def role_dir(role):
if role.startswith("JamEntr") or role in ("StorageLines",
"CarrierStopper"):
return "in"
if (role.startswith(("JamExit", "JamBypass", "JamFinger"))
or role == "CarrierExit"):
return "out"
return "?"
def short_jam(jamref):
# DB_JamArea0101.stJam0101_1 -> JA0101_1
m = re.match(r"DB_JamArea(\w+)\.stJam\w+_(\w+)", jamref)
if m:
return f"JA{m.group(1)}_{m.group(2)}"
return jamref.replace("DB_", "").replace(".arLine", "")
def main():
all_nodes = {}
report = []
for uh in UHS:
nodes = parse_uh(uh)
all_nodes[uh] = nodes
report.append(f"{uh}: {len(nodes)} TRO-Knoten")
# Kanten je UH ueber gemeinsame JamAreas
edges = defaultdict(list) # uh -> [(from, to, jam, tag)]
externals = defaultdict(list) # uh -> [(node, dir, jam, role)]
for uh, nodes in all_nodes.items():
jam_users = defaultdict(lambda: {"in": [], "out": []})
for inst, nd in nodes.items():
for role, jam in nd["jams"]:
d = role_dir(role)
if d in ("in", "out"):
jam_users[jam][d].append((inst, role))
for jam, users in sorted(jam_users.items()):
for (src, srole) in users["out"]:
tag = {"JamExit3": "Dir2", "JamExit4": "Dir3",
"JamBypass": "Bypass", "JamFinger": "Finger"
}.get(srole, "")
if users["in"]:
for (dst, drole) in users["in"]:
if dst != src:
edges[uh].append((src, dst, jam, tag))
else:
externals[uh].append((src, "out", jam, srole))
for (dst, drole) in users["in"]:
if not users["out"]:
externals[uh].append((dst, "in", jam, drole))
for uh in UHS:
report.append(f"{uh}: {len(edges[uh])} Kanten, "
f"{len(externals[uh])} offene Enden")
print("\n".join(report))
# Knoten ohne jede Kante?
for uh, nodes in all_nodes.items():
connected = set()
for (s, d, _, _) in edges[uh]:
connected.add(s)
connected.add(d)
for (n, _, _, _) in externals[uh]:
connected.add(n)
iso = set(nodes) - connected
if iso:
print(f"{uh} isoliert: {sorted(iso)}")
write_dot(all_nodes, edges, externals)
COLORS = {
"FB_ILS_MTRO_1Sep": ("#d4e8ff", "box"),
"FB_ILS_MTRO_1Sep_SSCC": ("#ffd4d4", "box"),
"FB_ILS_MTRO_1Sep1Swi": ("#ffe4a0", "diamond"),
"FB_ILS_MTRO_1Sep2Swi": ("#ffc060", "diamond"),
"FB_ILS_MTRO_2Sep1Swi": ("#ffe4a0", "diamond"),
"FB_ILS_MTRO_Vario": ("#e8d4f0", "parallelogram"),
"FB_ILS_MTRO_Vario_workStation": ("#c0f0f0", "parallelogram"),
"FB_EmptyCarrBuffer": ("#d4f0d4", "box3d"),
}
def node_style(fbtype):
for k in sorted(COLORS, key=len, reverse=True):
if fbtype.startswith(k):
return COLORS[k]
return ("#f0f0f0", "box")
def esc(s):
return s.replace("\\", "\\\\").replace('"', '\\"')
HEADER = '''\
// ============================================================================
// TRO-Topologie-Graph der Gesamtanlage HundM_Fortna (UH01 - UH05)
// ============================================================================
//
// Format: Graphviz DOT (https://graphviz.org)
// Rendern z.B. mit: dot -Tsvg TRO_Graph_UH01-UH05.dot -o graph.svg
// oder online: https://dreampuf.github.io/GraphvizOnline
//
// Quelle: Automatisch extrahiert aus den FB_Main.scl der 5 Steuerungen
// (=A01+UH01-KF00 ... =A01+UH05-KF00, Ordner 100_Main).
// Erzeugt von bin/generate_tro_graph.py.
//
// Methode: Jeder TRO-Baustein (FB_ILS_MTRO_*, FB_EmptyCarrBuffer,
// FB_LoadingBoom_INBOUND) referenziert JamAreas als Parameter:
// arInOutJamEntr* / arInOutStorageLines / arInOutCarrierStopper = Eingang
// arInOutJamExit* / arInOutJamBypass / arInOutJamFinger /
// arInOutCarrierExit = Ausgang
// Zwei TROs sind verbunden, wenn der Ausgangs-Slot des einen
// dieselbe JamArea referenziert wie der Eingangs-Slot des anderen.
// Auskommentierter Code wurde ignoriert.
//
// Knoten: Ein Knoten je TRO-Instanz, Label: Name, [FB-Typ], REGION-Kommentar
// aus FB_Main. Farbe/Form nach FB-Typ:
// hellblau/Box = 1Sep (Standard-Separator)
// rot/Box = 1Sep_SSCC (SSCC-Scanner + WCS-Telegramm)
// gelb/Raute = 1Sep1Swi, 1Sep2Swi, 2Sep1Swi (Weichen)
// violett/Parallelogr.= Vario (Kettenfoerderer)
// tuerkis/Parallelogr.= Vario_workStation (manueller Arbeitsplatz)
// gruen/3D-Box = EmptyCarrBuffer (Leertablar-Puffer)
// grau = Sonstige (z.B. LoadingBoom, PinStore)
//
// Kanten: Label = JamArea-Slot (JAxxxx_y = "DB_JamAreaxxxx".stJamxxxx_y).
// Zusatz "Dir2"/"Dir3" = Weichen-Ausgang (arInOutJamExit3/4),
// Richtungsentscheidung kommt aus FC_Direction.
// Gestrichelt "Bypass" = Bypass-Spur (PinStore),
// gestrichelt "Finger" = Finger-Uebergabe eines Vario-Foerderers.
//
// EXTERN: Graue Kanten zu EXTERN-Knoten = JamAreas, die nur auf einer
// Seite belegt sind (Anlagengrenze, Uebergabe an WES/WCS, AMR
// oder andere SPS). CPU-CPU-Uebergaben zwischen den Steuerungen
// sind an den Labels "IO_Device_UHxx_TO_UHyy..." erkennbar
// (PROFINET-Direktkopplung, kein gemeinsamer JamArea-DB).
//
// Hinweis: Kanten existieren nur innerhalb einer Steuerung, da JamArea-DBs
// nicht SPS-uebergreifend geteilt werden. Der physische Fluss
// zwischen den UHs laeuft ueber die EXTERN-Uebergaben.
//
'''
def write_dot(all_nodes, edges, externals):
body = []
B = body.append
B(HEADER.rstrip())
total_n = sum(len(v) for v in all_nodes.values())
total_e = sum(len(set(v)) for v in edges.values())
B(f"// Umfang: {total_n} TRO-Knoten, {total_e} Verbindungen "
f"(Stand der Extraktion siehe Git-Historie)")
for uh in UHS:
B(f"// {uh}: {len(all_nodes[uh])} TROs, "
f"{len(set(edges[uh]))} Verbindungen")
B("")
B("digraph TRO_Topologie {")
B(' rankdir = "LR";')
B(' fontname = "Arial";')
B(' node [fontname="Arial", fontsize=10];')
B(' edge [fontname="Arial", fontsize=8];')
B(' label = "TRO-Topologie HundM_Fortna (UH01-UH05)";')
B(' labelloc = "t";')
B("")
for uh in UHS:
nodes = all_nodes[uh]
B(f' subgraph "cluster_{uh}" {{')
B(f' label = "{uh} (=A01+{uh}-KF00)";')
B(' style = "rounded";')
B(' color = "#888888";')
for inst in sorted(nodes):
nd = nodes[inst]
color, shape = node_style(nd["type"])
t = nd["type"].replace("FB_ILS_MTRO_", "").replace("FB_", "")
reg = esc(nd["region"])
B(f' "{uh}.{inst}" [label="{inst}\\n[{t}]\\n{reg}", '
f'shape={shape}, style=filled, fillcolor="{color}"];')
# Externe Enden als ein Sammel-Knoten je Richtung
ext = externals[uh]
if any(d == "in" for (_, d, _, _) in ext):
B(f' "{uh}.EXTERN_IN" [label="EXTERN\\n(Zulauf)", '
f'shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];')
if any(d == "out" for (_, d, _, _) in ext):
B(f' "{uh}.EXTERN_OUT" [label="EXTERN\\n(Ablauf)", '
f'shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];')
seen = set()
for (s, d, jam, tag) in edges[uh]:
key = (s, d, jam, tag)
if key in seen:
continue
seen.add(key)
lbl = short_jam(jam) + (f" {tag}" if tag else "")
style = ', style=dashed' if tag in ("Bypass", "Finger") else ""
B(f' "{uh}.{s}" -> "{uh}.{d}" [label="{lbl}"{style}];')
seen = set()
for (n, d, jam, role) in ext:
key = (n, d, jam)
if key in seen:
continue
seen.add(key)
if d == "in":
B(f' "{uh}.EXTERN_IN" -> "{uh}.{n}" '
f'[label="{short_jam(jam)}", color="#999999"];')
else:
B(f' "{uh}.{n}" -> "{uh}.EXTERN_OUT" '
f'[label="{short_jam(jam)}", color="#999999"];')
B(" }")
B("")
B("}")
dest = Path(sys.argv[1]) if len(sys.argv) > 1 else REPO / "doc" / "TRO_Graph_UH01-UH05.dot"
dest.write_text("\n".join(body) + "\n", encoding="utf-8", newline="\n")
print("DOT geschrieben:", dest)
if __name__ == "__main__":
main()
+7
View File
@@ -0,0 +1,7 @@
@echo off
REM ================================================================
REM HundM_Fortna - Shell mit gesetzten Umgebungsvariablen oeffnen
REM ================================================================
call "%~dp0setenv.bat"
start cmd /k "echo HundM_Fortna Umgebung aktiv. && echo PROJECT=%PROJECT%"
+21
View File
@@ -0,0 +1,21 @@
@echo off
REM ================================================================
REM HundM_Fortna - Python Virtual Environment einrichten
REM ================================================================
call "%~dp0setenv.bat"
if not exist "%PROJECT%\.venv" (
echo Initialisiere Python virtual environment...
py -m venv "%PROJECT%\.venv" --upgrade-deps
echo Erfolgreich.
call "%PROJECT%\.venv\Scripts\activate.bat"
echo Installiere erforderliche Python Packages...
pip install -r "%PROJECT%\requirements.txt" -q
echo Erfolgreich.
deactivate
) else (
echo .venv existiert bereits - Abbruch.
echo Zum Neuaufsetzen .venv loeschen und install_py.bat erneut ausfuehren.
)
+62
View File
@@ -0,0 +1,62 @@
@echo off
REM ================================================================
REM HundM_Fortna - Umgebungsvariablen Setup
REM ================================================================
echo Setting up environment variables for HundM_Fortna ...
REM Basis-Projektpfad (Elternordner von bin\)
set "PROJECT=%~dp0.."
if "%PROJECT:~-6%"=="bin\.." set "PROJECT=%PROJECT:~0,-6%"
if "%PROJECT:~-1%"=="\" set "PROJECT=%PROJECT:~0,-1%"
REM Pfade fuer die Komponenten
set "PV_BIN=%PROJECT%\bin"
set "PV_LIB=%PROJECT%\lib"
set "PV_CFG=%PROJECT%\cfg"
set "PV_DATA=%PROJECT%\data"
set "PV_DOC=%PROJECT%\doc"
set "PV_LOG=%PROJECT%\log"
set "PV_RESULTS=%PROJECT%\results"
set "PV_EXAMPLES=%PROJECT%\examples"
set "PV_TESTS=%PROJECT%\tests"
REM PYTHONPATH um PV_LIB erweitern (nur wenn noch nicht enthalten)
if not defined PYTHONPATH (
set "PYTHONPATH=%PV_LIB%"
) else (
echo.%PYTHONPATH% | find /i "%PV_LIB%" >nul || set "PYTHONPATH=%PYTHONPATH%;%PV_LIB%"
)
REM Ueberladen von Umgebungsvariablen durch _setenv.bat
REM (z.B. PV_DATA auf einen Netzlaufwerk-Pfad umbiegen)
if exist "%~dp0_setenv.bat" (
echo Lade lokale Umgebungseinstellungen aus _setenv.bat...
call "%~dp0_setenv.bat"
)
REM Ordner erstellen falls sie nicht existieren
if not exist "%PV_BIN%" mkdir "%PV_BIN%"
if not exist "%PV_LIB%" mkdir "%PV_LIB%"
if not exist "%PV_CFG%" mkdir "%PV_CFG%"
if not exist "%PV_DATA%" mkdir "%PV_DATA%"
if not exist "%PV_LOG%" mkdir "%PV_LOG%"
if not exist "%PV_RESULTS%" mkdir "%PV_RESULTS%"
if not exist "%PV_EXAMPLES%" mkdir "%PV_EXAMPLES%"
if not exist "%PV_TESTS%" mkdir "%PV_TESTS%"
REM Umgebungsvariablen anzeigen
echo.
echo ================================================================
echo PROJECT = %PROJECT%
echo PV_BIN = %PV_BIN%
echo PV_LIB = %PV_LIB%
echo PV_CFG = %PV_CFG%
echo PV_DATA = %PV_DATA%
echo PV_LOG = %PV_LOG%
echo PV_RESULTS = %PV_RESULTS%
echo PV_EXAMPLES = %PV_EXAMPLES%
echo PV_TESTS = %PV_TESTS%
echo PYTHONPATH = %PYTHONPATH%
echo ================================================================
echo.
+146
View File
@@ -0,0 +1,146 @@
{
"files": {
"tia_xlsx": "ST500592_10_5-14_ILS-{n}_TIA.xlsx",
"positions_json": "ST500592_10_5-9_ILS_positions.json",
"connect_json": "connect.json",
"connect_ini": "connect.ini"
},
"verw_roles": {
"In sep": "sensorInSep",
"Sep": "stopperOutput",
"Jam detector": "sensorJam",
"Jam detector (LP)": "sensorJam",
"jam detector (LP)": "sensorJam",
"ES branch": "switchOutput",
"ES brunch": "switchOutput",
"conveyor full": "sensorConvFull",
"MT in Position": "sensorCarrInPos",
"MT in position": "sensorCarrInPos",
"Finger in position": "sensorFinger",
"Finger in Position": "sensorFinger",
"PIN query": "sensorPinQuery",
"Rad dreht ": "sensorWheel",
"Rad dreht": "sensorWheel"
},
"comment_roles": [
[
"^in Separator",
"sensorInSep"
],
[
"^Separator",
"stopperOutput"
],
[
"Stausensor|Staumelder",
"sensorJam"
],
[
"AE Abzweig",
"switchOutput"
],
[
"F.?rderer voll",
"sensorConvFull"
],
[
"MT in Position",
"sensorCarrInPos"
],
[
"Mitnehmerfinger|Finger in",
"sensorFinger"
],
[
"Pin Abfrage|Pr.?fung MT Pos",
"sensorPinQuery"
],
[
"Rad dreht",
"sensorWheel"
],
[
"^Motor ",
"motorOutput"
],
[
"MSS ausgel",
"motorProtection"
]
],
"fbtype_rules": [
{
"roles": [
"sensorPinQuery"
],
"fbType": "FB_ILS_MTRO_PinStore_Auto"
},
{
"roles": [
"sensorFinger"
],
"fbType": "FB_ILS_MTRO_Vario"
},
{
"roles": [
"sensorCarrInPos"
],
"fbType": "FB_ILS_MTRO_Vario"
},
{
"roles": [
"switchOutput",
"sensorInSep"
],
"fbType": "FB_ILS_MTRO_1Sep1Swi"
},
{
"roles": [
"sensorInSep"
],
"fbType": "FB_ILS_MTRO_1Sep"
},
{
"roles": [
"motorOutput"
],
"fbType": "FB_Conveyor"
},
{
"roles": [
"motorProtection"
],
"fbType": "FB_Conveyor"
}
],
"unit_re": "\\b(KR|CV)[-\\s]{0,2}(P?[MK]\\d{4}(?:_[A-Z])?)\\b",
"area_res": [
[
"Block ?(\\d\\.\\d(?:\\.\\d)?)",
"pinStoreBlock",
"Block {m}"
],
[
"\\bLS ?(\\d)\\b",
"loadingStation",
"LS{m}"
],
[
"\\bWS ?(\\d\\.\\d)\\b",
"workStation",
"WS{m}"
],
[
"\\bUZ(\\d{4})\\b",
"safetyZone",
"UZ{m}"
]
],
"fbtype_template": {
"FB_ILS_MTRO_1Sep": "call_1sep",
"FB_ILS_MTRO_1Sep1Swi": "call_1sep1swi",
"FB_ILS_MTRO_Vario": "call_vario",
"FB_ILS_MTRO_PinStore_Auto": "call_1sep",
"FB_Conveyor": "call_conveyor"
}
}
+142
View File
@@ -0,0 +1,142 @@
; ================================================================
; skel_scl.cfg — SCL-Templates fuer create_skel.py (INI-Style)
;
; Jede [sektion] ist ein Template; der Inhalt wird VERBATIM
; uebernommen (Einrueckung und Leerzeilen gehoeren zum Template,
; auch Leerzeilen am Blockende!). Zeilen, die mit ';' beginnen,
; sind Kommentare und werden ueberall ignoriert.
; Platzhalter im str.format()-Stil: {inst}, {tro_no}, {stopper} ...
; geschweifte Klammern im SCL selbst als {{ }} doppeln.
; ================================================================
; --------------------------------------------------------------
[var_decl]
{inst} : "{fbtype}"; // {comment}
; --------------------------------------------------------------
[call_1sep]
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tJam := "TimeForSepJam";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInSenJam2 := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.stData,
xOutStopper1 => "{stopper}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
; --------------------------------------------------------------
[call_1sep1swi]
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.Settings.tTrailingTime := T#100ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tHandlingTime := T#50ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tJam := "TimeForSepJam";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInSenJam2 := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}.stInSwitch1.Settings.nSwitchNo := "cSwi{tro_no}.1";
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun1 := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie (Dir1)
stInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.stData,
arInOutJamExit3 := "DB_JamArea{tro_no}".stJam{tro_no}_3.arCarrier, // TODO Topologie (Dir2)
stInOutJamExit3 := "DB_JamArea{tro_no}".stJam{tro_no}_3.stData,
xOutStopper1 => "{stopper}",
xOutSw1ExTo3 => "{switch_out}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
; --------------------------------------------------------------
[call_vario]
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cIn{sen_carr_in_pos}"];
#{inst}.stInVario.stSenFinger := "DB_Inputs".Sensors["cIn{sen_finger}"];
#{inst}.stInVario.stSenJam := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamFinger := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie
xOutStopper => "{stopper}",
xOutVarioMotor => "{motor}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
; --------------------------------------------------------------
[call_conveyor]
REGION {inst} — {comment}
#{inst}.Settings.tEnergySafeTime := "cTimeEnergySafe";
#{inst}.Settings.xGridActive := FALSE; // TODO Grid
#{inst}.Settings.sMotorProtectName := '{motor_protection}';
#{inst}(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "{motor_protection}",
xInPowerContactor := "{motor}",
stInOutHMI := "DB_Interface_HMI".stConveyors.{inst});
END_REGION
; --------------------------------------------------------------
[call_sensor]
// {comment}
#fbSensorInput(stInSensorHW := "{bmk}",
nInSensorNo := "cIn{bmk}",
stInOutSensor := "DB_Inputs".Sensors["cIn{bmk}"]);
; --------------------------------------------------------------
[fb_main_frame]
FUNCTION_BLOCK "FB_Main_skel_{uh}"
{{ S7_Optimized_Access := 'TRUE' }}
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen {uh} (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
{var_block} END_VAR
BEGIN
{call_block}END_FUNCTION_BLOCK
; --------------------------------------------------------------
[fb_sensors_frame]
FUNCTION_BLOCK "FB_CallSensors_skel_{uh}"
{{ S7_Optimized_Access := 'TRUE' }}
VERSION : 0.1
// AUTOMATISCH GENERIERT — create_skel.py ({count} Sensoren)
VAR
fbSensorInput : "FB_SensorInput";
END_VAR
BEGIN
{call_block}END_FUNCTION_BLOCK
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
+646
View File
@@ -0,0 +1,646 @@
; ============================================================
; connect.ini — Routing / Zusammenhalt der TROs (hmf-connect-v1)
; Quelle: doc/TRO_Graph_UH01-UH05.dot (inhaltsgleich zu connect.json)
;
; [UHxx.nodes] TRO = <FB-Kurztyp> | <Kommentar>
; [UHxx.connections] cNNN = <von> -> <nach> | <JamArea> | <kind>
; kind: normal | dir2 | dir3 | bypass | finger
; (dir2/dir3 = Weichenausgang, Richtung aus FC_Direction)
; [UHxx.externals] eNNN = EXTERN -> <TRO> | <JamArea> (Zulauf)
; eNNN = <TRO> -> EXTERN | <JamArea> (Ablauf)
; JamArea JAxxxx_y entspricht "DB_JamAreaxxxx".stJamxxxx_y
; ============================================================
[UH01.nodes]
TRO100 = 1Sep | TRO 100 (1Sep)
TRO101 = EmptyCarrBuffer | TRO101 (Empty Buffer rechts)
TRO101_IN = 1Sep | TRO 101_IN(1Sep)
TRO102 = EmptyCarrBuffer | TRO102 (Empty Buffer links)
TRO102_IN = 1Sep | TRO 102_IN(1Sep)
TRO103 = 1Sep | TRO 103 (1Sep)
TRO104 = 1Sep | TRO 104 (1Sep)+Scanner
TRO105 = 1Sep_SSCC | TRO 105 (1Sep)+Scanner
TRO106 = 1Sep | TRO 106 (1Sep)
TRO107 = 1Sep1Swi | TRO 107(1Sep1Swi)
TRO108 = 1Sep | TRO 108 (1Sep)
TRO109 = 1Sep | TRO 109 (1Sep)+Scanner
TRO110 = 1Sep_SSCC | TRO 110 (1Sep)+Scanner
TRO111 = 1Sep | TRO 111 (1Sep)
TRO112 = 1Sep1Swi | TRO 112 (1Sep1Swi)
TRO113 = 1Sep | TRO 113 (1Sep)+Scanner
TRO114 = 1Sep1Swi | TRO 114 (1Sep1Switch)+Scanner
TRO115 = Vario | TRO 115 (Vario)
TRO116 = 1Sep | TRO 116 (1Sep)
TRO117 = 1Sep | TRO 117 (1Sep) + Scanner
TRO120 = Vario | TRO 120 (Vario)
TRO121 = Vario | TRO 121(Vario)
TRO122 = 1Sep | TRO 122 (1Sep)
TRO123 = Vario | TRO 123 (Vario)
TRO124 = 1Sep1Swi | TRO 124 (1Sep1Switch)
TRO125 = 1Sep | TRO 125 (1Sep)
TRO126 = Vario | TRO 126 (Vario)
TRO127 = Vario | TRO 127 (Vario)
TRO128 = Vario | TRO 128 (Vario)
TRO129 = 1Sep | TRO 129 (1Sep)
TRO130 = 1Sep | TRO 130 (1Sep)
TRO131 = Vario | TRO 131 (Vario)
TRO133 = Vario | TRO 133 (Vario)
TRO134 = Vario | TRO 134 (Vario)
fbLoadingBoom1 = LoadingBoom_INBOUND | LoadingBoom 1
fbLoadingBoom2 = LoadingBoom_INBOUND | LoadingBoom 2
[UH01.connections]
c001 = TRO128 -> TRO100 | JA0100_1 | finger
c002 = TRO100 -> TRO101_IN | JA0101_1 | normal
c003 = TRO101_IN -> TRO102_IN | JA0101_2 | normal
c004 = TRO102 -> TRO107 | JA0102_1 | normal
c005 = TRO117 -> TRO107 | JA0102_1 | normal
c006 = TRO101 -> TRO112 | JA0102_2 | normal
c007 = TRO106 -> TRO112 | JA0102_2 | normal
c008 = TRO107 -> TRO112 | JA0102_2 | dir2
c009 = TRO111 -> TRO113 | JA0102_3 | normal
c010 = TRO112 -> TRO113 | JA0102_3 | dir2
c011 = TRO113 -> TRO114 | JA0102_4 | normal
c012 = TRO114 -> TRO116 | JA0102_5 | dir2
c013 = TRO116 -> TRO117 | JA0102_6 | normal
c014 = TRO107 -> TRO103 | JA0103_1 | normal
c015 = TRO103 -> TRO104 | JA0104_1 | normal
c016 = TRO104 -> fbLoadingBoom1 | JA0104_2 | normal
c017 = fbLoadingBoom1 -> TRO105 | JA0104_3 | normal
c018 = TRO105 -> TRO106 | JA0106_2 | normal
c019 = TRO112 -> TRO108 | JA0107_1 | normal
c020 = TRO108 -> TRO109 | JA0108_1 | normal
c021 = TRO109 -> fbLoadingBoom2 | JA0108_2 | normal
c022 = fbLoadingBoom2 -> TRO110 | JA0108_3 | normal
c023 = TRO110 -> TRO111 | JA0110_2 | normal
c024 = TRO115 -> TRO120 | JA4103_1 | finger
c025 = TRO125 -> TRO126 | JA4203_1 | normal
c026 = TRO129 -> TRO130 | JA4204_1 | normal
c027 = TRO124 -> TRO125 | JA4204_2 | normal
c028 = TRO133 -> TRO129 | JA4302_2 | finger
c029 = TRO134 -> TRO131 | JA4403_1 | finger
c030 = TRO124 -> TRO127 | JA4501_1 | dir2
c031 = TRO130 -> TRO127 | JA4501_1 | normal
c032 = TRO127 -> TRO128 | JA4501_2 | finger
c033 = TRO122 -> TRO123 | JA4502_1 | normal
c034 = TRO123 -> TRO124 | JA4502_2 | finger
c035 = TRO121 -> TRO122 | JA4503_2 | finger
c036 = TRO101_IN -> TRO101 | JamBuffer101 | normal
c037 = TRO102_IN -> TRO102 | JamBuffer102 | normal
[UH01.externals]
e001 = EXTERN -> TRO115 | JA4104_1
e002 = EXTERN -> TRO133 | JA4302_1
e003 = EXTERN -> TRO134 | JA4402_1
e004 = EXTERN -> TRO121 | JA4503_1
[UH02.nodes]
TRO200 = Vario | TRO 200 (Vario)
TRO201 = 1Sep | TRO 201 (1Sep)
TRO202 = 1Sep1Swi | TRO 202 (1Sep1Switch)+Scanner(BX2103)
TRO203 = 1Sep1Swi | TRO 203 (1Sep1Switch) + Scanner (BX2111)
TRO204 = 1Sep1Swi | TRO 204(1Sep1Switch) + Scanner(BX2112)
TRO205 = 1Sep1Swi | TRO 205 (1Sep1Switch) + Scanner(BX2114)
TRO206 = 1Sep1Swi | TRO 206 (1Sep1Switch)+Scanner(BX2113)
TRO207 = 1Sep | TRO 207(1Sep)
TRO208 = PinStore_Auto | Aufruf: TRO208
TRO209 = Vario | TRO 209 (Vario)
TRO210 = 1Sep | TRO 210 (1Sep)
TRO211 = PinStore_Auto | Aufruf: TRO211
TRO212 = Vario | TRO 212 (Vario)
TRO213 = 1Sep | TRO 213 (1Sep)
TRO214 = PinStore_Auto | Aufruf: TRO214
TRO215 = Vario | TRO 215 (Vario)
TRO216 = 1Sep | TRO 216 (1Sep)
TRO217 = PinStore_Auto | Aufruf: TRO217
TRO218 = Vario | TRO 218 (Vario)
TRO219 = 1Sep | TRO 219(1Sep)
TRO220 = Vario | TRO 220 (Vario)
TRO221 = 1Sep | TRO 221 (1Sep)
TRO222 = 1Sep1Swi | TRO 222 (1Sep1Switch)+Scanner(BX2121)
TRO223 = 1Sep1Swi | TRO 223 (1Sep1Switch)+Scanner(BX2126)
TRO224 = 1Sep1Swi | TRO 224 (1Sep1Switch)+Scanner(BX2127)
TRO225 = 1Sep1Swi | TRO 225(1Sep1Switch)+Scanner(BX2129)
TRO226 = 1Sep1Swi | TRO 226 (1Sep1Switch)+Scanner(BX2128)
TRO227 = 1Sep | TRO 227 (1Sep)
TRO228 = PinStore_Auto | Aufruf: TRO228
TRO229 = Vario | TRO 229 (Vario)
TRO230 = 1Sep | TRO 230 (1Sep)
TRO231 = PinStore_Auto | Aufruf: TRO231
TRO232 = Vario | TRO 232 (Vario)
TRO233 = 1Sep | TRO 233 (1Sep)
TRO234 = PinStore_Auto | Aufruf: TRO234
TRO235 = Vario | TRO 235 (Vario)
TRO236 = 1Sep | TRO 236 (1Sep)
TRO237 = PinStore_Auto | Aufruf: TRO237
TRO238 = Vario | TRO 238 (Vario)
TRO239 = 1Sep | TRO 239 (1Sep)
TRO240 = Vario | TRO 240 (Vario)
TRO241 = 1Sep | TRO 241(1Sep)
TRO242 = 1Sep1Swi | TRO 242 (1Sep1Switch)+Scanner(BX2130)
TRO243 = 1Sep1Swi | TRO 243 (1Sep1Switch)+Scanner(BX3137)
TRO244 = 1Sep1Swi | TRO 244 (1Sep1Switch)+Scanner(BX2136)
TRO245 = 1Sep1Swi | TRO 245 (1Sep1Switch)+Scanner(BX2138)
TRO246 = 1Sep1Swi | TRO 246 (1Sep1Switch)+Scanner(BX2137)
TRO247 = 1Sep | TRO 247(1Sep)
TRO248 = PinStore_Auto | Aufruf: TRO248
TRO249 = Vario | TRO 249 (Vario)
TRO250 = 1Sep | TRO 250 (1Sep)
TRO251 = PinStore_Auto | Aufruf: TRO251
TRO252 = Vario | TRO 252 (Vario)
TRO253 = 1Sep | TRO 253 (1Sep)
TRO254 = PinStore_Auto | Aufruf: TRO254
TRO255 = Vario | TRO 255 (Vario)
TRO256 = 1Sep | TRO 256 (1Sep)
TRO257 = PinStore_Auto | Aufruf: TRO257
TRO258 = Vario | TRO 258 (Vario)
TRO259 = 1Sep | TRO 259 (1Sep)
TRO260 = Vario | TRO 260 (Vario) + Scanner (BX2115)
TRO261 = 1Sep | TRO 261 (1Sep)
TRO262 = Vario | TRO 262 (Vario) + Scanner (BX2109)
TRO263 = 1Sep | TRO 263 (1Sep)
TRO264 = Vario | TRO 264 (Vario) + Scanner (BX2108)
TRO265 = 1Sep | TRO 265 (1Sep)
TRO266 = 1Sep | TRO 266(1Sep)
TRO267 = 1Sep2Swi | TRO 267 (1Sep2Switch)+Scanner(BX2100)
TRO268 = 1Sep2Swi | TRO 268 (1Sep2Switch)+Scanner(BX2101)
TRO269 = 1Sep | TRO 269 (1Sep)+Scanner (BX2102)
TRO270 = Vario | TRO 270 (Vario)
TRO272 = Vario | TRO 272 (Vario)
TRO274 = 1Sep | TRO 274 (1Sep)
TRO275 = 1Sep | TRO 275 (1Sep)
[UH02.connections]
c001 = TRO202 -> TRO211 | JA1101_1 | dir2
c002 = TRO213 -> TRO211 | JA1101_1 | normal
c003 = TRO211 -> TRO208 | JA1101_2 | bypass
c004 = TRO210 -> TRO208 | JA1101_2 | normal
c005 = TRO201 -> TRO202 | JA1102_1 | normal
c006 = TRO202 -> TRO214 | JA1102_2 | normal
c007 = TRO216 -> TRO214 | JA1102_2 | normal
c008 = TRO214 -> TRO217 | JA1102_3 | bypass
c009 = TRO219 -> TRO217 | JA1102_3 | normal
c010 = TRO208 -> TRO203 | JA1103_1 | normal
c011 = TRO211 -> TRO204 | JA1103_2 | normal
c012 = TRO203 -> TRO204 | JA1103_2 | dir2
c013 = TRO217 -> TRO205 | JA1104_1 | normal
c014 = TRO214 -> TRO206 | JA1104_2 | normal
c015 = TRO205 -> TRO206 | JA1104_2 | normal
c016 = TRO204 -> TRO207 | JA1104_3 | dir2
c017 = TRO206 -> TRO207 | JA1104_3 | normal
c018 = TRO203 -> TRO209 | JA1105_1 | normal
c019 = TRO209 -> TRO210 | JA1105_2 | finger
c020 = TRO204 -> TRO212 | JA1106_1 | normal
c021 = TRO212 -> TRO213 | JA1106_2 | finger
c022 = TRO206 -> TRO215 | JA1107_1 | dir2
c023 = TRO215 -> TRO216 | JA1107_2 | finger
c024 = TRO205 -> TRO218 | JA1108_1 | dir2
c025 = TRO218 -> TRO219 | JA1108_2 | finger
c026 = TRO200 -> TRO201 | JA1109_2 | finger
c027 = TRO268 -> TRO269 | JA1110_1 | dir3
c028 = TRO261 -> TRO274 | JA1110_2 | normal
c029 = TRO269 -> TRO274 | JA1110_2 | normal
c030 = TRO263 -> TRO266 | JA1110_3 | normal
c031 = TRO274 -> TRO266 | JA1110_3 | normal
c032 = TRO265 -> TRO267 | JA1110_4 | normal
c033 = TRO266 -> TRO267 | JA1110_4 | normal
c034 = TRO267 -> TRO275 | JA1110_5 | dir3
c035 = TRO275 -> TRO268 | JA1110_6 | normal
c036 = TRO222 -> TRO231 | JA1201_1 | dir2
c037 = TRO233 -> TRO231 | JA1201_1 | normal
c038 = TRO231 -> TRO228 | JA1201_2 | bypass
c039 = TRO230 -> TRO228 | JA1201_2 | normal
c040 = TRO221 -> TRO222 | JA1202_1 | normal
c041 = TRO222 -> TRO234 | JA1202_2 | normal
c042 = TRO236 -> TRO234 | JA1202_2 | normal
c043 = TRO234 -> TRO237 | JA1202_3 | bypass
c044 = TRO239 -> TRO237 | JA1202_3 | normal
c045 = TRO228 -> TRO223 | JA1203_1 | normal
c046 = TRO231 -> TRO224 | JA1203_2 | normal
c047 = TRO223 -> TRO224 | JA1203_2 | dir2
c048 = TRO237 -> TRO225 | JA1204_1 | normal
c049 = TRO234 -> TRO226 | JA1204_2 | normal
c050 = TRO225 -> TRO226 | JA1204_2 | normal
c051 = TRO224 -> TRO227 | JA1204_3 | dir2
c052 = TRO226 -> TRO227 | JA1204_3 | normal
c053 = TRO223 -> TRO229 | JA1205_1 | normal
c054 = TRO229 -> TRO230 | JA1205_2 | finger
c055 = TRO224 -> TRO232 | JA1206_1 | normal
c056 = TRO232 -> TRO233 | JA1206_2 | finger
c057 = TRO226 -> TRO235 | JA1207_1 | dir2
c058 = TRO235 -> TRO236 | JA1207_2 | finger
c059 = TRO225 -> TRO238 | JA1208_1 | dir2
c060 = TRO238 -> TRO239 | JA1208_2 | finger
c061 = TRO220 -> TRO221 | JA1209_2 | finger
c062 = TRO248 -> TRO243 | JA1301_1 | normal
c063 = TRO251 -> TRO244 | JA1301_2 | normal
c064 = TRO243 -> TRO244 | JA1301_2 | normal
c065 = TRO257 -> TRO245 | JA1302_1 | normal
c066 = TRO254 -> TRO246 | JA1302_2 | normal
c067 = TRO245 -> TRO246 | JA1302_2 | dir2
c068 = TRO242 -> TRO251 | JA1303_1 | normal
c069 = TRO253 -> TRO251 | JA1303_1 | normal
c070 = TRO251 -> TRO248 | JA1303_2 | bypass
c071 = TRO250 -> TRO248 | JA1303_2 | normal
c072 = TRO241 -> TRO242 | JA1304_1 | normal
c073 = TRO242 -> TRO254 | JA1304_2 | dir2
c074 = TRO256 -> TRO254 | JA1304_2 | normal
c075 = TRO254 -> TRO257 | JA1304_3 | bypass
c076 = TRO259 -> TRO257 | JA1304_3 | normal
c077 = TRO243 -> TRO249 | JA1305_1 | dir2
c078 = TRO249 -> TRO250 | JA1305_2 | finger
c079 = TRO244 -> TRO252 | JA1306_1 | dir2
c080 = TRO252 -> TRO253 | JA1306_2 | finger
c081 = TRO246 -> TRO255 | JA1307_1 | normal
c082 = TRO255 -> TRO256 | JA1307_2 | finger
c083 = TRO245 -> TRO258 | JA1308_1 | normal
c084 = TRO258 -> TRO259 | JA1308_2 | finger
c085 = TRO240 -> TRO241 | JA1309_2 | finger
c086 = TRO264 -> TRO265 | JA1401_2 | finger
c087 = TRO262 -> TRO263 | JA1501_2 | finger
c088 = TRO260 -> TRO261 | JA1601_2 | finger
[UH02.externals]
e001 = EXTERN -> TRO200 | JA1109_1
e002 = EXTERN -> TRO220 | JA1209_1
e003 = TRO244 -> EXTERN | JA1302_3
e004 = TRO246 -> EXTERN | JA1302_3
e005 = EXTERN -> TRO240 | JA1309_1
e006 = EXTERN -> TRO264 | JA1401_1
e007 = EXTERN -> TRO262 | JA1501_1
e008 = EXTERN -> TRO260 | JA1601_1
e009 = EXTERN -> TRO272 | JA1801_1
e010 = EXTERN -> TRO270 | JA4701_1
e011 = EXTERN -> TRO208 | Storage1.1.1
e012 = EXTERN -> TRO211 | Storage1.1.2
e013 = EXTERN -> TRO214 | Storage1.1.3
e014 = EXTERN -> TRO217 | Storage1.1.4
e015 = EXTERN -> TRO228 | Storage1.2.1
e016 = EXTERN -> TRO231 | Storage1.2.2
e017 = EXTERN -> TRO234 | Storage1.2.3
e018 = EXTERN -> TRO237 | Storage1.2.4
e019 = EXTERN -> TRO248 | Storage1.3.1
e020 = EXTERN -> TRO251 | Storage1.3.2
e021 = EXTERN -> TRO254 | Storage1.3.3
e022 = EXTERN -> TRO257 | Storage1.3.4
e023 = TRO207 -> EXTERN | IO_Device_UH02_TO_UH01.stCARRIER_INFO
e024 = TRO227 -> EXTERN | IO_Device_UH02_TO_UH01.stCARRIER_INFO_1
e025 = TRO247 -> EXTERN | IO_Device_UH02_TO_UH01.stCARRIER_INFO_2
[UH03.nodes]
TRO300 = Vario | TRO 300 (Vario)
TRO301 = 1Sep | TRO 301(1Sep)
TRO302 = Vario | TRO 302 (Vario)
TRO303 = Vario | TRO 303 (Vario)
TRO304 = 1Sep | TRO 304(1Sep)
TRO305 = Vario | TRO 305 (Vario)
TRO306 = Vario | TRO 306 (Vario)
TRO307 = Vario | TRO 307 (Vario)
TRO308 = Vario | TRO 308 (Vario)
TRO309 = 1Sep | TRO 309 (1Sep)
TRO310 = 1Sep | TRO 310 (1Sep)+Scanner (BX3102)
TRO311 = 1Sep | TRO 311 (1Sep)+Scanner(BX3101)
TRO312 = 1Sep | TRO 312 (1Sep)+Scanner(BX3100)
TRO313 = 1Sep1Swi | TRO 313 (1Sep1Switch)+Scanner(BX3103)
TRO314 = 1Sep1Swi | TRO 314 (1Sep1Switch)+Scanner(BX3104)
TRO315 = 1Sep | TRO 315 (1Sep)
TRO316 = 1Sep | TRO 316 (1Sep)
TRO317 = 1Sep1Swi | TRO 317 (1Sep1Switch)+Scanner(BX3105)
TRO318 = 1Sep1Swi | TRO 318 (1Sep1Switch) + Scanner(BX3106)
TRO319 = 1Sep1Swi | TRO 319 (1Sep1Switch) + Scanner (BX3111)
TRO320 = 1Sep1Swi | TRO 320 (1Sep1Switch) + Scanner(BX3112)
TRO321 = 1Sep1Swi | TRO 321 (1Sep1Switch) + Scanner(BX3114)
TRO322 = 1Sep1Swi | TRO 322 (1Sep1Switch)+Scanner(BX3113)
TRO323 = 1Sep | TRO 323 (1Sep)
TRO324 = Vario | TRO 324 (Vario)
TRO325 = 1Sep | TRO 325 (1Sep)
TRO326 = 1Sep | TRO 326 (1Sep)
TRO327 = PinStore_Auto | Aufruf: TRO327
TRO328 = Vario | TRO 328 (Vario)
TRO329 = 1Sep | TRO 329 (1Sep)
TRO330 = PinStore_Auto | Aufruf: TRO330
TRO331 = Vario | TRO 331 (Vario)
TRO332 = 1Sep | TRO 332 (1Sep)
TRO333 = PinStore_Auto | Aufruf: TRO333
TRO334 = Vario | TRO 334 (Vario)
TRO335 = 1Sep | TRO 335 (1Sep)
TRO336 = PinStore_Auto | Aufruf: TRO336
TRO337 = Vario | TRO 337 (Vario)
TRO338 = 1Sep | TRO 338 (1Sep)
TRO339 = 1Sep1Swi | TRO 339 (1Sep1Switch)+Scanner(BX3120)
TRO340 = 1Sep1Swi | TRO 340 (1Sep1Switch)+Scanner(BX3121)
TRO341 = 1Sep1Swi | TRO 341 (1Sep1Switch)+Scanner(BX3126)
TRO342 = 1Sep1Swi | TRO 342 (1Sep1Switch)+Scanner(BX3127)
TRO343 = 1Sep1Swi | TRO 343 (1Sep1Switch)+Scanner(BX3129)
TRO344 = 1Sep1Swi | TRO 344 (1Sep1Switch)+Scanner(BX3128)
TRO345 = 1Sep | TRO 345 (1Sep)
TRO346 = Vario | TRO 346 (Vario)
TRO347 = 1Sep | TRO 347 (1Sep)
TRO348 = 1Sep | TRO 348 (1Sep)
TRO349 = PinStore_Auto | Aufruf: TRO349
TRO350 = Vario | TRO 350 (Vario)
TRO351 = 1Sep | TRO 351 (1Sep)
TRO352 = PinStore_Auto | Aufruf: TRO352
TRO353 = Vario | TRO 353 (Vario)
TRO354 = 1Sep | TRO 354 (1Sep)
TRO355 = PinStore_Auto | Aufruf: TRO355
TRO356 = Vario | TRO 356 (Vario)
TRO357 = 1Sep | TRO 357 (1Sep)
TRO358 = PinStore_Auto | Aufruf: TRO358
TRO359 = Vario | TRO 359 (Vario)
TRO360 = 1Sep | TRO 360 (1Sep)
TRO361 = 1Sep1Swi | TRO 361 (1Sep1Switch)+Scanner(BX3131)
TRO362 = 1Sep1Swi | TRO 362 (1Sep1Switch)+Scanner(BX3132)
TRO363 = 1Sep1Swi | TRO 363 (1Sep1Switch)+Scanner(BX3137)
TRO364 = 1Sep1Swi | TRO 364 (1Sep1Switch)+Scanner(BX3138)
TRO365 = 1Sep1Swi | TRO 365 (1Sep1Switch)+Scanner(BX3140)
TRO366 = 1Sep1Swi | TRO 366 (1Sep1Switch)+Scanner(BX3139)
TRO367 = 1Sep | TRO 367 (1Sep)
TRO368 = Vario | TRO 368 (Vario, from Lvl1)
TRO369 = 1Sep | TRO 369 (1Sep)
TRO370 = 1Sep | TRO 370 (1Sep)
TRO371 = PinStore_Auto | Aufruf: TRO371
TRO372 = Vario | TRO 372 (Vario)
TRO373 = 1Sep | TRO 373 (1Sep)
TRO374 = PinStore_Auto | Aufruf: TRO374
TRO375 = Vario | TRO 375 (Vario)
TRO376 = 1Sep | TRO 376 (1Sep)
TRO377 = PinStore_Auto | Aufruf: TRO377
TRO378 = Vario | TRO 378 (Vario)
TRO379 = 1Sep | TRO 379 (1Sep)
TRO380 = PinStore_Auto | Aufruf: TRO380
TRO381 = Vario | TRO 381 (Vario)
TRO382 = 1Sep | TRO 382 (1Sep)
TRO386 = 1Sep | TRO 386 (1Sep) - kam später dazu
[UH03.connections]
c001 = TRO318 -> TRO330 | JA2101_1 | dir2
c002 = TRO332 -> TRO330 | JA2101_1 | normal
c003 = TRO330 -> TRO327 | JA2101_2 | bypass
c004 = TRO329 -> TRO327 | JA2101_2 | normal
c005 = TRO315 -> TRO317 | JA2102_1 | normal
c006 = TRO317 -> TRO318 | JA2102_2 | normal
c007 = TRO318 -> TRO333 | JA2102_3 | normal
c008 = TRO335 -> TRO333 | JA2102_3 | normal
c009 = TRO333 -> TRO336 | JA2102_4 | bypass
c010 = TRO338 -> TRO336 | JA2102_4 | normal
c011 = TRO327 -> TRO319 | JA2103_1 | normal
c012 = TRO330 -> TRO320 | JA2103_2 | normal
c013 = TRO319 -> TRO320 | JA2103_2 | dir2
c014 = TRO336 -> TRO321 | JA2104_1 | normal
c015 = TRO333 -> TRO322 | JA2104_2 | normal
c016 = TRO321 -> TRO322 | JA2104_2 | normal
c017 = TRO320 -> TRO323 | JA2104_3 | dir2
c018 = TRO322 -> TRO323 | JA2104_3 | normal
c019 = TRO323 -> TRO326 | JA2104_4 | normal
c020 = TRO325 -> TRO326 | JA2104_4 | normal
c021 = TRO319 -> TRO328 | JA2105_1 | normal
c022 = TRO328 -> TRO329 | JA2105_2 | finger
c023 = TRO320 -> TRO331 | JA2106_1 | normal
c024 = TRO331 -> TRO332 | JA2106_2 | finger
c025 = TRO322 -> TRO334 | JA2107_1 | dir2
c026 = TRO334 -> TRO335 | JA2107_2 | finger
c027 = TRO321 -> TRO337 | JA2108_1 | dir2
c028 = TRO337 -> TRO338 | JA2108_2 | finger
c029 = TRO324 -> TRO325 | JA2109_2 | finger
c030 = TRO386 -> TRO310 | JA2110_1 | normal
c031 = TRO310 -> TRO313 | JA2110_2 | normal
c032 = TRO311 -> TRO313 | JA2110_2 | normal
c033 = TRO312 -> TRO313 | JA2110_2 | normal
c034 = TRO313 -> TRO314 | JA2110_3 | dir2
c035 = TRO314 -> TRO315 | JA2110_4 | dir2
c036 = TRO309 -> TRO386 | JA2110_5 | normal
c037 = TRO308 -> TRO309 | JA2111_2 | finger
c038 = TRO313 -> TRO316 | JA2112_1 | normal
c039 = TRO340 -> TRO352 | JA2201_1 | dir2
c040 = TRO354 -> TRO352 | JA2201_1 | normal
c041 = TRO352 -> TRO349 | JA2201_2 | bypass
c042 = TRO351 -> TRO349 | JA2201_2 | normal
c043 = TRO314 -> TRO339 | JA2202_1 | normal
c044 = TRO339 -> TRO340 | JA2202_2 | normal
c045 = TRO340 -> TRO355 | JA2202_3 | normal
c046 = TRO357 -> TRO355 | JA2202_3 | normal
c047 = TRO355 -> TRO358 | JA2202_4 | bypass
c048 = TRO360 -> TRO358 | JA2202_4 | normal
c049 = TRO349 -> TRO341 | JA2203_1 | normal
c050 = TRO352 -> TRO342 | JA2203_2 | normal
c051 = TRO341 -> TRO342 | JA2203_2 | dir2
c052 = TRO358 -> TRO343 | JA2204_1 | normal
c053 = TRO355 -> TRO344 | JA2204_2 | normal
c054 = TRO343 -> TRO344 | JA2204_2 | normal
c055 = TRO342 -> TRO345 | JA2204_3 | dir2
c056 = TRO344 -> TRO345 | JA2204_3 | normal
c057 = TRO345 -> TRO348 | JA2204_4 | normal
c058 = TRO347 -> TRO348 | JA2204_4 | normal
c059 = TRO341 -> TRO350 | JA2205_1 | normal
c060 = TRO350 -> TRO351 | JA2205_2 | finger
c061 = TRO342 -> TRO353 | JA2206_1 | normal
c062 = TRO353 -> TRO354 | JA2206_2 | finger
c063 = TRO344 -> TRO356 | JA2207_1 | dir2
c064 = TRO356 -> TRO357 | JA2207_2 | finger
c065 = TRO343 -> TRO359 | JA2208_1 | dir2
c066 = TRO359 -> TRO360 | JA2208_2 | finger
c067 = TRO346 -> TRO347 | JA2209_2 | finger
c068 = TRO371 -> TRO363 | JA2301_1 | normal
c069 = TRO374 -> TRO364 | JA2301_2 | normal
c070 = TRO363 -> TRO364 | JA2301_2 | normal
c071 = TRO380 -> TRO365 | JA2302_1 | normal
c072 = TRO377 -> TRO366 | JA2302_2 | normal
c073 = TRO365 -> TRO366 | JA2302_2 | dir2
c074 = TRO364 -> TRO367 | JA2302_3 | normal
c075 = TRO366 -> TRO367 | JA2302_3 | dir2
c076 = TRO367 -> TRO370 | JA2302_4 | normal
c077 = TRO369 -> TRO370 | JA2302_4 | normal
c078 = TRO362 -> TRO374 | JA2303_1 | normal
c079 = TRO376 -> TRO374 | JA2303_1 | normal
c080 = TRO374 -> TRO371 | JA2303_2 | bypass
c081 = TRO373 -> TRO371 | JA2303_2 | normal
c082 = TRO316 -> TRO361 | JA2304_1 | normal
c083 = TRO361 -> TRO362 | JA2304_2 | dir2
c084 = TRO362 -> TRO377 | JA2304_3 | dir2
c085 = TRO379 -> TRO377 | JA2304_3 | normal
c086 = TRO377 -> TRO380 | JA2304_4 | bypass
c087 = TRO382 -> TRO380 | JA2304_4 | normal
c088 = TRO363 -> TRO372 | JA2305_1 | dir2
c089 = TRO372 -> TRO373 | JA2305_2 | finger
c090 = TRO364 -> TRO375 | JA2306_1 | dir2
c091 = TRO375 -> TRO376 | JA2306_2 | finger
c092 = TRO366 -> TRO378 | JA2307_1 | normal
c093 = TRO378 -> TRO379 | JA2307_2 | finger
c094 = TRO365 -> TRO381 | JA2308_1 | normal
c095 = TRO381 -> TRO382 | JA2308_2 | finger
c096 = TRO368 -> TRO369 | JA2309_2 | finger
c097 = TRO300 -> TRO302 | JA4101_1 | finger
c098 = TRO301 -> TRO302 | JA4101_1 | normal
c099 = TRO302 -> TRO311 | JA4101_2 | finger
c100 = TRO303 -> TRO305 | JA4201_1 | finger
c101 = TRO304 -> TRO305 | JA4201_1 | normal
c102 = TRO305 -> TRO312 | JA4201_2 | finger
[UH03.externals]
e001 = TRO336 -> EXTERN | JA2102_5
e002 = EXTERN -> TRO324 | JA2109_1
e003 = EXTERN -> TRO308 | JA2111_1
e004 = TRO358 -> EXTERN | JA2202_5
e005 = EXTERN -> TRO346 | JA2209_1
e006 = EXTERN -> TRO368 | JA2309_1
e007 = EXTERN -> TRO300 | JA4102_1
e008 = EXTERN -> TRO301 | JA4102_2
e009 = EXTERN -> TRO303 | JA4202_1
e010 = EXTERN -> TRO304 | JA4202_2
e011 = EXTERN -> TRO306 | JA4301_1
e012 = EXTERN -> TRO307 | JA4401_1
e013 = EXTERN -> TRO327 | Storage2.1.1
e014 = EXTERN -> TRO330 | Storage2.1.2
e015 = EXTERN -> TRO333 | Storage2.1.3
e016 = EXTERN -> TRO336 | Storage2.1.4
e017 = EXTERN -> TRO349 | Storage2.2.1
e018 = EXTERN -> TRO352 | Storage2.2.2
e019 = EXTERN -> TRO355 | Storage2.2.3
e020 = EXTERN -> TRO358 | Storage2.2.4
e021 = EXTERN -> TRO371 | Storage2.3.1
e022 = EXTERN -> TRO374 | Storage2.3.2
e023 = EXTERN -> TRO377 | Storage2.3.3
e024 = EXTERN -> TRO380 | Storage2.3.4
e025 = TRO326 -> EXTERN | IO_Device_UH03_TO_UH01.stCARRIER_INFO
e026 = TRO348 -> EXTERN | IO_Device_UH03_TO_UH01.stCARRIER_INFO_1
e027 = TRO370 -> EXTERN | IO_Device_UH03_TO_UH01.stCARRIER_INFO_2
e028 = TRO317 -> EXTERN | IO_Device_UH03_TO_UH01.stCarrierL2toL1
e029 = TRO339 -> EXTERN | IO_Device_UH03_TO_UH01.stCarrierL2toL1_2
e030 = TRO361 -> EXTERN | IO_Device_UH03_TO_UH01.stCarrierL2toL1_3
[UH04.nodes]
TRO400 = Vario | TRO 400 (Vario)
TRO401 = Vario | TRO 401 (Vario)
TRO402 = 1Sep | TRO 402 (1Sep) (Vor Brandschutztor)
TRO403 = Vario | TRO 403 (Vario)
TRO404 = 1Sep | TRO 404 (1Sep)
TRO405 = 1Sep1Swi | TRO 405 (1Sep1Switch) + Scanner (BX4100) + Behangskontrolle
TRO406 = 1Sep | TRO 406 (1Sep) + Scanner (BX4101)
TRO407 = 1Sep1Swi | TRO 407 (1Sep1Switch) + Scanner (BX4102)
TRO408 = Vario | TRO 408 (Vario)
TRO409 = 1Sep | TRO 409 (1Sep)
TRO410 = 1Sep1Swi | TRO 410 (1Sep1Switch) + Scanner (BX4104)
TRO411 = Vario | TRO 411 (Vario)
TRO412 = 1Sep | TRO 412 (1Sep)
TRO413 = 1Sep1Swi | TRO 413(1Sep1Switch)+Scanner(BX4106)
TRO414 = Vario | TRO 414 (Vario)
TRO415 = 1Sep | TRO 415 (1Sep)
TRO416 = 1Sep | TRO 416 (1Sep) + Beladeprüfung
TRO417 = 1Sep | TRO 417 (1Sep)
TRO418 = Vario | TRO 418 (Vario)
TRO420 = Vario | TRO 420 (Vario)
TRO421 = Vario_workStation | TRO 421 (Vario)
TRO422 = Vario_workStation | TRO 422 (Vario)
TRO423 = Vario_workStation | TRO 423 (Vario)
TRO424 = 1Sep | TRO 424 (1Sep) vor Behangskontrolle
[UH04.connections]
c001 = TRO400 -> TRO401 | JA4001_1 | finger
c002 = TRO401 -> TRO402 | JA4001_2 | finger
c003 = TRO402 -> TRO403 | JA4002_1 | normal
c004 = TRO403 -> TRO404 | JA4002_2 | finger
c005 = TRO424 -> TRO405 | JA4003_1 | normal
c006 = TRO405 -> TRO406 | JA4003_2 | dir2
c007 = TRO406 -> TRO407 | JA4003_3 | normal
c008 = TRO407 -> TRO410 | JA4003_4 | dir2
c009 = TRO409 -> TRO410 | JA4003_4 | normal
c010 = TRO410 -> TRO413 | JA4003_5 | dir2
c011 = TRO412 -> TRO413 | JA4003_5 | normal
c012 = TRO413 -> TRO416 | JA4003_6 | dir2
c013 = TRO415 -> TRO416 | JA4003_6 | normal
c014 = TRO416 -> TRO417 | JA4003_7 | normal
c015 = TRO404 -> TRO424 | JA4003_8 | normal
c016 = TRO417 -> TRO424 | JA4003_8 | normal
c017 = TRO407 -> TRO408 | JA4004_1 | normal
c018 = TRO408 -> TRO421 | JA4004_2 | finger
c019 = TRO410 -> TRO411 | JA4006_1 | normal
c020 = TRO411 -> TRO422 | JA4006_2 | finger
c021 = TRO422 -> TRO412 | JA4007_1 | finger
c022 = TRO413 -> TRO414 | JA4008_1 | normal
c023 = TRO414 -> TRO423 | JA4008_2 | finger
c024 = TRO423 -> TRO415 | JA4009_1 | finger
c025 = TRO418 -> TRO420 | JA4011_1 | finger
[UH04.externals]
e001 = EXTERN -> TRO400 | JA4000_1
e002 = TRO421 -> EXTERN | JA4005_1
e003 = EXTERN -> TRO418 | JA4010_1
[UH05.nodes]
TRO500 = Vario | TRO 500 (Vario) - Stand: Vorbereitet für Umbau!
TRO501 = 1Sep | TRO 501 (1Sep) + Scanner (BX5101)
TRO502 = Vario | TRO 502 (Vario) - Stand: Vorbereitet für Umbau!
TRO503 = 1Sep | TRO 503 (1Sep)+ Scanner (BX5100)
TRO504 = 1Sep | TRO 504 (1Sep)
TRO505 = 1Sep1Swi | TRO 505 (1Sep1Switch) + Scanner (BX5102)
TRO506 = Vario | TRO 506 (Vario)
TRO507 = 1Sep | TRO 507 (1Sep)
TRO508 = Vario | TRO 508 (Vario)+Scanner(BX5103)
TRO509 = 1Sep | TRO 509 (1Sep)
TRO510 = 1Sep1Swi | TRO 510 (1Sep1Switch) + Scanner (BX5104)
TRO511 = 1Sep | TRO 511 (1Sep)
TRO512 = Vario | TRO 512 (Vario)+Scanner(BX5105)
TRO513 = 1Sep | TRO 513 (1Sep)
TRO514 = 1Sep1Swi | TRO 514 (1Sep1Switch) + Scanner (BX5106)
TRO515 = 1Sep | TRO 515 (1Sep)
TRO516 = Vario | TRO 516(Vario)+Scanner(BX5107)
TRO517 = 1Sep | TRO 517 (1Sep)
TRO518 = 1Sep1Swi | TRO 518 (1Sep1Switch) + Scanner (BX5108)
TRO519 = 1Sep | TRO 519 (1Sep)
TRO520 = Vario | TRO 520 (Vario)+Scanner(BX5109)
TRO521 = 1Sep | TRO 521(1Sep)
TRO522 = 1Sep1Swi | TRO 522 (1Sep1Switch) + Scanner (BX5110)
TRO523 = 1Sep | TRO 523 (1Sep)
TRO524 = Vario | TRO 524 (Vario)+Scanner(BX5231)
TRO525 = 1Sep | TRO 525(1Sep)
TRO526 = 1Sep | TRO 526 (1Sep) + Scanner (BX5112)
TRO527 = 1Sep1Swi | TRO 527 (1Sep1Switch)
TRO528 = 1Sep | TRO 528 (1Sep)
TRO529 = 1Sep | TRO 529 (1Sep) + Scanner (BX5113)
TRO530 = Vario | TRO 530 (Vario)
TRO531 = Vario | TRO 531 (Vario)
[UH05.connections]
c001 = TRO502 -> TRO531 | JA5000_2 | finger
c002 = TRO531 -> TRO503 | JA5000_3 | finger
c003 = TRO500 -> TRO530 | JA5001_2 | finger
c004 = TRO530 -> TRO501 | JA5001_3 | finger
c005 = TRO501 -> TRO504 | JA5002_1 | normal
c006 = TRO503 -> TRO504 | JA5002_1 | normal
c007 = TRO529 -> TRO504 | JA5002_1 | normal
c008 = TRO528 -> TRO529 | JA5002_10 | normal
c009 = TRO504 -> TRO505 | JA5002_2 | normal
c010 = TRO505 -> TRO510 | JA5002_3 | dir2
c011 = TRO509 -> TRO510 | JA5002_3 | normal
c012 = TRO510 -> TRO514 | JA5002_4 | dir2
c013 = TRO513 -> TRO514 | JA5002_4 | normal
c014 = TRO514 -> TRO518 | JA5002_5 | dir2
c015 = TRO517 -> TRO518 | JA5002_5 | normal
c016 = TRO518 -> TRO522 | JA5002_6 | dir2
c017 = TRO521 -> TRO522 | JA5002_6 | normal
c018 = TRO522 -> TRO526 | JA5002_7 | dir2
c019 = TRO525 -> TRO526 | JA5002_7 | normal
c020 = TRO526 -> TRO527 | JA5002_8 | normal
c021 = TRO527 -> TRO528 | JA5002_9 | dir2
c022 = TRO505 -> TRO506 | JA5003_1 | normal
c023 = TRO506 -> TRO507 | JA5003_2 | finger
c024 = TRO507 -> TRO508 | JA5004_1 | normal
c025 = TRO510 -> TRO511 | JA5005_1 | normal
c026 = TRO511 -> TRO512 | JA5005_2 | normal
c027 = TRO514 -> TRO515 | JA5006_1 | normal
c028 = TRO515 -> TRO516 | JA5006_2 | normal
c029 = TRO518 -> TRO519 | JA5007_1 | normal
c030 = TRO519 -> TRO520 | JA5007_2 | normal
c031 = TRO522 -> TRO523 | JA5008_1 | normal
c032 = TRO523 -> TRO524 | JA5008_2 | normal
[UH05.externals]
e001 = EXTERN -> TRO502 | JA5000_1
e002 = EXTERN -> TRO500 | JA5001_1
e003 = TRO508 -> EXTERN | JA5004_2
e004 = TRO512 -> EXTERN | JA5005_3
e005 = TRO516 -> EXTERN | JA5006_3
e006 = TRO520 -> EXTERN | JA5007_3
e007 = TRO524 -> EXTERN | JA5008_3
+3451
View File
File diff suppressed because it is too large Load Diff
+141
View File
@@ -0,0 +1,141 @@
# Analyse der Ein-/Ausgabelisten (data/Eingaben)
## Kontext
In `data/Eingaben/` liegen je Steuerung (ILS-1 bis ILS-5, entspricht UH01-UH05) drei Excel-Dateien mit denselben E/A-Punkten in drei Sichten:
| Datei | Inhalt |
| --- | --- |
| `..._EA.xlsx` | Rohliste: Adresse (`E000.0`), Kommentar, Zeilenreferenz (Schaltplan) |
| `..._TIA.xlsx` | Import-Liste fuers TIA Portal: Blatt "PLC Tags" (BMK-Name, `Data Type`, `%E`/`%A`-Logikadresse, Kommentar, HMI-Flags) + Blatt "Constants" (`cIn<Name>`-Indexkonstanten) |
| `..._WSCAD.xlsx` | Import-Liste fuers WSCAD (E-CAD): Anschluss, Kommentar, **Bezug** (Ortskennzeichen, z.B. `=A01+UC2101-KF1DI1`) |
Alle Signale sind **Bool** (reine Digital-E/A-Listen). Analogwerte (Tilt-/Distanzsensoren), PROFINET-Geraete (Cognex-Scanner BX, RFID) und Antriebsparameter sind **nicht** enthalten — diese werden anderweitig projektiert.
Umfang: ILS-1 (UH01) 443 Tags, ILS-2 (UH02) 1578 Tags, ILS-3 (UH03) 1608 Tags, ILS-4 (UH04) 203 Tags, ILS-5 (UH05) 243 Tags.
## Namenspraefixe (BMK-Schema)
| Praefix | Bedeutung | Beispiel |
| --- | --- | --- |
| `BG` | Sensor / Geber (Eingang) | `BG0280`: in Separator LS1 |
| `SF` | Schalter / Taster / Sicherheitssignal (Eingang) | `SF0025`: Schluesselschalter LS1 |
| `DI` | Diagnose-/Feedback-Eingang (Sicherung, Schuetz) | `DI0011`: Feedback Hauptschuetze aktiv |
| `BP` | Druckschalter | `BP0004`: Druckschalter Druckluft OK |
| `MB` | Ausgang Separator-/Stopper-Ventil | `MB0280`: Separator LS1 |
| `MA` | Ausgang Motor (Contactor) | `MA0060`: Motor (ILS-KR-M0101) |
| `QA` | Ausgang Motor / Hauptschuetz | `QA0071`: Motor 1 Ausfahren LS1 |
| `DQ` | Digitalausgang Sonderfunktion (Fuss, RFID-Handshake) | `DQ0322`: Stuetzfuss aufwaerts LS1 |
| `FC` | Motorschutz-Feedback | `FC0060`: MSS ausgeloest (ILS-KR-M0101) |
| `PF` | Leuchtmelder / Signalsaeule | `PF0022`: Signalsaeule gruen "Betriebsbereit" |
## Was daraus automatisch fuers JSON gewinnbar ist
### Vollstaendig generierbar
| JSON-Abschnitt / Zielbaustein | Quelle |
| --- | --- |
| `sensors[]` -> `FB_CallSensors`, Dimensionierung `DB_Inputs` | TIA "PLC Tags" (alle BG-Tags: id, hwInput, Kommentar) + "Constants" (`cInBG...` ist exakt der Sensor-Array-Index) |
| Konstanten-Tabelle (TIA-Konstantenliste) | Constants-Blatt 1:1 |
| PLC-Variablentabellen (Ordner `PLC-Variablen/Mewa`) | "PLC Tags" — das ist der eigentliche Importzweck der Datei |
| `outputs`-Felder der TROs/Conveyors/LoadingBooms | MB (Stopper/Separatorventile), MA/QA/DQ (Motoren), FC (Motorschutz), PF (Leuchtmelder) |
### Teilweise generierbar — ueber Kommentar-Parsing
Die Kommentare folgen einem erstaunlich systematischen Muster:
```text
<Funktionsrolle> [<lfd.Nr.>] (<Einheit>) <Bereich>
```
Beispiele: `in Separator 1 (ILS-CV M5003) WS1.1`, `AE Abzweig Str.3 (Block 1.1.1)`, `Pin Abfrage (KR-M1101) Block 1.1.1`.
Daraus laesst sich je Foerdertechnik-Einheit (M-Nummer) ein **TRO-/Conveyor-Geruest** ableiten:
- `sensorInSep` aus "in Separator n", Stopper-Output aus "Separator n", `sensorJam*` aus "Stausensor"/"Staumelder Einfahrt"
- Der **FB-Typ** ist heuristisch bestimmbar:
- "AE Abzweig" -> Weiche (`1SepNSwi`)
- "Mitnehmerfinger in Position" / "Foerderer voll" / "MT in Position" -> `Vario`
- "Pin Abfrage" / "Pruefung MT Pos.x" -> `PinStore`
- mehrere "Str.1"..."Str.8" unter einem Block -> mehrzeiliger Puffer/Block
- Anzahl der "in Separator n" (1 vs. 2) -> 1Sep vs. 2Sep
- `conveyors[]`-Grundgeruest: FC/MA-Paare je `KR-M...`/`CV-M...` -> `motorProtectName` + `powerContactor`
Die M-Nummern tauchen unveraendert auch im SCL-Code auf (Beleg: `REGION Carousel KR-M5002` in UH05/FB_Main.scl, `TRO208 : "FB_ILS_MTRO_PinStore_Auto"; // Block 1.1.1` in UH02/FB_Main.scl) — die Zuordnung Liste <-> Code ist also nicht nur Vermutung, sondern nachweisbar identisch.
### Nicht gewinnbar
- Timing-Parameter (`trailingTime`, `handlingTime`, `senFree`/`senWait` etc.)
- Priority-Manager-Verdrahtung, Release-Ausdruecke
- `customCode`-Bloecke
- Scanner-Zuordnung (Cognex BX-Geraete sind PROFINET-Teilnehmer, nicht in den Digital-E/A-Listen)
- Vor allem die **Topologie**: `connections[]`, `jamAreas[]`, `routing`/`destinations[]`. Die Reihenfolge der M-Nummern liefert nur einen schwachen Hinweis auf Nachbarschaft, keine belastbare Verkettung.
## Hoehere Ebenen in den Listen
Die Listen enthalten eine durchgaengige **Anlagenhierarchie**, die im aktuellen JSON-Konzept noch nicht abgebildet ist:
1. **Signal** — BG/MB/MA/FC/PF/SF/QA/DQ (unterste Ebene)
2. **Foerdertechnik-Einheit = M-Nummer**`KR-M5002` (Kreisel), `CV-M5003` (Foerderer), `KR-K1101` (Kreisel-Einfahrt). Entspricht 1:1 einem Conveyor bzw. einer TRO-Instanz.
3. **Bereichs-/Funktionsgruppen = Gruppen von TROs**:
- **Block x.y.z** — PinStore-Bloecke, z.B. UH02: Block 1.1.1 1.3.4 (3 Gassen x 4 Ebenen = 12 Bloecke), deckungsgleich mit den Datenbausteinen `DB_Storage1.1.1` ... `DB_Storage1.3.4`; darunter je Block bis zu 8 Gassen ("Str.1"..."Str.8")
- **LS 1 / LS 2** — Ladeschleifen in UH01 (Boom-, Fuss-, Rad-Signale)
- **WS x.y** — Work Stations in UH04/UH05 (manuelle Arbeitsplaetze)
- **UZ0x0y** — Umzaeunungs-/Sicherheitszonen (Reset-/Freigabe-Taster je Zone) -> entspricht den `controlUnits` im JSON-Konzept
4. **Elektro-Topologie** (nur in den WSCAD-Listen, ueber das Feld "Bezug") — UC-Feldstationen mit Klemmenkarten (`KF1DI1`, `KF1FDQ2` = fehlersichere Karte, 8 oder 16 Kanaele). Die UC-Nummerierung spiegelt die logischen Bereiche: UH02 nutzt z.B. `UC21xx`/`UC22xx`/`UC23xx` fuer die drei PinStore-Bloecke 2.1/2.2/2.3; F-Karten markieren zugleich die Safety-relevanten Signale.
5. **Steuerung UH0x** — je Dateitripel eine SPS-Konfiguration, entspricht dem `plc`-Abschnitt im JSON.
## Verwendung von Positionen
Zusaetzlich zu den Excel-Listen liegen in `data/Eingaben/` vier JSON-Dateien mit Positions- und Verkabelungsdaten, offenbar Exporte eines WSCAD/CAD-Auswertungstools:
| Datei | Inhalt |
| --- | --- |
| `ST500592_10_5-9_ILS_positions.json` | Positionen (x/y in mm) aller Sensoren/Aktoren, Schaltschrankelemente und Verteiler des ILS-Systems (UH01UH05) |
| `ST500592_10_5-9_ILS_todraw.json` | Kabelverbindungen (Verteiler ↔ Signal) mit Routing-Polylinie und -laenge, Kabeltrassen (`rack_geometry`), Fehlerprotokolle |
| `ST500592_Omniflo_positionsdraw.json` / `ST500592_10_5-10_Omniflo_todraw.json` | Gleiches Schema, aber fuer ein weiteres System ("Omniflo", `SPS` 6/7 = UH06/UH07) — **keine** SCL-Konfiguration dazu im Repository, also vermutlich eine benachbarte/zukuenftige Anlage ausserhalb des aktuellen Scopes |
### Struktur
- **`sensors`** / **`schaltschrank_elemente`**: Dict, Schluessel `<BMK>@<SPS>` (z.B. `BG3260@4`), da BMK-Namen ueber die SPSen hinweg wiederverwendet werden. Werte enthalten u.a. `pos` (x,y in mm), `BEZEICHNUNG` (Kommentartext, identisch zur TIA/EA-Liste), `KENNZEICHNUNG` (WSCAD-Ortskennzeichen), `SPS` und **`VERW`**.
- **`VERW`** ist ein kontrolliertes Vokabular fuer die Funktionsrolle des Signals, z.B. `Sep`, `In sep`, `Jam detector`, `ES branch` (Weichen-Abzweig!), `conveyor full`, `MT in Position`, `Finger in position`, `PIN query`, `Sync P1``P4`. Das ist eine **zuverlaessigere Quelle fuer die Rollenklassifikation** als das Parsen der freien Kommentartexte (siehe oben) — z.B. laesst sich eine Weiche (`ES branch`) oder ein Vario-Sync-Punkt (`Sync Px`) direkt am `VERW`-Wert erkennen statt ueber Text-Heuristik.
- **`mappings`**: Verteiler (`UC0401`, ...) -> Liste der daran angeschlossenen BMK — das ist die **belastbare** (aus der Verkabelung stammende) Zuordnung Signal -> Schaltschrank, nicht nur eine Namenskonvention wie in der WSCAD-Excelliste.
- **`distributors`**: Verteiler -> eigene Position (x,y).
- **`kabel`** (nur `_todraw.json`): je Verbindung `id` (`"<Verteiler>-<BMK>@<SPS>"`), Routing-Polylinie (`coords`) und `length` (mm) — die tatsaechliche Kabelstrecke inkl. Verlegung ueber Kabeltrassen/Pritschen.
- **`rack_geometry`** / **`tunnels`**: Geometrie der Kabeltrassen bzw. Bodentunnel, auf denen die Kabel gefuehrt werden.
- **`not_found`** / `errors_*` / `warnings`: Validierungsprotokoll des Exporttools (fehlende Verteilerzuordnung, ungueltige Kennzeichnung, doppelte IDs, Attributsluecken) — kein Topologie-Input, aber wertvoll als **Datenqualitaets-Check** fuer einen Generator.
### Lassen sich Topologie-Hinweise ableiten?
Ein Abgleich der bekannten UH01-Kette (siehe [TRO_Graph_UH01-UH05.dot](TRO_Graph_UH01-UH05.dot)) gegen die Sensor-Positionen zeigt ein klares Muster:
| TRO | Sensor | Position (x, y in mm) | Abstand zum vorherigen |
| --- | --- | --- | --- |
| TRO100 | BG3242@1 | (341906, 164862) | |
| TRO103 | BG3271@1 | (331115, 163051) | ~10,9 m |
| TRO107 | BG3306@1 | (333164, 152428) | ~10,7 m (nach TRO105) |
| TRO104 | BG0280@1 | (370801, 187134) | ~46,4 m (Sprung!) |
| TRO105 | BG3280@1 | (334141, 159162) | ~46,1 m (Sprung zurueck!) |
| TRO109 | BG0340@1 | (376774, 187155) | liegt nahe bei TRO104 |
Die TROs des Hauptkreislaufs (100, 103, 105, 107, ...) liegen raeumlich dicht beieinander (Abstaende im Bereich 515 m), waehrend TRO104/TRO109 (Vorstopper vor den Ladeschleifen LS1/LS2) einen grossen sprunghaften Abstand aufweisen — sie liegen physisch bei den Ladeschleifen, einem raeumlich getrennten Anlagenteil, zu dem die Carrier ausgeschleust und zurueckgefuehrt werden. Das deckt sich exakt mit der bereits aus dem SCL-Code extrahierten Topologie (TRO104 -> LoadingBoom1 -> TRO105).
**Ergebnis:** Positionen liefern **keine eigenstaendige, vollstaendige Topologie** (dafuer fehlt die Information, in welcher Reihenfolge/Richtung Carrier durch nahe beieinanderliegende Elemente laufen — u.a. bei parallelen Foerderstrecken oder Bloecken mit identischen Abstaenden nicht eindeutig). Sie eignen sich aber sehr gut als:
1. **Validierungswerkzeug** fuer die aus dem SCL-Code extrahierte `connections`-Topologie: kurze Abstaende zwischen verbundenen TROs bestaetigen Plausibilitaet, groessere Spruenge markieren bewusste Anlagenteile (Ladeschleifen, Storage-Gassen, AMR-Uebergabe) und lassen sich in der Analyse gezielt kommentieren.
2. **Raeumliche Clusterbildung**: TROs/Sensoren, die im selben Cluster von Koordinaten liegen, lassen sich automatisch zu den bereits identifizierten Bereichsgruppen (Block, LS, WS, UZ) buendeln oder solche Gruppen erst entdecken, falls die textuelle Kommentar-Zuordnung fehlt oder uneinheitlich ist.
3. **Massstabsgetreue Lageplan-Darstellung**: der bestehende TRO-Graph ([TRO_Graph_UH01-UH05.svg](TRO_Graph_UH01-UH05.svg)) nutzt eine automatische Graphviz-Anordnung ohne Bezug zur echten Anlage. Mit den `pos`-Koordinaten liesse sich zusaetzlich ein **massstabsgetreuer Lageplan** rendern (SVG/DXF mit echten x/y-Koordinaten je TRO/Sensor), der die abstrakte Topologie mit der realen Hallenlayout ueberlagert.
4. **Cabinet-/Verteilerzuordnung**: `mappings` + `distributors` liefern die **tatsaechliche** (aus der Verkabelung stammende) Zuordnung Sensor -> Schaltschrank/Verteiler samt dessen Position — praeziser als die Namenskonvention der WSCAD-Bezugsfelder, und direkt nutzbar fuer den `controlUnits`-Abschnitt im JSON.
5. **Kabel-/Trassendokumentation**: `kabel`, `rack_geometry` und `tunnels` erlauben es, Kabellaengen und -wege je Verbindung automatisch zu dokumentieren (z.B. fuer Stuecklisten/BOM oder Trassenauslastung) — fachlich getrennt von der SPS-Programmlogik, aber ein sinnvoller Zusatznutzen derselben Datenbasis.
## Konsequenz fuer das JSON-Layout-Konzept
Um Ebene 24 aus den Excel-Listen automatisch befuellen zu koennen, sollte das JSON-Schema (siehe [Json_Layout-Konzept.md](Json_Layout-Konzept.md)) um folgende Punkte erweitert werden:
1. Ein Feld `unit` bzw. `mNumber` an jedem TRO/Conveyor als expliziter Schluessel zur E/A-Liste (z.B. `"unit": "M5003"`).
2. Eine neue Gruppierungsebene `areas`/`groups` (Block, LS, WS, UZ, UC-Station), die TROs/Conveyors buendelt und mit dem "Bezug"-Feld der WSCAD-Liste sowie der UZ-Nummerierung der TIA-Liste verknuepft.
3. Ein optionales Feld `pos: {x, y}` je Sensor/TRO/Conveyor (aus den `..._positions.json`), fuer massstabsgetreue Layout-Darstellung und als Validierungsdatum fuer die Topologie.
4. Ein Feld `controlUnit`/`cabinet` mit dem Verteiler-BMK (aus `mappings`), zusaetzlich zur bzw. anstelle der bisherigen Ableitung aus der WSCAD-Namenskonvention.
5. Nutzung des `VERW`-Vokabulars aus den Positions-JSONs als primaere Quelle fuer die Rollenklassifikation der BG/MB-Signale (statt bzw. ergaenzend zur Kommentar-Textheuristik) — reduziert Fehlklassifikationen bei uneindeutigen Kommentaren.
Damit waeren die Ebenen Signal, Foerdertechnik-Einheit, Bereichsgruppe, Steuerung und — als Zusatznutzen — die raeumliche Lage vollstaendig aus den Eingabelisten ableitbar. Manuell zu pflegen blieben dann nur noch die eigentliche Verkettungsrichtung der Topologie (`connections`/`destinations`), Timings und projektspezifische Sonderlogik (`customCode`).
+247
View File
@@ -941,6 +941,253 @@ Ermoeglicht automatische Generierung von `FC_Direction` ohne manuelles Pflegen v
---
### 13. Topologie-Graph UH01 — TRO-Ein- und Ausgänge
Jede Verbindung wird über eine JamArea realisiert. Abkürzung `JAxxxx_y` steht für `"DB_JamAreaxxxx".stJamxxxx_y`.
Switch-TROs (Typ `1Sep1Swi`) besitzen zwei Ausgänge (Dir1 / Dir2); ihre Richtungsentscheidung kommt aus `FC_Direction`.
#### Inbound-Hauptschleife (Mermaid-Diagramm)
```mermaid
flowchart LR
classDef sep fill:#d4e8ff,stroke:#3388cc
classDef swi fill:#ffe4a0,stroke:#cc8800
classDef buf fill:#d4f0d4,stroke:#338833
classDef vario fill:#e8d4f0,stroke:#883388
classDef sscc fill:#ffd4d4,stroke:#cc3333
classDef ext fill:#f0f0f0,stroke:#888,stroke-dasharray:5
EXT_IN([Externer Eingang]):::ext
EXT_OUT([InboundOut to WCS]):::ext
EXT_IN -->|JA0100_1| TRO100:::sep
TRO100 -->|JA0101_1| TRO101_IN:::sep
TRO101_IN -->|JamBuf101| TRO101[TRO101 EmptyBuf]:::buf
TRO101_IN -->|JA0101_2| TRO102_IN:::sep
TRO102_IN -->|JamBuf102| TRO102[TRO102 EmptyBuf]:::buf
TRO101 -->|JA0102_2| TRO112:::swi
TRO102 -->|JA0102_1| TRO107:::swi
TRO107 -->|Dir1 JA0103_1| TRO103:::sep
TRO107 -->|Dir2 JA0102_2| TRO112
TRO103 -->|JA0104_1| TRO104:::sep
TRO104 -->|JA0104_2| LB1([LoadingBoom 1]):::ext
LB1 -->|JA0104_3| TRO105:::sscc
TRO105 -->|JA0106_2| TRO106:::sep
TRO106 -->|JA0102_2| TRO112
TRO112 -->|Dir1 JA0107_1| TRO108:::sep
TRO112 -->|Dir2 JA0102_3| TRO113:::sep
TRO108 -->|JA0108_1| TRO109:::sep
TRO109 -->|JA0108_2| LB2([LoadingBoom 2]):::ext
LB2 -->|JA0108_3| TRO110:::sscc
TRO110 -->|JA0110_2| TRO111:::sep
TRO111 -->|JA0102_3| TRO113
TRO113 -->|JA0102_4| TRO114:::swi
TRO114 -->|Dir1 JA4104_1| TRO115:::vario
TRO115 --> EXT_OUT
TRO114 -->|Dir2 JA0102_5| TRO116:::sep
TRO116 -->|JA0102_6| TRO117:::sep
TRO117 -.->|JA0102_1 Clearing-Rückf.| TRO107
```
#### Highway / Storage-Verbindungen (Mermaid-Diagramm)
```mermaid
flowchart LR
classDef sep fill:#d4e8ff,stroke:#3388cc
classDef swi fill:#ffe4a0,stroke:#cc8800
classDef vario fill:#e8d4f0,stroke:#883388
classDef ext fill:#f0f0f0,stroke:#888,stroke-dasharray:5
HWY_IN([Highway Loaded In]):::ext -->|JA4103_1| TRO120:::vario
ST_IN1([Storage Empty In]):::ext -->|JA4503_1| TRO121:::vario
ST_IN1 -->|JA4503_2| TRO122:::sep
TRO122 -->|JA4502_1| TRO123:::vario
BORNER1([Borner Eingang 1]):::ext -->|JA4502_2| TRO124:::swi
TRO124 -->|Dir1 JA4204_2| TRO125:::sep
TRO125 -->|JA4203_1| TRO126:::vario
TRO126 --> STORAGE([Storage]):::ext
TRO124 -->|Dir2 JA4501_1| TRO127:::vario
EMPTY_IN([Leere Carrier von Highway]):::ext -->|JA4501_2| TRO128:::vario
BORNER2([Borner Eingang 2]):::ext -->|JA4302_2| TRO129:::sep
TRO129 -->|JA4204_1| TRO130:::sep
TRO130 -->|JA4501_1| TRO127
AMR_IN([Loaded to AMR]):::ext -->|JA4403_1| TRO131:::vario
TRO131 --> AMR([AMR-System]):::ext
HWY_IN2([Highway Eingang 2]):::ext -->|JA4302_1| TRO133:::vario
AMR_HWY([AMR Highway]):::ext -->|JA4402_1| TRO134:::vario
```
#### TRO-Tabelle: Zone A — Eingang / Leere-Carrier-Puffer
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang JamArea | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO100 | 1Sep | Anlageneingang | JA0100.stJam0100_1 | Externer Eingang | JA0101.stJam0101_1 | TRO101_IN |
| TRO101_IN | 1Sep | Separator Empty Buffer rechts | JA0101.stJam0101_1 | TRO100 | DB_JamBuffer101 / JA0101.stJam0101_2 | TRO101 / TRO102_IN |
| TRO101 | EmptyCarrBuffer | Leere-Carrier-Puffer rechts | DB_JamBuffer101 | TRO101_IN | JA0102.stJam0102_2 | TRO112 |
| TRO102_IN | 1Sep | Separator Empty Buffer links | JA0101.stJam0101_2 | TRO101_IN | DB_JamBuffer102 | TRO102 |
| TRO102 | EmptyCarrBuffer | Leere-Carrier-Puffer links | DB_JamBuffer102 | TRO102_IN | JA0102.stJam0102_1 | TRO107 |
#### TRO-Tabelle: Zone B — Loading Station 1
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang JamArea | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO103 | 1Sep | Zufahrt Loading Station 1 | JA0103.stJam0103_1 | TRO107 (Dir1) | JA0104.stJam0104_1 | TRO104 |
| TRO104 | 1Sep | Vorstopper LS1 + Barcode-Scanner | JA0104.stJam0104_1 | TRO103 | JA0104.stJam0104_2 | LoadingBoom1 (Stopper) |
| TRO105 | 1Sep_SSCC | SSCC-Scanner nach LS1 | JA0104.stJam0104_3 | LoadingBoom1 (nach Beladung) | JA0106.stJam0106_2 | TRO106 |
| TRO106 | 1Sep | Abfuhr Loading Station 1 | JA0106.stJam0106_2 | TRO105 | JA0102.stJam0102_2 | TRO112 |
#### TRO-Tabelle: Zone C — Loading Station 2
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang JamArea | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO108 | 1Sep | Zufahrt Loading Station 2 | JA0107.stJam0107_1 | TRO112 (Dir1) | JA0108.stJam0108_1 | TRO109 |
| TRO109 | 1Sep | Vorstopper LS2 + Barcode-Scanner | JA0108.stJam0108_1 | TRO108 | JA0108.stJam0108_2 | LoadingBoom2 (Stopper) |
| TRO110 | 1Sep_SSCC | SSCC-Scanner nach LS2 | JA0108.stJam0108_3 | LoadingBoom2 (nach Beladung) | JA0110.stJam0110_2 | TRO111 |
| TRO111 | 1Sep | Abfuhr Loading Station 2 | JA0110.stJam0110_2 | TRO110 | JA0102.stJam0102_3 | TRO113 |
#### TRO-Tabelle: Zone D — Switches / Hauptrouting
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang Dir1 | Ausgang Dir2 |
|---|---|---|---|---|---|---|
| TRO107 | 1Sep1Swi | Switch: LS1 / LS2+Clearing | JA0102.stJam0102_1 | TRO102, TRO117 (Rückf.) | JA0103.stJam0103_1 → TRO103 | JA0102.stJam0102_2 → TRO112 |
| TRO112 | 1Sep1Swi | Switch: LS2 / Clearing+Ausgang | JA0102.stJam0102_2 | TRO101, TRO106, TRO107(D2) | JA0107.stJam0107_1 → TRO108 | JA0102.stJam0102_3 → TRO113 |
| TRO113 | 1Sep | Zufahrt Clearing + Barcode-Scanner | JA0102.stJam0102_3 | TRO111, TRO112 (Dir2) | JA0102.stJam0102_4 → TRO114 | — |
| TRO114 | 1Sep1Swi | Switch: InboundOut / Clearing + Scanner | JA0102.stJam0102_4 | TRO113 | JA4104.stJam4104_1 → TRO115 | JA0102.stJam0102_5 → TRO116 |
#### TRO-Tabelle: Zone E — Clearing-Station
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang JamArea | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO116 | 1Sep | Zufahrt Clearing-Station | JA0102.stJam0102_5 | TRO114 (Dir2) | JA0102.stJam0102_6 | TRO117 |
| TRO117 | 1Sep | Clearing-Station (HMI + customCode) | JA0102.stJam0102_6 | TRO116 | JA0102.stJam0102_1 | TRO107 (Clearing-Rückführung) |
#### TRO-Tabelle: Zone F — InboundOut
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO115 | Vario | Übergabe InboundOut | JA4104.stJam4104_1 | TRO114 (Dir1) | WCS-Telegramm | Externes System (WCS/UH04) |
#### TRO-Tabelle: Zone G — Highway / Storage (Cross-UH-Verbindungen)
| TRO | Typ | Beschreibung | Eingang JamArea | Eingang von | Ausgang JamArea | Ausgang zu |
|---|---|---|---|---|---|---|
| TRO120 | Vario | Loaded Carrier von Highway eingehend | JA4103.stJam4103_1 | Highway-Extern | — | Borner-Einspeisung |
| TRO121 | Vario | Eingang Speicher-Kreislauf 1 | JA4503.stJam4503_1 | Extern | — | — |
| TRO122 | 1Sep | Speicher-Transition | JA4503.stJam4503_2 | Extern | JA4502.stJam4502_1 | TRO123 |
| TRO123 | Vario | Speicher-Übergabe | JA4502.stJam4502_1 | TRO122 | — | — |
| TRO124 | 1Sep1Swi | Switch: Carousel / Highway-Storage | JA4502.stJam4502_2 | Extern | Dir1: JA4204.stJam4204_2 → TRO125 | Dir2: JA4501.stJam4501_1 → TRO127 |
| TRO125 | 1Sep | Highway-Exit Richtung Carousel | JA4204.stJam4204_2 | TRO124 (Dir1) | JA4203.stJam4203_1 | TRO126 |
| TRO126 | Vario | Leere Carrier → Storage | JA4203.stJam4203_1 | TRO125 | — | Storage |
| TRO127 | Vario | Highway-Ausgang | JA4501.stJam4501_1 | TRO124(D2), TRO130 | — | — |
| TRO128 | Vario | Leere Carrier → Inbound (von Highway) | JA4501.stJam4501_2 | Extern | — | — |
| TRO129 | 1Sep | Borner-Eingang Seite 2 | JA4302.stJam4302_2 | Extern | JA4204.stJam4204_1 | TRO130 |
| TRO130 | 1Sep | Transition zu Highway | JA4204.stJam4204_1 | TRO129 | JA4501.stJam4501_1 | TRO127 |
| TRO131 | Vario | Loaded Carrier → AMR | JA4403.stJam4403_1 | Extern | — | AMR-System |
| TRO132 | 1Sep | (auskommentiert — nicht aktiv) | — | — | — | — |
| TRO133 | Vario | Highway-Eingang 2 | JA4302.stJam4302_1 | Extern | — | — |
| TRO134 | Vario | AMR Highway | JA4402.stJam4402_1 | Extern | — | — |
---
### 14. Erweiterungen aus der E/A-Listen- und Positionsdaten-Analyse
Die Analyse der Eingabelisten in `data/Eingaben/` (siehe [EA-Listen-Analyse.md](EA-Listen-Analyse.md)) hat gezeigt, dass grosse Teile des JSON automatisch aus den Projektierungsdaten befuellbar sind. Dafuer werden folgende Schema-Erweiterungen eingefuehrt:
#### 14.1 Feld `unit` je TRO/Conveyor (Schluessel zur E/A-Liste)
Jede TRO-/Conveyor-Instanz erhaelt die Foerdertechnik-Einheit (M-Nummer) als expliziten Schluessel. Die M-Nummern stehen in den Kommentaren der E/A-Listen und identisch in den REGION-Namen des SCL-Codes:
```json
{
"id": "TRO115",
"unit": "M4104",
"unitKind": "CV",
"type": "Vario",
"pos": { "x": 341906, "y": 164862 },
"cabinet": "UC1101"
}
```
| Feld | Quelle | Bedeutung |
|---|---|---|
| `unit` | Kommentar E/A-Liste (`(ILS-CV M4104)`) | M-Nummer der mechanischen Einheit |
| `unitKind` | dito | `KR` = Kreisel/Carousel, `CV` = Conveyor, `K` = Kreisel-Einfahrt |
| `pos` | `..._positions.json` -> `sensors[<BMK>@<SPS>].pos` | x/y-Lage in mm (Referenzsensor der Einheit) |
| `cabinet` | `..._positions.json` -> `mappings` | Verteiler/Schaltschrank aus der realen Verkabelung |
#### 14.2 Gruppierungsebene `areas`
Neue Top-Level-Ebene, die TROs/Conveyors zu den in den Listen gefundenen Bereichsgruppen buendelt:
```json
"areas": [
{
"id": "Block 1.1.1",
"kind": "pinStoreBlock",
"members": ["TRO208", "TRO209", "TRO210"],
"ucStations": ["UC2101"],
"safetyZone": "UZ0201",
"storageDb": "DB_Storage1.1.1",
"lines": 8
},
{
"id": "LS1",
"kind": "loadingStation",
"members": ["TRO103", "TRO104", "TRO105", "TRO106", "LoadingBoom1"],
"safetyZone": "UZ0110"
},
{
"id": "WS1.1",
"kind": "workStation",
"members": ["TRO421"]
}
]
```
Gefundene `kind`-Werte: `pinStoreBlock` (Block x.y.z, UH02/UH03), `loadingStation` (LS 1/2, UH01), `workStation` (WS x.y, UH04/UH05), `safetyZone` (UZ0x0y), `ucStation` (Feldstation/Verteiler).
#### 14.3 Rollenklassifikation ueber das `VERW`-Vokabular
Die Positions-JSONs (`..._positions.json`) enthalten je Signal das Feld `VERW` — ein kontrolliertes Vokabular, das zuverlaessiger ist als das Parsen der freien Kommentartexte:
| `VERW`-Wert | Rolle im JSON | Hinweis auf FB-Typ |
|---|---|---|
| `In sep` | `separator.sensorInSep` | — |
| `Sep` | `outputs.stopper*` (MB-Ausgang) | — |
| `Jam detector` / `Jam detector (LP)` | `sensorJam*` | — |
| `ES branch` | `outputs.sw*ExTo*` (Weichenausgang) | `1SepNSwi` |
| `conveyor full` | `vario.sensors.jam` / Puffer voll | `Vario` |
| `MT in Position` | `vario.sensors.carrInPos` | `Vario` |
| `Finger in position` | `vario.sensors.finger` | `Vario` |
| `PIN query` | PinStore-Abfrage | `PinStore_Auto` |
| `Sync P1`..`P4` | Synchronisationspunkte | PinStore/Vario-Sonderform |
| `Rad dreht` | LoadingBoom Rad-Sensor | LoadingBoom |
Heuristik fuer den FB-Typ je Einheit: `ES branch` vorhanden -> Weiche; `Finger`/`MT in Position`/`conveyor full` -> `Vario`; `PIN query` -> `PinStore_Auto`; Anzahl `In sep` (1/2) -> `1Sep`/`2Sep`; nur FC/MA-Paar ohne Separator -> `FB_Conveyor`.
#### 14.4 Quellen-Uebersicht
| Datenquelle | Liefert |
|---|---|
| `..._TIA.xlsx` "PLC Tags" | BMK-Name, Datentyp, `%E/%A`-Adresse, Kommentar -> `sensors[]`, `outputs` |
| `..._TIA.xlsx` "Constants" | `cIn...`-Indexkonstanten -> Konstanten-Tabelle, `sensors[].constant` |
| `..._WSCAD.xlsx` "Bezug" | Ortskennzeichen `=A01+UCxxxx-KF1DIx` -> Karten-/Stationszuordnung |
| `..._positions.json` | `pos` (x/y), `VERW` (Rolle), `mappings` (Signal->Verteiler), `distributors` (Verteiler-Position) |
| `..._todraw.json` | Kabelwege und -laengen (Doku/BOM, nicht SPS-relevant) |
Nicht aus den Listen ableitbar bleiben: Timings, Priority-Manager, Release-Ausdruecke, Scanner-Zuordnung (BX = PROFINET), `customCode` und die Verkettungsrichtung der Topologie (`connections`/`destinations`). Die Positionen dienen dabei als Plausibilitaets-Check der Topologie (kurze Abstaende = wahrscheinliche Nachbarn) und fuer massstabsgetreue Lageplaene.
#### 14.5 Skeleton-Generator
Das Skript [lib/create_skel.py](../lib/create_skel.py) (Aufruf ueber `bin\create_skel.bat`) liest die Eingabelisten und erzeugt je Steuerung ein Skeleton der JSON-Zwischendatei (`results/skeleton_UH0x.json`) sowie ein SCL-Grundgeruest. Die globalen Definitionen werden beim Programmstart aus `PV_CFG` geladen: [cfg/skel.cfg](../cfg/skel.cfg) (JSON: Dateinamen, `VERW`-Vokabular, FB-Typ-Regeln) und [cfg/skel_scl.cfg](../cfg/skel_scl.cfg) (INI-Style: die SCL-Aufruf-Templates, zeilenweise lesbar — jede `[sektion]` ist ein Template, der Inhalt wird verbatim inkl. Einrueckung und Leerzeilen uebernommen). Fehlende Konfigurationsdateien fallen auf die im Skript eingebauten Defaults zurueck (Cold-Start-faehig).
Mit `--con-ini` bzw. `--con-json` liest der Generator zusaetzlich die TRO-Topologie aus [data/connect.ini](../data/connect.ini) bzw. [data/connect.json](../data/connect.json) (Format `hmf-connect-v1`, extrahiert aus [TRO_Graph_UH01-UH05.dot](TRO_Graph_UH01-UH05.dot)) und ergaenzt jedes Skeleton um einen `topology`-Abschnitt: je TRO die aufgeloeste JamArea-Verdrahtung (`entries`/`exits` inkl. `dbRef` auf `"DB_JamAreaxxxx".stJamxxxx_y`), dazu die rohen `connections`/`externals`-Listen. Beide Eingabewege liefern identische Ergebnisse.
---
## Welche SCL-Bausteine werden daraus generiert?
| Ziel-Baustein | Generiert aus JSON-Abschnitt |
+705
View File
@@ -0,0 +1,705 @@
// ============================================================================
// TRO-Topologie-Graph der Gesamtanlage HundM_Fortna (UH01 - UH05)
// ============================================================================
//
// Format: Graphviz DOT (https://graphviz.org)
// Rendern z.B. mit: dot -Tsvg TRO_Graph_UH01-UH05.dot -o graph.svg
// oder online: https://dreampuf.github.io/GraphvizOnline
//
// Quelle: Automatisch extrahiert aus den FB_Main.scl der 5 Steuerungen
// (=A01+UH01-KF00 ... =A01+UH05-KF00, Ordner 100_Main).
// Erzeugt von bin/generate_tro_graph.py.
//
// Methode: Jeder TRO-Baustein (FB_ILS_MTRO_*, FB_EmptyCarrBuffer,
// FB_LoadingBoom_INBOUND) referenziert JamAreas als Parameter:
// arInOutJamEntr* / arInOutStorageLines / arInOutCarrierStopper = Eingang
// arInOutJamExit* / arInOutJamBypass / arInOutJamFinger /
// arInOutCarrierExit = Ausgang
// Zwei TROs sind verbunden, wenn der Ausgangs-Slot des einen
// dieselbe JamArea referenziert wie der Eingangs-Slot des anderen.
// Auskommentierter Code wurde ignoriert.
//
// Knoten: Ein Knoten je TRO-Instanz, Label: Name, [FB-Typ], REGION-Kommentar
// aus FB_Main. Farbe/Form nach FB-Typ:
// hellblau/Box = 1Sep (Standard-Separator)
// rot/Box = 1Sep_SSCC (SSCC-Scanner + WCS-Telegramm)
// gelb/Raute = 1Sep1Swi, 1Sep2Swi, 2Sep1Swi (Weichen)
// violett/Parallelogr.= Vario (Kettenfoerderer)
// tuerkis/Parallelogr.= Vario_workStation (manueller Arbeitsplatz)
// gruen/3D-Box = EmptyCarrBuffer (Leertablar-Puffer)
// grau = Sonstige (z.B. LoadingBoom, PinStore)
//
// Kanten: Label = JamArea-Slot (JAxxxx_y = "DB_JamAreaxxxx".stJamxxxx_y).
// Zusatz "Dir2"/"Dir3" = Weichen-Ausgang (arInOutJamExit3/4),
// Richtungsentscheidung kommt aus FC_Direction.
// Gestrichelt "Bypass" = Bypass-Spur (PinStore),
// gestrichelt "Finger" = Finger-Uebergabe eines Vario-Foerderers.
//
// EXTERN: Graue Kanten zu EXTERN-Knoten = JamAreas, die nur auf einer
// Seite belegt sind (Anlagengrenze, Uebergabe an WES/WCS, AMR
// oder andere SPS). CPU-CPU-Uebergaben zwischen den Steuerungen
// sind an den Labels "IO_Device_UHxx_TO_UHyy..." erkennbar
// (PROFINET-Direktkopplung, kein gemeinsamer JamArea-DB).
//
// Hinweis: Kanten existieren nur innerhalb einer Steuerung, da JamArea-DBs
// nicht SPS-uebergreifend geteilt werden. Der physische Fluss
// zwischen den UHs laeuft ueber die EXTERN-Uebergaben.
//
// Umfang: 250 TRO-Knoten, 284 Verbindungen (Stand der Extraktion siehe Git-Historie)
// UH01: 36 TROs, 37 Verbindungen
// UH02: 74 TROs, 88 Verbindungen
// UH03: 84 TROs, 102 Verbindungen
// UH04: 24 TROs, 25 Verbindungen
// UH05: 32 TROs, 32 Verbindungen
digraph TRO_Topologie {
rankdir = "LR";
fontname = "Arial";
node [fontname="Arial", fontsize=10];
edge [fontname="Arial", fontsize=8];
label = "TRO-Topologie HundM_Fortna (UH01-UH05)";
labelloc = "t";
subgraph "cluster_UH01" {
label = "UH01 (=A01+UH01-KF00)";
style = "rounded";
color = "#888888";
"UH01.TRO100" [label="TRO100\n[1Sep]\nTRO 100 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO101" [label="TRO101\n[EmptyCarrBuffer]\nTRO101 (Empty Buffer rechts)", shape=box3d, style=filled, fillcolor="#d4f0d4"];
"UH01.TRO101_IN" [label="TRO101_IN\n[1Sep]\nTRO 101_IN(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO102" [label="TRO102\n[EmptyCarrBuffer]\nTRO102 (Empty Buffer links)", shape=box3d, style=filled, fillcolor="#d4f0d4"];
"UH01.TRO102_IN" [label="TRO102_IN\n[1Sep]\nTRO 102_IN(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO103" [label="TRO103\n[1Sep]\nTRO 103 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO104" [label="TRO104\n[1Sep]\nTRO 104 (1Sep)+Scanner", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO105" [label="TRO105\n[1Sep_SSCC]\nTRO 105 (1Sep)+Scanner", shape=box, style=filled, fillcolor="#ffd4d4"];
"UH01.TRO106" [label="TRO106\n[1Sep]\nTRO 106 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO107" [label="TRO107\n[1Sep1Swi]\nTRO 107(1Sep1Swi)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH01.TRO108" [label="TRO108\n[1Sep]\nTRO 108 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO109" [label="TRO109\n[1Sep]\nTRO 109 (1Sep)+Scanner", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO110" [label="TRO110\n[1Sep_SSCC]\nTRO 110 (1Sep)+Scanner", shape=box, style=filled, fillcolor="#ffd4d4"];
"UH01.TRO111" [label="TRO111\n[1Sep]\nTRO 111 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO112" [label="TRO112\n[1Sep1Swi]\nTRO 112 (1Sep1Swi)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH01.TRO113" [label="TRO113\n[1Sep]\nTRO 113 (1Sep)+Scanner", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO114" [label="TRO114\n[1Sep1Swi]\nTRO 114 (1Sep1Switch)+Scanner", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH01.TRO115" [label="TRO115\n[Vario]\nTRO 115 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO116" [label="TRO116\n[1Sep]\nTRO 116 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO117" [label="TRO117\n[1Sep]\nTRO 117 (1Sep) + Scanner", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO120" [label="TRO120\n[Vario]\nTRO 120 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO121" [label="TRO121\n[Vario]\nTRO 121(Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO122" [label="TRO122\n[1Sep]\nTRO 122 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO123" [label="TRO123\n[Vario]\nTRO 123 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO124" [label="TRO124\n[1Sep1Swi]\nTRO 124 (1Sep1Switch)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH01.TRO125" [label="TRO125\n[1Sep]\nTRO 125 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO126" [label="TRO126\n[Vario]\nTRO 126 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO127" [label="TRO127\n[Vario]\nTRO 127 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO128" [label="TRO128\n[Vario]\nTRO 128 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO129" [label="TRO129\n[1Sep]\nTRO 129 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO130" [label="TRO130\n[1Sep]\nTRO 130 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH01.TRO131" [label="TRO131\n[Vario]\nTRO 131 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO133" [label="TRO133\n[Vario]\nTRO 133 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.TRO134" [label="TRO134\n[Vario]\nTRO 134 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH01.fbLoadingBoom1" [label="fbLoadingBoom1\n[LoadingBoom_INBOUND]\nLoadingBoom 1", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH01.fbLoadingBoom2" [label="fbLoadingBoom2\n[LoadingBoom_INBOUND]\nLoadingBoom 2", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH01.EXTERN_IN" [label="EXTERN\n(Zulauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH01.TRO128" -> "UH01.TRO100" [label="JA0100_1 Finger", style=dashed];
"UH01.TRO100" -> "UH01.TRO101_IN" [label="JA0101_1"];
"UH01.TRO101_IN" -> "UH01.TRO102_IN" [label="JA0101_2"];
"UH01.TRO102" -> "UH01.TRO107" [label="JA0102_1"];
"UH01.TRO117" -> "UH01.TRO107" [label="JA0102_1"];
"UH01.TRO101" -> "UH01.TRO112" [label="JA0102_2"];
"UH01.TRO106" -> "UH01.TRO112" [label="JA0102_2"];
"UH01.TRO107" -> "UH01.TRO112" [label="JA0102_2 Dir2"];
"UH01.TRO111" -> "UH01.TRO113" [label="JA0102_3"];
"UH01.TRO112" -> "UH01.TRO113" [label="JA0102_3 Dir2"];
"UH01.TRO113" -> "UH01.TRO114" [label="JA0102_4"];
"UH01.TRO114" -> "UH01.TRO116" [label="JA0102_5 Dir2"];
"UH01.TRO116" -> "UH01.TRO117" [label="JA0102_6"];
"UH01.TRO107" -> "UH01.TRO103" [label="JA0103_1"];
"UH01.TRO103" -> "UH01.TRO104" [label="JA0104_1"];
"UH01.TRO104" -> "UH01.fbLoadingBoom1" [label="JA0104_2"];
"UH01.fbLoadingBoom1" -> "UH01.TRO105" [label="JA0104_3"];
"UH01.TRO105" -> "UH01.TRO106" [label="JA0106_2"];
"UH01.TRO112" -> "UH01.TRO108" [label="JA0107_1"];
"UH01.TRO108" -> "UH01.TRO109" [label="JA0108_1"];
"UH01.TRO109" -> "UH01.fbLoadingBoom2" [label="JA0108_2"];
"UH01.fbLoadingBoom2" -> "UH01.TRO110" [label="JA0108_3"];
"UH01.TRO110" -> "UH01.TRO111" [label="JA0110_2"];
"UH01.TRO115" -> "UH01.TRO120" [label="JA4103_1 Finger", style=dashed];
"UH01.TRO125" -> "UH01.TRO126" [label="JA4203_1"];
"UH01.TRO129" -> "UH01.TRO130" [label="JA4204_1"];
"UH01.TRO124" -> "UH01.TRO125" [label="JA4204_2"];
"UH01.TRO133" -> "UH01.TRO129" [label="JA4302_2 Finger", style=dashed];
"UH01.TRO134" -> "UH01.TRO131" [label="JA4403_1 Finger", style=dashed];
"UH01.TRO124" -> "UH01.TRO127" [label="JA4501_1 Dir2"];
"UH01.TRO130" -> "UH01.TRO127" [label="JA4501_1"];
"UH01.TRO127" -> "UH01.TRO128" [label="JA4501_2 Finger", style=dashed];
"UH01.TRO122" -> "UH01.TRO123" [label="JA4502_1"];
"UH01.TRO123" -> "UH01.TRO124" [label="JA4502_2 Finger", style=dashed];
"UH01.TRO121" -> "UH01.TRO122" [label="JA4503_2 Finger", style=dashed];
"UH01.TRO101_IN" -> "UH01.TRO101" [label="JamBuffer101"];
"UH01.TRO102_IN" -> "UH01.TRO102" [label="JamBuffer102"];
"UH01.EXTERN_IN" -> "UH01.TRO115" [label="JA4104_1", color="#999999"];
"UH01.EXTERN_IN" -> "UH01.TRO133" [label="JA4302_1", color="#999999"];
"UH01.EXTERN_IN" -> "UH01.TRO134" [label="JA4402_1", color="#999999"];
"UH01.EXTERN_IN" -> "UH01.TRO121" [label="JA4503_1", color="#999999"];
}
subgraph "cluster_UH02" {
label = "UH02 (=A01+UH02-KF00)";
style = "rounded";
color = "#888888";
"UH02.TRO200" [label="TRO200\n[Vario]\nTRO 200 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO201" [label="TRO201\n[1Sep]\nTRO 201 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO202" [label="TRO202\n[1Sep1Swi]\nTRO 202 (1Sep1Switch)+Scanner(BX2103)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO203" [label="TRO203\n[1Sep1Swi]\nTRO 203 (1Sep1Switch) + Scanner (BX2111)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO204" [label="TRO204\n[1Sep1Swi]\nTRO 204(1Sep1Switch) + Scanner(BX2112)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO205" [label="TRO205\n[1Sep1Swi]\nTRO 205 (1Sep1Switch) + Scanner(BX2114)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO206" [label="TRO206\n[1Sep1Swi]\nTRO 206 (1Sep1Switch)+Scanner(BX2113)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO207" [label="TRO207\n[1Sep]\nTRO 207(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO208" [label="TRO208\n[PinStore_Auto]\nAufruf: TRO208", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO209" [label="TRO209\n[Vario]\nTRO 209 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO210" [label="TRO210\n[1Sep]\nTRO 210 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO211" [label="TRO211\n[PinStore_Auto]\nAufruf: TRO211", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO212" [label="TRO212\n[Vario]\nTRO 212 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO213" [label="TRO213\n[1Sep]\nTRO 213 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO214" [label="TRO214\n[PinStore_Auto]\nAufruf: TRO214", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO215" [label="TRO215\n[Vario]\nTRO 215 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO216" [label="TRO216\n[1Sep]\nTRO 216 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO217" [label="TRO217\n[PinStore_Auto]\nAufruf: TRO217", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO218" [label="TRO218\n[Vario]\nTRO 218 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO219" [label="TRO219\n[1Sep]\nTRO 219(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO220" [label="TRO220\n[Vario]\nTRO 220 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO221" [label="TRO221\n[1Sep]\nTRO 221 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO222" [label="TRO222\n[1Sep1Swi]\nTRO 222 (1Sep1Switch)+Scanner(BX2121)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO223" [label="TRO223\n[1Sep1Swi]\nTRO 223 (1Sep1Switch)+Scanner(BX2126)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO224" [label="TRO224\n[1Sep1Swi]\nTRO 224 (1Sep1Switch)+Scanner(BX2127)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO225" [label="TRO225\n[1Sep1Swi]\nTRO 225(1Sep1Switch)+Scanner(BX2129)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO226" [label="TRO226\n[1Sep1Swi]\nTRO 226 (1Sep1Switch)+Scanner(BX2128)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO227" [label="TRO227\n[1Sep]\nTRO 227 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO228" [label="TRO228\n[PinStore_Auto]\nAufruf: TRO228", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO229" [label="TRO229\n[Vario]\nTRO 229 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO230" [label="TRO230\n[1Sep]\nTRO 230 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO231" [label="TRO231\n[PinStore_Auto]\nAufruf: TRO231", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO232" [label="TRO232\n[Vario]\nTRO 232 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO233" [label="TRO233\n[1Sep]\nTRO 233 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO234" [label="TRO234\n[PinStore_Auto]\nAufruf: TRO234", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO235" [label="TRO235\n[Vario]\nTRO 235 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO236" [label="TRO236\n[1Sep]\nTRO 236 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO237" [label="TRO237\n[PinStore_Auto]\nAufruf: TRO237", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO238" [label="TRO238\n[Vario]\nTRO 238 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO239" [label="TRO239\n[1Sep]\nTRO 239 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO240" [label="TRO240\n[Vario]\nTRO 240 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO241" [label="TRO241\n[1Sep]\nTRO 241(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO242" [label="TRO242\n[1Sep1Swi]\nTRO 242 (1Sep1Switch)+Scanner(BX2130)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO243" [label="TRO243\n[1Sep1Swi]\nTRO 243 (1Sep1Switch)+Scanner(BX3137)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO244" [label="TRO244\n[1Sep1Swi]\nTRO 244 (1Sep1Switch)+Scanner(BX2136)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO245" [label="TRO245\n[1Sep1Swi]\nTRO 245 (1Sep1Switch)+Scanner(BX2138)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO246" [label="TRO246\n[1Sep1Swi]\nTRO 246 (1Sep1Switch)+Scanner(BX2137)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH02.TRO247" [label="TRO247\n[1Sep]\nTRO 247(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO248" [label="TRO248\n[PinStore_Auto]\nAufruf: TRO248", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO249" [label="TRO249\n[Vario]\nTRO 249 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO250" [label="TRO250\n[1Sep]\nTRO 250 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO251" [label="TRO251\n[PinStore_Auto]\nAufruf: TRO251", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO252" [label="TRO252\n[Vario]\nTRO 252 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO253" [label="TRO253\n[1Sep]\nTRO 253 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO254" [label="TRO254\n[PinStore_Auto]\nAufruf: TRO254", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO255" [label="TRO255\n[Vario]\nTRO 255 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO256" [label="TRO256\n[1Sep]\nTRO 256 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO257" [label="TRO257\n[PinStore_Auto]\nAufruf: TRO257", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH02.TRO258" [label="TRO258\n[Vario]\nTRO 258 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO259" [label="TRO259\n[1Sep]\nTRO 259 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO260" [label="TRO260\n[Vario]\nTRO 260 (Vario) + Scanner (BX2115)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO261" [label="TRO261\n[1Sep]\nTRO 261 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO262" [label="TRO262\n[Vario]\nTRO 262 (Vario) + Scanner (BX2109)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO263" [label="TRO263\n[1Sep]\nTRO 263 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO264" [label="TRO264\n[Vario]\nTRO 264 (Vario) + Scanner (BX2108)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO265" [label="TRO265\n[1Sep]\nTRO 265 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO266" [label="TRO266\n[1Sep]\nTRO 266(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO267" [label="TRO267\n[1Sep2Swi]\nTRO 267 (1Sep2Switch)+Scanner(BX2100)", shape=diamond, style=filled, fillcolor="#ffc060"];
"UH02.TRO268" [label="TRO268\n[1Sep2Swi]\nTRO 268 (1Sep2Switch)+Scanner(BX2101)", shape=diamond, style=filled, fillcolor="#ffc060"];
"UH02.TRO269" [label="TRO269\n[1Sep]\nTRO 269 (1Sep)+Scanner (BX2102)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO270" [label="TRO270\n[Vario]\nTRO 270 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO272" [label="TRO272\n[Vario]\nTRO 272 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH02.TRO274" [label="TRO274\n[1Sep]\nTRO 274 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.TRO275" [label="TRO275\n[1Sep]\nTRO 275 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH02.EXTERN_IN" [label="EXTERN\n(Zulauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH02.EXTERN_OUT" [label="EXTERN\n(Ablauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH02.TRO202" -> "UH02.TRO211" [label="JA1101_1 Dir2"];
"UH02.TRO213" -> "UH02.TRO211" [label="JA1101_1"];
"UH02.TRO211" -> "UH02.TRO208" [label="JA1101_2 Bypass", style=dashed];
"UH02.TRO210" -> "UH02.TRO208" [label="JA1101_2"];
"UH02.TRO201" -> "UH02.TRO202" [label="JA1102_1"];
"UH02.TRO202" -> "UH02.TRO214" [label="JA1102_2"];
"UH02.TRO216" -> "UH02.TRO214" [label="JA1102_2"];
"UH02.TRO214" -> "UH02.TRO217" [label="JA1102_3 Bypass", style=dashed];
"UH02.TRO219" -> "UH02.TRO217" [label="JA1102_3"];
"UH02.TRO208" -> "UH02.TRO203" [label="JA1103_1"];
"UH02.TRO211" -> "UH02.TRO204" [label="JA1103_2"];
"UH02.TRO203" -> "UH02.TRO204" [label="JA1103_2 Dir2"];
"UH02.TRO217" -> "UH02.TRO205" [label="JA1104_1"];
"UH02.TRO214" -> "UH02.TRO206" [label="JA1104_2"];
"UH02.TRO205" -> "UH02.TRO206" [label="JA1104_2"];
"UH02.TRO204" -> "UH02.TRO207" [label="JA1104_3 Dir2"];
"UH02.TRO206" -> "UH02.TRO207" [label="JA1104_3"];
"UH02.TRO203" -> "UH02.TRO209" [label="JA1105_1"];
"UH02.TRO209" -> "UH02.TRO210" [label="JA1105_2 Finger", style=dashed];
"UH02.TRO204" -> "UH02.TRO212" [label="JA1106_1"];
"UH02.TRO212" -> "UH02.TRO213" [label="JA1106_2 Finger", style=dashed];
"UH02.TRO206" -> "UH02.TRO215" [label="JA1107_1 Dir2"];
"UH02.TRO215" -> "UH02.TRO216" [label="JA1107_2 Finger", style=dashed];
"UH02.TRO205" -> "UH02.TRO218" [label="JA1108_1 Dir2"];
"UH02.TRO218" -> "UH02.TRO219" [label="JA1108_2 Finger", style=dashed];
"UH02.TRO200" -> "UH02.TRO201" [label="JA1109_2 Finger", style=dashed];
"UH02.TRO268" -> "UH02.TRO269" [label="JA1110_1 Dir3"];
"UH02.TRO261" -> "UH02.TRO274" [label="JA1110_2"];
"UH02.TRO269" -> "UH02.TRO274" [label="JA1110_2"];
"UH02.TRO263" -> "UH02.TRO266" [label="JA1110_3"];
"UH02.TRO274" -> "UH02.TRO266" [label="JA1110_3"];
"UH02.TRO265" -> "UH02.TRO267" [label="JA1110_4"];
"UH02.TRO266" -> "UH02.TRO267" [label="JA1110_4"];
"UH02.TRO267" -> "UH02.TRO275" [label="JA1110_5 Dir3"];
"UH02.TRO275" -> "UH02.TRO268" [label="JA1110_6"];
"UH02.TRO222" -> "UH02.TRO231" [label="JA1201_1 Dir2"];
"UH02.TRO233" -> "UH02.TRO231" [label="JA1201_1"];
"UH02.TRO231" -> "UH02.TRO228" [label="JA1201_2 Bypass", style=dashed];
"UH02.TRO230" -> "UH02.TRO228" [label="JA1201_2"];
"UH02.TRO221" -> "UH02.TRO222" [label="JA1202_1"];
"UH02.TRO222" -> "UH02.TRO234" [label="JA1202_2"];
"UH02.TRO236" -> "UH02.TRO234" [label="JA1202_2"];
"UH02.TRO234" -> "UH02.TRO237" [label="JA1202_3 Bypass", style=dashed];
"UH02.TRO239" -> "UH02.TRO237" [label="JA1202_3"];
"UH02.TRO228" -> "UH02.TRO223" [label="JA1203_1"];
"UH02.TRO231" -> "UH02.TRO224" [label="JA1203_2"];
"UH02.TRO223" -> "UH02.TRO224" [label="JA1203_2 Dir2"];
"UH02.TRO237" -> "UH02.TRO225" [label="JA1204_1"];
"UH02.TRO234" -> "UH02.TRO226" [label="JA1204_2"];
"UH02.TRO225" -> "UH02.TRO226" [label="JA1204_2"];
"UH02.TRO224" -> "UH02.TRO227" [label="JA1204_3 Dir2"];
"UH02.TRO226" -> "UH02.TRO227" [label="JA1204_3"];
"UH02.TRO223" -> "UH02.TRO229" [label="JA1205_1"];
"UH02.TRO229" -> "UH02.TRO230" [label="JA1205_2 Finger", style=dashed];
"UH02.TRO224" -> "UH02.TRO232" [label="JA1206_1"];
"UH02.TRO232" -> "UH02.TRO233" [label="JA1206_2 Finger", style=dashed];
"UH02.TRO226" -> "UH02.TRO235" [label="JA1207_1 Dir2"];
"UH02.TRO235" -> "UH02.TRO236" [label="JA1207_2 Finger", style=dashed];
"UH02.TRO225" -> "UH02.TRO238" [label="JA1208_1 Dir2"];
"UH02.TRO238" -> "UH02.TRO239" [label="JA1208_2 Finger", style=dashed];
"UH02.TRO220" -> "UH02.TRO221" [label="JA1209_2 Finger", style=dashed];
"UH02.TRO248" -> "UH02.TRO243" [label="JA1301_1"];
"UH02.TRO251" -> "UH02.TRO244" [label="JA1301_2"];
"UH02.TRO243" -> "UH02.TRO244" [label="JA1301_2"];
"UH02.TRO257" -> "UH02.TRO245" [label="JA1302_1"];
"UH02.TRO254" -> "UH02.TRO246" [label="JA1302_2"];
"UH02.TRO245" -> "UH02.TRO246" [label="JA1302_2 Dir2"];
"UH02.TRO242" -> "UH02.TRO251" [label="JA1303_1"];
"UH02.TRO253" -> "UH02.TRO251" [label="JA1303_1"];
"UH02.TRO251" -> "UH02.TRO248" [label="JA1303_2 Bypass", style=dashed];
"UH02.TRO250" -> "UH02.TRO248" [label="JA1303_2"];
"UH02.TRO241" -> "UH02.TRO242" [label="JA1304_1"];
"UH02.TRO242" -> "UH02.TRO254" [label="JA1304_2 Dir2"];
"UH02.TRO256" -> "UH02.TRO254" [label="JA1304_2"];
"UH02.TRO254" -> "UH02.TRO257" [label="JA1304_3 Bypass", style=dashed];
"UH02.TRO259" -> "UH02.TRO257" [label="JA1304_3"];
"UH02.TRO243" -> "UH02.TRO249" [label="JA1305_1 Dir2"];
"UH02.TRO249" -> "UH02.TRO250" [label="JA1305_2 Finger", style=dashed];
"UH02.TRO244" -> "UH02.TRO252" [label="JA1306_1 Dir2"];
"UH02.TRO252" -> "UH02.TRO253" [label="JA1306_2 Finger", style=dashed];
"UH02.TRO246" -> "UH02.TRO255" [label="JA1307_1"];
"UH02.TRO255" -> "UH02.TRO256" [label="JA1307_2 Finger", style=dashed];
"UH02.TRO245" -> "UH02.TRO258" [label="JA1308_1"];
"UH02.TRO258" -> "UH02.TRO259" [label="JA1308_2 Finger", style=dashed];
"UH02.TRO240" -> "UH02.TRO241" [label="JA1309_2 Finger", style=dashed];
"UH02.TRO264" -> "UH02.TRO265" [label="JA1401_2 Finger", style=dashed];
"UH02.TRO262" -> "UH02.TRO263" [label="JA1501_2 Finger", style=dashed];
"UH02.TRO260" -> "UH02.TRO261" [label="JA1601_2 Finger", style=dashed];
"UH02.EXTERN_IN" -> "UH02.TRO200" [label="JA1109_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO220" [label="JA1209_1", color="#999999"];
"UH02.TRO244" -> "UH02.EXTERN_OUT" [label="JA1302_3", color="#999999"];
"UH02.TRO246" -> "UH02.EXTERN_OUT" [label="JA1302_3", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO240" [label="JA1309_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO264" [label="JA1401_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO262" [label="JA1501_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO260" [label="JA1601_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO272" [label="JA1801_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO270" [label="JA4701_1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO208" [label="Storage1.1.1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO211" [label="Storage1.1.2", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO214" [label="Storage1.1.3", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO217" [label="Storage1.1.4", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO228" [label="Storage1.2.1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO231" [label="Storage1.2.2", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO234" [label="Storage1.2.3", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO237" [label="Storage1.2.4", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO248" [label="Storage1.3.1", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO251" [label="Storage1.3.2", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO254" [label="Storage1.3.3", color="#999999"];
"UH02.EXTERN_IN" -> "UH02.TRO257" [label="Storage1.3.4", color="#999999"];
"UH02.TRO207" -> "UH02.EXTERN_OUT" [label="IO_Device_UH02_TO_UH01.stCARRIER_INFO", color="#999999"];
"UH02.TRO227" -> "UH02.EXTERN_OUT" [label="IO_Device_UH02_TO_UH01.stCARRIER_INFO_1", color="#999999"];
"UH02.TRO247" -> "UH02.EXTERN_OUT" [label="IO_Device_UH02_TO_UH01.stCARRIER_INFO_2", color="#999999"];
}
subgraph "cluster_UH03" {
label = "UH03 (=A01+UH03-KF00)";
style = "rounded";
color = "#888888";
"UH03.TRO300" [label="TRO300\n[Vario]\nTRO 300 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO301" [label="TRO301\n[1Sep]\nTRO 301(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO302" [label="TRO302\n[Vario]\nTRO 302 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO303" [label="TRO303\n[Vario]\nTRO 303 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO304" [label="TRO304\n[1Sep]\nTRO 304(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO305" [label="TRO305\n[Vario]\nTRO 305 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO306" [label="TRO306\n[Vario]\nTRO 306 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO307" [label="TRO307\n[Vario]\nTRO 307 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO308" [label="TRO308\n[Vario]\nTRO 308 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO309" [label="TRO309\n[1Sep]\nTRO 309 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO310" [label="TRO310\n[1Sep]\nTRO 310 (1Sep)+Scanner (BX3102)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO311" [label="TRO311\n[1Sep]\nTRO 311 (1Sep)+Scanner(BX3101)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO312" [label="TRO312\n[1Sep]\nTRO 312 (1Sep)+Scanner(BX3100)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO313" [label="TRO313\n[1Sep1Swi]\nTRO 313 (1Sep1Switch)+Scanner(BX3103)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO314" [label="TRO314\n[1Sep1Swi]\nTRO 314 (1Sep1Switch)+Scanner(BX3104)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO315" [label="TRO315\n[1Sep]\nTRO 315 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO316" [label="TRO316\n[1Sep]\nTRO 316 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO317" [label="TRO317\n[1Sep1Swi]\nTRO 317 (1Sep1Switch)+Scanner(BX3105)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO318" [label="TRO318\n[1Sep1Swi]\nTRO 318 (1Sep1Switch) + Scanner(BX3106)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO319" [label="TRO319\n[1Sep1Swi]\nTRO 319 (1Sep1Switch) + Scanner (BX3111)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO320" [label="TRO320\n[1Sep1Swi]\nTRO 320 (1Sep1Switch) + Scanner(BX3112)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO321" [label="TRO321\n[1Sep1Swi]\nTRO 321 (1Sep1Switch) + Scanner(BX3114)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO322" [label="TRO322\n[1Sep1Swi]\nTRO 322 (1Sep1Switch)+Scanner(BX3113)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO323" [label="TRO323\n[1Sep]\nTRO 323 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO324" [label="TRO324\n[Vario]\nTRO 324 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO325" [label="TRO325\n[1Sep]\nTRO 325 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO326" [label="TRO326\n[1Sep]\nTRO 326 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO327" [label="TRO327\n[PinStore_Auto]\nAufruf: TRO327", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO328" [label="TRO328\n[Vario]\nTRO 328 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO329" [label="TRO329\n[1Sep]\nTRO 329 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO330" [label="TRO330\n[PinStore_Auto]\nAufruf: TRO330", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO331" [label="TRO331\n[Vario]\nTRO 331 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO332" [label="TRO332\n[1Sep]\nTRO 332 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO333" [label="TRO333\n[PinStore_Auto]\nAufruf: TRO333", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO334" [label="TRO334\n[Vario]\nTRO 334 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO335" [label="TRO335\n[1Sep]\nTRO 335 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO336" [label="TRO336\n[PinStore_Auto]\nAufruf: TRO336", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO337" [label="TRO337\n[Vario]\nTRO 337 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO338" [label="TRO338\n[1Sep]\nTRO 338 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO339" [label="TRO339\n[1Sep1Swi]\nTRO 339 (1Sep1Switch)+Scanner(BX3120)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO340" [label="TRO340\n[1Sep1Swi]\nTRO 340 (1Sep1Switch)+Scanner(BX3121)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO341" [label="TRO341\n[1Sep1Swi]\nTRO 341 (1Sep1Switch)+Scanner(BX3126)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO342" [label="TRO342\n[1Sep1Swi]\nTRO 342 (1Sep1Switch)+Scanner(BX3127)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO343" [label="TRO343\n[1Sep1Swi]\nTRO 343 (1Sep1Switch)+Scanner(BX3129)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO344" [label="TRO344\n[1Sep1Swi]\nTRO 344 (1Sep1Switch)+Scanner(BX3128)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO345" [label="TRO345\n[1Sep]\nTRO 345 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO346" [label="TRO346\n[Vario]\nTRO 346 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO347" [label="TRO347\n[1Sep]\nTRO 347 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO348" [label="TRO348\n[1Sep]\nTRO 348 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO349" [label="TRO349\n[PinStore_Auto]\nAufruf: TRO349", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO350" [label="TRO350\n[Vario]\nTRO 350 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO351" [label="TRO351\n[1Sep]\nTRO 351 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO352" [label="TRO352\n[PinStore_Auto]\nAufruf: TRO352", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO353" [label="TRO353\n[Vario]\nTRO 353 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO354" [label="TRO354\n[1Sep]\nTRO 354 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO355" [label="TRO355\n[PinStore_Auto]\nAufruf: TRO355", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO356" [label="TRO356\n[Vario]\nTRO 356 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO357" [label="TRO357\n[1Sep]\nTRO 357 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO358" [label="TRO358\n[PinStore_Auto]\nAufruf: TRO358", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO359" [label="TRO359\n[Vario]\nTRO 359 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO360" [label="TRO360\n[1Sep]\nTRO 360 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO361" [label="TRO361\n[1Sep1Swi]\nTRO 361 (1Sep1Switch)+Scanner(BX3131)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO362" [label="TRO362\n[1Sep1Swi]\nTRO 362 (1Sep1Switch)+Scanner(BX3132)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO363" [label="TRO363\n[1Sep1Swi]\nTRO 363 (1Sep1Switch)+Scanner(BX3137)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO364" [label="TRO364\n[1Sep1Swi]\nTRO 364 (1Sep1Switch)+Scanner(BX3138)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO365" [label="TRO365\n[1Sep1Swi]\nTRO 365 (1Sep1Switch)+Scanner(BX3140)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO366" [label="TRO366\n[1Sep1Swi]\nTRO 366 (1Sep1Switch)+Scanner(BX3139)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH03.TRO367" [label="TRO367\n[1Sep]\nTRO 367 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO368" [label="TRO368\n[Vario]\nTRO 368 (Vario, from Lvl1)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO369" [label="TRO369\n[1Sep]\nTRO 369 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO370" [label="TRO370\n[1Sep]\nTRO 370 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO371" [label="TRO371\n[PinStore_Auto]\nAufruf: TRO371", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO372" [label="TRO372\n[Vario]\nTRO 372 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO373" [label="TRO373\n[1Sep]\nTRO 373 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO374" [label="TRO374\n[PinStore_Auto]\nAufruf: TRO374", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO375" [label="TRO375\n[Vario]\nTRO 375 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO376" [label="TRO376\n[1Sep]\nTRO 376 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO377" [label="TRO377\n[PinStore_Auto]\nAufruf: TRO377", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO378" [label="TRO378\n[Vario]\nTRO 378 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO379" [label="TRO379\n[1Sep]\nTRO 379 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO380" [label="TRO380\n[PinStore_Auto]\nAufruf: TRO380", shape=box, style=filled, fillcolor="#f0f0f0"];
"UH03.TRO381" [label="TRO381\n[Vario]\nTRO 381 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH03.TRO382" [label="TRO382\n[1Sep]\nTRO 382 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.TRO386" [label="TRO386\n[1Sep]\nTRO 386 (1Sep) - kam später dazu", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH03.EXTERN_IN" [label="EXTERN\n(Zulauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH03.EXTERN_OUT" [label="EXTERN\n(Ablauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH03.TRO318" -> "UH03.TRO330" [label="JA2101_1 Dir2"];
"UH03.TRO332" -> "UH03.TRO330" [label="JA2101_1"];
"UH03.TRO330" -> "UH03.TRO327" [label="JA2101_2 Bypass", style=dashed];
"UH03.TRO329" -> "UH03.TRO327" [label="JA2101_2"];
"UH03.TRO315" -> "UH03.TRO317" [label="JA2102_1"];
"UH03.TRO317" -> "UH03.TRO318" [label="JA2102_2"];
"UH03.TRO318" -> "UH03.TRO333" [label="JA2102_3"];
"UH03.TRO335" -> "UH03.TRO333" [label="JA2102_3"];
"UH03.TRO333" -> "UH03.TRO336" [label="JA2102_4 Bypass", style=dashed];
"UH03.TRO338" -> "UH03.TRO336" [label="JA2102_4"];
"UH03.TRO327" -> "UH03.TRO319" [label="JA2103_1"];
"UH03.TRO330" -> "UH03.TRO320" [label="JA2103_2"];
"UH03.TRO319" -> "UH03.TRO320" [label="JA2103_2 Dir2"];
"UH03.TRO336" -> "UH03.TRO321" [label="JA2104_1"];
"UH03.TRO333" -> "UH03.TRO322" [label="JA2104_2"];
"UH03.TRO321" -> "UH03.TRO322" [label="JA2104_2"];
"UH03.TRO320" -> "UH03.TRO323" [label="JA2104_3 Dir2"];
"UH03.TRO322" -> "UH03.TRO323" [label="JA2104_3"];
"UH03.TRO323" -> "UH03.TRO326" [label="JA2104_4"];
"UH03.TRO325" -> "UH03.TRO326" [label="JA2104_4"];
"UH03.TRO319" -> "UH03.TRO328" [label="JA2105_1"];
"UH03.TRO328" -> "UH03.TRO329" [label="JA2105_2 Finger", style=dashed];
"UH03.TRO320" -> "UH03.TRO331" [label="JA2106_1"];
"UH03.TRO331" -> "UH03.TRO332" [label="JA2106_2 Finger", style=dashed];
"UH03.TRO322" -> "UH03.TRO334" [label="JA2107_1 Dir2"];
"UH03.TRO334" -> "UH03.TRO335" [label="JA2107_2 Finger", style=dashed];
"UH03.TRO321" -> "UH03.TRO337" [label="JA2108_1 Dir2"];
"UH03.TRO337" -> "UH03.TRO338" [label="JA2108_2 Finger", style=dashed];
"UH03.TRO324" -> "UH03.TRO325" [label="JA2109_2 Finger", style=dashed];
"UH03.TRO386" -> "UH03.TRO310" [label="JA2110_1"];
"UH03.TRO310" -> "UH03.TRO313" [label="JA2110_2"];
"UH03.TRO311" -> "UH03.TRO313" [label="JA2110_2"];
"UH03.TRO312" -> "UH03.TRO313" [label="JA2110_2"];
"UH03.TRO313" -> "UH03.TRO314" [label="JA2110_3 Dir2"];
"UH03.TRO314" -> "UH03.TRO315" [label="JA2110_4 Dir2"];
"UH03.TRO309" -> "UH03.TRO386" [label="JA2110_5"];
"UH03.TRO308" -> "UH03.TRO309" [label="JA2111_2 Finger", style=dashed];
"UH03.TRO313" -> "UH03.TRO316" [label="JA2112_1"];
"UH03.TRO340" -> "UH03.TRO352" [label="JA2201_1 Dir2"];
"UH03.TRO354" -> "UH03.TRO352" [label="JA2201_1"];
"UH03.TRO352" -> "UH03.TRO349" [label="JA2201_2 Bypass", style=dashed];
"UH03.TRO351" -> "UH03.TRO349" [label="JA2201_2"];
"UH03.TRO314" -> "UH03.TRO339" [label="JA2202_1"];
"UH03.TRO339" -> "UH03.TRO340" [label="JA2202_2"];
"UH03.TRO340" -> "UH03.TRO355" [label="JA2202_3"];
"UH03.TRO357" -> "UH03.TRO355" [label="JA2202_3"];
"UH03.TRO355" -> "UH03.TRO358" [label="JA2202_4 Bypass", style=dashed];
"UH03.TRO360" -> "UH03.TRO358" [label="JA2202_4"];
"UH03.TRO349" -> "UH03.TRO341" [label="JA2203_1"];
"UH03.TRO352" -> "UH03.TRO342" [label="JA2203_2"];
"UH03.TRO341" -> "UH03.TRO342" [label="JA2203_2 Dir2"];
"UH03.TRO358" -> "UH03.TRO343" [label="JA2204_1"];
"UH03.TRO355" -> "UH03.TRO344" [label="JA2204_2"];
"UH03.TRO343" -> "UH03.TRO344" [label="JA2204_2"];
"UH03.TRO342" -> "UH03.TRO345" [label="JA2204_3 Dir2"];
"UH03.TRO344" -> "UH03.TRO345" [label="JA2204_3"];
"UH03.TRO345" -> "UH03.TRO348" [label="JA2204_4"];
"UH03.TRO347" -> "UH03.TRO348" [label="JA2204_4"];
"UH03.TRO341" -> "UH03.TRO350" [label="JA2205_1"];
"UH03.TRO350" -> "UH03.TRO351" [label="JA2205_2 Finger", style=dashed];
"UH03.TRO342" -> "UH03.TRO353" [label="JA2206_1"];
"UH03.TRO353" -> "UH03.TRO354" [label="JA2206_2 Finger", style=dashed];
"UH03.TRO344" -> "UH03.TRO356" [label="JA2207_1 Dir2"];
"UH03.TRO356" -> "UH03.TRO357" [label="JA2207_2 Finger", style=dashed];
"UH03.TRO343" -> "UH03.TRO359" [label="JA2208_1 Dir2"];
"UH03.TRO359" -> "UH03.TRO360" [label="JA2208_2 Finger", style=dashed];
"UH03.TRO346" -> "UH03.TRO347" [label="JA2209_2 Finger", style=dashed];
"UH03.TRO371" -> "UH03.TRO363" [label="JA2301_1"];
"UH03.TRO374" -> "UH03.TRO364" [label="JA2301_2"];
"UH03.TRO363" -> "UH03.TRO364" [label="JA2301_2"];
"UH03.TRO380" -> "UH03.TRO365" [label="JA2302_1"];
"UH03.TRO377" -> "UH03.TRO366" [label="JA2302_2"];
"UH03.TRO365" -> "UH03.TRO366" [label="JA2302_2 Dir2"];
"UH03.TRO364" -> "UH03.TRO367" [label="JA2302_3"];
"UH03.TRO366" -> "UH03.TRO367" [label="JA2302_3 Dir2"];
"UH03.TRO367" -> "UH03.TRO370" [label="JA2302_4"];
"UH03.TRO369" -> "UH03.TRO370" [label="JA2302_4"];
"UH03.TRO362" -> "UH03.TRO374" [label="JA2303_1"];
"UH03.TRO376" -> "UH03.TRO374" [label="JA2303_1"];
"UH03.TRO374" -> "UH03.TRO371" [label="JA2303_2 Bypass", style=dashed];
"UH03.TRO373" -> "UH03.TRO371" [label="JA2303_2"];
"UH03.TRO316" -> "UH03.TRO361" [label="JA2304_1"];
"UH03.TRO361" -> "UH03.TRO362" [label="JA2304_2 Dir2"];
"UH03.TRO362" -> "UH03.TRO377" [label="JA2304_3 Dir2"];
"UH03.TRO379" -> "UH03.TRO377" [label="JA2304_3"];
"UH03.TRO377" -> "UH03.TRO380" [label="JA2304_4 Bypass", style=dashed];
"UH03.TRO382" -> "UH03.TRO380" [label="JA2304_4"];
"UH03.TRO363" -> "UH03.TRO372" [label="JA2305_1 Dir2"];
"UH03.TRO372" -> "UH03.TRO373" [label="JA2305_2 Finger", style=dashed];
"UH03.TRO364" -> "UH03.TRO375" [label="JA2306_1 Dir2"];
"UH03.TRO375" -> "UH03.TRO376" [label="JA2306_2 Finger", style=dashed];
"UH03.TRO366" -> "UH03.TRO378" [label="JA2307_1"];
"UH03.TRO378" -> "UH03.TRO379" [label="JA2307_2 Finger", style=dashed];
"UH03.TRO365" -> "UH03.TRO381" [label="JA2308_1"];
"UH03.TRO381" -> "UH03.TRO382" [label="JA2308_2 Finger", style=dashed];
"UH03.TRO368" -> "UH03.TRO369" [label="JA2309_2 Finger", style=dashed];
"UH03.TRO300" -> "UH03.TRO302" [label="JA4101_1 Finger", style=dashed];
"UH03.TRO301" -> "UH03.TRO302" [label="JA4101_1"];
"UH03.TRO302" -> "UH03.TRO311" [label="JA4101_2 Finger", style=dashed];
"UH03.TRO303" -> "UH03.TRO305" [label="JA4201_1 Finger", style=dashed];
"UH03.TRO304" -> "UH03.TRO305" [label="JA4201_1"];
"UH03.TRO305" -> "UH03.TRO312" [label="JA4201_2 Finger", style=dashed];
"UH03.TRO336" -> "UH03.EXTERN_OUT" [label="JA2102_5", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO324" [label="JA2109_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO308" [label="JA2111_1", color="#999999"];
"UH03.TRO358" -> "UH03.EXTERN_OUT" [label="JA2202_5", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO346" [label="JA2209_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO368" [label="JA2309_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO300" [label="JA4102_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO301" [label="JA4102_2", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO303" [label="JA4202_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO304" [label="JA4202_2", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO306" [label="JA4301_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO307" [label="JA4401_1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO327" [label="Storage2.1.1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO330" [label="Storage2.1.2", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO333" [label="Storage2.1.3", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO336" [label="Storage2.1.4", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO349" [label="Storage2.2.1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO352" [label="Storage2.2.2", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO355" [label="Storage2.2.3", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO358" [label="Storage2.2.4", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO371" [label="Storage2.3.1", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO374" [label="Storage2.3.2", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO377" [label="Storage2.3.3", color="#999999"];
"UH03.EXTERN_IN" -> "UH03.TRO380" [label="Storage2.3.4", color="#999999"];
"UH03.TRO326" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCARRIER_INFO", color="#999999"];
"UH03.TRO348" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCARRIER_INFO_1", color="#999999"];
"UH03.TRO370" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCARRIER_INFO_2", color="#999999"];
"UH03.TRO317" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCarrierL2toL1", color="#999999"];
"UH03.TRO339" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCarrierL2toL1_2", color="#999999"];
"UH03.TRO361" -> "UH03.EXTERN_OUT" [label="IO_Device_UH03_TO_UH01.stCarrierL2toL1_3", color="#999999"];
}
subgraph "cluster_UH04" {
label = "UH04 (=A01+UH04-KF00)";
style = "rounded";
color = "#888888";
"UH04.TRO400" [label="TRO400\n[Vario]\nTRO 400 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO401" [label="TRO401\n[Vario]\nTRO 401 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO402" [label="TRO402\n[1Sep]\nTRO 402 (1Sep) (Vor Brandschutztor)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO403" [label="TRO403\n[Vario]\nTRO 403 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO404" [label="TRO404\n[1Sep]\nTRO 404 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO405" [label="TRO405\n[1Sep1Swi]\nTRO 405 (1Sep1Switch) + Scanner (BX4100) + Behangskontrolle", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH04.TRO406" [label="TRO406\n[1Sep]\nTRO 406 (1Sep) + Scanner (BX4101)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO407" [label="TRO407\n[1Sep1Swi]\nTRO 407 (1Sep1Switch) + Scanner (BX4102)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH04.TRO408" [label="TRO408\n[Vario]\nTRO 408 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO409" [label="TRO409\n[1Sep]\nTRO 409 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO410" [label="TRO410\n[1Sep1Swi]\nTRO 410 (1Sep1Switch) + Scanner (BX4104)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH04.TRO411" [label="TRO411\n[Vario]\nTRO 411 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO412" [label="TRO412\n[1Sep]\nTRO 412 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO413" [label="TRO413\n[1Sep1Swi]\nTRO 413(1Sep1Switch)+Scanner(BX4106)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH04.TRO414" [label="TRO414\n[Vario]\nTRO 414 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO415" [label="TRO415\n[1Sep]\nTRO 415 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO416" [label="TRO416\n[1Sep]\nTRO 416 (1Sep) + Beladeprüfung", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO417" [label="TRO417\n[1Sep]\nTRO 417 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.TRO418" [label="TRO418\n[Vario]\nTRO 418 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO420" [label="TRO420\n[Vario]\nTRO 420 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH04.TRO421" [label="TRO421\n[Vario_workStation]\nTRO 421 (Vario)", shape=parallelogram, style=filled, fillcolor="#c0f0f0"];
"UH04.TRO422" [label="TRO422\n[Vario_workStation]\nTRO 422 (Vario)", shape=parallelogram, style=filled, fillcolor="#c0f0f0"];
"UH04.TRO423" [label="TRO423\n[Vario_workStation]\nTRO 423 (Vario)", shape=parallelogram, style=filled, fillcolor="#c0f0f0"];
"UH04.TRO424" [label="TRO424\n[1Sep]\nTRO 424 (1Sep) vor Behangskontrolle", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH04.EXTERN_IN" [label="EXTERN\n(Zulauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH04.EXTERN_OUT" [label="EXTERN\n(Ablauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH04.TRO400" -> "UH04.TRO401" [label="JA4001_1 Finger", style=dashed];
"UH04.TRO401" -> "UH04.TRO402" [label="JA4001_2 Finger", style=dashed];
"UH04.TRO402" -> "UH04.TRO403" [label="JA4002_1"];
"UH04.TRO403" -> "UH04.TRO404" [label="JA4002_2 Finger", style=dashed];
"UH04.TRO424" -> "UH04.TRO405" [label="JA4003_1"];
"UH04.TRO405" -> "UH04.TRO406" [label="JA4003_2 Dir2"];
"UH04.TRO406" -> "UH04.TRO407" [label="JA4003_3"];
"UH04.TRO407" -> "UH04.TRO410" [label="JA4003_4 Dir2"];
"UH04.TRO409" -> "UH04.TRO410" [label="JA4003_4"];
"UH04.TRO410" -> "UH04.TRO413" [label="JA4003_5 Dir2"];
"UH04.TRO412" -> "UH04.TRO413" [label="JA4003_5"];
"UH04.TRO413" -> "UH04.TRO416" [label="JA4003_6 Dir2"];
"UH04.TRO415" -> "UH04.TRO416" [label="JA4003_6"];
"UH04.TRO416" -> "UH04.TRO417" [label="JA4003_7"];
"UH04.TRO404" -> "UH04.TRO424" [label="JA4003_8"];
"UH04.TRO417" -> "UH04.TRO424" [label="JA4003_8"];
"UH04.TRO407" -> "UH04.TRO408" [label="JA4004_1"];
"UH04.TRO408" -> "UH04.TRO421" [label="JA4004_2 Finger", style=dashed];
"UH04.TRO410" -> "UH04.TRO411" [label="JA4006_1"];
"UH04.TRO411" -> "UH04.TRO422" [label="JA4006_2 Finger", style=dashed];
"UH04.TRO422" -> "UH04.TRO412" [label="JA4007_1 Finger", style=dashed];
"UH04.TRO413" -> "UH04.TRO414" [label="JA4008_1"];
"UH04.TRO414" -> "UH04.TRO423" [label="JA4008_2 Finger", style=dashed];
"UH04.TRO423" -> "UH04.TRO415" [label="JA4009_1 Finger", style=dashed];
"UH04.TRO418" -> "UH04.TRO420" [label="JA4011_1 Finger", style=dashed];
"UH04.EXTERN_IN" -> "UH04.TRO400" [label="JA4000_1", color="#999999"];
"UH04.TRO421" -> "UH04.EXTERN_OUT" [label="JA4005_1", color="#999999"];
"UH04.EXTERN_IN" -> "UH04.TRO418" [label="JA4010_1", color="#999999"];
}
subgraph "cluster_UH05" {
label = "UH05 (=A01+UH05-KF00)";
style = "rounded";
color = "#888888";
"UH05.TRO500" [label="TRO500\n[Vario]\nTRO 500 (Vario) - Stand: Vorbereitet für Umbau!", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO501" [label="TRO501\n[1Sep]\nTRO 501 (1Sep) + Scanner (BX5101)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO502" [label="TRO502\n[Vario]\nTRO 502 (Vario) - Stand: Vorbereitet für Umbau!", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO503" [label="TRO503\n[1Sep]\nTRO 503 (1Sep)+ Scanner (BX5100)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO504" [label="TRO504\n[1Sep]\nTRO 504 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO505" [label="TRO505\n[1Sep1Swi]\nTRO 505 (1Sep1Switch) + Scanner (BX5102)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO506" [label="TRO506\n[Vario]\nTRO 506 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO507" [label="TRO507\n[1Sep]\nTRO 507 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO508" [label="TRO508\n[Vario]\nTRO 508 (Vario)+Scanner(BX5103)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO509" [label="TRO509\n[1Sep]\nTRO 509 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO510" [label="TRO510\n[1Sep1Swi]\nTRO 510 (1Sep1Switch) + Scanner (BX5104)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO511" [label="TRO511\n[1Sep]\nTRO 511 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO512" [label="TRO512\n[Vario]\nTRO 512 (Vario)+Scanner(BX5105)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO513" [label="TRO513\n[1Sep]\nTRO 513 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO514" [label="TRO514\n[1Sep1Swi]\nTRO 514 (1Sep1Switch) + Scanner (BX5106)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO515" [label="TRO515\n[1Sep]\nTRO 515 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO516" [label="TRO516\n[Vario]\nTRO 516(Vario)+Scanner(BX5107)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO517" [label="TRO517\n[1Sep]\nTRO 517 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO518" [label="TRO518\n[1Sep1Swi]\nTRO 518 (1Sep1Switch) + Scanner (BX5108)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO519" [label="TRO519\n[1Sep]\nTRO 519 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO520" [label="TRO520\n[Vario]\nTRO 520 (Vario)+Scanner(BX5109)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO521" [label="TRO521\n[1Sep]\nTRO 521(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO522" [label="TRO522\n[1Sep1Swi]\nTRO 522 (1Sep1Switch) + Scanner (BX5110)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO523" [label="TRO523\n[1Sep]\nTRO 523 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO524" [label="TRO524\n[Vario]\nTRO 524 (Vario)+Scanner(BX5231)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO525" [label="TRO525\n[1Sep]\nTRO 525(1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO526" [label="TRO526\n[1Sep]\nTRO 526 (1Sep) + Scanner (BX5112)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO527" [label="TRO527\n[1Sep1Swi]\nTRO 527 (1Sep1Switch)", shape=diamond, style=filled, fillcolor="#ffe4a0"];
"UH05.TRO528" [label="TRO528\n[1Sep]\nTRO 528 (1Sep)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO529" [label="TRO529\n[1Sep]\nTRO 529 (1Sep) + Scanner (BX5113)", shape=box, style=filled, fillcolor="#d4e8ff"];
"UH05.TRO530" [label="TRO530\n[Vario]\nTRO 530 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.TRO531" [label="TRO531\n[Vario]\nTRO 531 (Vario)", shape=parallelogram, style=filled, fillcolor="#e8d4f0"];
"UH05.EXTERN_IN" [label="EXTERN\n(Zulauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH05.EXTERN_OUT" [label="EXTERN\n(Ablauf)", shape=ellipse, style="filled,dashed", fillcolor="#f8f8f8"];
"UH05.TRO502" -> "UH05.TRO531" [label="JA5000_2 Finger", style=dashed];
"UH05.TRO531" -> "UH05.TRO503" [label="JA5000_3 Finger", style=dashed];
"UH05.TRO500" -> "UH05.TRO530" [label="JA5001_2 Finger", style=dashed];
"UH05.TRO530" -> "UH05.TRO501" [label="JA5001_3 Finger", style=dashed];
"UH05.TRO501" -> "UH05.TRO504" [label="JA5002_1"];
"UH05.TRO503" -> "UH05.TRO504" [label="JA5002_1"];
"UH05.TRO529" -> "UH05.TRO504" [label="JA5002_1"];
"UH05.TRO528" -> "UH05.TRO529" [label="JA5002_10"];
"UH05.TRO504" -> "UH05.TRO505" [label="JA5002_2"];
"UH05.TRO505" -> "UH05.TRO510" [label="JA5002_3 Dir2"];
"UH05.TRO509" -> "UH05.TRO510" [label="JA5002_3"];
"UH05.TRO510" -> "UH05.TRO514" [label="JA5002_4 Dir2"];
"UH05.TRO513" -> "UH05.TRO514" [label="JA5002_4"];
"UH05.TRO514" -> "UH05.TRO518" [label="JA5002_5 Dir2"];
"UH05.TRO517" -> "UH05.TRO518" [label="JA5002_5"];
"UH05.TRO518" -> "UH05.TRO522" [label="JA5002_6 Dir2"];
"UH05.TRO521" -> "UH05.TRO522" [label="JA5002_6"];
"UH05.TRO522" -> "UH05.TRO526" [label="JA5002_7 Dir2"];
"UH05.TRO525" -> "UH05.TRO526" [label="JA5002_7"];
"UH05.TRO526" -> "UH05.TRO527" [label="JA5002_8"];
"UH05.TRO527" -> "UH05.TRO528" [label="JA5002_9 Dir2"];
"UH05.TRO505" -> "UH05.TRO506" [label="JA5003_1"];
"UH05.TRO506" -> "UH05.TRO507" [label="JA5003_2 Finger", style=dashed];
"UH05.TRO507" -> "UH05.TRO508" [label="JA5004_1"];
"UH05.TRO510" -> "UH05.TRO511" [label="JA5005_1"];
"UH05.TRO511" -> "UH05.TRO512" [label="JA5005_2"];
"UH05.TRO514" -> "UH05.TRO515" [label="JA5006_1"];
"UH05.TRO515" -> "UH05.TRO516" [label="JA5006_2"];
"UH05.TRO518" -> "UH05.TRO519" [label="JA5007_1"];
"UH05.TRO519" -> "UH05.TRO520" [label="JA5007_2"];
"UH05.TRO522" -> "UH05.TRO523" [label="JA5008_1"];
"UH05.TRO523" -> "UH05.TRO524" [label="JA5008_2"];
"UH05.EXTERN_IN" -> "UH05.TRO502" [label="JA5000_1", color="#999999"];
"UH05.EXTERN_IN" -> "UH05.TRO500" [label="JA5001_1", color="#999999"];
"UH05.TRO508" -> "UH05.EXTERN_OUT" [label="JA5004_2", color="#999999"];
"UH05.TRO512" -> "UH05.EXTERN_OUT" [label="JA5005_3", color="#999999"];
"UH05.TRO516" -> "UH05.EXTERN_OUT" [label="JA5006_3", color="#999999"];
"UH05.TRO520" -> "UH05.EXTERN_OUT" [label="JA5007_3", color="#999999"];
"UH05.TRO524" -> "UH05.EXTERN_OUT" [label="JA5008_3", color="#999999"];
}
}
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 331 KiB

+259
View File
@@ -0,0 +1,259 @@
# -*- coding: utf-8 -*-
"""create_dxf.py — erzeugt eine DXF-Uebersicht aller TROs mit ihren Sensoren.
Quelle sind die vom Skeleton-Generator erzeugten results/skeleton_UH0x.json
(Sensor-Positionen aus der Positions-JSON, Einheiten mit IO-Zuordnung).
Je TRO-Einheit wird ein Block "TRO_BOX" (Rechteck + eingerahmter Name)
am Schwerpunkt seiner Sensoren eingefuegt; die TRO-Namen entsprechen der
Nummerierung des SCL-Grundgeruests (create_skel.py). Jeder Sensor wird als
Block "SENSOR" (Kreis + Name) an seiner x/y-Position eingefuegt und per
Linie mit seinem TRO verbunden.
Block-Attribute (fuer Identifikation im CAD, teils unsichtbar):
TRO_BOX: NAME, FBTYPE (sichtbar) — UNIT, PLC, AREAS, SENSORS, IO (unsichtbar)
SENSOR: NAME (sichtbar) — ROLE, TRO, PLC (unsichtbar)
Pfade ueber Umgebungsvariablen aus bin\\setenv.bat:
PV_RESULTS Eingabe (skeleton_UH0x.json) und Ausgabe (DXF)
Mit --colors werden die TRO-Kaesten zusaetzlich nach FB-Typ eingefaerbt
(SOLID-Fuellung auf Layer TRO_FUELL, gleiche Palette wie im Topologie-
Graphen doc/TRO_Graph_UH01-UH05.dot); ohne den Schalter bleiben die
Kaesten ungefuellt.
Aufruf: bin\\create_dxf.bat [--uh 1..5] [--out DATEI.dxf] [--colors]
"""
import argparse
import json
import os
import sys
from pathlib import Path
try:
import ezdxf
from ezdxf.enums import TextEntityAlignment
except ImportError:
sys.exit("ezdxf fehlt — bitte bin\\install_py.bat ausfuehren.")
# ============================================================================
# GLOBALE DEFINITIONEN (Geometrie in mm, Layer, Farben)
# ============================================================================
OUT_NAME = "ST500592_TROs.dxf"
BOX_W = 2500 # TRO-Kasten Breite
BOX_H = 1200 # TRO-Kasten Hoehe
BOX_TEXT_H = 380 # Texthoehe TRO-Name
BOX_SUB_H = 220 # Texthoehe FB-Typ
SEN_RADIUS = 120 # Sensor-Kreisradius
SEN_TEXT_H = 150 # Texthoehe Sensorname
ATTR_MAXLEN = 250 # DXF-Attributwerte kuerzen
LAYERS = {
"TRO": 7, # Kaesten (Farbe je PLC am Insert)
"TRO_FUELL": 7, # Kasten-Fuellung (Truecolor je FB-Typ)
"SENSOR": 8, # Sensoren mit TRO-Zuordnung
"SENSOR_FREI": 9, # Sensoren ohne Einheit (nur Position)
"VERBINDUNG": 253, # Linien Sensor -> TRO
}
#: ACI-Farbe je Steuerung
PLC_COLOR = {1: 1, 2: 2, 3: 3, 4: 4, 5: 6} # rot, gelb, gruen, cyan, magenta
#: Fuellfarbe je FB-Typ (Truecolor) — gleiche Palette wie im
#: Topologie-Graphen doc/TRO_Graph_UH01-UH05.dot
TYPE_COLOR = {
"FB_ILS_MTRO_1Sep": 0xD4E8FF, # hellblau
"FB_ILS_MTRO_1Sep_SSCC": 0xFFD4D4, # rot
"FB_ILS_MTRO_1Sep1Swi": 0xFFE4A0, # gelb (Weiche)
"FB_ILS_MTRO_1Sep2Swi": 0xFFC060, # orange (Weiche)
"FB_ILS_MTRO_2Sep1Swi": 0xFFE4A0, # gelb (Weiche)
"FB_ILS_MTRO_Vario": 0xE8D4F0, # violett
"FB_ILS_MTRO_Vario_workStation": 0xC0F0F0, # tuerkis
"FB_ILS_MTRO_PinStore_Auto": 0xD4F0D4, # gruen (Lager)
"FB_EmptyCarrBuffer": 0xD4F0D4, # gruen (Puffer)
"FB_Conveyor": 0xF0F0F0, # grau
}
TYPE_COLOR_DEFAULT = 0xF0F0F0 # grau (Sonstige/UNBEKANNT)
def type_color(fbtype):
for key in sorted(TYPE_COLOR, key=len, reverse=True):
if fbtype.startswith(key):
return TYPE_COLOR[key]
return TYPE_COLOR_DEFAULT
# ============================================================================
def project_paths():
root = Path(os.environ.get("PROJECT", Path(__file__).resolve().parent.parent))
results = Path(os.environ.get("PV_RESULTS", root / "results"))
return results
def build_blocks(doc):
"""Blockdefinitionen TRO_BOX und SENSOR anlegen."""
tro = doc.blocks.new(name="TRO_BOX")
w2, h2 = BOX_W / 2, BOX_H / 2
tro.add_lwpolyline([(-w2, -h2), (w2, -h2), (w2, h2), (-w2, h2)],
close=True)
att = tro.add_attdef("NAME", height=BOX_TEXT_H)
att.set_placement((0, BOX_H * 0.12), align=TextEntityAlignment.MIDDLE_CENTER)
att = tro.add_attdef("FBTYPE", height=BOX_SUB_H)
att.set_placement((0, -BOX_H * 0.28), align=TextEntityAlignment.MIDDLE_CENTER)
for tag in ("UNIT", "PLC", "AREAS", "SENSORS", "IO"):
att = tro.add_attdef(tag, height=BOX_SUB_H)
att.set_placement((0, 0), align=TextEntityAlignment.MIDDLE_CENTER)
att.dxf.invisible = 1
sen = doc.blocks.new(name="SENSOR")
sen.add_circle((0, 0), SEN_RADIUS)
att = sen.add_attdef("NAME", height=SEN_TEXT_H)
att.set_placement((SEN_RADIUS * 1.4, SEN_RADIUS * 1.2),
align=TextEntityAlignment.BOTTOM_LEFT)
for tag in ("ROLE", "TRO", "PLC"):
att = sen.add_attdef(tag, height=SEN_TEXT_H)
att.set_placement((0, 0), align=TextEntityAlignment.MIDDLE_CENTER)
att.dxf.invisible = 1
def instance_names(skel, uh_digit):
"""TRO-Instanznamen je Einheit — identische Nummerierung wie
render_scl() in create_skel.py (Conveyor verbraucht eine lfd. Nummer)."""
names = {}
seq = 0
for u in skel["units"]:
if u["fbType"] == "UNBEKANNT":
names[u["unit"]] = u["unit"] # kein TRO-Name vergeben
continue
seq += 1
if u["fbType"] == "FB_Conveyor":
names[u["unit"]] = f"fbConveyor{u['unit'][1:]}"
else:
names[u["unit"]] = f"TRO{uh_digit}{seq:02d}"
return names
def cut(s):
return s if len(s) <= ATTR_MAXLEN else s[:ATTR_MAXLEN - 3] + "..."
def draw_plc(msp, skel, n, colors=False):
"""Alle Einheiten + Sensoren einer Steuerung zeichnen."""
uh = f"UH0{n}"
color = PLC_COLOR[n]
names = instance_names(skel, str(n))
# Sensoren je Einheit sammeln (nur mit Position)
unit_sensors = {}
free_sensors = []
for s in skel["sensors"]:
if not s.get("pos"):
continue
if s.get("unit"):
unit_sensors.setdefault(s["unit"], []).append(s)
else:
free_sensors.append(s)
boxes = lines = 0
for u in skel["units"]:
sens = unit_sensors.get(u["unit"], [])
if sens: # Schwerpunkt der Sensoren
cx = sum(s["pos"][0] for s in sens) / len(sens)
cy = sum(s["pos"][1] for s in sens) / len(sens)
elif u.get("pos"):
cx, cy = u["pos"][0], u["pos"][1]
else:
print(f" {uh} {u['unit']}: keine Position — uebersprungen")
continue
io_txt = ";".join(f"{role}={','.join(v)}"
for role, v in sorted(u["io"].items()))
if colors:
# Fuellung in FB-Typ-Farbe (vor dem Insert -> liegt dahinter)
w2, h2 = BOX_W / 2, BOX_H / 2
msp.add_solid(
[(cx - w2, cy - h2), (cx + w2, cy - h2),
(cx - w2, cy + h2), (cx + w2, cy + h2)],
dxfattribs={"layer": "TRO_FUELL",
"true_color": type_color(u["fbType"])})
blk = msp.add_blockref("TRO_BOX", (cx, cy),
dxfattribs={"layer": "TRO", "color": color})
blk.add_auto_attribs({
"NAME": names[u["unit"]],
"FBTYPE": u["fbType"].replace("FB_ILS_MTRO_", "").replace("FB_", ""),
"UNIT": u["unit"],
"PLC": uh,
"AREAS": cut(",".join(a["id"] for a in u["areas"])),
"SENSORS": cut(",".join(s["id"] for s in sens)),
"IO": cut(io_txt),
})
boxes += 1
for s in sens:
sx, sy = s["pos"][0], s["pos"][1]
sb = msp.add_blockref("SENSOR", (sx, sy),
dxfattribs={"layer": "SENSOR",
"color": color})
sb.add_auto_attribs({
"NAME": s["id"],
"ROLE": s.get("role") or "",
"TRO": names[u["unit"]],
"PLC": uh,
})
msp.add_line((sx, sy), (cx, cy),
dxfattribs={"layer": "VERBINDUNG"})
lines += 1
for s in free_sensors:
sb = msp.add_blockref("SENSOR", (s["pos"][0], s["pos"][1]),
dxfattribs={"layer": "SENSOR_FREI"})
sb.add_auto_attribs({
"NAME": s["id"],
"ROLE": s.get("role") or "",
"TRO": "",
"PLC": uh,
})
print(f" {uh}: {boxes} TRO-Kaesten, {lines} Sensor-Verbindungen, "
f"{len(free_sensors)} freie Sensoren")
def main():
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("--uh", type=int, choices=range(1, 6),
help="nur diese Steuerung (1..5), sonst alle")
ap.add_argument("--out", default=OUT_NAME,
help=f"Ausgabedatei (Default: {OUT_NAME})")
ap.add_argument("--colors", action="store_true",
help="TRO-Kaesten nach FB-Typ einfaerben "
"(Palette wie doc/TRO_Graph_UH01-UH05.dot)")
args = ap.parse_args()
results = project_paths()
doc = ezdxf.new("R2010", setup=True)
doc.header["$INSUNITS"] = 4 # Millimeter
for name, aci in LAYERS.items():
doc.layers.add(name, color=aci)
build_blocks(doc)
msp = doc.modelspace()
print("Erzeuge DXF aus Skeleton-Dateien:")
for n in ([args.uh] if args.uh else range(1, 6)):
skel_file = results / f"skeleton_UH0{n}.json"
if not skel_file.exists():
sys.exit(f"FEHLER: {skel_file} fehlt — zuerst bin\\create_skel.bat "
f"ausfuehren.")
skel = json.loads(skel_file.read_text(encoding="utf-8"))
draw_plc(msp, skel, n, colors=args.colors)
out = results / args.out
doc.saveas(out)
print(f"DXF geschrieben: {out}")
if __name__ == "__main__":
main()
+808
View File
@@ -0,0 +1,808 @@
# -*- coding: utf-8 -*-
"""create_skel.py — Skeleton-Generator fuer die JSON-Zwischendatei und ein
SCL-Grundgeruest, abgeleitet aus den Eingabelisten in data/.
Datenquellen (Pfade ueber Umgebungsvariablen aus bin\\setenv.bat):
PV_DATA Ordner mit den Eingabelisten
ST500592_10_5-14_ILS-<n>_TIA.xlsx (PLC Tags + Constants)
ST500592_10_5-9_ILS_positions.json (Positionen, VERW, mappings)
PV_RESULTS Zielordner fuer die erzeugten Dateien
PV_CFG Ordner mit den Konfigurationsdateien, geladen beim Start:
skel.cfg (JSON) Dateinamen, Vokabular, FB-Typ-Regeln
skel_scl.cfg (INI-Style) SCL-Templates, zeilenweise
lesbar; jede [sektion] = ein Template,
Inhalt verbatim (Einrueckung/Leerzeilen
gehoeren zum Template)
Fehlende Dateien fallen auf die eingebauten Defaults zurueck.
Erzeugt je Steuerung UH01..UH05:
skeleton_UH0x.json JSON-Zwischendatei-Skeleton (Kap. 14 im
Json_Layout-Konzept.md)
FB_Main_skel_UH0x.scl SCL-Grundgeruest (VAR-Deklaration + Aufrufe)
FB_CallSensors_skel_UH0x.scl Sensor-Aufrufe
Mit --con-ini bzw. --con-json wird zusaetzlich die TRO-Topologie
(Routing / Zusammenhalt, Format hmf-connect-v1) aus data\\connect.ini
bzw. data\\connect.json eingelesen und als "topology"-Abschnitt in die
Skeleton-JSONs uebernommen (Verbindungen, offene Enden und je TRO die
aufgeloeste JamArea-Verdrahtung).
Aufruf: bin\\create_skel.bat [--uh 1..5] [--no-scl] [--con-ini | --con-json]
"""
import argparse
import configparser
import json
import os
import re
import sys
from collections import defaultdict
from pathlib import Path
try:
import openpyxl
except ImportError:
sys.exit("openpyxl fehlt — bitte bin\\install_py.bat ausfuehren.")
# ============================================================================
# GLOBALE DEFINITIONEN (eingebaute Defaults)
# Alle folgenden Bloecke sind bewusst als Modul-Konstanten definiert. Sie
# sind zugleich der Inhalt von cfg\\skel.cfg (JSON) — load_cfg() liest diese
# Datei aus PV_CFG beim Programmstart und ersetzt die Defaults hier 1:1
# durch ihren Inhalt. Ohne skel.cfg (z.B. Erststart, Datei geloescht) bleiben
# die Defaults unten aktiv, das Skript funktioniert also auch dann.
# ============================================================================
#: Dateinamen der Eingabelisten ({n} = ILS-Nummer 1..5)
FILES = {
"tia_xlsx": "ST500592_10_5-14_ILS-{n}_TIA.xlsx",
"positions_json": "ST500592_10_5-9_ILS_positions.json",
# Routing / Zusammenhalt der TROs (hmf-connect-v1, extrahiert aus
# doc/TRO_Graph_UH01-UH05.dot) — fuer die kuenftige Topologie-Auswertung
"connect_json": "connect.json",
"connect_ini": "connect.ini",
}
#: VERW-Vokabular (Positions-JSON) -> Signalrolle
#: (siehe doc/EA-Listen-Analyse.md, Abschnitt "Verwendung von Positionen")
VERW_ROLES = {
"In sep": "sensorInSep",
"Sep": "stopperOutput",
"Jam detector": "sensorJam",
"Jam detector (LP)": "sensorJam",
"jam detector (LP)": "sensorJam",
"ES branch": "switchOutput",
"ES brunch": "switchOutput", # Schreibvariante in den Daten
"conveyor full": "sensorConvFull",
"MT in Position": "sensorCarrInPos",
"MT in position": "sensorCarrInPos",
"Finger in position": "sensorFinger",
"Finger in Position": "sensorFinger",
"PIN query": "sensorPinQuery",
"Rad dreht ": "sensorWheel",
"Rad dreht": "sensorWheel",
}
#: Fallback: Regex auf den Kommentartext -> Signalrolle
#: (falls kein VERW vorliegt, z.B. Signal nicht im Positions-JSON)
COMMENT_ROLES = [
(r"^in Separator", "sensorInSep"),
(r"^Separator", "stopperOutput"),
(r"Stausensor|Staumelder", "sensorJam"),
(r"AE Abzweig", "switchOutput"),
(r"F.?rderer voll", "sensorConvFull"),
(r"MT in Position", "sensorCarrInPos"),
(r"Mitnehmerfinger|Finger in", "sensorFinger"),
(r"Pin Abfrage|Pr.?fung MT Pos", "sensorPinQuery"),
(r"Rad dreht", "sensorWheel"),
(r"^Motor ", "motorOutput"),
(r"MSS ausgel", "motorProtection"),
]
#: Regeln zur FB-Typ-Bestimmung je Einheit.
#: Reihenfolge = Prioritaet; "roles" muessen alle vorhanden sein.
FBTYPE_RULES = [
{"roles": ["sensorPinQuery"], "fbType": "FB_ILS_MTRO_PinStore_Auto"},
{"roles": ["sensorFinger"], "fbType": "FB_ILS_MTRO_Vario"},
{"roles": ["sensorCarrInPos"], "fbType": "FB_ILS_MTRO_Vario"},
{"roles": ["switchOutput", "sensorInSep"], "fbType": "FB_ILS_MTRO_1Sep1Swi"},
{"roles": ["sensorInSep"], "fbType": "FB_ILS_MTRO_1Sep"},
{"roles": ["motorOutput"], "fbType": "FB_Conveyor"},
{"roles": ["motorProtection"], "fbType": "FB_Conveyor"},
]
#: Erkennung der Foerdertechnik-Einheit (M-Nummer) im Kommentartext
UNIT_RE = r"\b(KR|CV)[-\s]{0,2}(P?[MK]\d{4}(?:_[A-Z])?)\b"
#: Erkennung der Bereichsgruppen im Kommentartext
AREA_RES = [
(r"Block ?(\d\.\d(?:\.\d)?)", "pinStoreBlock", "Block {m}"),
(r"\bLS ?(\d)\b", "loadingStation", "LS{m}"),
(r"\bWS ?(\d\.\d)\b", "workStation", "WS{m}"),
(r"\bUZ(\d{4})\b", "safetyZone", "UZ{m}"),
]
# ----------------------------------------------------------------------------
# SCL-Templates: die "ueblichen Codebloecke" fuer die Aufrufe in FB_Main /
# FB_CallSensors. Platzhalter im str.format()-Stil.
# Eingebaute Defaults — die gepflegte, zeilenweise lesbare Fassung liegt in
# cfg\skel_scl.cfg (INI-Style) und ueberschreibt diese beim Programmstart.
# ----------------------------------------------------------------------------
SCL_TEMPLATES = {
# VAR-Deklaration einer Instanz
"var_decl": ' {inst} : "{fbtype}"; // {comment}\n',
# Aufruf FB_ILS_MTRO_1Sep (Standard-Separator)
"call_1sep": """\
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tJam := "TimeForSepJam";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInSenJam2 := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.stData,
xOutStopper1 => "{stopper}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
""",
# Aufruf FB_ILS_MTRO_1Sep1Swi (Separator + Weiche)
"call_1sep1swi": """\
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.Settings.tTrailingTime := T#100ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tHandlingTime := T#50ms; // TODO Timing
#{inst}.stInSeparator1.Settings.tJam := "TimeForSepJam";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInSenJam2 := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}.stInSwitch1.Settings.nSwitchNo := "cSwi{tro_no}.1";
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun1 := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie (Dir1)
stInOutJamExit2 := "DB_JamArea{tro_no}".stJam{tro_no}_2.stData,
arInOutJamExit3 := "DB_JamArea{tro_no}".stJam{tro_no}_3.arCarrier, // TODO Topologie (Dir2)
stInOutJamExit3 := "DB_JamArea{tro_no}".stJam{tro_no}_3.stData,
xOutStopper1 => "{stopper}",
xOutSw1ExTo3 => "{switch_out}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
""",
# Aufruf FB_ILS_MTRO_Vario (Kettenfoerderer)
"call_vario": """\
REGION {inst} ({shorttype}) — {comment}
#{inst}.stInSeparator1.Settings.nSeparatorNo := "cSep{tro_no}.1";
#{inst}.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#{inst}.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cIn{sen_in_sep}"];
#{inst}.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cIn{sen_carr_in_pos}"];
#{inst}.stInVario.stSenFinger := "DB_Inputs".Sensors["cIn{sen_finger}"];
#{inst}.stInVario.stSenJam := "DB_Inputs".Sensors["cIn{sen_jam}"];
#{inst}(nInMainTroNo := "cMainTro{tro_no}",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea{tro_no}".stJam{tro_no}_1.stData,
arInOutJamFinger := "DB_JamArea{tro_no}".stJam{tro_no}_2.arCarrier, // TODO Topologie
xOutStopper => "{stopper}",
xOutVarioMotor => "{motor}",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro{tro_no}"],
stInOutHMI := "DB_Interface_HMI".stTRO.{inst});
END_REGION
""",
# Aufruf FB_Conveyor (Kreisel / Foerderer ohne TRO-Logik)
"call_conveyor": """\
REGION {inst}{comment}
#{inst}.Settings.tEnergySafeTime := "cTimeEnergySafe";
#{inst}.Settings.xGridActive := FALSE; // TODO Grid
#{inst}.Settings.sMotorProtectName := '{motor_protection}';
#{inst}(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "{motor_protection}",
xInPowerContactor := "{motor}",
stInOutHMI := "DB_Interface_HMI".stConveyors.{inst});
END_REGION
""",
# Eintrag in FB_CallSensors je Sensor
"call_sensor": """\
// {comment}
#fbSensorInput(stInSensorHW := "{bmk}",
nInSensorNo := "cIn{bmk}",
stInOutSensor := "DB_Inputs".Sensors["cIn{bmk}"]);
""",
# Rahmen FB_Main
"fb_main_frame": """\
FUNCTION_BLOCK "FB_Main_skel_{uh}"
{{ S7_Optimized_Access := 'TRUE' }}
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen {uh} (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
{var_block} END_VAR
BEGIN
{call_block}END_FUNCTION_BLOCK
""",
# Rahmen FB_CallSensors
"fb_sensors_frame": """\
FUNCTION_BLOCK "FB_CallSensors_skel_{uh}"
{{ S7_Optimized_Access := 'TRUE' }}
VERSION : 0.1
// AUTOMATISCH GENERIERT — create_skel.py ({count} Sensoren)
VAR
fbSensorInput : "FB_SensorInput";
END_VAR
BEGIN
{call_block}END_FUNCTION_BLOCK
""",
}
# Zuordnung FB-Typ -> Template-Schluessel
FBTYPE_TEMPLATE = {
"FB_ILS_MTRO_1Sep": "call_1sep",
"FB_ILS_MTRO_1Sep1Swi": "call_1sep1swi",
"FB_ILS_MTRO_Vario": "call_vario",
"FB_ILS_MTRO_PinStore_Auto": "call_1sep", # eigenes Template folgt spaeter
"FB_Conveyor": "call_conveyor",
}
# ============================================================================
# Ende der globalen Definitionen
# ============================================================================
#: Schluessel in skel.cfg -> Modul-Konstante, die beim Laden ersetzt wird
_CFG_KEYS = {
"files": "FILES",
"verw_roles": "VERW_ROLES",
"comment_roles": "COMMENT_ROLES",
"fbtype_rules": "FBTYPE_RULES",
"unit_re": "UNIT_RE",
"area_res": "AREA_RES",
"scl_templates": "SCL_TEMPLATES",
"fbtype_template": "FBTYPE_TEMPLATE",
}
def load_cfg():
"""Laedt cfg\\skel.cfg (JSON) aus PV_CFG und ersetzt die globalen
Definitionen (FILES, VERW_ROLES, ..., SCL_TEMPLATES) durch ihren Inhalt.
Fehlt PV_CFG oder die Datei, bleiben die eingebauten Defaults oben aktiv
(Cold-Start-Faehigkeit ohne Konfigurationsdatei).
"""
cfg_dir = os.environ.get("PV_CFG", Path(__file__).resolve().parent.parent / "cfg")
cfg_file = Path(cfg_dir) / "skel.cfg"
if not cfg_file.exists():
print(f"Hinweis: {cfg_file} nicht gefunden — verwende eingebaute Defaults.")
return
print(f"Lade Konfiguration: {cfg_file}")
data = json.loads(cfg_file.read_text(encoding="utf-8"))
globals_ = globals()
for cfg_key, const_name in _CFG_KEYS.items():
if cfg_key not in data:
continue
value = data[cfg_key]
# Listen von Listen (comment_roles, fbtype_rules, area_res) als
# Tupel normalisieren, damit das Unpacking im Code unveraendert bleibt
if const_name in ("COMMENT_ROLES", "AREA_RES"):
value = [tuple(item) for item in value]
globals_[const_name] = value
def load_scl_cfg():
"""Laedt die SCL-Templates aus PV_CFG\\skel_scl.cfg (INI-Style).
Format: jede [sektion] ist ein Template-Schluessel (var_decl, call_1sep,
...); der Sektionsinhalt wird VERBATIM uebernommen — Einrueckung und
Leerzeilen (auch am Blockende) gehoeren zum Template. Zeilen, die mit
';' beginnen, sind Kommentare. SCL selbst beginnt nie mit ';', daher
ist das kollisionsfrei.
Fehlt die Datei, bleiben die Templates aus skel.cfg bzw. den eingebauten
Defaults aktiv.
"""
cfg_dir = os.environ.get("PV_CFG", Path(__file__).resolve().parent.parent / "cfg")
cfg_file = Path(cfg_dir) / "skel_scl.cfg"
if not cfg_file.exists():
print(f"Hinweis: {cfg_file} nicht gefunden — "
f"verwende SCL-Templates aus skel.cfg/Defaults.")
return
print(f"Lade SCL-Templates: {cfg_file}")
templates = {}
name, buf = None, []
def flush():
if name is not None:
templates[name] = "\n".join(buf) + "\n"
for line in cfg_file.read_text(encoding="utf-8").splitlines():
if line.startswith(";"):
continue
m = re.fullmatch(r"\[(\w+)\]\s*", line)
if m:
flush()
name, buf = m.group(1), []
elif name is not None:
buf.append(line)
flush()
SCL_TEMPLATES.update(templates)
print(f"SCL-Templates geladen: {', '.join(templates)}")
def project_paths():
"""Pfade aus den setenv.bat-Umgebungsvariablen (mit Fallbacks)."""
root = Path(os.environ.get("PROJECT", Path(__file__).resolve().parent.parent))
data_dir = Path(os.environ.get("PV_DATA", root / "data"))
results = Path(os.environ.get("PV_RESULTS", root / "results"))
results.mkdir(parents=True, exist_ok=True)
return root, data_dir, results
# ----------------------------------------------------------------------------
# Einlesen
# ----------------------------------------------------------------------------
def read_positions(data_dir):
"""Positions-JSON: (BMK, SPS) -> {verw, pos, cabinet, bezeichnung}."""
path = data_dir / FILES["positions_json"]
if not path.exists():
print(f"WARNUNG: {path} nicht gefunden — Positionen/VERW entfallen.")
return {}
data = json.loads(path.read_text(encoding="utf-8"))
index = {}
for section in ("sensors", "schaltschrank_elemente"):
for key, val in data.get(section, {}).items():
if "@" not in key:
continue
bmk, sps = key.rsplit("@", 1)
index[(bmk, sps)] = {
"verw": (val.get("VERW") or "").strip(),
"pos": val.get("pos"),
"bezeichnung": val.get("BEZEICHNUNG") or "",
"kennzeichnung": val.get("KENNZEICHNUNG") or "",
}
# mappings: Verteiler -> [BMK@SPS] umdrehen zu (BMK, SPS) -> Verteiler
for dist, members in data.get("mappings", {}).items():
for key in members:
if "@" not in key:
continue
bmk, sps = key.rsplit("@", 1)
index.setdefault((bmk, sps), {})["cabinet"] = dist
return index
def read_tia(data_dir, n):
"""TIA-Liste ILS-n: Liste von Tag-Dicts + Konstanten-Map."""
path = data_dir / FILES["tia_xlsx"].format(n=n)
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)
tags = []
for row in wb["PLC Tags"].iter_rows(min_row=2, values_only=True):
name, _path, dtype, addr, comment = (tuple(row) + (None,) * 5)[:5]
if not name:
continue
tags.append({
"name": str(name),
"dataType": str(dtype) if dtype else "Bool",
"address": str(addr) if addr else "",
"comment": str(comment) if comment else "",
})
constants = {}
if "Constants" in wb.sheetnames:
for row in wb["Constants"].iter_rows(min_row=2, values_only=True):
cname, _path, _dt, value = (tuple(row) + (None,) * 4)[:4]
if cname:
constants[str(cname)] = value
return tags, constants
# ----------------------------------------------------------------------------
# Connect-Daten (Topologie, Format hmf-connect-v1)
# ----------------------------------------------------------------------------
def expand_jam(short):
"""JA0101_1 -> "DB_JamArea0101".stJam0101_1 ; sonst unveraendert."""
m = re.fullmatch(r"JA(\w+)_(\w+)", short)
if m:
return f'"DB_JamArea{m.group(1)}".stJam{m.group(1)}_{m.group(2)}'
return short
def read_connect_json(data_dir):
"""connect.json -> {UHxx: {nodes, connections, externals}}."""
path = data_dir / FILES["connect_json"]
data = json.loads(path.read_text(encoding="utf-8"))
return data.get("plcs", {})
def read_connect_ini(data_dir):
"""connect.ini -> gleiche Struktur wie read_connect_json()."""
path = data_dir / FILES["connect_ini"]
cp = configparser.ConfigParser(interpolation=None)
cp.optionxform = str # Gross-/Kleinschreibung der TRO-Namen erhalten
cp.read(path, encoding="utf-8")
plcs = {}
for section in cp.sections():
uh, _, part = section.partition(".")
plc = plcs.setdefault(uh, {"nodes": {}, "connections": [],
"externals": []})
if part == "nodes":
for name, val in cp[section].items():
fbtype, _, comment = (x.strip() for x in val.partition("|"))
plc["nodes"][name] = {"fbType": fbtype, "comment": comment}
elif part == "connections":
for _, val in cp[section].items():
fields = [x.strip() for x in val.split("|")]
src, _, dst = (x.strip() for x in fields[0].partition("->"))
plc["connections"].append({
"from": src, "to": dst, "jamArea": fields[1],
"kind": fields[2] if len(fields) > 2 else "normal",
"dbRef": expand_jam(fields[1])})
elif part == "externals":
for _, val in cp[section].items():
route, _, jam = (x.strip() for x in val.partition("|"))
src, _, dst = (x.strip() for x in route.partition("->"))
node, direction = (dst, "in") if src == "EXTERN" else (src, "out")
plc["externals"].append({
"node": node, "direction": direction, "jamArea": jam,
"dbRef": expand_jam(jam)})
return plcs
def derive_topology(topo):
"""Bereitet die Connect-Daten einer Steuerung fuer das Skeleton auf:
je TRO die aufgeloeste JamArea-Verdrahtung (entries/exits)."""
tros = {name: {"id": name, "fbType": nd["fbType"], "comment": nd["comment"],
"entries": [], "exits": []}
for name, nd in topo["nodes"].items()}
for c in topo["connections"]:
db = c.get("dbRef") or expand_jam(c["jamArea"])
if c["from"] in tros:
tros[c["from"]]["exits"].append(
{"jamArea": c["jamArea"], "dbRef": db, "to": c["to"],
"kind": c["kind"]})
if c["to"] in tros:
tros[c["to"]]["entries"].append(
{"jamArea": c["jamArea"], "dbRef": db, "from": c["from"],
"kind": c["kind"]})
for e in topo["externals"]:
if e["node"] not in tros:
continue
db = e.get("dbRef") or expand_jam(e["jamArea"])
side = "entries" if e["direction"] == "in" else "exits"
peer = "from" if e["direction"] == "in" else "to"
tros[e["node"]][side].append(
{"jamArea": e["jamArea"], "dbRef": db, peer: "EXTERN",
"kind": "extern"})
return {
"format": "hmf-connect-v1",
"tros": [tros[k] for k in sorted(tros)],
"connections": topo["connections"],
"externals": topo["externals"],
}
# ----------------------------------------------------------------------------
# Klassifikation
# ----------------------------------------------------------------------------
def classify_role(tag, posinfo):
"""Signalrolle: primaer VERW-Vokabular, sonst Kommentar-Heuristik."""
verw = (posinfo or {}).get("verw", "")
if verw in VERW_ROLES:
return VERW_ROLES[verw]
for pattern, role in COMMENT_ROLES:
if re.search(pattern, tag["comment"], re.I):
return role
return ""
def extract_unit(comment):
"""M-Nummer der Foerdertechnik-Einheit aus dem Kommentar."""
m = re.search(UNIT_RE, comment)
if m:
return m.group(2), m.group(1) # ("M0101", "KR")
return None, None
def extract_areas(comment):
"""Bereichsgruppen (Block/LS/WS/UZ) aus dem Kommentar."""
found = []
for pattern, kind, fmt in AREA_RES:
for m in re.finditer(pattern, comment, re.I):
found.append({"id": fmt.format(m=m.group(1)), "kind": kind})
return found
def guess_fbtype(roles):
"""FB-Typ einer Einheit aus der Menge ihrer Signalrollen."""
for rule in FBTYPE_RULES:
if all(r in roles for r in rule["roles"]):
return rule["fbType"]
return "UNBEKANNT"
# ----------------------------------------------------------------------------
# Skeleton-Aufbau
# ----------------------------------------------------------------------------
def build_skeleton(n, tags, constants, positions, connect=None):
"""Baut das JSON-Skeleton fuer eine Steuerung (ILS-n = UH0n)."""
uh = f"UH0{n}"
sps = str(n)
sensors = []
units = defaultdict(lambda: {"signals": [], "roles": set(), "areas": [],
"kind": None, "pos": None, "cabinets": set()})
areas = defaultdict(lambda: {"kind": None, "members": set(),
"cabinets": set()})
unassigned = []
for tag in tags:
posinfo = positions.get((tag["name"], sps))
role = classify_role(tag, posinfo)
unit_id, unit_kind = extract_unit(tag["comment"])
area_hits = extract_areas(tag["comment"])
cabinet = (posinfo or {}).get("cabinet")
entry = {
"id": tag["name"],
"constant": f"cIn{tag['name']}" if tag["address"].startswith("%E") else None,
"hwAddress": tag["address"],
"comment": tag["comment"],
"role": role or None,
"unit": unit_id,
"cabinet": cabinet,
"pos": (posinfo or {}).get("pos"),
}
if tag["address"].startswith("%E"):
sensors.append(entry)
if unit_id:
u = units[unit_id]
u["kind"] = unit_kind
u["signals"].append(entry)
if role:
u["roles"].add(role)
if u["pos"] is None and entry["pos"]:
u["pos"] = entry["pos"]
if cabinet:
u["cabinets"].add(cabinet)
for a in area_hits:
if a not in u["areas"]:
u["areas"].append(a)
elif not area_hits and not role:
unassigned.append(tag["name"])
for a in area_hits:
ar = areas[a["id"]]
ar["kind"] = a["kind"]
if unit_id:
ar["members"].add(unit_id)
if cabinet:
ar["cabinets"].add(cabinet)
unit_list = []
for unit_id in sorted(units):
u = units[unit_id]
fbtype = guess_fbtype(u["roles"])
io = {}
for sig in u["signals"]:
if sig["role"]:
io.setdefault(sig["role"], []).append(sig["id"])
unit_list.append({
"unit": unit_id,
"unitKind": u["kind"],
"fbType": fbtype,
"areas": u["areas"],
"cabinet": sorted(u["cabinets"])[0] if u["cabinets"] else None,
"pos": u["pos"],
"io": io,
"signalCount": len(u["signals"]),
})
area_list = [{
"id": aid,
"kind": a["kind"],
"members": sorted(a["members"]),
"cabinets": sorted(a["cabinets"]),
} for aid, a in sorted(areas.items())]
skel = {
"$schema": "hmf-layout-v1.schema.json",
"generatedBy": "create_skel.py",
"plc": {"id": uh, "configName": f"=A01+{uh}-KF00"},
"statistics": {
"tags": len(tags),
"sensors": len(sensors),
"constants": len(constants),
"units": len(unit_list),
"areas": len(area_list),
"unassignedSignals": len(unassigned),
},
"sensors": sensors,
"units": unit_list,
"areas": area_list,
"unassignedSignals": sorted(unassigned),
"todo": [
"connections[] (Topologie) manuell ergaenzen oder aus SCL extrahieren",
"Timings, Priority, Release, customCode manuell pflegen",
"TRO-IDs den Einheiten zuweisen (Schema TRO<UH><lfd>)",
],
}
if connect is not None:
topo = connect.get(uh)
if topo:
skel["topology"] = derive_topology(topo)
skel["statistics"]["troNodes"] = len(topo["nodes"])
skel["statistics"]["connections"] = len(topo["connections"])
skel["statistics"]["externals"] = len(topo["externals"])
skel["todo"] = [
"topology[] aus connect-Daten uebernommen — TRO-IDs den "
"Einheiten (units[]) noch zuordnen",
"Timings, Priority, Release, customCode manuell pflegen",
]
else:
print(f"WARNUNG: keine Connect-Daten fuer {uh} gefunden.")
return skel
# ----------------------------------------------------------------------------
# SCL-Rendering
# ----------------------------------------------------------------------------
def first(io, role, default="BGxxxx"):
vals = io.get(role)
return vals[0] if vals else default
def render_scl(skeleton, uh):
"""FB_Main- und FB_CallSensors-Grundgeruest aus den Templates."""
var_block = []
call_block = []
tro_seq = 0
for u in skeleton["units"]:
fbtype = u["fbType"]
if fbtype == "UNBEKANNT":
continue
tro_seq += 1
inst = f"TRO{uh[-1]}{tro_seq:02d}" if fbtype != "FB_Conveyor" \
else f"fbConveyor{u['unit'][1:]}"
comment = f"{u['unitKind']}-{u['unit']}" + \
(f" / {u['areas'][0]['id']}" if u["areas"] else "")
var_block.append(SCL_TEMPLATES["var_decl"].format(
inst=inst, fbtype=fbtype, comment=comment))
tpl = SCL_TEMPLATES[FBTYPE_TEMPLATE[fbtype]]
io = u["io"]
call_block.append(tpl.format(
inst=inst,
shorttype=fbtype.replace("FB_ILS_MTRO_", "").replace("FB_", ""),
comment=comment,
tro_no=f"{uh[-1]}{tro_seq:02d}",
sen_in_sep=first(io, "sensorInSep"),
sen_jam=first(io, "sensorJam"),
sen_finger=first(io, "sensorFinger"),
sen_carr_in_pos=first(io, "sensorCarrInPos"),
stopper=first(io, "stopperOutput", "MBxxxx"),
switch_out=first(io, "switchOutput", "MBxxxx"),
motor=first(io, "motorOutput", "MAxxxx"),
motor_protection=first(io, "motorProtection", "FCxxxx"),
))
fb_main = SCL_TEMPLATES["fb_main_frame"].format(
uh=uh, var_block="".join(var_block), call_block="".join(call_block))
sensor_calls = [SCL_TEMPLATES["call_sensor"].format(
bmk=s["id"], comment=s["comment"]) for s in skeleton["sensors"]]
fb_sensors = SCL_TEMPLATES["fb_sensors_frame"].format(
uh=uh, count=len(sensor_calls), call_block="".join(sensor_calls))
return fb_main, fb_sensors
# ----------------------------------------------------------------------------
# main
# ----------------------------------------------------------------------------
def main():
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("--uh", type=int, choices=range(1, 6),
help="nur diese Steuerung (1..5), sonst alle")
ap.add_argument("--no-scl", action="store_true",
help="nur JSON-Skeleton, kein SCL-Grundgeruest")
con = ap.add_mutually_exclusive_group()
con.add_argument("--con-ini", action="store_true",
help="Topologie aus data\\connect.ini uebernehmen")
con.add_argument("--con-json", action="store_true",
help="Topologie aus data\\connect.json uebernehmen")
args = ap.parse_args()
load_cfg()
load_scl_cfg()
root, data_dir, results = project_paths()
print(f"Daten: {data_dir}")
print(f"Results: {results}")
positions = read_positions(data_dir)
print(f"Positions-JSON: {len(positions)} Signale indiziert")
connect = None
if args.con_ini or args.con_json:
src = FILES["connect_ini"] if args.con_ini else FILES["connect_json"]
if not (data_dir / src).exists():
sys.exit(f"FEHLER: {data_dir / src} nicht gefunden.")
connect = (read_connect_ini if args.con_ini
else read_connect_json)(data_dir)
total = sum(len(p["connections"]) for p in connect.values())
print(f"Connect-Daten: {src}{len(connect)} PLCs, "
f"{total} Verbindungen")
for n in ([args.uh] if args.uh else range(1, 6)):
uh = f"UH0{n}"
tags, constants = read_tia(data_dir, n)
skel = build_skeleton(n, tags, constants, positions, connect)
out_json = results / f"skeleton_{uh}.json"
out_json.write_text(json.dumps(skel, indent=2, ensure_ascii=False),
encoding="utf-8", newline="\n")
s = skel["statistics"]
topo_info = (f", {s['connections']} Verbindungen"
if "connections" in s else "")
print(f"{uh}: {s['tags']} Tags, {s['units']} Einheiten, "
f"{s['areas']} Bereiche{topo_info} -> {out_json.name}")
if not args.no_scl:
fb_main, fb_sensors = render_scl(skel, uh)
(results / f"FB_Main_skel_{uh}.scl").write_text(
fb_main, encoding="utf-8", newline="\n")
(results / f"FB_CallSensors_skel_{uh}.scl").write_text(
fb_sensors, encoding="utf-8", newline="\n")
print(f"{uh}: FB_Main_skel_{uh}.scl, FB_CallSensors_skel_{uh}.scl")
if __name__ == "__main__":
main()
+3
View File
@@ -0,0 +1,3 @@
# Python-Abhaengigkeiten HundM_Fortna
openpyxl>=3.1
ezdxf>=1.3
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+546
View File
@@ -0,0 +1,546 @@
FUNCTION_BLOCK "FB_CallSensors_skel_UH04"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// AUTOMATISCH GENERIERT — create_skel.py (134 Sensoren)
VAR
fbSensorInput : "FB_SensorInput";
END_VAR
BEGIN
// DT Anlage Aus
#fbSensorInput(stInSensorHW := "SF0000",
nInSensorNo := "cInSF0000",
stInOutSensor := "DB_Inputs".Sensors["cInSF0000"]);
// LDT Anlage Ein
#fbSensorInput(stInSensorHW := "SF0001",
nInSensorNo := "cInSF0001",
stInOutSensor := "DB_Inputs".Sensors["cInSF0001"]);
// LDT Reset
#fbSensorInput(stInSensorHW := "SF0002",
nInSensorNo := "cInSF0002",
stInOutSensor := "DB_Inputs".Sensors["cInSF0002"]);
// DT Lampentest
#fbSensorInput(stInSensorHW := "SF0003",
nInSensorNo := "cInSF0003",
stInOutSensor := "DB_Inputs".Sensors["cInSF0003"]);
// Druckschalter Druckluft OK
#fbSensorInput(stInSensorHW := "BP0004",
nInSensorNo := "cInBP0004",
stInOutSensor := "DB_Inputs".Sensors["cInBP0004"]);
// Phasenausfall 400V
#fbSensorInput(stInSensorHW := "DI0005",
nInSensorNo := "cInDI0005",
stInOutSensor := "DB_Inputs".Sensors["cInDI0005"]);
// Vorsicherung 400V UC Reserve
#fbSensorInput(stInSensorHW := "DI0006",
nInSensorNo := "cInDI0006",
stInOutSensor := "DB_Inputs".Sensors["cInDI0006"]);
// Feedback Hauptschütze aktiv
#fbSensorInput(stInSensorHW := "DI0013",
nInSensorNo := "cInDI0013",
stInOutSensor := "DB_Inputs".Sensors["cInDI0013"]);
// Feedback Koppelrelais E-Stop-IF (QA0660/QA0661)
#fbSensorInput(stInSensorHW := "DI0014",
nInSensorNo := "cInDI0014",
stInOutSensor := "DB_Inputs".Sensors["cInDI0014"]);
// Feedback Koppelrelais E-Stop-IF
#fbSensorInput(stInSensorHW := "DI0015",
nInSensorNo := "cInDI0015",
stInOutSensor := "DB_Inputs".Sensors["cInDI0015"]);
// Sicherungsautomatenfall
#fbSensorInput(stInSensorHW := "DI0016",
nInSensorNo := "cInDI0016",
stInOutSensor := "DB_Inputs".Sensors["cInDI0016"]);
// Vorsicherung 24V OK (FC021)
#fbSensorInput(stInSensorHW := "DI0021",
nInSensorNo := "cInDI0021",
stInOutSensor := "DB_Inputs".Sensors["cInDI0021"]);
// Vorsicherung 24V OK (FC022)
#fbSensorInput(stInSensorHW := "DI0022",
nInSensorNo := "cInDI0022",
stInOutSensor := "DB_Inputs".Sensors["cInDI0022"]);
// Vorsicherung 24V OK (FC023)
#fbSensorInput(stInSensorHW := "DI0023",
nInSensorNo := "cInDI0023",
stInOutSensor := "DB_Inputs".Sensors["cInDI0023"]);
// MT freigeben UZ0403, Workstation MPS 3
#fbSensorInput(stInSensorHW := "SF0025",
nInSensorNo := "cInSF0025",
stInOutSensor := "DB_Inputs".Sensors["cInSF0025"]);
// MT freigeben UZ0402, Workstation MPS 2
#fbSensorInput(stInSensorHW := "SF0026",
nInSensorNo := "cInSF0026",
stInOutSensor := "DB_Inputs".Sensors["cInSF0026"]);
// MT freigeben UZ0401, Workstation MPS 1
#fbSensorInput(stInSensorHW := "SF0027",
nInSensorNo := "cInSF0027",
stInOutSensor := "DB_Inputs".Sensors["cInSF0027"]);
// IF BMZ "fire alarm" 2
#fbSensorInput(stInSensorHW := "DI0033",
nInSensorNo := "cInDI0033",
stInOutSensor := "DB_Inputs".Sensors["cInDI0033"]);
// IF BMZ "fire alarm" 1
#fbSensorInput(stInSensorHW := "DI0034",
nInSensorNo := "cInDI0034",
stInOutSensor := "DB_Inputs".Sensors["cInDI0034"]);
// IF BST 4 "No fire alarm"
#fbSensorInput(stInSensorHW := "DI0035",
nInSensorNo := "cInDI0035",
stInOutSensor := "DB_Inputs".Sensors["cInDI0035"]);
// IF BST 4 "Non fault"
#fbSensorInput(stInSensorHW := "DI0036",
nInSensorNo := "cInDI0036",
stInOutSensor := "DB_Inputs".Sensors["cInDI0036"]);
// IF BST 4 "FPC opened"
#fbSensorInput(stInSensorHW := "DI0037",
nInSensorNo := "cInDI0037",
stInOutSensor := "DB_Inputs".Sensors["cInDI0037"]);
// Reset UZ0409
#fbSensorInput(stInSensorHW := "SF0051",
nInSensorNo := "cInSF0051",
stInOutSensor := "DB_Inputs".Sensors["cInSF0051"]);
// Reset UZ0403
#fbSensorInput(stInSensorHW := "SF0053",
nInSensorNo := "cInSF0053",
stInOutSensor := "DB_Inputs".Sensors["cInSF0053"]);
// Reset UZ0402
#fbSensorInput(stInSensorHW := "SF0055",
nInSensorNo := "cInSF0055",
stInOutSensor := "DB_Inputs".Sensors["cInSF0055"]);
// Reset UZ0401
#fbSensorInput(stInSensorHW := "SF0057",
nInSensorNo := "cInSF0057",
stInOutSensor := "DB_Inputs".Sensors["cInSF0057"]);
// MSS ausgelöst FC0060
#fbSensorInput(stInSensorHW := "FC0060",
nInSensorNo := "cInFC0060",
stInOutSensor := "DB_Inputs".Sensors["cInFC0060"]);
// MSS ausgelöst FC0061
#fbSensorInput(stInSensorHW := "FC0061",
nInSensorNo := "cInFC0061",
stInOutSensor := "DB_Inputs".Sensors["cInFC0061"]);
// MSS ausgelöst FC0062
#fbSensorInput(stInSensorHW := "FC0062",
nInSensorNo := "cInFC0062",
stInOutSensor := "DB_Inputs".Sensors["cInFC0062"]);
// MSS ausgelöst FC0063
#fbSensorInput(stInSensorHW := "FC0063",
nInSensorNo := "cInFC0063",
stInOutSensor := "DB_Inputs".Sensors["cInFC0063"]);
// MSS ausgelöst FC0064
#fbSensorInput(stInSensorHW := "FC0064",
nInSensorNo := "cInFC0064",
stInOutSensor := "DB_Inputs".Sensors["cInFC0064"]);
// MSS ausgelöst FC0065
#fbSensorInput(stInSensorHW := "FC0065",
nInSensorNo := "cInFC0065",
stInOutSensor := "DB_Inputs".Sensors["cInFC0065"]);
// MSS ausgelöst FC0066
#fbSensorInput(stInSensorHW := "FC0066",
nInSensorNo := "cInFC0066",
stInOutSensor := "DB_Inputs".Sensors["cInFC0066"]);
// MSS ausgelöst FC0070
#fbSensorInput(stInSensorHW := "FC0070",
nInSensorNo := "cInFC0070",
stInOutSensor := "DB_Inputs".Sensors["cInFC0070"]);
// MSS ausgelöst FC0071
#fbSensorInput(stInSensorHW := "FC0071",
nInSensorNo := "cInFC0071",
stInOutSensor := "DB_Inputs".Sensors["cInFC0071"]);
// MSS ausgelöst FC0072
#fbSensorInput(stInSensorHW := "FC0072",
nInSensorNo := "cInFC0072",
stInOutSensor := "DB_Inputs".Sensors["cInFC0072"]);
// MSS ausgelöst FC0073
#fbSensorInput(stInSensorHW := "FC0073",
nInSensorNo := "cInFC0073",
stInOutSensor := "DB_Inputs".Sensors["cInFC0073"]);
// MSS ausgelöst FC0074
#fbSensorInput(stInSensorHW := "FC0074",
nInSensorNo := "cInFC0074",
stInOutSensor := "DB_Inputs".Sensors["cInFC0074"]);
// MSS ausgelöst FC0075 (Reserve)
#fbSensorInput(stInSensorHW := "FC0075",
nInSensorNo := "cInFC0075",
stInOutSensor := "DB_Inputs".Sensors["cInFC0075"]);
// Not Halt Kanal 1 UH04
#fbSensorInput(stInSensorHW := "SF0400",
nInSensorNo := "cInSF0400",
stInOutSensor := "DB_Inputs".Sensors["cInSF0400"]);
// Not Halt Kanal 2 UH04
#fbSensorInput(stInSensorHW := "SF0404",
nInSensorNo := "cInSF0404",
stInOutSensor := "DB_Inputs".Sensors["cInSF0404"]);
// Not Halt Schnittstelle CH1 (UH06)
#fbSensorInput(stInSensorHW := "SF0471",
nInSensorNo := "cInSF0471",
stInOutSensor := "DB_Inputs".Sensors["cInSF0471"]);
// Not Halt Schnittstelle CH2 (Reserve)
#fbSensorInput(stInSensorHW := "SF0472",
nInSensorNo := "cInSF0472",
stInOutSensor := "DB_Inputs".Sensors["cInSF0472"]);
// Not Halt Kanal 1 UZ0409
#fbSensorInput(stInSensorHW := "SF0473",
nInSensorNo := "cInSF0473",
stInOutSensor := "DB_Inputs".Sensors["cInSF0473"]);
// Not Halt Schnittstelle CH1 (UH06)
#fbSensorInput(stInSensorHW := "SF0475",
nInSensorNo := "cInSF0475",
stInOutSensor := "DB_Inputs".Sensors["cInSF0475"]);
// Not Halt Schnittstelle CH2 (Reserve)
#fbSensorInput(stInSensorHW := "SF0476",
nInSensorNo := "cInSF0476",
stInOutSensor := "DB_Inputs".Sensors["cInSF0476"]);
// Not Halt Kanal 2 UZ0409
#fbSensorInput(stInSensorHW := "SF0477",
nInSensorNo := "cInSF0477",
stInOutSensor := "DB_Inputs".Sensors["cInSF0477"]);
// Sensor Förderer voll (ILS-CV M4000)
#fbSensorInput(stInSensorHW := "BG3240",
nInSensorNo := "cInBG3240",
stInOutSensor := "DB_Inputs".Sensors["cInBG3240"]);
// MT in Position MPS 3 (AMR ILS-CV M04001)
#fbSensorInput(stInSensorHW := "BG3241",
nInSensorNo := "cInBG3241",
stInOutSensor := "DB_Inputs".Sensors["cInBG3241"]);
// in Separator (ILS-CV M4001)
#fbSensorInput(stInSensorHW := "BG3242",
nInSensorNo := "cInBG3242",
stInOutSensor := "DB_Inputs".Sensors["cInBG3242"]);
// Stausensor (AMR ILS-CV M4000)
#fbSensorInput(stInSensorHW := "BG3243",
nInSensorNo := "cInBG3243",
stInOutSensor := "DB_Inputs".Sensors["cInBG3243"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M4001)
#fbSensorInput(stInSensorHW := "BG3244",
nInSensorNo := "cInBG3244",
stInOutSensor := "DB_Inputs".Sensors["cInBG3244"]);
// Sensor Förderer voll (ILS-CV M4001)
#fbSensorInput(stInSensorHW := "BG3245",
nInSensorNo := "cInBG3245",
stInOutSensor := "DB_Inputs".Sensors["cInBG3245"]);
// Stausensor vor Vario Förderer (ILS-CV M4001)
#fbSensorInput(stInSensorHW := "BG3246",
nInSensorNo := "cInBG3246",
stInOutSensor := "DB_Inputs".Sensors["cInBG3246"]);
// in Separator vor BST 4 (ILS-CV M4001)
#fbSensorInput(stInSensorHW := "BG3247",
nInSensorNo := "cInBG3247",
stInOutSensor := "DB_Inputs".Sensors["cInBG3247"]);
// in Separator (ILS-CV M4011)
#fbSensorInput(stInSensorHW := "BG3250",
nInSensorNo := "cInBG3250",
stInOutSensor := "DB_Inputs".Sensors["cInBG3250"]);
// Stausensor (AMR ILS-CV M4503)
#fbSensorInput(stInSensorHW := "BG3251",
nInSensorNo := "cInBG3251",
stInOutSensor := "DB_Inputs".Sensors["cInBG3251"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M4011)
#fbSensorInput(stInSensorHW := "BG3253",
nInSensorNo := "cInBG3253",
stInOutSensor := "DB_Inputs".Sensors["cInBG3253"]);
// MT in Position (ILS-CV M4011)
#fbSensorInput(stInSensorHW := "BG3255",
nInSensorNo := "cInBG3255",
stInOutSensor := "DB_Inputs".Sensors["cInBG3255"]);
// Sensor Förderer voll (ILS-CV M4011)
#fbSensorInput(stInSensorHW := "BG3256",
nInSensorNo := "cInBG3256",
stInOutSensor := "DB_Inputs".Sensors["cInBG3256"]);
// in Separator 4 (ILS-CV M0401)
#fbSensorInput(stInSensorHW := "BG3260",
nInSensorNo := "cInBG3260",
stInOutSensor := "DB_Inputs".Sensors["cInBG3260"]);
// MT in Position (AMR ILS-CV M0401)
#fbSensorInput(stInSensorHW := "BG3261",
nInSensorNo := "cInBG3261",
stInOutSensor := "DB_Inputs".Sensors["cInBG3261"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M0401)
#fbSensorInput(stInSensorHW := "BG3262",
nInSensorNo := "cInBG3262",
stInOutSensor := "DB_Inputs".Sensors["cInBG3262"]);
// Stausensor nach BST 4 (AMR ILS-CV M4011)
#fbSensorInput(stInSensorHW := "BG3264",
nInSensorNo := "cInBG3264",
stInOutSensor := "DB_Inputs".Sensors["cInBG3264"]);
// in Separator 6 (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3300",
nInSensorNo := "cInBG3300",
stInOutSensor := "DB_Inputs".Sensors["cInBG3300"]);
// Stausensor 6 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3301",
nInSensorNo := "cInBG3301",
stInOutSensor := "DB_Inputs".Sensors["cInBG3301"]);
// Stausensor (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3303",
nInSensorNo := "cInBG3303",
stInOutSensor := "DB_Inputs".Sensors["cInBG3303"]);
// in Separator vor MPS 3 (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3304",
nInSensorNo := "cInBG3304",
stInOutSensor := "DB_Inputs".Sensors["cInBG3304"]);
// Stausensor (AMR ILS-CV M4004)
#fbSensorInput(stInSensorHW := "BG3311",
nInSensorNo := "cInBG3311",
stInOutSensor := "DB_Inputs".Sensors["cInBG3311"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4004)
#fbSensorInput(stInSensorHW := "BG3312",
nInSensorNo := "cInBG3312",
stInOutSensor := "DB_Inputs".Sensors["cInBG3312"]);
// Sensor Förderer voll (AMR ILS-CV M4004) MPS 3
#fbSensorInput(stInSensorHW := "BG3313",
nInSensorNo := "cInBG3313",
stInOutSensor := "DB_Inputs".Sensors["cInBG3313"]);
// MT in Entladeposition MPS 3 (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3314",
nInSensorNo := "cInBG3314",
stInOutSensor := "DB_Inputs".Sensors["cInBG3314"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4005) MPS 3
#fbSensorInput(stInSensorHW := "BG3315",
nInSensorNo := "cInBG3315",
stInOutSensor := "DB_Inputs".Sensors["cInBG3315"]);
// MT in Position MPS 3 (AMR ILS-CV M4004)
#fbSensorInput(stInSensorHW := "BG3316",
nInSensorNo := "cInBG3316",
stInOutSensor := "DB_Inputs".Sensors["cInBG3316"]);
// Sensor Förderer voll (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3317",
nInSensorNo := "cInBG3317",
stInOutSensor := "DB_Inputs".Sensors["cInBG3317"]);
// Stausensor (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3320",
nInSensorNo := "cInBG3320",
stInOutSensor := "DB_Inputs".Sensors["cInBG3320"]);
// in Separator Ausfahrt MPS 3 (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3321",
nInSensorNo := "cInBG3321",
stInOutSensor := "DB_Inputs".Sensors["cInBG3321"]);
// Stausensor Ausfahrt MPS 03 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3322",
nInSensorNo := "cInBG3322",
stInOutSensor := "DB_Inputs".Sensors["cInBG3322"]);
// MT in Position MPS 3 (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3324",
nInSensorNo := "cInBG3324",
stInOutSensor := "DB_Inputs".Sensors["cInBG3324"]);
// MT ist beladen MPS 3 (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3325",
nInSensorNo := "cInBG3325",
stInOutSensor := "DB_Inputs".Sensors["cInBG3325"]);
// in Separator (AMR ILS-CV M4005)
#fbSensorInput(stInSensorHW := "BG3326",
nInSensorNo := "cInBG3326",
stInOutSensor := "DB_Inputs".Sensors["cInBG3326"]);
// Stausensor (AMR ILS-CV M4004)
#fbSensorInput(stInSensorHW := "BG3327",
nInSensorNo := "cInBG3327",
stInOutSensor := "DB_Inputs".Sensors["cInBG3327"]);
// in Separator (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3360",
nInSensorNo := "cInBG3360",
stInOutSensor := "DB_Inputs".Sensors["cInBG3360"]);
// MT ist beladen (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3361",
nInSensorNo := "cInBG3361",
stInOutSensor := "DB_Inputs".Sensors["cInBG3361"]);
// Stausensor 5 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3362",
nInSensorNo := "cInBG3362",
stInOutSensor := "DB_Inputs".Sensors["cInBG3362"]);
// in Separator 5 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3363",
nInSensorNo := "cInBG3363",
stInOutSensor := "DB_Inputs".Sensors["cInBG3363"]);
// Stausensor 4 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3367",
nInSensorNo := "cInBG3367",
stInOutSensor := "DB_Inputs".Sensors["cInBG3367"]);
// in Separator (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3370",
nInSensorNo := "cInBG3370",
stInOutSensor := "DB_Inputs".Sensors["cInBG3370"]);
// Stausensor 3 (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3371",
nInSensorNo := "cInBG3371",
stInOutSensor := "DB_Inputs".Sensors["cInBG3371"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3372",
nInSensorNo := "cInBG3372",
stInOutSensor := "DB_Inputs".Sensors["cInBG3372"]);
// Sensor Förderer voll (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3373",
nInSensorNo := "cInBG3373",
stInOutSensor := "DB_Inputs".Sensors["cInBG3373"]);
// MT IN Entladeposition MPS- (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3374",
nInSensorNo := "cInBG3374",
stInOutSensor := "DB_Inputs".Sensors["cInBG3374"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4007) MPS 2
#fbSensorInput(stInSensorHW := "BG3375",
nInSensorNo := "cInBG3375",
stInOutSensor := "DB_Inputs".Sensors["cInBG3375"]);
// MT in Position MPS 2 (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3376",
nInSensorNo := "cInBG3376",
stInOutSensor := "DB_Inputs".Sensors["cInBG3376"]);
// Sensor Förderer voll (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3377",
nInSensorNo := "cInBG3377",
stInOutSensor := "DB_Inputs".Sensors["cInBG3377"]);
// Stausensor (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3380",
nInSensorNo := "cInBG3380",
stInOutSensor := "DB_Inputs".Sensors["cInBG3380"]);
// in Separator Ausfahrt MPS 2 (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3381",
nInSensorNo := "cInBG3381",
stInOutSensor := "DB_Inputs".Sensors["cInBG3381"]);
// Stausensor Ausfahrt MPS 02 (AMR ILS-KR M04003)
#fbSensorInput(stInSensorHW := "BG3382",
nInSensorNo := "cInBG3382",
stInOutSensor := "DB_Inputs".Sensors["cInBG3382"]);
// in Separator (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3383",
nInSensorNo := "cInBG3383",
stInOutSensor := "DB_Inputs".Sensors["cInBG3383"]);
// MT in Position MPS 2 (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3384",
nInSensorNo := "cInBG3384",
stInOutSensor := "DB_Inputs".Sensors["cInBG3384"]);
// MT ist beladen MPS 2 (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3385",
nInSensorNo := "cInBG3385",
stInOutSensor := "DB_Inputs".Sensors["cInBG3385"]);
// in Separator (AMR ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3386",
nInSensorNo := "cInBG3386",
stInOutSensor := "DB_Inputs".Sensors["cInBG3386"]);
// Stausensor 3 (AMR ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3387",
nInSensorNo := "cInBG3387",
stInOutSensor := "DB_Inputs".Sensors["cInBG3387"]);
// Sensor Förderer voll (AMR ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3390",
nInSensorNo := "cInBG3390",
stInOutSensor := "DB_Inputs".Sensors["cInBG3390"]);
// in Separator (AMR ILS-CV M4010)
#fbSensorInput(stInSensorHW := "BG3391",
nInSensorNo := "cInBG3391",
stInOutSensor := "DB_Inputs".Sensors["cInBG3391"]);
// MT in Position (ILS-CV M4010)
#fbSensorInput(stInSensorHW := "BG3392",
nInSensorNo := "cInBG3392",
stInOutSensor := "DB_Inputs".Sensors["cInBG3392"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4010)
#fbSensorInput(stInSensorHW := "BG3393",
nInSensorNo := "cInBG3393",
stInOutSensor := "DB_Inputs".Sensors["cInBG3393"]);
// Stausensor (AMR ILS-CV M4006)
#fbSensorInput(stInSensorHW := "BG3396",
nInSensorNo := "cInBG3396",
stInOutSensor := "DB_Inputs".Sensors["cInBG3396"]);
// in Separator (AMR ILS-CV M4007)
#fbSensorInput(stInSensorHW := "BG3397",
nInSensorNo := "cInBG3397",
stInOutSensor := "DB_Inputs".Sensors["cInBG3397"]);
// in Separator (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3400",
nInSensorNo := "cInBG3400",
stInOutSensor := "DB_Inputs".Sensors["cInBG3400"]);
// in Separator (AMR ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3420",
nInSensorNo := "cInBG3420",
stInOutSensor := "DB_Inputs".Sensors["cInBG3420"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3421",
nInSensorNo := "cInBG3421",
stInOutSensor := "DB_Inputs".Sensors["cInBG3421"]);
// Stausensor nach BST 4 (AMR ILS-CV M4010)
#fbSensorInput(stInSensorHW := "BG3423",
nInSensorNo := "cInBG3423",
stInOutSensor := "DB_Inputs".Sensors["cInBG3423"]);
// Sensor Förderer voll (ILS-CV M4010)
#fbSensorInput(stInSensorHW := "BG3425",
nInSensorNo := "cInBG3425",
stInOutSensor := "DB_Inputs".Sensors["cInBG3425"]);
// MT in Position (ILS-CV M4002)
#fbSensorInput(stInSensorHW := "BG3426",
nInSensorNo := "cInBG3426",
stInOutSensor := "DB_Inputs".Sensors["cInBG3426"]);
// in Separator vor MPS 1 (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3430",
nInSensorNo := "cInBG3430",
stInOutSensor := "DB_Inputs".Sensors["cInBG3430"]);
// Stausensor (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3431",
nInSensorNo := "cInBG3431",
stInOutSensor := "DB_Inputs".Sensors["cInBG3431"]);
// Rad dreht (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3432",
nInSensorNo := "cInBG3432",
stInOutSensor := "DB_Inputs".Sensors["cInBG3432"]);
// Stausensor (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3433",
nInSensorNo := "cInBG3433",
stInOutSensor := "DB_Inputs".Sensors["cInBG3433"]);
// in Separator (AMR KR-M4003)
#fbSensorInput(stInSensorHW := "BG3435",
nInSensorNo := "cInBG3435",
stInOutSensor := "DB_Inputs".Sensors["cInBG3435"]);
// in Separator (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3436",
nInSensorNo := "cInBG3436",
stInOutSensor := "DB_Inputs".Sensors["cInBG3436"]);
// Stausensor (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3437",
nInSensorNo := "cInBG3437",
stInOutSensor := "DB_Inputs".Sensors["cInBG3437"]);
// in Separator (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3440",
nInSensorNo := "cInBG3440",
stInOutSensor := "DB_Inputs".Sensors["cInBG3440"]);
// Stausensor 3 (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3441",
nInSensorNo := "cInBG3441",
stInOutSensor := "DB_Inputs".Sensors["cInBG3441"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3442",
nInSensorNo := "cInBG3442",
stInOutSensor := "DB_Inputs".Sensors["cInBG3442"]);
// Sensor Förderer voll (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3443",
nInSensorNo := "cInBG3443",
stInOutSensor := "DB_Inputs".Sensors["cInBG3443"]);
// MT IN Entladeposition MPS- (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3444",
nInSensorNo := "cInBG3444",
stInOutSensor := "DB_Inputs".Sensors["cInBG3444"]);
// Abfrage Mitnehmerfinger in Position (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3445",
nInSensorNo := "cInBG3445",
stInOutSensor := "DB_Inputs".Sensors["cInBG3445"]);
// MT in Position MPS 1 (AMR ILS-CV M4008)
#fbSensorInput(stInSensorHW := "BG3446",
nInSensorNo := "cInBG3446",
stInOutSensor := "DB_Inputs".Sensors["cInBG3446"]);
// Sensor Förderer voll (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3447",
nInSensorNo := "cInBG3447",
stInOutSensor := "DB_Inputs".Sensors["cInBG3447"]);
// Stausensor Ausfahrt MPS 01 (AMR ILS-KR M4003)
#fbSensorInput(stInSensorHW := "BG3450",
nInSensorNo := "cInBG3450",
stInOutSensor := "DB_Inputs".Sensors["cInBG3450"]);
// in Separator Ausfahrt MPS 1 (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3451",
nInSensorNo := "cInBG3451",
stInOutSensor := "DB_Inputs".Sensors["cInBG3451"]);
// MT in Position MPS 1 (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3454",
nInSensorNo := "cInBG3454",
stInOutSensor := "DB_Inputs".Sensors["cInBG3454"]);
// MT ist beladen MPS 1 (AMR ILS-CV M4009)
#fbSensorInput(stInSensorHW := "BG3455",
nInSensorNo := "cInBG3455",
stInOutSensor := "DB_Inputs".Sensors["cInBG3455"]);
END_FUNCTION_BLOCK
+654
View File
@@ -0,0 +1,654 @@
FUNCTION_BLOCK "FB_CallSensors_skel_UH05"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// AUTOMATISCH GENERIERT — create_skel.py (161 Sensoren)
VAR
fbSensorInput : "FB_SensorInput";
END_VAR
BEGIN
// DT Anlage Aus
#fbSensorInput(stInSensorHW := "SF0000",
nInSensorNo := "cInSF0000",
stInOutSensor := "DB_Inputs".Sensors["cInSF0000"]);
// LDT Anlage Ein
#fbSensorInput(stInSensorHW := "SF0001",
nInSensorNo := "cInSF0001",
stInOutSensor := "DB_Inputs".Sensors["cInSF0001"]);
// LDT Reset
#fbSensorInput(stInSensorHW := "SF0002",
nInSensorNo := "cInSF0002",
stInOutSensor := "DB_Inputs".Sensors["cInSF0002"]);
// DT Lampentest
#fbSensorInput(stInSensorHW := "SF0003",
nInSensorNo := "cInSF0003",
stInOutSensor := "DB_Inputs".Sensors["cInSF0003"]);
// Druckschalter Druckluft OK
#fbSensorInput(stInSensorHW := "BP0004",
nInSensorNo := "cInBP0004",
stInOutSensor := "DB_Inputs".Sensors["cInBP0004"]);
// Phasenausfall 400V
#fbSensorInput(stInSensorHW := "DI0005",
nInSensorNo := "cInDI0005",
stInOutSensor := "DB_Inputs".Sensors["cInDI0005"]);
// Vorsicherung 400V UC Reserve
#fbSensorInput(stInSensorHW := "DI0006",
nInSensorNo := "cInDI0006",
stInOutSensor := "DB_Inputs".Sensors["cInDI0006"]);
// Feedback Koppelrelais E-Stop-IF UH07 (QA0612/QA0613)
#fbSensorInput(stInSensorHW := "DI0012",
nInSensorNo := "cInDI0012",
stInOutSensor := "DB_Inputs".Sensors["cInDI0012"]);
// Feedback Hauptschütze aktiv (QA0060 - QA0070)
#fbSensorInput(stInSensorHW := "DI0013",
nInSensorNo := "cInDI0013",
stInOutSensor := "DB_Inputs".Sensors["cInDI0013"]);
// Feedback Koppelrelais E-Stop-IF (QA0660/QA0661)
#fbSensorInput(stInSensorHW := "DI0014",
nInSensorNo := "cInDI0014",
stInOutSensor := "DB_Inputs".Sensors["cInDI0014"]);
// Feedback Koppelrelais E-Stop-IF
#fbSensorInput(stInSensorHW := "DI0015",
nInSensorNo := "cInDI0015",
stInOutSensor := "DB_Inputs".Sensors["cInDI0015"]);
// Sicherungsautomatenfall
#fbSensorInput(stInSensorHW := "DI0016",
nInSensorNo := "cInDI0016",
stInOutSensor := "DB_Inputs".Sensors["cInDI0016"]);
// Vorsicherung 24V OK (FC021)
#fbSensorInput(stInSensorHW := "DI0021",
nInSensorNo := "cInDI0021",
stInOutSensor := "DB_Inputs".Sensors["cInDI0021"]);
// Vorsicherung 24V OK (FC022)
#fbSensorInput(stInSensorHW := "DI0022",
nInSensorNo := "cInDI0022",
stInOutSensor := "DB_Inputs".Sensors["cInDI0022"]);
// Vorsicherung 24V OK (FC023)
#fbSensorInput(stInSensorHW := "DI0023",
nInSensorNo := "cInDI0023",
stInOutSensor := "DB_Inputs".Sensors["cInDI0023"]);
// IF BMZ "fire alarm"
#fbSensorInput(stInSensorHW := "DI0034",
nInSensorNo := "cInDI0034",
stInOutSensor := "DB_Inputs".Sensors["cInDI0034"]);
// IF BST "No fire alarm"
#fbSensorInput(stInSensorHW := "DI0035",
nInSensorNo := "cInDI0035",
stInOutSensor := "DB_Inputs".Sensors["cInDI0035"]);
// IF BST "Non fault"
#fbSensorInput(stInSensorHW := "DI0036",
nInSensorNo := "cInDI0036",
stInOutSensor := "DB_Inputs".Sensors["cInDI0036"]);
// IF BST "FPC opened"
#fbSensorInput(stInSensorHW := "DI0037",
nInSensorNo := "cInDI0037",
stInOutSensor := "DB_Inputs".Sensors["cInDI0037"]);
// Reset UZ0501
#fbSensorInput(stInSensorHW := "SF0041",
nInSensorNo := "cInSF0041",
stInOutSensor := "DB_Inputs".Sensors["cInSF0041"]);
// Freigabe UZ0502
#fbSensorInput(stInSensorHW := "SF0042",
nInSensorNo := "cInSF0042",
stInOutSensor := "DB_Inputs".Sensors["cInSF0042"]);
// Reset UZ0502
#fbSensorInput(stInSensorHW := "SF0043",
nInSensorNo := "cInSF0043",
stInOutSensor := "DB_Inputs".Sensors["cInSF0043"]);
// Freigabe UZ0504
#fbSensorInput(stInSensorHW := "SF0046",
nInSensorNo := "cInSF0046",
stInOutSensor := "DB_Inputs".Sensors["cInSF0046"]);
// Reset UZ0504
#fbSensorInput(stInSensorHW := "SF0047",
nInSensorNo := "cInSF0047",
stInOutSensor := "DB_Inputs".Sensors["cInSF0047"]);
// Freigeben UZ0506
#fbSensorInput(stInSensorHW := "SF0052",
nInSensorNo := "cInSF0052",
stInOutSensor := "DB_Inputs".Sensors["cInSF0052"]);
// Reset UZ0506
#fbSensorInput(stInSensorHW := "SF0053",
nInSensorNo := "cInSF0053",
stInOutSensor := "DB_Inputs".Sensors["cInSF0053"]);
// Reset UZ0507
#fbSensorInput(stInSensorHW := "SF0055",
nInSensorNo := "cInSF0055",
stInOutSensor := "DB_Inputs".Sensors["cInSF0055"]);
// Freigabe UZ0501
#fbSensorInput(stInSensorHW := "SF0056",
nInSensorNo := "cInSF0056",
stInOutSensor := "DB_Inputs".Sensors["cInSF0056"]);
// MSS ausgelöst FC0060
#fbSensorInput(stInSensorHW := "FC0060",
nInSensorNo := "cInFC0060",
stInOutSensor := "DB_Inputs".Sensors["cInFC0060"]);
// MSS ausgelöst FC0061
#fbSensorInput(stInSensorHW := "FC0061",
nInSensorNo := "cInFC0061",
stInOutSensor := "DB_Inputs".Sensors["cInFC0061"]);
// MSS ausgelöst FC0062
#fbSensorInput(stInSensorHW := "FC0062",
nInSensorNo := "cInFC0062",
stInOutSensor := "DB_Inputs".Sensors["cInFC0062"]);
// MSS ausgelöst FC0063
#fbSensorInput(stInSensorHW := "FC0063",
nInSensorNo := "cInFC0063",
stInOutSensor := "DB_Inputs".Sensors["cInFC0063"]);
// MSS ausgelöst FC0064
#fbSensorInput(stInSensorHW := "FC0064",
nInSensorNo := "cInFC0064",
stInOutSensor := "DB_Inputs".Sensors["cInFC0064"]);
// MSS ausgelöst FC0065
#fbSensorInput(stInSensorHW := "FC0065",
nInSensorNo := "cInFC0065",
stInOutSensor := "DB_Inputs".Sensors["cInFC0065"]);
// MSS ausgelöst FC0066
#fbSensorInput(stInSensorHW := "FC0066",
nInSensorNo := "cInFC0066",
stInOutSensor := "DB_Inputs".Sensors["cInFC0066"]);
// MSS ausgelöst FC0067
#fbSensorInput(stInSensorHW := "FC0067",
nInSensorNo := "cInFC0067",
stInOutSensor := "DB_Inputs".Sensors["cInFC0067"]);
// MSS ausgelöst FC0070
#fbSensorInput(stInSensorHW := "FC0070",
nInSensorNo := "cInFC0070",
stInOutSensor := "DB_Inputs".Sensors["cInFC0070"]);
// MSS ausgelöst FC0071
#fbSensorInput(stInSensorHW := "FC0071",
nInSensorNo := "cInFC0071",
stInOutSensor := "DB_Inputs".Sensors["cInFC0071"]);
// MSS ausgelöst FC0072
#fbSensorInput(stInSensorHW := "FC0072",
nInSensorNo := "cInFC0072",
stInOutSensor := "DB_Inputs".Sensors["cInFC0072"]);
// Not Halt Kanal 1 UH05
#fbSensorInput(stInSensorHW := "SF0400",
nInSensorNo := "cInSF0400",
stInOutSensor := "DB_Inputs".Sensors["cInSF0400"]);
// Not Halt Kanal 1 UZ0501
#fbSensorInput(stInSensorHW := "SF0401",
nInSensorNo := "cInSF0401",
stInOutSensor := "DB_Inputs".Sensors["cInSF0401"]);
// Not Halt Kanal 1 UZ0502
#fbSensorInput(stInSensorHW := "SF0402",
nInSensorNo := "cInSF0402",
stInOutSensor := "DB_Inputs".Sensors["cInSF0402"]);
// Not Halt Kanal 2 UH05
#fbSensorInput(stInSensorHW := "SF0404",
nInSensorNo := "cInSF0404",
stInOutSensor := "DB_Inputs".Sensors["cInSF0404"]);
// Not Halt Kanal 2 UZ0501
#fbSensorInput(stInSensorHW := "SF0405",
nInSensorNo := "cInSF0405",
stInOutSensor := "DB_Inputs".Sensors["cInSF0405"]);
// Not Halt Kanal 2 UZ0502
#fbSensorInput(stInSensorHW := "SF0406",
nInSensorNo := "cInSF0406",
stInOutSensor := "DB_Inputs".Sensors["cInSF0406"]);
// Not Halt Kanal 1 UZ0504
#fbSensorInput(stInSensorHW := "SF0470",
nInSensorNo := "cInSF0470",
stInOutSensor := "DB_Inputs".Sensors["cInSF0470"]);
// Not Halt Kanal 1 UZ0506
#fbSensorInput(stInSensorHW := "SF0472",
nInSensorNo := "cInSF0472",
stInOutSensor := "DB_Inputs".Sensors["cInSF0472"]);
// Not Halt Kanal 1 UZ0507
#fbSensorInput(stInSensorHW := "SF0473",
nInSensorNo := "cInSF0473",
stInOutSensor := "DB_Inputs".Sensors["cInSF0473"]);
// Not Halt Kanal 2 UZ0504
#fbSensorInput(stInSensorHW := "SF0474",
nInSensorNo := "cInSF0474",
stInOutSensor := "DB_Inputs".Sensors["cInSF0474"]);
// Not Halt Kanal 2 UZ0506
#fbSensorInput(stInSensorHW := "SF0476",
nInSensorNo := "cInSF0476",
stInOutSensor := "DB_Inputs".Sensors["cInSF0476"]);
// Not Halt Kanal 2 UZ0507
#fbSensorInput(stInSensorHW := "SF0477",
nInSensorNo := "cInSF0477",
stInOutSensor := "DB_Inputs".Sensors["cInSF0477"]);
// Not Halt Schnittstelle von UH02 CH1
#fbSensorInput(stInSensorHW := "SF0541",
nInSensorNo := "cInSF0541",
stInOutSensor := "DB_Inputs".Sensors["cInSF0541"]);
// Not Halt Schnittstelle von System Fortna C, CH1
#fbSensorInput(stInSensorHW := "SF0542",
nInSensorNo := "cInSF0542",
stInOutSensor := "DB_Inputs".Sensors["cInSF0542"]);
// Not Halt Schnittstelle von UH07 CH1
#fbSensorInput(stInSensorHW := "SF0543",
nInSensorNo := "cInSF0543",
stInOutSensor := "DB_Inputs".Sensors["cInSF0543"]);
// Not Halt Schnittstelle von UH02 CH2
#fbSensorInput(stInSensorHW := "SF0545",
nInSensorNo := "cInSF0545",
stInOutSensor := "DB_Inputs".Sensors["cInSF0545"]);
// Not Halt Schnittstelle von System Fortna C, CH2
#fbSensorInput(stInSensorHW := "SF0546",
nInSensorNo := "cInSF0546",
stInOutSensor := "DB_Inputs".Sensors["cInSF0546"]);
// Not Halt Schnittstelle von UH07 CH2
#fbSensorInput(stInSensorHW := "SF0547",
nInSensorNo := "cInSF0547",
stInOutSensor := "DB_Inputs".Sensors["cInSF0547"]);
// in Separator (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3240",
nInSensorNo := "cInBG3240",
stInOutSensor := "DB_Inputs".Sensors["cInBG3240"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3241",
nInSensorNo := "cInBG3241",
stInOutSensor := "DB_Inputs".Sensors["cInBG3241"]);
// in Separator (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3242",
nInSensorNo := "cInBG3242",
stInOutSensor := "DB_Inputs".Sensors["cInBG3242"]);
// Staumelder, Einfahrt (ILS-CV-M5003)
#fbSensorInput(stInSensorHW := "BG3243",
nInSensorNo := "cInBG3243",
stInOutSensor := "DB_Inputs".Sensors["cInBG3243"]);
// Staumelder, Einfahrt (ILS-CV M5003) WS1.1
#fbSensorInput(stInSensorHW := "BG3244",
nInSensorNo := "cInBG3244",
stInOutSensor := "DB_Inputs".Sensors["cInBG3244"]);
// in Separator 1 (ILS-CV M5003) WS1.1
#fbSensorInput(stInSensorHW := "BG3245",
nInSensorNo := "cInBG3245",
stInOutSensor := "DB_Inputs".Sensors["cInBG3245"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5003) WS1.1
#fbSensorInput(stInSensorHW := "BG3246",
nInSensorNo := "cInBG3246",
stInOutSensor := "DB_Inputs".Sensors["cInBG3246"]);
// Sensor Förderer voll (ILS-CV M5003) WS1.1
#fbSensorInput(stInSensorHW := "BG3247",
nInSensorNo := "cInBG3247",
stInOutSensor := "DB_Inputs".Sensors["cInBG3247"]);
// Stausensor (ILS-CV M5003) WS1.1
#fbSensorInput(stInSensorHW := "BG3250",
nInSensorNo := "cInBG3250",
stInOutSensor := "DB_Inputs".Sensors["cInBG3250"]);
// in Separator 2 (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3251",
nInSensorNo := "cInBG3251",
stInOutSensor := "DB_Inputs".Sensors["cInBG3251"]);
// Staumelder, Einfahrt (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3252",
nInSensorNo := "cInBG3252",
stInOutSensor := "DB_Inputs".Sensors["cInBG3252"]);
// in Separator 3 (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3253",
nInSensorNo := "cInBG3253",
stInOutSensor := "DB_Inputs".Sensors["cInBG3253"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3254",
nInSensorNo := "cInBG3254",
stInOutSensor := "DB_Inputs".Sensors["cInBG3254"]);
// MT in Position (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3255",
nInSensorNo := "cInBG3255",
stInOutSensor := "DB_Inputs".Sensors["cInBG3255"]);
// Sensor Förderer voll (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3256",
nInSensorNo := "cInBG3256",
stInOutSensor := "DB_Inputs".Sensors["cInBG3256"]);
// in Separator 4 (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3257",
nInSensorNo := "cInBG3257",
stInOutSensor := "DB_Inputs".Sensors["cInBG3257"]);
// Staumelder, Einfahrt (ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3260",
nInSensorNo := "cInBG3260",
stInOutSensor := "DB_Inputs".Sensors["cInBG3260"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3261",
nInSensorNo := "cInBG3261",
stInOutSensor := "DB_Inputs".Sensors["cInBG3261"]);
// Stausensor 1 (ILS-CV M5004) WS1.1
#fbSensorInput(stInSensorHW := "BG3262",
nInSensorNo := "cInBG3262",
stInOutSensor := "DB_Inputs".Sensors["cInBG3262"]);
// Sensor Förderer voll (ILS CV-M5000)
#fbSensorInput(stInSensorHW := "BG3300",
nInSensorNo := "cInBG3300",
stInOutSensor := "DB_Inputs".Sensors["cInBG3300"]);
// in Separator (ILS CV-M5000)
#fbSensorInput(stInSensorHW := "BG3301",
nInSensorNo := "cInBG3301",
stInOutSensor := "DB_Inputs".Sensors["cInBG3301"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3302",
nInSensorNo := "cInBG3302",
stInOutSensor := "DB_Inputs".Sensors["cInBG3302"]);
// Sensor Förderer voll (ILS CV-M5001)
#fbSensorInput(stInSensorHW := "BG3303",
nInSensorNo := "cInBG3303",
stInOutSensor := "DB_Inputs".Sensors["cInBG3303"]);
// in Separator (ILS CV-M5001)
#fbSensorInput(stInSensorHW := "BG3304",
nInSensorNo := "cInBG3304",
stInOutSensor := "DB_Inputs".Sensors["cInBG3304"]);
// Stausensor (ILS CV-M5001)
#fbSensorInput(stInSensorHW := "BG3305",
nInSensorNo := "cInBG3305",
stInOutSensor := "DB_Inputs".Sensors["cInBG3305"]);
// in Separator (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3306",
nInSensorNo := "cInBG3306",
stInOutSensor := "DB_Inputs".Sensors["cInBG3306"]);
// in Separator (ILS CV-M5002)
#fbSensorInput(stInSensorHW := "BG3307",
nInSensorNo := "cInBG3307",
stInOutSensor := "DB_Inputs".Sensors["cInBG3307"]);
// Stausensor (ILS KR-M5000)
#fbSensorInput(stInSensorHW := "BG3310",
nInSensorNo := "cInBG3310",
stInOutSensor := "DB_Inputs".Sensors["cInBG3310"]);
// Stausensor 1 (ILS CV-M5000)
#fbSensorInput(stInSensorHW := "BG3311",
nInSensorNo := "cInBG3311",
stInOutSensor := "DB_Inputs".Sensors["cInBG3311"]);
// in Separator(ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3312",
nInSensorNo := "cInBG3312",
stInOutSensor := "DB_Inputs".Sensors["cInBG3312"]);
// Staumelder, Einfahrt (ILS-CV M5005)
#fbSensorInput(stInSensorHW := "BG3313",
nInSensorNo := "cInBG3313",
stInOutSensor := "DB_Inputs".Sensors["cInBG3313"]);
// in Separator (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3314",
nInSensorNo := "cInBG3314",
stInOutSensor := "DB_Inputs".Sensors["cInBG3314"]);
// Staumelder, Einfahrt (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3315",
nInSensorNo := "cInBG3315",
stInOutSensor := "DB_Inputs".Sensors["cInBG3315"]);
// in Separator 3 (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3316",
nInSensorNo := "cInBG3316",
stInOutSensor := "DB_Inputs".Sensors["cInBG3316"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3317",
nInSensorNo := "cInBG3317",
stInOutSensor := "DB_Inputs".Sensors["cInBG3317"]);
// MT in Position (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3320",
nInSensorNo := "cInBG3320",
stInOutSensor := "DB_Inputs".Sensors["cInBG3320"]);
// Sensor Förderer voll (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3321",
nInSensorNo := "cInBG3321",
stInOutSensor := "DB_Inputs".Sensors["cInBG3321"]);
// in Separator (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3322",
nInSensorNo := "cInBG3322",
stInOutSensor := "DB_Inputs".Sensors["cInBG3322"]);
// Staumelder, Einfahrt (ILS-KR M5002)
#fbSensorInput(stInSensorHW := "BG3323",
nInSensorNo := "cInBG3323",
stInOutSensor := "DB_Inputs".Sensors["cInBG3323"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3324",
nInSensorNo := "cInBG3324",
stInOutSensor := "DB_Inputs".Sensors["cInBG3324"]);
// Stausensor 1 (ILS CV-M5001)
#fbSensorInput(stInSensorHW := "BG3325",
nInSensorNo := "cInBG3325",
stInOutSensor := "DB_Inputs".Sensors["cInBG3325"]);
// Stausensor (ILS-CV M5005) WS 1.0
#fbSensorInput(stInSensorHW := "BG3326",
nInSensorNo := "cInBG3326",
stInOutSensor := "DB_Inputs".Sensors["cInBG3326"]);
// Teil auf MT (Sep 5MB3307)
#fbSensorInput(stInSensorHW := "BG3327",
nInSensorNo := "cInBG3327",
stInOutSensor := "DB_Inputs".Sensors["cInBG3327"]);
// in Separator (ILS-CV M0510)
#fbSensorInput(stInSensorHW := "BG3330",
nInSensorNo := "cInBG3330",
stInOutSensor := "DB_Inputs".Sensors["cInBG3330"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5000_A)
#fbSensorInput(stInSensorHW := "BG3331",
nInSensorNo := "cInBG3331",
stInOutSensor := "DB_Inputs".Sensors["cInBG3331"]);
// MT in Position (ILS-CV M5000_A)
#fbSensorInput(stInSensorHW := "BG3332",
nInSensorNo := "cInBG3332",
stInOutSensor := "DB_Inputs".Sensors["cInBG3332"]);
// in Separator (ILS-CV M5001_A)
#fbSensorInput(stInSensorHW := "BG3333",
nInSensorNo := "cInBG3333",
stInOutSensor := "DB_Inputs".Sensors["cInBG3333"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5001_A)
#fbSensorInput(stInSensorHW := "BG3334",
nInSensorNo := "cInBG3334",
stInOutSensor := "DB_Inputs".Sensors["cInBG3334"]);
// MT in Position (ILS-CV M5001_A)
#fbSensorInput(stInSensorHW := "BG3335",
nInSensorNo := "cInBG3335",
stInOutSensor := "DB_Inputs".Sensors["cInBG3335"]);
// in Separator(ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3360",
nInSensorNo := "cInBG3360",
stInOutSensor := "DB_Inputs".Sensors["cInBG3360"]);
// Staumelder, Einfahrt (ILS-CV M5006)
#fbSensorInput(stInSensorHW := "BG3361",
nInSensorNo := "cInBG3361",
stInOutSensor := "DB_Inputs".Sensors["cInBG3361"]);
// in Separator (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3362",
nInSensorNo := "cInBG3362",
stInOutSensor := "DB_Inputs".Sensors["cInBG3362"]);
// Staumelder, Einfahrt (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3363",
nInSensorNo := "cInBG3363",
stInOutSensor := "DB_Inputs".Sensors["cInBG3363"]);
// in Separator 3 (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3364",
nInSensorNo := "cInBG3364",
stInOutSensor := "DB_Inputs".Sensors["cInBG3364"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3365",
nInSensorNo := "cInBG3365",
stInOutSensor := "DB_Inputs".Sensors["cInBG3365"]);
// MT in Position (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3366",
nInSensorNo := "cInBG3366",
stInOutSensor := "DB_Inputs".Sensors["cInBG3366"]);
// Sensor Förderer voll (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3367",
nInSensorNo := "cInBG3367",
stInOutSensor := "DB_Inputs".Sensors["cInBG3367"]);
// in Separator (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3370",
nInSensorNo := "cInBG3370",
stInOutSensor := "DB_Inputs".Sensors["cInBG3370"]);
// Staumelder, Einfahrt (ILS-KR M5002)
#fbSensorInput(stInSensorHW := "BG3371",
nInSensorNo := "cInBG3371",
stInOutSensor := "DB_Inputs".Sensors["cInBG3371"]);
// in Separator(ILS-KR-M0500)
#fbSensorInput(stInSensorHW := "BG3372",
nInSensorNo := "cInBG3372",
stInOutSensor := "DB_Inputs".Sensors["cInBG3372"]);
// Staumelder, Einfahrt (ILS-CV M5007
#fbSensorInput(stInSensorHW := "BG3373",
nInSensorNo := "cInBG3373",
stInOutSensor := "DB_Inputs".Sensors["cInBG3373"]);
// in Separator (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3374",
nInSensorNo := "cInBG3374",
stInOutSensor := "DB_Inputs".Sensors["cInBG3374"]);
// Staumelder, Einfahrt (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3375",
nInSensorNo := "cInBG3375",
stInOutSensor := "DB_Inputs".Sensors["cInBG3375"]);
// in Separator 3 (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3376",
nInSensorNo := "cInBG3376",
stInOutSensor := "DB_Inputs".Sensors["cInBG3376"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3377",
nInSensorNo := "cInBG3377",
stInOutSensor := "DB_Inputs".Sensors["cInBG3377"]);
// MT in Position (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3380",
nInSensorNo := "cInBG3380",
stInOutSensor := "DB_Inputs".Sensors["cInBG3380"]);
// Sensor Förderer voll (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3381",
nInSensorNo := "cInBG3381",
stInOutSensor := "DB_Inputs".Sensors["cInBG3381"]);
// in Separator (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3382",
nInSensorNo := "cInBG3382",
stInOutSensor := "DB_Inputs".Sensors["cInBG3382"]);
// Staumelder, Einfahrt (ILS-KR M5002)
#fbSensorInput(stInSensorHW := "BG3383",
nInSensorNo := "cInBG3383",
stInOutSensor := "DB_Inputs".Sensors["cInBG3383"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3384",
nInSensorNo := "cInBG3384",
stInOutSensor := "DB_Inputs".Sensors["cInBG3384"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3385",
nInSensorNo := "cInBG3385",
stInOutSensor := "DB_Inputs".Sensors["cInBG3385"]);
// Stausensor (ILS-CV M5006) WS 2.0
#fbSensorInput(stInSensorHW := "BG3386",
nInSensorNo := "cInBG3386",
stInOutSensor := "DB_Inputs".Sensors["cInBG3386"]);
// Stausensor (ILS-CV M5007) WS 3.0
#fbSensorInput(stInSensorHW := "BG3387",
nInSensorNo := "cInBG3387",
stInOutSensor := "DB_Inputs".Sensors["cInBG3387"]);
// in Separator(ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3420",
nInSensorNo := "cInBG3420",
stInOutSensor := "DB_Inputs".Sensors["cInBG3420"]);
// Staumelder, Einfahrt (ILS-CV M5008)
#fbSensorInput(stInSensorHW := "BG3421",
nInSensorNo := "cInBG3421",
stInOutSensor := "DB_Inputs".Sensors["cInBG3421"]);
// in Separator (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3422",
nInSensorNo := "cInBG3422",
stInOutSensor := "DB_Inputs".Sensors["cInBG3422"]);
// Staumelder, Einfahrt (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3423",
nInSensorNo := "cInBG3423",
stInOutSensor := "DB_Inputs".Sensors["cInBG3423"]);
// in Separator (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3424",
nInSensorNo := "cInBG3424",
stInOutSensor := "DB_Inputs".Sensors["cInBG3424"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3425",
nInSensorNo := "cInBG3425",
stInOutSensor := "DB_Inputs".Sensors["cInBG3425"]);
// MT in Position (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3426",
nInSensorNo := "cInBG3426",
stInOutSensor := "DB_Inputs".Sensors["cInBG3426"]);
// Sensor Förderer voll (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3427",
nInSensorNo := "cInBG3427",
stInOutSensor := "DB_Inputs".Sensors["cInBG3427"]);
// in Separator (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3430",
nInSensorNo := "cInBG3430",
stInOutSensor := "DB_Inputs".Sensors["cInBG3430"]);
// Staumelder, Einfahrt (ILS-KR M0500)
#fbSensorInput(stInSensorHW := "BG3431",
nInSensorNo := "cInBG3431",
stInOutSensor := "DB_Inputs".Sensors["cInBG3431"]);
// in Separator(ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3432",
nInSensorNo := "cInBG3432",
stInOutSensor := "DB_Inputs".Sensors["cInBG3432"]);
// in Separator(ILS-KR-M5002)
#fbSensorInput(stInSensorHW := "BG3433",
nInSensorNo := "cInBG3433",
stInOutSensor := "DB_Inputs".Sensors["cInBG3433"]);
// Stausensor (ILS-KR M5002)
#fbSensorInput(stInSensorHW := "BG3434",
nInSensorNo := "cInBG3434",
stInOutSensor := "DB_Inputs".Sensors["cInBG3434"]);
// Rad dreht (ILS-CV KR-M5002)
#fbSensorInput(stInSensorHW := "BG3435",
nInSensorNo := "cInBG3435",
stInOutSensor := "DB_Inputs".Sensors["cInBG3435"]);
// Staumelder, Einfahrt (ILS-CV M2111)
#fbSensorInput(stInSensorHW := "BG3436",
nInSensorNo := "cInBG3436",
stInOutSensor := "DB_Inputs".Sensors["cInBG3436"]);
// Stausensor (ILS KR-M5002)
#fbSensorInput(stInSensorHW := "BG3437",
nInSensorNo := "cInBG3437",
stInOutSensor := "DB_Inputs".Sensors["cInBG3437"]);
// Längenabfrage Grenze kurz (ILS-CV)
#fbSensorInput(stInSensorHW := "BG3440",
nInSensorNo := "cInBG3440",
stInOutSensor := "DB_Inputs".Sensors["cInBG3440"]);
// Längenabfrage Grenze lang (ILS-CV)
#fbSensorInput(stInSensorHW := "BG3441",
nInSensorNo := "cInBG3441",
stInOutSensor := "DB_Inputs".Sensors["cInBG3441"]);
// Längenabfrage Grenze zu lang (ILS-CV)
#fbSensorInput(stInSensorHW := "BG3442",
nInSensorNo := "cInBG3442",
stInOutSensor := "DB_Inputs".Sensors["cInBG3442"]);
// Verlassensensor Längenmessung (ILS-CV)
#fbSensorInput(stInSensorHW := "BG3443",
nInSensorNo := "cInBG3443",
stInOutSensor := "DB_Inputs".Sensors["cInBG3443"]);
// Stausensor (ILS-CV M5008) WS 4.0
#fbSensorInput(stInSensorHW := "BG3444",
nInSensorNo := "cInBG3444",
stInOutSensor := "DB_Inputs".Sensors["cInBG3444"]);
// Sensor Förderer voll (ILS CV-M5000_A)
#fbSensorInput(stInSensorHW := "BG3450",
nInSensorNo := "cInBG3450",
stInOutSensor := "DB_Inputs".Sensors["cInBG3450"]);
// Stausensor (ILS CV-M5000_A)
#fbSensorInput(stInSensorHW := "BG3451",
nInSensorNo := "cInBG3451",
stInOutSensor := "DB_Inputs".Sensors["cInBG3451"]);
// in Separator (ILS CV-M5000_B)
#fbSensorInput(stInSensorHW := "BG3452",
nInSensorNo := "cInBG3452",
stInOutSensor := "DB_Inputs".Sensors["cInBG3452"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5000_B)
#fbSensorInput(stInSensorHW := "BG3453",
nInSensorNo := "cInBG3453",
stInOutSensor := "DB_Inputs".Sensors["cInBG3453"]);
// MT in Position (ILS-CV M5000_B)
#fbSensorInput(stInSensorHW := "BG3454",
nInSensorNo := "cInBG3454",
stInOutSensor := "DB_Inputs".Sensors["cInBG3454"]);
// Sensor Förderer voll (ILS CV-M5001_A)
#fbSensorInput(stInSensorHW := "BG3455",
nInSensorNo := "cInBG3455",
stInOutSensor := "DB_Inputs".Sensors["cInBG3455"]);
// Stausensor (ILS CV-M5001_A)
#fbSensorInput(stInSensorHW := "BG3456",
nInSensorNo := "cInBG3456",
stInOutSensor := "DB_Inputs".Sensors["cInBG3456"]);
// in Separator (ILS CV-M5001_B)
#fbSensorInput(stInSensorHW := "BG3457",
nInSensorNo := "cInBG3457",
stInOutSensor := "DB_Inputs".Sensors["cInBG3457"]);
// Abfrage Mitnehmerfinger in Position (ILS-CV M5001_B)
#fbSensorInput(stInSensorHW := "BG3460",
nInSensorNo := "cInBG3460",
stInOutSensor := "DB_Inputs".Sensors["cInBG3460"]);
// MT in Position (ILS-CV M5001_B)
#fbSensorInput(stInSensorHW := "BG3461",
nInSensorNo := "cInBG3461",
stInOutSensor := "DB_Inputs".Sensors["cInBG3461"]);
END_FUNCTION_BLOCK
+582
View File
@@ -0,0 +1,582 @@
FUNCTION_BLOCK "FB_Main_skel_UH01"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen UH01 (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
TRO101 : "FB_ILS_MTRO_Vario"; // CV-M0100
TRO102 : "FB_ILS_MTRO_1Sep"; // KR-M0101 / LS2
TRO103 : "FB_ILS_MTRO_1Sep1Swi"; // KR-M0102
TRO104 : "FB_ILS_MTRO_Vario"; // CV-M0103
fbConveyor0105 : "FB_Conveyor"; // CV-M0105
TRO106 : "FB_ILS_MTRO_Vario"; // CV-M0106
TRO107 : "FB_ILS_MTRO_Vario"; // CV-M0107
fbConveyor0109 : "FB_Conveyor"; // CV-M0109
TRO109 : "FB_ILS_MTRO_Vario"; // CV-M0110
fbConveyor4103 : "FB_Conveyor"; // CV-M4103
TRO111 : "FB_ILS_MTRO_Vario"; // CV-M4103_A
fbConveyor4103_B : "FB_Conveyor"; // CV-M4103_B
TRO113 : "FB_ILS_MTRO_Vario"; // CV-M4104
TRO114 : "FB_ILS_MTRO_1Sep"; // CV-M4203
TRO115 : "FB_ILS_MTRO_Vario"; // CV-M4203_A
fbConveyor4203_B : "FB_Conveyor"; // CV-M4203_B
TRO117 : "FB_ILS_MTRO_1Sep1Swi"; // KR-M4204
TRO118 : "FB_ILS_MTRO_1Sep"; // CV-M4302
TRO119 : "FB_ILS_MTRO_Vario"; // CV-M4302_A
TRO120 : "FB_ILS_MTRO_Vario"; // CV-M4302_B
fbConveyor4402_A : "FB_Conveyor"; // CV-M4402_A
TRO122 : "FB_ILS_MTRO_Vario"; // CV-M4402_B
TRO123 : "FB_ILS_MTRO_Vario"; // CV-M4403
TRO124 : "FB_ILS_MTRO_Vario"; // CV-M4501
TRO125 : "FB_ILS_MTRO_Vario"; // CV-M4502
TRO126 : "FB_ILS_MTRO_Vario"; // CV-M4503
fbConveyorM0103 : "FB_Conveyor"; // CV-PM0103
END_VAR
BEGIN
REGION TRO101 (Vario) — CV-M0100
#TRO101.stInSeparator1.Settings.nSeparatorNo := "cSep101.1";
#TRO101.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO101.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3242"];
#TRO101.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3292"];
#TRO101.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3291"];
#TRO101.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3241"];
#TRO101(nInMainTroNo := "cMainTro101",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea101".stJam101_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea101".stJam101_1.stData,
arInOutJamFinger := "DB_JamArea101".stJam101_2.arCarrier, // TODO Topologie
xOutStopper => "MB3290",
xOutVarioMotor => "MA0057",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro101"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO101);
END_REGION
REGION TRO102 (1Sep) — KR-M0101 / LS2
#TRO102.stInSeparator1.Settings.nSeparatorNo := "cSep102.1";
#TRO102.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO102.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO102.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO102.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO102.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3246"];
#TRO102.stInSenJam2 := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO102.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO102(nInMainTroNo := "cMainTro102",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea102".stJam102_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea102".stJam102_1.stData,
arInOutJamExit2 := "DB_JamArea102".stJam102_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea102".stJam102_2.stData,
xOutStopper1 => "MB3246",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro102"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO102);
END_REGION
REGION TRO103 (1Sep1Swi) — KR-M0102
#TRO103.stInSeparator1.Settings.nSeparatorNo := "cSep103.1";
#TRO103.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO103.stInSeparator1.Settings.tTrailingTime := T#100ms; // TODO Timing
#TRO103.stInSeparator1.Settings.tHandlingTime := T#50ms; // TODO Timing
#TRO103.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO103.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3300"];
#TRO103.stInSenJam2 := "DB_Inputs".Sensors["cInBG3304"];
#TRO103.stInSwitch1.Settings.nSwitchNo := "cSwi103.1";
#TRO103(nInMainTroNo := "cMainTro103",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun1 := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea103".stJam103_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea103".stJam103_1.stData,
arInOutJamExit2 := "DB_JamArea103".stJam103_2.arCarrier, // TODO Topologie (Dir1)
stInOutJamExit2 := "DB_JamArea103".stJam103_2.stData,
arInOutJamExit3 := "DB_JamArea103".stJam103_3.arCarrier, // TODO Topologie (Dir2)
stInOutJamExit3 := "DB_JamArea103".stJam103_3.stData,
xOutStopper1 => "MB3300",
xOutSw1ExTo3 => "MB3304",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro103"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO103);
END_REGION
REGION TRO104 (Vario) — CV-M0103
#TRO104.stInSeparator1.Settings.nSeparatorNo := "cSep104.1";
#TRO104.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO104.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3271"];
#TRO104.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3272"];
#TRO104.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3270"];
#TRO104.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3305"];
#TRO104(nInMainTroNo := "cMainTro104",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea104".stJam104_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea104".stJam104_1.stData,
arInOutJamFinger := "DB_JamArea104".stJam104_2.arCarrier, // TODO Topologie
xOutStopper => "MB3271",
xOutVarioMotor => "MAxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro104"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO104);
END_REGION
REGION fbConveyor0105 — CV-M0105
#fbConveyor0105.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor0105.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor0105.Settings.sMotorProtectName := 'FC0063';
#fbConveyor0105(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0063",
xInPowerContactor := "MAxxxx",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor0105);
END_REGION
REGION TRO106 (Vario) — CV-M0106
#TRO106.stInSeparator1.Settings.nSeparatorNo := "cSep106.1";
#TRO106.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO106.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO106.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO106.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3273"];
#TRO106.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3276"];
#TRO106(nInMainTroNo := "cMainTro106",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea106".stJam106_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea106".stJam106_1.stData,
arInOutJamFinger := "DB_JamArea106".stJam106_2.arCarrier, // TODO Topologie
xOutStopper => "MBxxxx",
xOutVarioMotor => "MA0064",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro106"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO106);
END_REGION
REGION TRO107 (Vario) — CV-M0107
#TRO107.stInSeparator1.Settings.nSeparatorNo := "cSep107.1";
#TRO107.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO107.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3283"];
#TRO107.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3282"];
#TRO107.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3284"];
#TRO107.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO107(nInMainTroNo := "cMainTro107",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea107".stJam107_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea107".stJam107_1.stData,
arInOutJamFinger := "DB_JamArea107".stJam107_2.arCarrier, // TODO Topologie
xOutStopper => "MB3283",
xOutVarioMotor => "MA0065",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro107"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO107);
END_REGION
REGION fbConveyor0109 — CV-M0109
#fbConveyor0109.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor0109.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor0109.Settings.sMotorProtectName := 'FC0066';
#fbConveyor0109(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0066",
xInPowerContactor := "MAxxxx",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor0109);
END_REGION
REGION TRO109 (Vario) — CV-M0110
#TRO109.stInSeparator1.Settings.nSeparatorNo := "cSep109.1";
#TRO109.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO109.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO109.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO109.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3285"];
#TRO109.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3294"];
#TRO109(nInMainTroNo := "cMainTro109",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea109".stJam109_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea109".stJam109_1.stData,
arInOutJamFinger := "DB_JamArea109".stJam109_2.arCarrier, // TODO Topologie
xOutStopper => "MBxxxx",
xOutVarioMotor => "MA0067",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro109"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO109);
END_REGION
REGION fbConveyor4103 — CV-M4103
#fbConveyor4103.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor4103.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor4103.Settings.sMotorProtectName := 'FC0146';
#fbConveyor4103(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0146",
xInPowerContactor := "MAxxxx",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor4103);
END_REGION
REGION TRO111 (Vario) — CV-M4103_A
#TRO111.stInSeparator1.Settings.nSeparatorNo := "cSep111.1";
#TRO111.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO111.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3003"];
#TRO111.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3004"];
#TRO111.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3002"];
#TRO111.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3005"];
#TRO111(nInMainTroNo := "cMainTro111",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea111".stJam111_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea111".stJam111_1.stData,
arInOutJamFinger := "DB_JamArea111".stJam111_2.arCarrier, // TODO Topologie
xOutStopper => "MB3003",
xOutVarioMotor => "MA0146",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro111"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO111);
END_REGION
REGION fbConveyor4103_B — CV-M4103_B
#fbConveyor4103_B.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor4103_B.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor4103_B.Settings.sMotorProtectName := 'FC0152';
#fbConveyor4103_B(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0152",
xInPowerContactor := "MA0152",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor4103_B);
END_REGION
REGION TRO113 (Vario) — CV-M4104
#TRO113.stInSeparator1.Settings.nSeparatorNo := "cSep113.1";
#TRO113.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO113.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3025"];
#TRO113.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3026"];
#TRO113.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3027"];
#TRO113.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3001"];
#TRO113(nInMainTroNo := "cMainTro113",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea113".stJam113_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea113".stJam113_1.stData,
arInOutJamFinger := "DB_JamArea113".stJam113_2.arCarrier, // TODO Topologie
xOutStopper => "MB3025",
xOutVarioMotor => "MA0145",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro113"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO113);
END_REGION
REGION TRO114 (1Sep) — CV-M4203
#TRO114.stInSeparator1.Settings.nSeparatorNo := "cSep114.1";
#TRO114.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO114.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO114.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO114.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO114.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3024"];
#TRO114.stInSenJam2 := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO114.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO114(nInMainTroNo := "cMainTro114",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea114".stJam114_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea114".stJam114_1.stData,
arInOutJamExit2 := "DB_JamArea114".stJam114_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea114".stJam114_2.stData,
xOutStopper1 => "MB3024",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro114"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO114);
END_REGION
REGION TRO115 (Vario) — CV-M4203_A
#TRO115.stInSeparator1.Settings.nSeparatorNo := "cSep115.1";
#TRO115.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO115.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3120"];
#TRO115.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3121"];
#TRO115.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO115.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3124"];
#TRO115(nInMainTroNo := "cMainTro115",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea115".stJam115_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea115".stJam115_1.stData,
arInOutJamFinger := "DB_JamArea115".stJam115_2.arCarrier, // TODO Topologie
xOutStopper => "MB3120",
xOutVarioMotor => "MA0147",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro115"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO115);
END_REGION
REGION fbConveyor4203_B — CV-M4203_B
#fbConveyor4203_B.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor4203_B.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor4203_B.Settings.sMotorProtectName := 'FC0153';
#fbConveyor4203_B(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0153",
xInPowerContactor := "MA0153",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor4203_B);
END_REGION
REGION TRO117 (1Sep1Swi) — KR-M4204
#TRO117.stInSeparator1.Settings.nSeparatorNo := "cSep117.1";
#TRO117.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO117.stInSeparator1.Settings.tTrailingTime := T#100ms; // TODO Timing
#TRO117.stInSeparator1.Settings.tHandlingTime := T#50ms; // TODO Timing
#TRO117.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO117.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3010"];
#TRO117.stInSenJam2 := "DB_Inputs".Sensors["cInBG3012"];
#TRO117.stInSwitch1.Settings.nSwitchNo := "cSwi117.1";
#TRO117(nInMainTroNo := "cMainTro117",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun1 := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea117".stJam117_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea117".stJam117_1.stData,
arInOutJamExit2 := "DB_JamArea117".stJam117_2.arCarrier, // TODO Topologie (Dir1)
stInOutJamExit2 := "DB_JamArea117".stJam117_2.stData,
arInOutJamExit3 := "DB_JamArea117".stJam117_3.arCarrier, // TODO Topologie (Dir2)
stInOutJamExit3 := "DB_JamArea117".stJam117_3.stData,
xOutStopper1 => "MB3010",
xOutSw1ExTo3 => "MB3015",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro117"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO117);
END_REGION
REGION TRO118 (1Sep) — CV-M4302
#TRO118.stInSeparator1.Settings.nSeparatorNo := "cSep118.1";
#TRO118.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO118.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO118.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO118.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO118.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3125"];
#TRO118.stInSenJam2 := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO118.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO118(nInMainTroNo := "cMainTro118",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea118".stJam118_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea118".stJam118_1.stData,
arInOutJamExit2 := "DB_JamArea118".stJam118_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea118".stJam118_2.stData,
xOutStopper1 => "MB3125",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro118"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO118);
END_REGION
REGION TRO119 (Vario) — CV-M4302_A
#TRO119.stInSeparator1.Settings.nSeparatorNo := "cSep119.1";
#TRO119.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO119.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO119.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO119.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3122"];
#TRO119.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3150"];
#TRO119(nInMainTroNo := "cMainTro119",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea119".stJam119_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea119".stJam119_1.stData,
arInOutJamFinger := "DB_JamArea119".stJam119_2.arCarrier, // TODO Topologie
xOutStopper => "MBxxxx",
xOutVarioMotor => "MA0154",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro119"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO119);
END_REGION
REGION TRO120 (Vario) — CV-M4302_B
#TRO120.stInSeparator1.Settings.nSeparatorNo := "cSep120.1";
#TRO120.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO120.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3130"];
#TRO120.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3131"];
#TRO120.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3132"];
#TRO120.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3126"];
#TRO120(nInMainTroNo := "cMainTro120",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea120".stJam120_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea120".stJam120_1.stData,
arInOutJamFinger := "DB_JamArea120".stJam120_2.arCarrier, // TODO Topologie
xOutStopper => "MB3130",
xOutVarioMotor => "MA0150",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro120"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO120);
END_REGION
REGION fbConveyor4402_A — CV-M4402_A
#fbConveyor4402_A.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor4402_A.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor4402_A.Settings.sMotorProtectName := 'FC0155';
#fbConveyor4402_A(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0155",
xInPowerContactor := "MA0155",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor4402_A);
END_REGION
REGION TRO122 (Vario) — CV-M4402_B
#TRO122.stInSeparator1.Settings.nSeparatorNo := "cSep122.1";
#TRO122.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO122.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3135"];
#TRO122.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3136"];
#TRO122.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3137"];
#TRO122.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3134"];
#TRO122(nInMainTroNo := "cMainTro122",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea122".stJam122_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea122".stJam122_1.stData,
arInOutJamFinger := "DB_JamArea122".stJam122_2.arCarrier, // TODO Topologie
xOutStopper => "MB3135",
xOutVarioMotor => "MA0151",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro122"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO122);
END_REGION
REGION TRO123 (Vario) — CV-M4403
#TRO123.stInSeparator1.Settings.nSeparatorNo := "cSep123.1";
#TRO123.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO123.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3073"];
#TRO123.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3074"];
#TRO123.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3075"];
#TRO123.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3071"];
#TRO123(nInMainTroNo := "cMainTro123",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea123".stJam123_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea123".stJam123_1.stData,
arInOutJamFinger := "DB_JamArea123".stJam123_2.arCarrier, // TODO Topologie
xOutStopper => "MB3073",
xOutVarioMotor => "MA0143",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro123"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO123);
END_REGION
REGION TRO124 (Vario) — CV-M4501
#TRO124.stInSeparator1.Settings.nSeparatorNo := "cSep124.1";
#TRO124.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO124.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3020"];
#TRO124.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3011"];
#TRO124.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3021"];
#TRO124.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3017"];
#TRO124(nInMainTroNo := "cMainTro124",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea124".stJam124_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea124".stJam124_1.stData,
arInOutJamFinger := "DB_JamArea124".stJam124_2.arCarrier, // TODO Topologie
xOutStopper => "MB3020",
xOutVarioMotor => "MA0144",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro124"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO124);
END_REGION
REGION TRO125 (Vario) — CV-M4502
#TRO125.stInSeparator1.Settings.nSeparatorNo := "cSep125.1";
#TRO125.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO125.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3063"];
#TRO125.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3064"];
#TRO125.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3065"];
#TRO125.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3067"];
#TRO125(nInMainTroNo := "cMainTro125",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea125".stJam125_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea125".stJam125_1.stData,
arInOutJamFinger := "DB_JamArea125".stJam125_2.arCarrier, // TODO Topologie
xOutStopper => "MB3063",
xOutVarioMotor => "MA0142",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro125"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO125);
END_REGION
REGION TRO126 (Vario) — CV-M4503
#TRO126.stInSeparator1.Settings.nSeparatorNo := "cSep126.1";
#TRO126.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO126.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3060"];
#TRO126.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3082"];
#TRO126.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3081"];
#TRO126.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3061"];
#TRO126(nInMainTroNo := "cMainTro126",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea126".stJam126_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea126".stJam126_1.stData,
arInOutJamFinger := "DB_JamArea126".stJam126_2.arCarrier, // TODO Topologie
xOutStopper => "MB3060",
xOutVarioMotor => "MA0141",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro126"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO126);
END_REGION
REGION fbConveyorM0103 — CV-PM0103
#fbConveyorM0103.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyorM0103.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyorM0103.Settings.sMotorProtectName := 'FCxxxx';
#fbConveyorM0103(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FCxxxx",
xInPowerContactor := "MA0062",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyorM0103);
END_REGION
END_FUNCTION_BLOCK
+988
View File
@@ -0,0 +1,988 @@
FUNCTION_BLOCK "FB_Main_skel_UH02"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen UH02 (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
TRO201 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1101 / Block 1.1.1
TRO202 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1102 / Block 1.1.3
TRO203 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1201 / Block 1.2.1
TRO204 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1202 / Block 1.2.3
TRO205 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1303 / Block 1.3.1
TRO206 : "FB_ILS_MTRO_PinStore_Auto"; // KR-K1304 / Block 1.3.3
TRO207 : "FB_ILS_MTRO_1Sep"; // KR-M1100
TRO208 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1101 / Block 1.1.1
TRO209 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1102 / Block 1.1.3
TRO210 : "FB_ILS_MTRO_1Sep"; // KR-M1103
TRO211 : "FB_ILS_MTRO_1Sep"; // CV-M1104
TRO212 : "FB_ILS_MTRO_Vario"; // CV-M1105
TRO213 : "FB_ILS_MTRO_Vario"; // CV-M1106 / Block 1.1.2
TRO214 : "FB_ILS_MTRO_Vario"; // CV-M1107
TRO215 : "FB_ILS_MTRO_Vario"; // CV-M1108 / Block 1.1.4
TRO216 : "FB_ILS_MTRO_Vario"; // CV-M1109
fbConveyor1110 : "FB_Conveyor"; // KR-M1110
TRO218 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1201 / Block 1.2.1
TRO219 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1202 / Block 1.2.3
TRO220 : "FB_ILS_MTRO_1Sep"; // KR-M1203
fbConveyor1204 : "FB_Conveyor"; // KR-M1204
TRO222 : "FB_ILS_MTRO_Vario"; // CV-M1205
TRO223 : "FB_ILS_MTRO_Vario"; // CV-M1206
TRO224 : "FB_ILS_MTRO_Vario"; // CV-M1207 / Block 1.2.3
TRO225 : "FB_ILS_MTRO_Vario"; // CV-M1208
TRO226 : "FB_ILS_MTRO_Vario"; // CV-M1209
TRO227 : "FB_ILS_MTRO_1Sep"; // KR-M1301
TRO228 : "FB_ILS_MTRO_1Sep"; // KR-M1302
TRO229 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1303 / Block 1.3.1
TRO230 : "FB_ILS_MTRO_PinStore_Auto"; // KR-M1304 / Block 1.3.3
TRO231 : "FB_ILS_MTRO_Vario"; // CV-M1305
TRO232 : "FB_ILS_MTRO_Vario"; // CV-M1306 / Block 1.3.2
TRO233 : "FB_ILS_MTRO_Vario"; // CV-M1307
TRO234 : "FB_ILS_MTRO_Vario"; // CV-M1308
TRO235 : "FB_ILS_MTRO_Vario"; // CV-M1309
TRO236 : "FB_ILS_MTRO_Vario"; // CV-M1401
TRO237 : "FB_ILS_MTRO_Vario"; // CV-M1501
TRO238 : "FB_ILS_MTRO_Vario"; // CV-M1601
TRO239 : "FB_ILS_MTRO_1Sep"; // CV-M1801
TRO240 : "FB_ILS_MTRO_Vario"; // CV-M4701
END_VAR
BEGIN
REGION TRO201 (PinStore_Auto) — KR-K1101 / Block 1.1.1
#TRO201.stInSeparator1.Settings.nSeparatorNo := "cSep201.1";
#TRO201.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO201.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO201.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO201.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO201.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO201.stInSenJam2 := "DB_Inputs".Sensors["cInBG3065"];
#TRO201.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO201(nInMainTroNo := "cMainTro201",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea201".stJam201_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea201".stJam201_1.stData,
arInOutJamExit2 := "DB_JamArea201".stJam201_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea201".stJam201_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro201"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO201);
END_REGION
REGION TRO202 (PinStore_Auto) — KR-K1102 / Block 1.1.3
#TRO202.stInSeparator1.Settings.nSeparatorNo := "cSep202.1";
#TRO202.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO202.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO202.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO202.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO202.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO202.stInSenJam2 := "DB_Inputs".Sensors["cInBG3125"];
#TRO202.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO202(nInMainTroNo := "cMainTro202",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea202".stJam202_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea202".stJam202_1.stData,
arInOutJamExit2 := "DB_JamArea202".stJam202_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea202".stJam202_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro202"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO202);
END_REGION
REGION TRO203 (PinStore_Auto) — KR-K1201 / Block 1.2.1
#TRO203.stInSeparator1.Settings.nSeparatorNo := "cSep203.1";
#TRO203.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO203.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO203.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO203.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO203.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO203.stInSenJam2 := "DB_Inputs".Sensors["cInBG3553"];
#TRO203.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO203(nInMainTroNo := "cMainTro203",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea203".stJam203_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea203".stJam203_1.stData,
arInOutJamExit2 := "DB_JamArea203".stJam203_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea203".stJam203_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro203"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO203);
END_REGION
REGION TRO204 (PinStore_Auto) — KR-K1202 / Block 1.2.3
#TRO204.stInSeparator1.Settings.nSeparatorNo := "cSep204.1";
#TRO204.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO204.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO204.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO204.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO204.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO204.stInSenJam2 := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO204.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO204(nInMainTroNo := "cMainTro204",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea204".stJam204_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea204".stJam204_1.stData,
arInOutJamExit2 := "DB_JamArea204".stJam204_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea204".stJam204_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro204"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO204);
END_REGION
REGION TRO205 (PinStore_Auto) — KR-K1303 / Block 1.3.1
#TRO205.stInSeparator1.Settings.nSeparatorNo := "cSep205.1";
#TRO205.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO205.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO205.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO205.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO205.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO205.stInSenJam2 := "DB_Inputs".Sensors["cInBG4273"];
#TRO205.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO205(nInMainTroNo := "cMainTro205",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea205".stJam205_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea205".stJam205_1.stData,
arInOutJamExit2 := "DB_JamArea205".stJam205_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea205".stJam205_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro205"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO205);
END_REGION
REGION TRO206 (PinStore_Auto) — KR-K1304 / Block 1.3.3
#TRO206.stInSeparator1.Settings.nSeparatorNo := "cSep206.1";
#TRO206.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO206.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO206.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO206.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO206.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO206.stInSenJam2 := "DB_Inputs".Sensors["cInBG4375"];
#TRO206.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO206(nInMainTroNo := "cMainTro206",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea206".stJam206_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea206".stJam206_1.stData,
arInOutJamExit2 := "DB_JamArea206".stJam206_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea206".stJam206_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro206"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO206);
END_REGION
REGION TRO207 (1Sep) — KR-M1100
#TRO207.stInSeparator1.Settings.nSeparatorNo := "cSep207.1";
#TRO207.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO207.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO207.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO207.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO207.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4440"];
#TRO207.stInSenJam2 := "DB_Inputs".Sensors["cInBG4442"];
#TRO207.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO207(nInMainTroNo := "cMainTro207",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea207".stJam207_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea207".stJam207_1.stData,
arInOutJamExit2 := "DB_JamArea207".stJam207_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea207".stJam207_2.stData,
xOutStopper1 => "MB4440",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro207"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO207);
END_REGION
REGION TRO208 (PinStore_Auto) — KR-M1101 / Block 1.1.1
#TRO208.stInSeparator1.Settings.nSeparatorNo := "cSep208.1";
#TRO208.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO208.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO208.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO208.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO208.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO208.stInSenJam2 := "DB_Inputs".Sensors["cInBG3003"];
#TRO208.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO208(nInMainTroNo := "cMainTro208",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea208".stJam208_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea208".stJam208_1.stData,
arInOutJamExit2 := "DB_JamArea208".stJam208_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea208".stJam208_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro208"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO208);
END_REGION
REGION TRO209 (PinStore_Auto) — KR-M1102 / Block 1.1.3
#TRO209.stInSeparator1.Settings.nSeparatorNo := "cSep209.1";
#TRO209.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO209.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO209.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO209.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO209.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO209.stInSenJam2 := "DB_Inputs".Sensors["cInBG3123"];
#TRO209.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO209(nInMainTroNo := "cMainTro209",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea209".stJam209_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea209".stJam209_1.stData,
arInOutJamExit2 := "DB_JamArea209".stJam209_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea209".stJam209_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro209"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO209);
END_REGION
REGION TRO210 (1Sep) — KR-M1103
#TRO210.stInSeparator1.Settings.nSeparatorNo := "cSep210.1";
#TRO210.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO210.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO210.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO210.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO210.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3245"];
#TRO210.stInSenJam2 := "DB_Inputs".Sensors["cInBG3242"];
#TRO210.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO210(nInMainTroNo := "cMainTro210",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea210".stJam210_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea210".stJam210_1.stData,
arInOutJamExit2 := "DB_JamArea210".stJam210_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea210".stJam210_2.stData,
xOutStopper1 => "MB3245",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro210"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO210);
END_REGION
REGION TRO211 (1Sep) — CV-M1104
#TRO211.stInSeparator1.Settings.nSeparatorNo := "cSep211.1";
#TRO211.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO211.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO211.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO211.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO211.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3425"];
#TRO211.stInSenJam2 := "DB_Inputs".Sensors["cInBG3362"];
#TRO211.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO211(nInMainTroNo := "cMainTro211",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea211".stJam211_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea211".stJam211_1.stData,
arInOutJamExit2 := "DB_JamArea211".stJam211_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea211".stJam211_2.stData,
xOutStopper1 => "MB3425",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro211"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO211);
END_REGION
REGION TRO212 (Vario) — CV-M1105
#TRO212.stInSeparator1.Settings.nSeparatorNo := "cSep212.1";
#TRO212.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO212.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3000"];
#TRO212.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3247"];
#TRO212.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3243"];
#TRO212.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3005"];
#TRO212(nInMainTroNo := "cMainTro212",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea212".stJam212_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea212".stJam212_1.stData,
arInOutJamFinger := "DB_JamArea212".stJam212_2.arCarrier, // TODO Topologie
xOutStopper => "MB3000",
xOutVarioMotor => "MA0142",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro212"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO212);
END_REGION
REGION TRO213 (Vario) — CV-M1106 / Block 1.1.2
#TRO213.stInSeparator1.Settings.nSeparatorNo := "cSep213.1";
#TRO213.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO213.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3060"];
#TRO213.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3307"];
#TRO213.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO213.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3301"];
#TRO213(nInMainTroNo := "cMainTro213",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea213".stJam213_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea213".stJam213_1.stData,
arInOutJamFinger := "DB_JamArea213".stJam213_2.arCarrier, // TODO Topologie
xOutStopper => "MB3060",
xOutVarioMotor => "MA0143",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro213"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO213);
END_REGION
REGION TRO214 (Vario) — CV-M1107
#TRO214.stInSeparator1.Settings.nSeparatorNo := "cSep214.1";
#TRO214.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO214.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3364"];
#TRO214.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3367"];
#TRO214.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3363"];
#TRO214.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3361"];
#TRO214(nInMainTroNo := "cMainTro214",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea214".stJam214_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea214".stJam214_1.stData,
arInOutJamFinger := "DB_JamArea214".stJam214_2.arCarrier, // TODO Topologie
xOutStopper => "MB3364",
xOutVarioMotor => "MA0144",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro214"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO214);
END_REGION
REGION TRO215 (Vario) — CV-M1108 / Block 1.1.4
#TRO215.stInSeparator1.Settings.nSeparatorNo := "cSep215.1";
#TRO215.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO215.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3424"];
#TRO215.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3427"];
#TRO215.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3423"];
#TRO215.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3421"];
#TRO215(nInMainTroNo := "cMainTro215",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea215".stJam215_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea215".stJam215_1.stData,
arInOutJamFinger := "DB_JamArea215".stJam215_2.arCarrier, // TODO Topologie
xOutStopper => "MB3424",
xOutVarioMotor => "MA0145",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro215"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO215);
END_REGION
REGION TRO216 (Vario) — CV-M1109
#TRO216.stInSeparator1.Settings.nSeparatorNo := "cSep216.1";
#TRO216.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO216.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3143"];
#TRO216.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3145"];
#TRO216.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3144"];
#TRO216.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO216(nInMainTroNo := "cMainTro216",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea216".stJam216_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea216".stJam216_1.stData,
arInOutJamFinger := "DB_JamArea216".stJam216_2.arCarrier, // TODO Topologie
xOutStopper => "MB3143",
xOutVarioMotor => "MA0146",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro216"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO216);
END_REGION
REGION fbConveyor1110 — KR-M1110
#fbConveyor1110.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor1110.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor1110.Settings.sMotorProtectName := 'FC0075';
#fbConveyor1110(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0075",
xInPowerContactor := "MA0075",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor1110);
END_REGION
REGION TRO218 (PinStore_Auto) — KR-M1201 / Block 1.2.1
#TRO218.stInSeparator1.Settings.nSeparatorNo := "cSep218.1";
#TRO218.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO218.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO218.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO218.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO218.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO218.stInSenJam2 := "DB_Inputs".Sensors["cInBG3483"];
#TRO218.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO218(nInMainTroNo := "cMainTro218",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea218".stJam218_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea218".stJam218_1.stData,
arInOutJamExit2 := "DB_JamArea218".stJam218_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea218".stJam218_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro218"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO218);
END_REGION
REGION TRO219 (PinStore_Auto) — KR-M1202 / Block 1.2.3
#TRO219.stInSeparator1.Settings.nSeparatorNo := "cSep219.1";
#TRO219.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO219.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO219.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO219.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO219.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO219.stInSenJam2 := "DB_Inputs".Sensors["cInBG3603"];
#TRO219.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO219(nInMainTroNo := "cMainTro219",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea219".stJam219_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea219".stJam219_1.stData,
arInOutJamExit2 := "DB_JamArea219".stJam219_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea219".stJam219_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro219"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO219);
END_REGION
REGION TRO220 (1Sep) — KR-M1203
#TRO220.stInSeparator1.Settings.nSeparatorNo := "cSep220.1";
#TRO220.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO220.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO220.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO220.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO220.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3725"];
#TRO220.stInSenJam2 := "DB_Inputs".Sensors["cInBG3722"];
#TRO220.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO220(nInMainTroNo := "cMainTro220",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea220".stJam220_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea220".stJam220_1.stData,
arInOutJamExit2 := "DB_JamArea220".stJam220_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea220".stJam220_2.stData,
xOutStopper1 => "MB3725",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro220"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO220);
END_REGION
REGION fbConveyor1204 — KR-M1204
#fbConveyor1204.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor1204.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor1204.Settings.sMotorProtectName := 'FC0201';
#fbConveyor1204(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FC0201",
xInPowerContactor := "MA0201",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor1204);
END_REGION
REGION TRO222 (Vario) — CV-M1205
#TRO222.stInSeparator1.Settings.nSeparatorNo := "cSep222.1";
#TRO222.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO222.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3480"];
#TRO222.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3727"];
#TRO222.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3723"];
#TRO222.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3485"];
#TRO222(nInMainTroNo := "cMainTro222",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea222".stJam222_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea222".stJam222_1.stData,
arInOutJamFinger := "DB_JamArea222".stJam222_2.arCarrier, // TODO Topologie
xOutStopper => "MB3480",
xOutVarioMotor => "MA0064",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro222"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO222);
END_REGION
REGION TRO223 (Vario) — CV-M1206
#TRO223.stInSeparator1.Settings.nSeparatorNo := "cSep223.1";
#TRO223.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO223.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3540"];
#TRO223.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3787"];
#TRO223.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3783"];
#TRO223.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3545"];
#TRO223(nInMainTroNo := "cMainTro223",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea223".stJam223_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea223".stJam223_1.stData,
arInOutJamFinger := "DB_JamArea223".stJam223_2.arCarrier, // TODO Topologie
xOutStopper => "MB3540",
xOutVarioMotor => "MA0065",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro223"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO223);
END_REGION
REGION TRO224 (Vario) — CV-M1207 / Block 1.2.3
#TRO224.stInSeparator1.Settings.nSeparatorNo := "cSep224.1";
#TRO224.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO224.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3604"];
#TRO224.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3847"];
#TRO224.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3843"];
#TRO224.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3841"];
#TRO224(nInMainTroNo := "cMainTro224",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea224".stJam224_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea224".stJam224_1.stData,
arInOutJamFinger := "DB_JamArea224".stJam224_2.arCarrier, // TODO Topologie
xOutStopper => "MB3604",
xOutVarioMotor => "MA0066",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro224"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO224);
END_REGION
REGION TRO225 (Vario) — CV-M1208
#TRO225.stInSeparator1.Settings.nSeparatorNo := "cSep225.1";
#TRO225.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO225.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3660"];
#TRO225.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3907"];
#TRO225.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3903"];
#TRO225.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3665"];
#TRO225(nInMainTroNo := "cMainTro225",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea225".stJam225_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea225".stJam225_1.stData,
arInOutJamFinger := "DB_JamArea225".stJam225_2.arCarrier, // TODO Topologie
xOutStopper => "MB3660",
xOutVarioMotor => "MA0067",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro225"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO225);
END_REGION
REGION TRO226 (Vario) — CV-M1209
#TRO226.stInSeparator1.Settings.nSeparatorNo := "cSep226.1";
#TRO226.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO226.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3622"];
#TRO226.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3624"];
#TRO226.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3623"];
#TRO226.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO226(nInMainTroNo := "cMainTro226",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea226".stJam226_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea226".stJam226_1.stData,
arInOutJamFinger := "DB_JamArea226".stJam226_2.arCarrier, // TODO Topologie
xOutStopper => "MB3622",
xOutVarioMotor => "MA0070",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro226"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO226);
END_REGION
REGION TRO227 (1Sep) — KR-M1301
#TRO227.stInSeparator1.Settings.nSeparatorNo := "cSep227.1";
#TRO227.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO227.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO227.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO227.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO227.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3965"];
#TRO227.stInSenJam2 := "DB_Inputs".Sensors["cInBG3962"];
#TRO227.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO227(nInMainTroNo := "cMainTro227",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea227".stJam227_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea227".stJam227_1.stData,
arInOutJamExit2 := "DB_JamArea227".stJam227_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea227".stJam227_2.stData,
xOutStopper1 => "MB3965",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro227"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO227);
END_REGION
REGION TRO228 (1Sep) — KR-M1302
#TRO228.stInSeparator1.Settings.nSeparatorNo := "cSep228.1";
#TRO228.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO228.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO228.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO228.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO228.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4080"];
#TRO228.stInSenJam2 := "DB_Inputs".Sensors["cInBG4082"];
#TRO228.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO228(nInMainTroNo := "cMainTro228",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea228".stJam228_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea228".stJam228_1.stData,
arInOutJamExit2 := "DB_JamArea228".stJam228_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea228".stJam228_2.stData,
xOutStopper1 => "MB4080",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro228"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO228);
END_REGION
REGION TRO229 (PinStore_Auto) — KR-M1303 / Block 1.3.1
#TRO229.stInSeparator1.Settings.nSeparatorNo := "cSep229.1";
#TRO229.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO229.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO229.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO229.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO229.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO229.stInSenJam2 := "DB_Inputs".Sensors["cInBG4203"];
#TRO229.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO229(nInMainTroNo := "cMainTro229",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea229".stJam229_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea229".stJam229_1.stData,
arInOutJamExit2 := "DB_JamArea229".stJam229_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea229".stJam229_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro229"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO229);
END_REGION
REGION TRO230 (PinStore_Auto) — KR-M1304 / Block 1.3.3
#TRO230.stInSeparator1.Settings.nSeparatorNo := "cSep230.1";
#TRO230.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO230.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO230.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO230.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO230.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO230.stInSenJam2 := "DB_Inputs".Sensors["cInBG4323"];
#TRO230.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO230(nInMainTroNo := "cMainTro230",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea230".stJam230_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea230".stJam230_1.stData,
arInOutJamExit2 := "DB_JamArea230".stJam230_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea230".stJam230_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro230"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO230);
END_REGION
REGION TRO231 (Vario) — CV-M1305
#TRO231.stInSeparator1.Settings.nSeparatorNo := "cSep231.1";
#TRO231.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO231.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3960"];
#TRO231.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3967"];
#TRO231.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3963"];
#TRO231.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3961"];
#TRO231(nInMainTroNo := "cMainTro231",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea231".stJam231_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea231".stJam231_1.stData,
arInOutJamFinger := "DB_JamArea231".stJam231_2.arCarrier, // TODO Topologie
xOutStopper => "MB3960",
xOutVarioMotor => "MA0262",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro231"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO231);
END_REGION
REGION TRO232 (Vario) — CV-M1306 / Block 1.3.2
#TRO232.stInSeparator1.Settings.nSeparatorNo := "cSep232.1";
#TRO232.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO232.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4024"];
#TRO232.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4027"];
#TRO232.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4023"];
#TRO232.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4021"];
#TRO232(nInMainTroNo := "cMainTro232",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea232".stJam232_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea232".stJam232_1.stData,
arInOutJamFinger := "DB_JamArea232".stJam232_2.arCarrier, // TODO Topologie
xOutStopper => "MB4024",
xOutVarioMotor => "MA0263",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro232"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO232);
END_REGION
REGION TRO233 (Vario) — CV-M1307
#TRO233.stInSeparator1.Settings.nSeparatorNo := "cSep233.1";
#TRO233.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO233.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4084"];
#TRO233.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4087"];
#TRO233.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4083"];
#TRO233.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4081"];
#TRO233(nInMainTroNo := "cMainTro233",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea233".stJam233_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea233".stJam233_1.stData,
arInOutJamFinger := "DB_JamArea233".stJam233_2.arCarrier, // TODO Topologie
xOutStopper => "MB4084",
xOutVarioMotor => "MA0264",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro233"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO233);
END_REGION
REGION TRO234 (Vario) — CV-M1308
#TRO234.stInSeparator1.Settings.nSeparatorNo := "cSep234.1";
#TRO234.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO234.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4144"];
#TRO234.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4147"];
#TRO234.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4143"];
#TRO234.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4141"];
#TRO234(nInMainTroNo := "cMainTro234",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea234".stJam234_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea234".stJam234_1.stData,
arInOutJamFinger := "DB_JamArea234".stJam234_2.arCarrier, // TODO Topologie
xOutStopper => "MB4144",
xOutVarioMotor => "MA0265",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro234"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO234);
END_REGION
REGION TRO235 (Vario) — CV-M1309
#TRO235.stInSeparator1.Settings.nSeparatorNo := "cSep235.1";
#TRO235.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO235.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4334"];
#TRO235.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4344"];
#TRO235.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4343"];
#TRO235.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO235(nInMainTroNo := "cMainTro235",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea235".stJam235_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea235".stJam235_1.stData,
arInOutJamFinger := "DB_JamArea235".stJam235_2.arCarrier, // TODO Topologie
xOutStopper => "MB4342",
xOutVarioMotor => "MA0266",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro235"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO235);
END_REGION
REGION TRO236 (Vario) — CV-M1401
#TRO236.stInSeparator1.Settings.nSeparatorNo := "cSep236.1";
#TRO236.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO236.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4445"];
#TRO236.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4461"];
#TRO236.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4462"];
#TRO236.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4447"];
#TRO236(nInMainTroNo := "cMainTro236",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea236".stJam236_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea236".stJam236_1.stData,
arInOutJamFinger := "DB_JamArea236".stJam236_2.arCarrier, // TODO Topologie
xOutStopper => "MB4460",
xOutVarioMotor => "MA0071",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro236"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO236);
END_REGION
REGION TRO237 (Vario) — CV-M1501
#TRO237.stInSeparator1.Settings.nSeparatorNo := "cSep237.1";
#TRO237.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO237.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4522"];
#TRO237.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4542"];
#TRO237.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4541"];
#TRO237.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO237(nInMainTroNo := "cMainTro237",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea237".stJam237_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea237".stJam237_1.stData,
arInOutJamFinger := "DB_JamArea237".stJam237_2.arCarrier, // TODO Topologie
xOutStopper => "MB4512",
xOutVarioMotor => "MA0072",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro237"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO237);
END_REGION
REGION TRO238 (Vario) — CV-M1601
#TRO238.stInSeparator1.Settings.nSeparatorNo := "cSep238.1";
#TRO238.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO238.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4526"];
#TRO238.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4545"];
#TRO238.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4544"];
#TRO238.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4525"];
#TRO238(nInMainTroNo := "cMainTro238",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea238".stJam238_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea238".stJam238_1.stData,
arInOutJamFinger := "DB_JamArea238".stJam238_2.arCarrier, // TODO Topologie
xOutStopper => "MB4526",
xOutVarioMotor => "MA0073",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro238"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO238);
END_REGION
REGION TRO239 (1Sep) — CV-M1801
#TRO239.stInSeparator1.Settings.nSeparatorNo := "cSep239.1";
#TRO239.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO239.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO239.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO239.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO239.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4535"];
#TRO239.stInSenJam2 := "DB_Inputs".Sensors["cInBG4534"];
#TRO239.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO239(nInMainTroNo := "cMainTro239",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea239".stJam239_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea239".stJam239_1.stData,
arInOutJamExit2 := "DB_JamArea239".stJam239_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea239".stJam239_2.stData,
xOutStopper1 => "MB4535",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro239"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO239);
END_REGION
REGION TRO240 (Vario) — CV-M4701
#TRO240.stInSeparator1.Settings.nSeparatorNo := "cSep240.1";
#TRO240.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO240.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG4530"];
#TRO240.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG4533"];
#TRO240.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG4531"];
#TRO240.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG4532"];
#TRO240(nInMainTroNo := "cMainTro240",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea240".stJam240_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea240".stJam240_1.stData,
arInOutJamFinger := "DB_JamArea240".stJam240_2.arCarrier, // TODO Topologie
xOutStopper => "MB4530",
xOutVarioMotor => "MA0074",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro240"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO240);
END_REGION
END_FUNCTION_BLOCK
File diff suppressed because it is too large Load Diff
+308
View File
@@ -0,0 +1,308 @@
FUNCTION_BLOCK "FB_Main_skel_UH04"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen UH04 (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
TRO401 : "FB_ILS_MTRO_Vario"; // CV-M0401
fbConveyor4000 : "FB_Conveyor"; // CV-M4000
TRO403 : "FB_ILS_MTRO_Vario"; // CV-M4001
TRO404 : "FB_ILS_MTRO_Vario"; // CV-M4002
TRO405 : "FB_ILS_MTRO_1Sep1Swi"; // KR-M4003
TRO406 : "FB_ILS_MTRO_Vario"; // CV-M4004
TRO407 : "FB_ILS_MTRO_Vario"; // CV-M4005
TRO408 : "FB_ILS_MTRO_Vario"; // CV-M4006
TRO409 : "FB_ILS_MTRO_Vario"; // CV-M4007
TRO410 : "FB_ILS_MTRO_Vario"; // CV-M4008
TRO411 : "FB_ILS_MTRO_Vario"; // CV-M4009
TRO412 : "FB_ILS_MTRO_Vario"; // CV-M4010
TRO413 : "FB_ILS_MTRO_Vario"; // CV-M4011
END_VAR
BEGIN
REGION TRO401 (Vario) — CV-M0401
#TRO401.stInSeparator1.Settings.nSeparatorNo := "cSep401.1";
#TRO401.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO401.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3260"];
#TRO401.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3261"];
#TRO401.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3262"];
#TRO401.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO401(nInMainTroNo := "cMainTro401",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea401".stJam401_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea401".stJam401_1.stData,
arInOutJamFinger := "DB_JamArea401".stJam401_2.arCarrier, // TODO Topologie
xOutStopper => "MB3260",
xOutVarioMotor => "MAxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro401"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO401);
END_REGION
REGION fbConveyor4000 — CV-M4000
#fbConveyor4000.Settings.tEnergySafeTime := "cTimeEnergySafe";
#fbConveyor4000.Settings.xGridActive := FALSE; // TODO Grid
#fbConveyor4000.Settings.sMotorProtectName := 'FCxxxx';
#fbConveyor4000(xInEnabled := TRUE, // TODO Enable
xInMotorProtection := "FCxxxx",
xInPowerContactor := "MA0070",
stInOutHMI := "DB_Interface_HMI".stConveyors.fbConveyor4000);
END_REGION
REGION TRO403 (Vario) — CV-M4001
#TRO403.stInSeparator1.Settings.nSeparatorNo := "cSep403.1";
#TRO403.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO403.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3242"];
#TRO403.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO403.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3244"];
#TRO403.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3246"];
#TRO403(nInMainTroNo := "cMainTro403",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea403".stJam403_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea403".stJam403_1.stData,
arInOutJamFinger := "DB_JamArea403".stJam403_2.arCarrier, // TODO Topologie
xOutStopper => "MB3242",
xOutVarioMotor => "MA0071",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro403"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO403);
END_REGION
REGION TRO404 (Vario) — CV-M4002
#TRO404.stInSeparator1.Settings.nSeparatorNo := "cSep404.1";
#TRO404.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO404.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3386"];
#TRO404.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3426"];
#TRO404.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3421"];
#TRO404.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3387"];
#TRO404(nInMainTroNo := "cMainTro404",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea404".stJam404_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea404".stJam404_1.stData,
arInOutJamFinger := "DB_JamArea404".stJam404_2.arCarrier, // TODO Topologie
xOutStopper => "MB3386",
xOutVarioMotor => "MA0073",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro404"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO404);
END_REGION
REGION TRO405 (1Sep1Swi) — KR-M4003
#TRO405.stInSeparator1.Settings.nSeparatorNo := "cSep405.1";
#TRO405.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO405.stInSeparator1.Settings.tTrailingTime := T#100ms; // TODO Timing
#TRO405.stInSeparator1.Settings.tHandlingTime := T#50ms; // TODO Timing
#TRO405.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO405.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3300"];
#TRO405.stInSenJam2 := "DB_Inputs".Sensors["cInBG3301"];
#TRO405.stInSwitch1.Settings.nSwitchNo := "cSwi405.1";
#TRO405(nInMainTroNo := "cMainTro405",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun1 := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea405".stJam405_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea405".stJam405_1.stData,
arInOutJamExit2 := "DB_JamArea405".stJam405_2.arCarrier, // TODO Topologie (Dir1)
stInOutJamExit2 := "DB_JamArea405".stJam405_2.stData,
arInOutJamExit3 := "DB_JamArea405".stJam405_3.arCarrier, // TODO Topologie (Dir2)
stInOutJamExit3 := "DB_JamArea405".stJam405_3.stData,
xOutStopper1 => "MB3300",
xOutSw1ExTo3 => "MB3362",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro405"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO405);
END_REGION
REGION TRO406 (Vario) — CV-M4004
#TRO406.stInSeparator1.Settings.nSeparatorNo := "cSep406.1";
#TRO406.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO406.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO406.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3316"];
#TRO406.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3312"];
#TRO406.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3311"];
#TRO406(nInMainTroNo := "cMainTro406",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea406".stJam406_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea406".stJam406_1.stData,
arInOutJamFinger := "DB_JamArea406".stJam406_2.arCarrier, // TODO Topologie
xOutStopper => "MBxxxx",
xOutVarioMotor => "MA0061",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro406"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO406);
END_REGION
REGION TRO407 (Vario) — CV-M4005
#TRO407.stInSeparator1.Settings.nSeparatorNo := "cSep407.1";
#TRO407.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO407.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3321"];
#TRO407.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3314"];
#TRO407.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3315"];
#TRO407.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3320"];
#TRO407(nInMainTroNo := "cMainTro407",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea407".stJam407_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea407".stJam407_1.stData,
arInOutJamFinger := "DB_JamArea407".stJam407_2.arCarrier, // TODO Topologie
xOutStopper => "MB3321",
xOutVarioMotor => "MA0062",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro407"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO407);
END_REGION
REGION TRO408 (Vario) — CV-M4006
#TRO408.stInSeparator1.Settings.nSeparatorNo := "cSep408.1";
#TRO408.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO408.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3370"];
#TRO408.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3376"];
#TRO408.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3372"];
#TRO408.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3371"];
#TRO408(nInMainTroNo := "cMainTro408",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea408".stJam408_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea408".stJam408_1.stData,
arInOutJamFinger := "DB_JamArea408".stJam408_2.arCarrier, // TODO Topologie
xOutStopper => "MB3370",
xOutVarioMotor => "MA0063",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro408"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO408);
END_REGION
REGION TRO409 (Vario) — CV-M4007
#TRO409.stInSeparator1.Settings.nSeparatorNo := "cSep409.1";
#TRO409.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO409.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3381"];
#TRO409.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3374"];
#TRO409.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3375"];
#TRO409.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3380"];
#TRO409(nInMainTroNo := "cMainTro409",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea409".stJam409_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea409".stJam409_1.stData,
arInOutJamFinger := "DB_JamArea409".stJam409_2.arCarrier, // TODO Topologie
xOutStopper => "MB3381",
xOutVarioMotor => "MA0064",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro409"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO409);
END_REGION
REGION TRO410 (Vario) — CV-M4008
#TRO410.stInSeparator1.Settings.nSeparatorNo := "cSep410.1";
#TRO410.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO410.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3440"];
#TRO410.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3446"];
#TRO410.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3442"];
#TRO410.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3437"];
#TRO410(nInMainTroNo := "cMainTro410",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea410".stJam410_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea410".stJam410_1.stData,
arInOutJamFinger := "DB_JamArea410".stJam410_2.arCarrier, // TODO Topologie
xOutStopper => "MB3440",
xOutVarioMotor => "MA0065",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro410"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO410);
END_REGION
REGION TRO411 (Vario) — CV-M4009
#TRO411.stInSeparator1.Settings.nSeparatorNo := "cSep411.1";
#TRO411.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO411.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3436"];
#TRO411.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3444"];
#TRO411.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3445"];
#TRO411.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3431"];
#TRO411(nInMainTroNo := "cMainTro411",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea411".stJam411_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea411".stJam411_1.stData,
arInOutJamFinger := "DB_JamArea411".stJam411_2.arCarrier, // TODO Topologie
xOutStopper => "MB3436",
xOutVarioMotor => "MA0066",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro411"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO411);
END_REGION
REGION TRO412 (Vario) — CV-M4010
#TRO412.stInSeparator1.Settings.nSeparatorNo := "cSep412.1";
#TRO412.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO412.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3391"];
#TRO412.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3392"];
#TRO412.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3393"];
#TRO412.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3423"];
#TRO412(nInMainTroNo := "cMainTro412",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea412".stJam412_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea412".stJam412_1.stData,
arInOutJamFinger := "DB_JamArea412".stJam412_2.arCarrier, // TODO Topologie
xOutStopper => "MB3391",
xOutVarioMotor => "MA0074",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro412"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO412);
END_REGION
REGION TRO413 (Vario) — CV-M4011
#TRO413.stInSeparator1.Settings.nSeparatorNo := "cSep413.1";
#TRO413.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO413.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3250"];
#TRO413.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3255"];
#TRO413.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3253"];
#TRO413.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3264"];
#TRO413(nInMainTroNo := "cMainTro413",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea413".stJam413_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea413".stJam413_1.stData,
arInOutJamFinger := "DB_JamArea413".stJam413_2.arCarrier, // TODO Topologie
xOutStopper => "MB3250",
xOutVarioMotor => "MA0072",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro413"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO413);
END_REGION
END_FUNCTION_BLOCK
+379
View File
@@ -0,0 +1,379 @@
FUNCTION_BLOCK "FB_Main_skel_UH05"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
// ============================================================
// AUTOMATISCH GENERIERTES GRUNDGERUEST — create_skel.py
// Quelle: E/A-Listen UH05 (data/)
// TODO-Marken kennzeichnen manuell zu ergaenzende Stellen
// (Timings, Topologie/JamAreas, Safety, Release, Priority).
// ============================================================
VAR
TRO501 : "FB_ILS_MTRO_1Sep"; // KR-M0500
TRO502 : "FB_ILS_MTRO_1Sep"; // CV-M0510
TRO503 : "FB_ILS_MTRO_1Sep"; // CV-M5000
TRO504 : "FB_ILS_MTRO_Vario"; // CV-M5000_A
TRO505 : "FB_ILS_MTRO_Vario"; // CV-M5000_B
TRO506 : "FB_ILS_MTRO_1Sep"; // CV-M5001
TRO507 : "FB_ILS_MTRO_Vario"; // CV-M5001_A
TRO508 : "FB_ILS_MTRO_Vario"; // CV-M5001_B
TRO509 : "FB_ILS_MTRO_1Sep"; // KR-M5002
TRO510 : "FB_ILS_MTRO_Vario"; // CV-M5003 / WS1.1
TRO511 : "FB_ILS_MTRO_Vario"; // CV-M5004 / WS1.1
TRO512 : "FB_ILS_MTRO_Vario"; // CV-M5005 / WS1.0
TRO513 : "FB_ILS_MTRO_Vario"; // CV-M5006 / WS2.0
TRO514 : "FB_ILS_MTRO_Vario"; // CV-M5007 / WS3.0
TRO515 : "FB_ILS_MTRO_Vario"; // CV-M5008 / WS4.0
END_VAR
BEGIN
REGION TRO501 (1Sep) — KR-M0500
#TRO501.stInSeparator1.Settings.nSeparatorNo := "cSep501.1";
#TRO501.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO501.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO501.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO501.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO501.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3372"];
#TRO501.stInSenJam2 := "DB_Inputs".Sensors["cInBG3431"];
#TRO501.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO501(nInMainTroNo := "cMainTro501",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea501".stJam501_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea501".stJam501_1.stData,
arInOutJamExit2 := "DB_JamArea501".stJam501_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea501".stJam501_2.stData,
xOutStopper1 => "MB3372",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro501"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO501);
END_REGION
REGION TRO502 (1Sep) — CV-M0510
#TRO502.stInSeparator1.Settings.nSeparatorNo := "cSep502.1";
#TRO502.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO502.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO502.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO502.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO502.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3330"];
#TRO502.stInSenJam2 := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO502.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO502(nInMainTroNo := "cMainTro502",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea502".stJam502_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea502".stJam502_1.stData,
arInOutJamExit2 := "DB_JamArea502".stJam502_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea502".stJam502_2.stData,
xOutStopper1 => "MBxxxx",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro502"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO502);
END_REGION
REGION TRO503 (1Sep) — CV-M5000
#TRO503.stInSeparator1.Settings.nSeparatorNo := "cSep503.1";
#TRO503.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO503.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO503.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO503.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO503.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3301"];
#TRO503.stInSenJam2 := "DB_Inputs".Sensors["cInBG3310"];
#TRO503.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO503(nInMainTroNo := "cMainTro503",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea503".stJam503_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea503".stJam503_1.stData,
arInOutJamExit2 := "DB_JamArea503".stJam503_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea503".stJam503_2.stData,
xOutStopper1 => "MB3301",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro503"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO503);
END_REGION
REGION TRO504 (Vario) — CV-M5000_A
#TRO504.stInSeparator1.Settings.nSeparatorNo := "cSep504.1";
#TRO504.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO504.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO504.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3332"];
#TRO504.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3331"];
#TRO504.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3451"];
#TRO504(nInMainTroNo := "cMainTro504",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea504".stJam504_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea504".stJam504_1.stData,
arInOutJamFinger := "DB_JamArea504".stJam504_2.arCarrier, // TODO Topologie
xOutStopper => "MB3330",
xOutVarioMotor => "MA0071",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro504"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO504);
END_REGION
REGION TRO505 (Vario) — CV-M5000_B
#TRO505.stInSeparator1.Settings.nSeparatorNo := "cSep505.1";
#TRO505.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO505.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3452"];
#TRO505.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3454"];
#TRO505.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3453"];
#TRO505.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO505(nInMainTroNo := "cMainTro505",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea505".stJam505_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea505".stJam505_1.stData,
arInOutJamFinger := "DB_JamArea505".stJam505_2.arCarrier, // TODO Topologie
xOutStopper => "MB3452",
xOutVarioMotor => "MA0060",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro505"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO505);
END_REGION
REGION TRO506 (1Sep) — CV-M5001
#TRO506.stInSeparator1.Settings.nSeparatorNo := "cSep506.1";
#TRO506.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO506.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO506.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO506.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO506.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3304"];
#TRO506.stInSenJam2 := "DB_Inputs".Sensors["cInBG3305"];
#TRO506.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO506(nInMainTroNo := "cMainTro506",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea506".stJam506_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea506".stJam506_1.stData,
arInOutJamExit2 := "DB_JamArea506".stJam506_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea506".stJam506_2.stData,
xOutStopper1 => "MB3304",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro506"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO506);
END_REGION
REGION TRO507 (Vario) — CV-M5001_A
#TRO507.stInSeparator1.Settings.nSeparatorNo := "cSep507.1";
#TRO507.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO507.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3333"];
#TRO507.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3335"];
#TRO507.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3334"];
#TRO507.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3456"];
#TRO507(nInMainTroNo := "cMainTro507",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea507".stJam507_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea507".stJam507_1.stData,
arInOutJamFinger := "DB_JamArea507".stJam507_2.arCarrier, // TODO Topologie
xOutStopper => "MB3333",
xOutVarioMotor => "MA0072",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro507"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO507);
END_REGION
REGION TRO508 (Vario) — CV-M5001_B
#TRO508.stInSeparator1.Settings.nSeparatorNo := "cSep508.1";
#TRO508.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO508.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3457"];
#TRO508.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3461"];
#TRO508.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3460"];
#TRO508.stInVario.stSenJam := "DB_Inputs".Sensors["cInBGxxxx"];
#TRO508(nInMainTroNo := "cMainTro508",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea508".stJam508_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea508".stJam508_1.stData,
arInOutJamFinger := "DB_JamArea508".stJam508_2.arCarrier, // TODO Topologie
xOutStopper => "MB3457",
xOutVarioMotor => "MA0061",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro508"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO508);
END_REGION
REGION TRO509 (1Sep) — KR-M5002
#TRO509.stInSeparator1.Settings.nSeparatorNo := "cSep509.1";
#TRO509.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO509.stInSeparator1.Settings.tTrailingTime := T#500ms; // TODO Timing
#TRO509.stInSeparator1.Settings.tHandlingTime := T#200ms; // TODO Timing
#TRO509.stInSeparator1.Settings.tJam := "TimeForSepJam";
#TRO509.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3240"];
#TRO509.stInSenJam2 := "DB_Inputs".Sensors["cInBG3241"];
#TRO509.stInPriorityManager.xReleaseOk := TRUE; // TODO Priority
#TRO509(nInMainTroNo := "cMainTro509",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInCarouselRun := TRUE, // TODO Conveyor
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea509".stJam509_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea509".stJam509_1.stData,
arInOutJamExit2 := "DB_JamArea509".stJam509_2.arCarrier, // TODO Topologie
stInOutJamExit2 := "DB_JamArea509".stJam509_2.stData,
xOutStopper1 => "MB3240",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro509"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO509);
END_REGION
REGION TRO510 (Vario) — CV-M5003 / WS1.1
#TRO510.stInSeparator1.Settings.nSeparatorNo := "cSep510.1";
#TRO510.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO510.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3245"];
#TRO510.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3244"];
#TRO510.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3246"];
#TRO510.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3243"];
#TRO510(nInMainTroNo := "cMainTro510",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea510".stJam510_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea510".stJam510_1.stData,
arInOutJamFinger := "DB_JamArea510".stJam510_2.arCarrier, // TODO Topologie
xOutStopper => "MB3245",
xOutVarioMotor => "MA0063",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro510"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO510);
END_REGION
REGION TRO511 (Vario) — CV-M5004 / WS1.1
#TRO511.stInSeparator1.Settings.nSeparatorNo := "cSep511.1";
#TRO511.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO511.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3251"];
#TRO511.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3255"];
#TRO511.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3254"];
#TRO511.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3252"];
#TRO511(nInMainTroNo := "cMainTro511",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea511".stJam511_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea511".stJam511_1.stData,
arInOutJamFinger := "DB_JamArea511".stJam511_2.arCarrier, // TODO Topologie
xOutStopper => "MB3251",
xOutVarioMotor => "MA0064",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro511"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO511);
END_REGION
REGION TRO512 (Vario) — CV-M5005 / WS1.0
#TRO512.stInSeparator1.Settings.nSeparatorNo := "cSep512.1";
#TRO512.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO512.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3314"];
#TRO512.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3320"];
#TRO512.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3317"];
#TRO512.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3313"];
#TRO512(nInMainTroNo := "cMainTro512",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea512".stJam512_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea512".stJam512_1.stData,
arInOutJamFinger := "DB_JamArea512".stJam512_2.arCarrier, // TODO Topologie
xOutStopper => "MB3314",
xOutVarioMotor => "MA0065",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro512"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO512);
END_REGION
REGION TRO513 (Vario) — CV-M5006 / WS2.0
#TRO513.stInSeparator1.Settings.nSeparatorNo := "cSep513.1";
#TRO513.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO513.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3362"];
#TRO513.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3366"];
#TRO513.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3365"];
#TRO513.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3361"];
#TRO513(nInMainTroNo := "cMainTro513",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea513".stJam513_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea513".stJam513_1.stData,
arInOutJamFinger := "DB_JamArea513".stJam513_2.arCarrier, // TODO Topologie
xOutStopper => "MB3362",
xOutVarioMotor => "MA0066",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro513"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO513);
END_REGION
REGION TRO514 (Vario) — CV-M5007 / WS3.0
#TRO514.stInSeparator1.Settings.nSeparatorNo := "cSep514.1";
#TRO514.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO514.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3374"];
#TRO514.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3380"];
#TRO514.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3377"];
#TRO514.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3373"];
#TRO514(nInMainTroNo := "cMainTro514",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea514".stJam514_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea514".stJam514_1.stData,
arInOutJamFinger := "DB_JamArea514".stJam514_2.arCarrier, // TODO Topologie
xOutStopper => "MB3374",
xOutVarioMotor => "MA0067",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro514"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO514);
END_REGION
REGION TRO515 (Vario) — CV-M5008 / WS4.0
#TRO515.stInSeparator1.Settings.nSeparatorNo := "cSep515.1";
#TRO515.stInSeparator1.Settings.tDelayToNextItem := "TimeForSepWaiting_Short";
#TRO515.stInSeparator1.stSenInSep := "DB_Inputs".Sensors["cInBG3422"];
#TRO515.stInVario.stSenCarrInPos := "DB_Inputs".Sensors["cInBG3426"];
#TRO515.stInVario.stSenFinger := "DB_Inputs".Sensors["cInBG3425"];
#TRO515.stInVario.stSenJam := "DB_Inputs".Sensors["cInBG3421"];
#TRO515(nInMainTroNo := "cMainTro515",
xInSftyOk := TRUE, // TODO Safety
xInAllRdyToStart := TRUE,
xInRelease := TRUE, // TODO Release
stInOutMachineState := #stInOutControlUnit, // TODO ControlUnit
arInOutJamEntr1 := "DB_JamArea515".stJam515_1.arCarrier, // TODO Topologie
stInOutJamEntr1 := "DB_JamArea515".stJam515_1.stData,
arInOutJamFinger := "DB_JamArea515".stJam515_2.arCarrier, // TODO Topologie
xOutStopper => "MB3422",
xOutVarioMotor => "MA0070",
nOutStateLast => "DB_GLOB_TroState".arTroState["cMainTro515"],
stInOutHMI := "DB_Interface_HMI".stTRO.TRO515);
END_REGION
END_FUNCTION_BLOCK
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff