SECS/GEM HSMS-Treiber
Überblick
Kommunikationsstandard für Halbleiter-Fab-Anlagen (SEMI E5/E30/E37). HSMS = SECS-II over TCP. Über den Austausch von S/F-Nachrichten (Stream/Function) zwischen equipment und host werden Anlagenstatus, alarm und event report erfasst.
| Punkt | Wert |
|---|---|
opc_type | SECSGEM |
| Implementierungsklasse | plantpulse.driver.protocol.secsgem.SECSGEMDriver |
| Bibliothek | Eigene Java-Implementierung (keine externen Abhängigkeiten) |
| read | ⚠️ 1. Stufe (Select-Handshake + S1F1/S1F2 usw. auf Fixture-Ebene) |
| write | ⚠️ 1. Stufe (nur S2F41 Host Command Send) |
| Sicherheit | keine |
| Standardport | 5000 (TCP) |
Verifiziert sind der HSMS-Handshake Select.req/rsp, der Linktest im Hintergrund, der SECS-II-Item-Codec (List/Binary/Boolean/ASCII/I1-8/U1-8/F4/F8) sowie die Standard-Nachrichtenbuilder (S1F1/S1F2/S2F41/S5F1/S6F11). Das Read/Write-Dispatching funktioniert, die vollständige Integration von Fab-Tools (SECS-I-Serial-Variante, GEM State Model, SVID/ECID/CEID-Aushandlung, S2F23 trace, asynchroner Empfang von S5/S6-Events) folgt in einer späteren Phase.
Klassenstruktur
| Klasse | Aufgabe |
|---|---|
SECSGEMDriver | TCP / Select-Handshake / Read-·Write-Dispatching / Linktest im Hintergrund |
HsmsHeader | 14-Byte-Frame-Header (length BE 32 + sessionId 16 + W-Bit·stream + function + pType + sType + sysbytes BE 32) |
HsmsMessage | encode/decode + Helper select_req(1) / select_rsp(2) / linktest_req(5) / data(0) |
SecsItem | SECS-II-Item-Encoder/-Decoder — Format-Byte (6-Bit-Code + 2-Bit-Anzahl der Längenbytes) + length + value |
SecsCommon | Standard-Nachrichtenbuilder — S1F1, S1F2, S2F41, S5F1, S6F11 |
SecsAddress | S<n>F<m>[W] Adressparser (W = reply expected) |
Wire-Format
HSMS frame (총 length = 4 + 10 + payload):
byte 0..3 Length (BE 32) — 10 + payload
byte 4..5 Session ID (BE 16) — 컨트롤 메시지는 0xFFFF
byte 6 W-bit | Stream (7-bit)
byte 7 Function (8-bit)
byte 8 pType — 항상 0
byte 9 sType — 0=Data, 1=Select.req, 2=Select.rsp, 5=Linktest.req, 6=Linktest.rsp, ...
byte 10..13 System bytes (BE 32) — transaction id
byte 14.. SECS-II payload
SECS-II item:
Format byte (6-bit code + 2-bit length-bytes-count) + length(1..3) + value
code: L=0x00, B=0x08, Bool=0x09, A=0x10, F8=0x14, F4=0x15,
I8=0x18 I1=0x19 I2=0x1A I4=0x1B,
U8=0x1C U1=0x1D U2=0x1E U4=0x1F (모두 BE)
Handshake (connect()): Select.req(sysbytes) → Prüfung von sType=2 + status=0 der Select.rsp.
Anschließend wird gemäß Option linktest-interval (Standard 30 Sekunden) zyklisch Linktest.req gesendet.
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standard |
|---|---|---|
opc_agent_ip / opc_agent_port | Anlagen-IP / Port | bei port 0 gilt 5000 |
options.connect-timeout | TCP-Connect-Timeout (ms) | 5000 |
options.read-timeout | Read-SO-Timeout (ms) | 10000 |
options.linktest-interval | Linktest-Intervall (ms, 0=off) | 30000 |
Tag-Format plc_address
| Notation | Bedeutung |
|---|---|
S1F1 | "Are You There" — leerer Body, reply expected |
S1F2:0 | nulltes Kind der reply-List (z. B. MDLN) |
S1F2:1 | erstes Kind (z. B. SOFTREV) |
S1F13 | Establish Communications Request |
S2F41 | Host Command Send (nur write) |
S5F1 / S6F11 | Alarm Report / Event Report (Empfangsseite) |
Das Suffix W (S1F1W) kennzeichnet explizit die Reply-Erwartung. Beim Read-Dispatching wird nur für S1F1 der Body automatisch aufgebaut, ansonsten wird mit leerem Body + W-Bit=true gesendet.
Bei write wird nur S2F41 unterstützt: address.value dient als HCS-Command-String, parameter ist eine leere List.
Nicht unterstützte Bereiche
- Variante SECS-I (RS-232 binary) — nur HSMS over TCP.
- GEM State Model — Automatisierung von Communications / Control / Processing / Spooling nicht implementiert.
- VID/ECID/CEID-Aushandlung — keine Automatisierung der Event-Link-/Enable-Sequenzen S2F13 / S2F33 / S2F37.
- S2F23 trace data, asynchroner Empfang von S6F11 event report — nur einzelner Receive, kein asynchroner Push-Handler.
- sType Deselect / Reject / Separate.
- Datennachricht → ConcurrentMap-Cache — derzeit startet read bei jedem Aufruf eine neue Transaktion.
Testabdeckung
test/java/plantpulse/driver/protocol/secsgem/
| Test | Prüfung |
|---|---|
HsmsHeaderTest | 14-Byte-Header + sType-Verzweigung Round-Trip |
HsmsMessageTest | select_req/rsp/linktest/data encode-decode |
SecsItemTest | L/A/B/Bool/I/U/F-Item-Codec bidirektional (1/2/3-Byte-Länge) |
SecsCommonTest | S1F1/S1F2/S2F41/S5F1/S6F11 Aufbau/Parsing |
SecsAddressTest | Parser S<n>F<m>[W] |
SECSGEMDriverTest / SecsGemSpecTest | Select- + Read-Sequenz mit Mock-Anlage |
Referenzen
- SEMI E5 — SECS-II Message Content.
- SEMI E30 — Generic Equipment Model (GEM).
- SEMI E37 — High-Speed SECS Message Services (HSMS).
- Code:
plantpulse-edge-driver/src/plantpulse/driver/protocol/secsgem/. - Betrieb: Die vollständige Fab-Tool-Integration folgt in einer späteren Phase — in der 1. Stufe empfehlen sich Anlagen-Connect, S1F1-Ping und die Erfassung der Alarmliste.