Betrifft: ForgeIEC Studio tongs-* Anvil server (anvild)

Was ist ein Segment?

Ein Bus-Segment ist ein physisches Netzwerk auf einer Schnittstelle des PLC-Targets — Ethernet-Port (eth0, enp3s0) für Modbus TCP / EtherCAT / EtherNet-IP, serieller Port (/dev/ttyUSB0) für Modbus RTU / Profibus DP.

Pro Segment startet anvild genau einen Bridge-Daemon (tongs-modbustcp, tongs-ethercat, …). Dieser handhabt den Verkehr zu allen Devices im Segment.

Ein Projekt kann beliebig viele Segmente halten — jedes mit eigenem Protokoll, Schnittstelle und Polling-Takt. Eine schnelle EtherCAT-Achssteuerung (eth1, 1 ms) + eine langsame Modbus-TCP- Sensorerfassung (eth0, 100 ms) laufen parallel im gleichen Projekt.


Felder eines Segments

Die Struct-Definition liegt in editor/include/model/FBusSegmentConfig.h. Persistiert wird ein Segment im .forge-Projekt als <fi:segment> unter <fi:busConfig> (siehe Bus-Konfiguration).

Identität + Protokoll

FeldTypBedeutung
segmentIdUUIDStabiler Primärschlüssel — automatisch beim Anlegen, nicht editierbar. Überlebt Rename, Protokoll-Wechsel, IP-Änderung.
protocolEnummodbustcp / modbusrtu / ethercat / profibus / ethernetip. Bestimmt welcher Bridge-Daemon startet.
nameStringUser-Label (z.B. "Halle1"). Frei wählbar, im Tree + in Logs sichtbar, ist Teil des IEC-Namespaces (anvil.Halle1.<Device>.<Var>).
enabledBoolEin-/Ausschalter. false = Bridge wird nicht gestartet, Devices bleiben offline. Default: true.

Schnittstelle + Routing

FeldTypBedeutung
interfaceStringNetzwerk-Schnittstelle (eth0, /dev/ttyUSB0). Bridge gibt das an die Socket-/Serial-API weiter.
bindAddressString (IP/CIDR)Quell-IP für ausgehende TCP-Verbindungen, z.B. 192.168.24.100/24. Leer = OS wählt automatisch.
gatewayString (IP)Default-Gateway für Pakete die das lokale Subnet verlassen. Leer = kein Gateway.
pollIntervalMsInt (ms)Abfrageintervall der Bridge. 0 = so schnell wie möglich. Typisch: 100 für Modbus TCP, 0 für EtherCAT.

Network-Settings (Advanced)

Diese Felder decken Fälle ab in denen OS-Defaults nicht reichen — typisch: viele parallele TCP-Verbindungen pro Slave, lange-laufende Sessions über NAT, mehrere Subnetze auf einer NIC.

FeldTypBedeutung
subnetCidrString (CIDR)Lokales Subnetz des Segments. Erlaubt per-Device-Gateway-Overrides wenn die NIC mehrere Netze führt.
sourcePortRangeString "min-max"TCP-Quellport-Pool, z.B. 30000-39999. Leer = ephemerer OS-Bereich. Wichtig bei vielen parallelen Verbindungen zum selben Slave.
keepAliveIdleSecInt (s)Sekunden Leerlauf vor erstem TCP-Keep-Alive. 0 = OS-Default.
keepAliveIntervalSecInt (s)Abstand zwischen Probes. 0 = OS-Default.
keepAliveCountIntAnzahl fehlgeschlagener Probes bis Verbindung als tot gilt. 0 = OS-Default.
maxConnectionsIntObergrenze des Verbindungspools. 0 = unlimitiert. Schutz vor Slave-Geräten mit harter Verbindungs-Obergrenze.
vlanIdInt (1..4094)802.1Q-VLAN-Tag. 0 = ungetagged.

Protokoll-spezifische Settings

Im settings-Map (Key/Value) liegen Werte die nur für ein bestimmtes Protokoll Sinn ergeben:

ProtokollTypische Settings
modbustcpport, timeout_ms
modbusrtuserial_port, baud_rate, parity, stop_bits
ethercatdc_sync_shift_ns, cycle_time_us
profibusmaster_address, baud_rate

Plus protokollunabhängig: log_level, log_file.


Edit-Pfad in ForgeIEC Studio

Im Bus-Tree-Panel beide Pfade gleichwertig:

AktionWirkung
Einfach-Klick auf einen Segment-KnotenFPropertiesPanel (rechts) zeigt alle Felder als Inline-Editoren. Änderungen werden bei editingFinished ins Projekt geschrieben + dirty-Flag gesetzt.
DoppelklickModal-Dialog FSegmentDialog mit gleichem Feld-Set, gruppiert in Allgemein / Protokoll / Advanced Network / Logging. OK übernimmt, Cancel verwirft.

Bridge-Lifecycle

Sobald Sie ein Segment anlegen + enabled=true setzen + speichern:

  1. anvild erkennt das neue Segment beim nächsten Project-Push
  2. anvild’s Subprocess-Manager spawnt den passenden Bridge-Daemon (tongs-<protocol>) mit der Segment-ID als Argument
  3. Bridge öffnet die konfigurierte Schnittstelle + verbindet sich mit jedem Device
  4. Live-Status läuft per Anvil-Zero-Copy-IPC zwischen Bridge und PLC-Runtime — keine TCP-Loopback-Latenz
  5. Bei Bridge-Crash startet anvild den Daemon auto-neu; die PLC-Logik läuft ununterbrochen weiter

Bridge-Status pro Segment per MCP bellows.protocol_status abrufbar, oder direkt im Bus-Panel als Farb-Indicator (gruen/gelb/ rot/grau).


Beispiel: Modbus-TCP-Segment

[[bus_segments]]
segment_id     = "a3f7c2e1-7c4f-4e1a-9f9c-1a2b3c4d5e6f"
protocol       = "modbustcp"
name           = "Halle1"
enabled        = true
interface      = "eth0"
bind_address   = "192.168.24.100/24"
gateway        = ""
poll_interval  = 100

[bus_segments.settings]
port           = "502"
timeout_ms     = "2000"
log_level      = "info"
log_file       = "/var/log/forgeiec/halle1.log"

Effekt:

  • tongs-modbustcp startet auf eth0 mit Quell-IP 192.168.24.100
  • Polled alle Devices im 100-ms-Takt
  • Akzeptiert pro Request bis 2000 ms Antwortzeit vor Timeout
  • Logs nach /var/log/forgeiec/halle1.log
  • IEC-Variablen erreichen Sie als anvil.Halle1.<Device>.<...>

Verwandte Themen