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

Über EtherCatSlave auf dessen Prozessdaten zugreifen

OOP
2018-10-23
2018-11-19
  • OOP - 2018-10-23

    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

     
  • OOP - 2018-10-25

    Hat niemand eine Idee?

     
  • RolandWagner

    RolandWagner - 2018-10-25

    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?

     
  • OOP - 2018-10-25

    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.

     
  • OOP - 2018-10-25

    Ich hoffe ich konnte es verständlich darstellen

     
  • OOP - 2018-10-30

    Wirklich niemand eine Idee?

     
  • eschwellinger

    eschwellinger - 2018-10-30

    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

     
  • alwoso - 2018-10-30

    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

    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

    IMG: xx.png

     
  • OOP - 2018-10-30

    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ß

     
  • OOP - 2018-10-30

    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.

     
  • eschwellinger

    eschwellinger - 2018-10-30

    so:

    IMG: ETCSlave.png

     
    👍
    1
  • OOP - 2018-10-30

    Edwin Schwellinger hat geschrieben:
    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?

    IMG: error.jpg

     
  • OOP - 2018-10-31

    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?

    IMG: expert.jpg

    IMG: mapping.jpg

     
  • OOP - 2018-11-01

    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ß

     
  • eschwellinger

    eschwellinger - 2018-11-02

    Hi,
    also das muss so gehen allerdings muss die Version halbwegs aktuell sein...
    Was verwendest du denn genau?
    Grüße
    Edwin

     
  • OOP - 2018-11-02

    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?

    IMG: Fehler.jpg

     
  • eschwellinger

    eschwellinger - 2018-11-04

    Hi,
    das geht erst seit 3.5SP10... das ist das Problem in deinem Fall.
    Grüße
    Edwin

     
  • OOP - 2018-11-04

    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.

     
  • OOP - 2018-11-07

    Gibt es denn eine Möglichkeit auf die gemalten Adressen bspw. Einer Achse zugreifen. Zu können?

     
  • OOP - 2018-11-12

    Schade, ein Zugriff auf mehr Daten wäre echt toll.

     
  • OOP - 2018-11-15

    Also ich habe jetzt Version 3.5.12.x und es funktioniert immer noch nicht

     
  • eschwellinger

    eschwellinger - 2018-11-18

    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

     
  • OOP - 2018-11-19

    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ß

     

Log in to post a comment.