Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: SPS über ADS verbinden

  1. #1
    Registriert seit
    24.03.2010
    Beiträge
    44
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Wir haben mehrere Beckhoff CX5010 und wollen Werte untereinander mit ADS austauschen.

    Kann ich die Variablen einer SPS mit dem Namen ansprechen um diese zu lesen oder zu beschreiben?
    Wir nutzen ST und ich finde nur Beispiele mit der genauen Angabe der Adresse.

    unter dem link http://infosys.beckhoff.com/index.ph...cImage.htm&id=
    steht "Hinweis: Vermeiden Sie direkte Adressierung (z.B %MW100) und überlassen dem Kompiler die Speicheradressierung (z.B %M*)."

    Wie kann ich das beachten und trotzdem keine Variablennamen nutzen?

    Eventuell stehe ich auf dem Schlauch aber ich brauche hier einen Denkanstoß!


    Vielen Dank im Voraus!

    Niko
    Zitieren Zitieren SPS über ADS verbinden  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Muss es denn über ADS sein?
    Ihr könnt die Steuerungen auch über Realtime Ethernet miteinander kommunizieren lassen. Dazu müsst ihr dann im Systemmanager die Publisher und Subscriber einrichten....

  3. #3
    onikos ist offline Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Beiträge
    44
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das ist interessant. Danke für den Tipp.
    Ich werde es mir privat näher anschauen.

    Leider muss ich für meine Arbeit ADS nutzen.
    Deshalb meine Frage zu den Variablen und vermeidung der direkten Adressierung.

    Vielen Dank!!

    Niko

  4. #4
    Registriert seit
    29.09.2006
    Beiträge
    368
    Danke
    0
    Erhielt 41 Danke für 38 Beiträge

    Standard

    Klar kannst Du per Name über ADS zugreifen:

    http://infosys.beckhoff.com/index.ph...mple09.htm&id=

  5. #5
    onikos ist offline Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Beiträge
    44
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich kann kein Beispiel für ST finden.

    ADSRDWRT(
    NETID:= ,
    PORT:= ,
    IDXGRP:= ,
    IDXOFFS:= ,
    WRITELEN:= ,
    READLEN:= ,
    SRCADDR:= ,
    DESTADDR:= ,
    WRTRD:= ,
    TMOUT:= ,
    BUSY=> ,
    ERR=> ,
    ERRID=> );

    Bei SRCADDR wird ein Pointer zum Source Buffer erwartet. Kann dort einfach der Dateiname hin?

  6. #6
    Registriert seit
    07.06.2006
    Ort
    Bayern
    Beiträge
    623
    Danke
    27
    Erhielt 156 Danke für 139 Beiträge

    Standard

    es gibt kein Beispiel in ST für den symbolischen Zugriff per ADS von einer SPS heraus (CX, etc.).

    Funktionieren tut das schon - man muß sich das aber etwas zurechtlegen bzw. ausprogrammieren.

    Du müßtest dir per ADSRDWRT (ReadWrite) für jedes Symbol ein "Handle" holen --> Indexgruppe 0xF003.
    Das "Handle" ist ein UINT32.
    Mit einem gültigen "Handle" kannst du dann per ADSREAD, ADSWRITE und Indexgruppe 0xF005 quasi indirekt symbolisch zugreifen.

    So ein "Handle" kann aber auch ungültig werden - das muß man dann natürlich auch abfangen, und evtl. ein neues Handle holen.
    Jedes "Handle" belegt auf der Partnersteuerung Routerspeicher - evtl. Routerspeicher erhöhen.
    Weiterhin sollte man angemeldete Handles bei einem Stop der Steuerung wieder abmelden (Indexgruppe 0xF006) - andernfalls wird der Routerspeicher der Partnerstation mit Handle-Leichen belegt - im schlimmsten Fall schmiert einem dann die Steuerung ab, wenn der Routerspeicher aufgebraucht ist.

    Für den einfachen Datenaustausch auf SPS-Ebene zwischen 2 Steuerungen würde ich dir den adressierten Zugriff auf den Merkerbereich per Indexgruppe 0x4020 empfehlen - da kann man nicht viel falsch machen.
    Richte dir für den Datenaustausch in der jeweiligen Steuerung globale Variablen ein, die händisch in den Merkerbereich adressiert sind (z.B. TestVariable AT%MW0 : WORD)
    Du mußt dann natürlich aufpassen, dass sich diese Adressen nicht überlappen.

  7. Folgender Benutzer sagt Danke zu uncle_tom für den nützlichen Beitrag:

    onikos (07.03.2014)

  8. #7
    onikos ist offline Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Beiträge
    44
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    Ich bin immer noch heiß darauf, Variablen leicht mit Namen anzusprechen.

    Ich habe PLC_ReadSymInfoByName gefunden, womit ich alle nötigen Informationen zusammen hätte.

    Mein Problem jetzt ist nur wenn ich folgenden code habe
    Code:
    
    
    PLC_ReadSymInfoByName1(
    	NETID:= 192.168.1.100.1.1, 
    	PORT:= 851, 
    	SYMNAME:= 'gvl.var_read_from', 
    	START:= TRUE, 
    	TMOUT:= T#5S, 
    	BUSY=> , 
    	ERR=> , 
    	ERRID=> , 
    	SYMINFO=>  syminfo);
    
    
    ADSREAD(
    	NETID:= '192.168.1.100.1.1', 
    	PORT:= 851, 
    	IDXGRP:= 16#4020, 
    	IDXOFFS:= SYMINFO.idxOffset, 
    	LEN:= sizeof(gvl.Var_read_from), 
    	DESTADDR:= ADR(gvl.Var_copy), 
    	READ:= TRUE, 
    	TMOUT:= T#5S, 
    	BUSY=> , 
    	ERR=> , 
    	ERRID=> );
    Wenn ich jetzt anstatt SYMINFO.idxOffset eine 2 eingebe geht es.
    Wenn ich es so lasse steht online eine 2 drin, es funktioniert aber trotzdem nicht.

    Habe schon in alle möglichen Datantypen konvertiert.

    Wenn ich es von einer Struktur kopiere geht es nicht.


    Kann mir jemand helfen und sagen was mein Fehler ist?


    Vielen Dank!!

    Niko

  9. #8
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    PLC_ReadSymInfoByName1 benötigt mehrere Zyklen um die Daten zu holen. Du musst also erstmal abwarten bis der
    Busy - Ausgang des Bausteins wieder false ist. Erst dann stehen in deiner syminfo Struktur die korrekten Daten drin.

    In der Online Ansicht siehst du den Wert, weil der PLC_ReadSymInfoByName1 schon fertig ist wenn du drauf schaust.
    Aber beim Aufruf von ADSREAD im selben Zyklus ist er es noch nicht, weswegen du im dann einen falschen Offset übergibtst.

  10. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    onikos (04.08.2014)

  11. #9
    onikos ist offline Benutzer
    Themenstarter
    Registriert seit
    24.03.2010
    Beiträge
    44
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Perfekt erklärt, es geht! Danke

Ähnliche Themen

  1. ADS: SDO lesen über ads ocx von Visualisierung
    Von traveler im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 10.01.2011, 11:00
  2. SPS über W-Lan mit WINCC-RT verbinden
    Von Fraggle im Forum HMI
    Antworten: 4
    Letzter Beitrag: 25.09.2010, 10:23
  3. Antworten: 12
    Letzter Beitrag: 21.01.2008, 13:24
  4. PC --- SPS über 200meter verbinden
    Von Anonymous im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 09.11.2005, 06:34
  5. Zwei SPS über MPI verbinden
    Von davidflo im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 25.01.2005, 20:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •