Strukturen auf IO-Abbild eines EtherCAT Slaves legen

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich möchte einen EtherCAT-Slave ansteuern.
Hierzu habe ich ein Steuerwort, wessen Bits verschiedene Funktionen im Slave ausführen.
Leider bekomme ich im EtherCAT-IO-Abbild des Slaves nur angezeigt, dass es sich um eine INT Variable handelt.
Ichhabe mir aber eine Struktur erzeugt, damit ich in meiner Steuerung (im Program) besser lesen kann, was das Bit bewirkt.
(Bspw. Hauptantrieb.Start lässt sich besser zuordnen, als Hauptantrieb.1) oder?
Gibt es eine Möglichkeit, dass ich meine erzeugte Strukturvariable direkt auf das IO-Abbild legen kann?
Siehe Screenshoot).IO-Abbild.jpg

Danke für eure Hilfe
 
Hallo!

Ich verstehe deine Frage nicht so ganz.
Warum deklarierst du denn nicht einfach eine Ein- oder Ausgangs-Variable vom Typ "MeineStruktur"?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ja eine Variable von dem Typ. Diese ist bspw. Eine Struktur, welche 16Bit enthält... Aber der ethercat Slave will eben eine Variable vom Typ INT haben und nicht vom Typ MeineStruktur...
 
Warum muß/soll Deine Struktur direkt auf der IO-Variablen liegen? Kann man die IO-Variable nicht auf die Struktur kopieren, dann nur die Strukturvariablen verarbeiten und zuletzt wieder auf eine IO-Variable kopieren?

Btw.: verlangt der Slave tatsächlich den Datentyp INT für die Ansammlung von 16 Bits??? Ich hätte eher ein WORD erwartet.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du eine Struktur mit 16Bit, also 16 BOOL Variablen hast, ist diese ja 16 Byte und nicht 2 Byte groß.
Das passt so oder so nicht....auch nicht das "stumpfe" kopieren oder Speicherbereich verschieben.
 
Wenn Du eine Struktur mit 16Bit, also 16 BOOL Variablen hast, ist diese ja 16 Byte und nicht 2 Byte groß.
Das passt so oder so nicht....auch nicht das "stumpfe" kopieren oder Speicherbereich verschieben.

Also wenn ich eine Struktur erzeuge, in welcher 16 Werte vom Typ Bit sind, so bekomme ich bei der SizeOf() Funktion 2 Byte zurück
und wenn ich diese mit pointern auf in kopiere dann funktioniert das auch alles .... nur Bool zählt für ein Byte NICHT BIT
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Antrieb selbst hat intern ein WORD, jedoch zeigt mir codesys in dem IO-Abbild den wert INT an.

Natürlich kann ich nach dem Verarbeiten auf eine Variable kopieren, welche auf dem IO-Abbild liegt, aber mir ging es ja nur darum diesen Schritt zu sparen.
 
Was hat das mit TwinCAT zu tun? Die XML vom ethercat slave zeigt eben ein INT wert an, das wird sie wohl überall in codesys machen, ob twincat oder nicht... oder?
 
Zurück
Oben