FSoE Adresse auslesen mit C# und Beckhoff TwinCAT.Ads .Net

BXcool

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich habe ein Problem bei dem ich nicht mehr weiter komme.

Ich möchte mit C# und TwinCAT ADS die FSoE Adresse einer EL1904 Karte auslesen und diese in einer Windows Form Textbox ausgeben.

Die Basis ist eine CX9020 mit TC3 Lizenz.


Der Versuch über Port 851 auf GroupIndex : 0x03020011 (Objekt Id der Karte), Offset :0xF9800001 (CoE-Online, Ort der FSoE Adresse) zu zugreifen schlug mit dem Fehler "Ads-Error 0x701 : Service is not supported by server" fehl.

Auch der Zugriff über den ADS Server (Prozessabbild) des EtherCAT Masters brachte keine Erfolg ("5.28.212.205.2.1" 27905 ).

Nun habe ich über eine Sync Unit Zuordnung die EL1904 Karte meinem PlcTask zugeordnet und versucht dort über den im Task hinterlegten Port 350 zu zugreifen.

Hier nimmt er den Groupindex an aber bringt mir beim Offset einen "Ads-Error 0x703 : IndexOffset is invalid" Fehler.

Nun bin ich ratlos und hoffe dass mir jemand etwas unter die Arme greifen kann.


Hinzu kommt noch dass ich nicht viel Erfahrung mit Beckhoff TwinCAT oder C# habe.



Hierzu noch folgender Programmausschnitt:


Code:
private void CoE_Load(object sender, EventArgs e)
        {


            TcAdsClient tcClient = new TcAdsClient();
                      


            try
            {

                AdsStream ds = new AdsStream(31);
                BinaryReader br = new BinaryReader(ds);

                
                tcClient.Connect("5.28.212.205.1.1", 350);
                
                
                tcClient.Read(0x03020011, 0xF9800001, ds);
                

                ds.Position = 0;
                textBox1.Text = br.ReadInt32().ToString();

                tcClient.Dispose();
                Console.WriteLine("getrennt");
              
                     
          


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                
                tcClient.Dispose();
                Console.WriteLine("getrennt");


            }
        }
    }
}
 
Hallo BXcool,

die Art des Zugriffs, die du versuchst, setzt voraus, dass der jeweilige Teilnemher überhaupt per IdxGrp/IdxOffs ausgelesen werden kann.
Das idR der Fall bei Variablen im Prozessabbild.
Der Port 851 ist nur für Variablen im Namensraum deiner ersten SPS.

Generell ist der Weg über das Prozessabbild des EtherCAT Masters wohl eher richtig, wenn du hier die ADS Symbole aktiviert hast.

Hier mal ein kleiner Ausschnitt (unvollständig) wie es gehen könnte:

Code:
tcclient.Connect("172.16.17.207.2.1", 1001);
            //Netid Master / Slave address

...

//Vendor auslesen auf CoE-Index 1018 + SubIndex 0
AdsStream AdsStream1 = new AdsStream(99);
AdsBinaryReader AdsBinaryReader1 = new AdsBinaryReader(AdsStream1);
tcclient.Read(0xF302, 0x1008 * 65536 + 0, AdsStream1);

Wenn die FSoE readable ist, sollte das auch auf dessen Index tun!

Gruß,
mac203
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke mac203, es funktioniert !

Code:
 tcClient.Connect("5.28.212.205.2.1", 1003); // 1003= EtherCAT Adr. der EL1904 Klemme
                                                
 
tcClient.Read(0xF302, 0xF9800001, ds);

Darauf dass der Port die EtherCAT Adr. der Klemme ist muss man erst mal kommen.

Gruß
BX
 
Zurück
Oben