Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
Hallo,
wir haben mehrer EtherCat Slaves, welche bspw. Aus digitalen IOS bestehen.
Nun möchten wir gerne nicht immer eine Variable direkt auf der Harfware verknüpfen,
Sondern ganz gerne unserer Maschine die EtherCat Slaves übergeben.
Nachdem dies passiert ist würden wir gerne über den Slave auf dessen Prozessdate. Zugreifen können.
Geht dies irgendwie über diverse Wege?
Danke für eure Antworten
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Vielleicht verstehe ich die Anforderung nicht ganz. Aber hast Du schon mal versucht über die Adressen der Daten zuzugreifen? Also z.B. per %QW3 oder %IX0.5... Allerdings ist das nicht gerade ein schicker Weg...
Löst das Deine Anforderung?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
nein genau weil das eine absolute Adressierung wäre möchte ich dies nicht tun.
Also die Anforderung bzw. mein Vorhaben ist folgendes:
Ich habe Hardwaremäßig einen EtherCAT Slave mit sagen wir 16 Digitalen Eingängen. (Name DI16
Bis dato haben wir es immer so gemacht, dass wir global Daten deklariert haben (ARRAY[0..15] OF BOOL) und dieses dann an den Funktionsblock der Maschine übergeben haben.
Maschineninstanz(Inputs:=Globalarray);
Ich möchte nun lediglich den EtherCAT Slave an die Maschine übergeben und in dem FB der Maschine auf die "Prozessdaten" dieses Slaves zugriefen können. (Was ja in diesem fall einfach 16 mal ein BOOL wäre).
Maschineninstanz(Inputs:=DI16);
Die Frage ist nun wie komme ich über den EtherCAT Slave an die Prozessdaten ran.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
pInput : pointer to byte;
pOutput : pointer to byte;
pInput := pSlave^.InputData ;
pOutput := pSlave^.OutputData;
Important: Any byte swapping for big endian processors are not done as the raw data are accessed. Therefore it shall be done in the application code.
Sprich schon auch mit Vorsicht zu genießen das ganz, man muss genau wissen was man tut...
Denke die Info wie man durch die Slaves durch itteriert findest du in er online Hilfe help.codesys.com
Warum brauchst du das?
Vielleicht gibt es noch ne geschicktere Alternative.
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Wenn ich es richtig verstehe, suchst du eine Möglichkeit, aus dem IEC-Code auf das Prozessabbild eines Slaves zuzugreifen, und zwar so, wie es in der Gerätekonfiguration vorgegeben wird. Also z.B. wenn das Abbild so aussieht:
dann möchtest du im Code zugreifen
uiInterne_Variable:=Slave.MC6_to_PLC_0;
oder so ähnlich. Ist das korrekt?
Wenn ja, dann habe ich seit Jahren den gleichen Wunsch, und ich habe auch noch keine gute Lösung gefunden
Was Edwin vorschlägt, funktioniert im Prinzip, aber dann muss man genau wissen, welcher Slave welche Daten in welcher Reihenfolge und mit welchem Datentyp schickt (du musst die einzelnen Bytes auf deine internen Variablen umkopieren....).
Ich bin mir auch nicht ganz sicher, wie das mit modularen Slaves funktioniert (wie z.B. modulare E/A-Baugruppen, in denen Ein- und Ausgänge gemischt werden können) oder mit Slaves, die FSOE-Daten beinhalten....
Falls es irgendwann eine praktikable Lösung geben sollte, hoffe ich, dass der Erfinder derselben uns alle teilhaben lässt!
Viel Erfolg noch!
Alfred
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ja das habe ich vor. Ich dachte es gibt vielleicht ein verstecktes Interface, welches mir dann auch die entsprechenden Datentypen, bzw. gemappten Adressen liefert.
Der Vorschlag von Edwin funktioniert bei mir nicht, ich bekomme den Fehler, dass InputData und OutputData keine Komponenten von ETCSlave sind.
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Edwin Schwellinger hat geschrieben:
Hi,
mein FAQ sagt folgendes:
This is how it could be accessed.
pInput : pointer to byte;
pOutput : pointer to byte;
pInput := pSlave^.InputData ;
pOutput := pSlave^.OutputData;
Important: Any byte swapping for big endian processors are not done as the raw data are accessed. Therefore it shall be done in the application code.
Sprich schon auch mit Vorsicht zu genießen das ganz, man muss genau wissen was man tut...
Denke die Info wie man durch die Slaves durch itteriert findest du in er online Hilfe help.codesys.com
Warum brauchst du das?
Vielleicht gibt es noch ne geschicktere Alternative.
Grüße
Edwin
Also diese Variablen nimmt er bei mir nicht an.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Leider bekomme ich dort wie gesagt eine Fehlermeldung.
Weder InputData noch OutputData seien Komponenten von
Einem EtherCat Slave.
Benötigt man noch einen bestimmte EtherCat Library Version?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Also es wäre natürlich schon mal gut, wenn das irgendwie so wie Edwin es beschrieben hat funktionieren würde.
Noch schöner wäre es, wenn man auch Zugriff auf die gemappten Adressen und Typen hätte. (Siehe Screenshot)
Was ist denn mit der Property Connector? kommt man dadurch irgendwie an die Parameter?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Edwin, hast Du oder sonst jemand noch eine Idee, warum die Lösung bei mir nicht funktionieren könnte?
Bzw. gibt es so etwas wie beschrieben um auf die Parameter zugreifen zu können?
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ich verwendet COMBIVIS Studio von KEB und habe dort die aktuellste Version.
Normal: Aktuelle Compiler Version: 3.5.9.70
Testversion mit Compiler Version 3.5.9.73 und IODrvEtherCAT library 3.5.9.50
Und es gibt sonst keine Möglichkeit auf die Daten zu kommen? Eventuell auch über ein verstecktes Interface oder so?
Dass man auch die Datentypen usw. erkennen kann?
Hier noch ein Screenshot. Mache ich was falsch?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ah ok,
Dann muss ich noch etwas warten.
Gibt es denn, oder wird es eine Möglichkeit geben auf auf die Parameter
Schauen zu können?
Also zu sehen welche Adressen bspw. Gekappt sind. Bei den Softmotion Treibern
Macht ihr das ja auch.
Würde gerne gemoppte cia402 Parameter erkennen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
muss aber, schau ob auch wirklich die IODrvEthercat in SP12 in deinem Projekt angezogen wird...
Wenn nein Gerät ( also EthercatMaster mit rechtsclick im Gerätebaum aktualisieren)
Grüße
Edwin
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
OK, schein zu funktionieren. Habe nur noch kein Zielsystem, welches den SP12 unterstützt.
Hatte mal irgendwo mit bekommen, dass es trotzdem eine Möglichkeit geben würde auf die mapping Infos zugreifen zu können.
Also welche Adressen sind gemappt usw. Edwin weißt Du da was?
Gruß
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
wir haben mehrer EtherCat Slaves, welche bspw. Aus digitalen IOS bestehen.
Nun möchten wir gerne nicht immer eine Variable direkt auf der Harfware verknüpfen,
Sondern ganz gerne unserer Maschine die EtherCat Slaves übergeben.
Nachdem dies passiert ist würden wir gerne über den Slave auf dessen Prozessdate. Zugreifen können.
Geht dies irgendwie über diverse Wege?
Danke für eure Antworten
more posts ...
Hat niemand eine Idee?
Vielleicht verstehe ich die Anforderung nicht ganz. Aber hast Du schon mal versucht über die Adressen der Daten zuzugreifen? Also z.B. per %QW3 oder %IX0.5... Allerdings ist das nicht gerade ein schicker Weg...
Löst das Deine Anforderung?
Hallo,
nein genau weil das eine absolute Adressierung wäre möchte ich dies nicht tun.
Also die Anforderung bzw. mein Vorhaben ist folgendes:
Ich habe Hardwaremäßig einen EtherCAT Slave mit sagen wir 16 Digitalen Eingängen. (Name DI16
Bis dato haben wir es immer so gemacht, dass wir global Daten deklariert haben (ARRAY[0..15] OF BOOL) und dieses dann an den Funktionsblock der Maschine übergeben haben.
Ich möchte nun lediglich den EtherCAT Slave an die Maschine übergeben und in dem FB der Maschine auf die "Prozessdaten" dieses Slaves zugriefen können. (Was ja in diesem fall einfach 16 mal ein BOOL wäre).
Die Frage ist nun wie komme ich über den EtherCAT Slave an die Prozessdaten ran.
Ich hoffe ich konnte es verständlich darstellen
Wirklich niemand eine Idee?
Hi,
mein FAQ sagt folgendes:
This is how it could be accessed.
pInput : pointer to byte;
pOutput : pointer to byte;
pInput := pSlave^.InputData ;
pOutput := pSlave^.OutputData;
Important: Any byte swapping for big endian processors are not done as the raw data are accessed. Therefore it shall be done in the application code.
Sprich schon auch mit Vorsicht zu genießen das ganz, man muss genau wissen was man tut...
Denke die Info wie man durch die Slaves durch itteriert findest du in er online Hilfe help.codesys.com
Warum brauchst du das?
Vielleicht gibt es noch ne geschicktere Alternative.
Grüße
Edwin
Hi OOP!
Wenn ich es richtig verstehe, suchst du eine Möglichkeit, aus dem IEC-Code auf das Prozessabbild eines Slaves zuzugreifen, und zwar so, wie es in der Gerätekonfiguration vorgegeben wird. Also z.B. wenn das Abbild so aussieht:
dann möchtest du im Code zugreifen
oder so ähnlich. Ist das korrekt?
Wenn ja, dann habe ich seit Jahren den gleichen Wunsch, und ich habe auch noch keine gute Lösung gefunden
Was Edwin vorschlägt, funktioniert im Prinzip, aber dann muss man genau wissen, welcher Slave welche Daten in welcher Reihenfolge und mit welchem Datentyp schickt (du musst die einzelnen Bytes auf deine internen Variablen umkopieren....).
Ich bin mir auch nicht ganz sicher, wie das mit modularen Slaves funktioniert (wie z.B. modulare E/A-Baugruppen, in denen Ein- und Ausgänge gemischt werden können) oder mit Slaves, die FSOE-Daten beinhalten....
Falls es irgendwann eine praktikable Lösung geben sollte, hoffe ich, dass der Erfinder derselben uns alle teilhaben lässt!
Viel Erfolg noch!
Alfred
Ja das habe ich vor. Ich dachte es gibt vielleicht ein verstecktes Interface, welches mir dann auch die entsprechenden Datentypen, bzw. gemappten Adressen liefert.
Der Vorschlag von Edwin funktioniert bei mir nicht, ich bekomme den Fehler, dass InputData und OutputData keine Komponenten von ETCSlave sind.
Gruß
Also diese Variablen nimmt er bei mir nicht an.
so:
Leider bekomme ich dort wie gesagt eine Fehlermeldung.
Weder InputData noch OutputData seien Komponenten von
Einem EtherCat Slave.
Benötigt man noch einen bestimmte EtherCat Library Version?
Also es wäre natürlich schon mal gut, wenn das irgendwie so wie Edwin es beschrieben hat funktionieren würde.
Noch schöner wäre es, wenn man auch Zugriff auf die gemappten Adressen und Typen hätte. (Siehe Screenshot)
Was ist denn mit der Property Connector? kommt man dadurch irgendwie an die Parameter?
Edwin, hast Du oder sonst jemand noch eine Idee, warum die Lösung bei mir nicht funktionieren könnte?
Bzw. gibt es so etwas wie beschrieben um auf die Parameter zugreifen zu können?
Gruß
Hi,
also das muss so gehen allerdings muss die Version halbwegs aktuell sein...
Was verwendest du denn genau?
Grüße
Edwin
Ich verwendet COMBIVIS Studio von KEB und habe dort die aktuellste Version.
Normal: Aktuelle Compiler Version: 3.5.9.70
Testversion mit Compiler Version 3.5.9.73 und IODrvEtherCAT library 3.5.9.50
Und es gibt sonst keine Möglichkeit auf die Daten zu kommen? Eventuell auch über ein verstecktes Interface oder so?
Dass man auch die Datentypen usw. erkennen kann?
Hier noch ein Screenshot. Mache ich was falsch?
Hi,
das geht erst seit 3.5SP10... das ist das Problem in deinem Fall.
Grüße
Edwin
Ah ok,
Dann muss ich noch etwas warten.
Gibt es denn, oder wird es eine Möglichkeit geben auf auf die Parameter
Schauen zu können?
Also zu sehen welche Adressen bspw. Gekappt sind. Bei den Softmotion Treibern
Macht ihr das ja auch.
Würde gerne gemoppte cia402 Parameter erkennen.
Gibt es denn eine Möglichkeit auf die gemalten Adressen bspw. Einer Achse zugreifen. Zu können?
Schade, ein Zugriff auf mehr Daten wäre echt toll.
Also ich habe jetzt Version 3.5.12.x und es funktioniert immer noch nicht
Hallo,
muss aber, schau ob auch wirklich die IODrvEthercat in SP12 in deinem Projekt angezogen wird...
Wenn nein Gerät ( also EthercatMaster mit rechtsclick im Gerätebaum aktualisieren)
Grüße
Edwin
OK, schein zu funktionieren. Habe nur noch kein Zielsystem, welches den SP12 unterstützt.
Hatte mal irgendwo mit bekommen, dass es trotzdem eine Möglichkeit geben würde auf die mapping Infos zugreifen zu können.
Also welche Adressen sind gemappt usw. Edwin weißt Du da was?
Gruß