ProfiNET-System konfigurieren
ProfiNET-Geräte werden per CreateChild unter dem I/O-Knoten angelegt. Der Pfad zur GSDML-Datei des Geräts wird dabei als vInfo-Parameter übergeben. Die GSDML-Datei beschreibt die verfügbaren Module eines Geräts. Module werden später unter dem API-Knoten der ProfiNET-Box angelegt, wobei der SubType ihre Position in der GSDML-Modulliste bestimmt.
Voraussetzungen
- Eine TwinCAT-Solution ist geöffnet und eine DTE-Verbindung ist aktiv.
ITcSysManagerwurde als COM-Objekt in einem STA-Thread initialisiert.- Ein ProfiNET-Controller ist in der Solution vorhanden.
- Eine GSDML-Datei des ProfiNET-Geräts liegt vor.
SubType-Übersicht für ProfiNET-Controller und -Device
Zur Erstellung von ProfiNET E/A-Geräten, also Controllern und Geräten, kann die Methode CreateChild() verwendet werden. Der SubType legt den tatsächlichen Gerätetyp fest.
Name | Sub-Typ |
|---|---|
Profinet Controller (RT) | 113 |
Profinet Controller CCAT (RT) | 140 |
Profinet Controller EL6631 (RT, EtherCAT) | 119 |
Profinet Controller EL6632 (RT + IRT, EtherCAT) | 126 |
Profinet Device (RT) | 115 |
Profinet Device CCAT (RT) | 142 |
Profinet Device CCAT (RT + IRT) | 143 |
Profinet Device EL6631 (RT, EtherCAT) | 118 |
SubType-Übersicht für ProfiNET-Boxen
Beckhoff-eigene ProfiNET-Feldbus-Koppler erfordern die folgenden SubTypes:
Gerät | SubType |
|---|---|
BK9102 | 9125 |
BK9300 | 9128 |
BK6631 / EL6631 | 9130 |
C# Beispiel
Zuerst wird der ProfiNET-Controller unter dem I/O-Knoten TIID angelegt. Darunter folgt die ProfiNET-Box, deren GSDML-Pfad mit dem DAP-ModId-Suffix #0x3 als vInfo übergeben wird. Der API-Knoten der Box entsteht automatisch und wird per LookupChild("API") aufgerufen. Unter ihm werden die Module mit ihrer Slot-Nummer angelegt.
ITcSmTreeItem io = sysManager.LookupTreeItem("TIID");
// Create ProfiNET controller (SubType 113)
ITcSmTreeItem profinetCtrl = io.CreateChild("Profinet Controller", 113, null, null);
// Create ProfiNET box: vInfo = path to GSDML file with DAP-ModId suffix (#0x3)
// Note: Since TC 4026 the default TwinCAT installation path has changed.
// Verify the GSDML path on the target system before use.
ITcSmTreeItem profinetEL6631 = profinetCtrl.CreateChild("EL6631", 9130, null,
@"C:\TwinCAT\3.1\Config\Io\Profinet\GSDML-V2.31-beckhoff-EL6631-20140508.xml#0x3");
// Look up API node (created automatically)
ITcSmTreeItem api = profinetEL6631.LookupChild("API");
// Remove existing modules (optional: reset configuration)
foreach (ITcSmTreeItem module in api)
api.DeleteChild(module.Name);
// Add modules with slot number
// SubType = index in <ModuleList> of the GSDML file
// vInfo = slot number as string
ITcSmTreeItem module1 = api.CreateChild("Module_1", 2, "", "2"); // SubType 2, Slot 2
ITcSmTreeItem module2 = api.CreateChild("Module_10", 7, "", "10"); // SubType 7, Slot 10
GSDML-Pfad-Format und BoxFlags
Der vInfo-Parameter beim Anlegen der ProfiNET-Box unterstützt ein erweitertes Format mit BoxFlags:
GSDML-Pfad#DAP-ModId#BoxFlags#DAP-Nr
Beispiel:C:\TwinCAT\Io\Profinet\GSDML-V2.3-beckhoff-TCPNDevice-20130723.xml#0x01#0#0x03
Die folgenden BoxFlags werden ausgewertet:
Name | Wert | Beschreibung |
|---|---|---|
GENERATE_NAME_FROM_PAB | 0x0004 | Profinet-Name wird über das Prozessabbild generiert. |
GET_STATIONNAME | 0x0400 | Profinet-Name aus der TC-Konfiguration wird verwendet (Tree-Item-Name). |
SET_NOT_IP_TO_OS | 0x4000 | Nur CE: Profinet-IP wird nicht im OS registriert. |
Profinet Sub-Module hinzufügen
ProfiNET Sub-Module können unterhalb eines "Profinet Modular Module" hinzugefügt werden:
ITcSmTreeItem profinetModularModule = profinetEL6631api.CreateChild("", 98, null, null); // SubType 98 = Modular
ITcSmTreeItem modularModule1 = profinetModularModule.CreateChild("", 12, null, null); // SubType 12 = 8 Byte In-Out
ITcSmTreeItem modularModule2 = profinetModularModule.CreateChild("", 14, null, null); // SubType 14 = 16 Byte Out
ITcSmTreeItem modularModule3 = profinetModularModule.CreateChild("", 31, null, null); // SubType 31 = 8 Word In
![]() | GSDML-Dateien dürfen keine Leerzeichen oder Kommentare in der ModuleList enthalten. Andernfalls schlägt das Parsen fehl. |
