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

Ergebnis 1 bis 2 von 2

Thema: ADR(var) ermitteln, wenn ADS-Group/Offset bekannt

  1. #1
    Registriert seit
    24.02.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein Funktionsbaustein erstellt bei mir zyklisch eine Liste mit bis zu 100 aktuellen Meßwerten.
    Welche das sind, wird zur Laufzeit über eine Liste von Group/Offset Werten eingestellt, die von Außen (via ADS) in den Baustein geschrieben wird.
    Momentan lese ich dann im Funktionsbaustein jeden Wert einzeln mit einem ADSREAD von meiner eigenen Net-ID. Das kostet aber enorm Rechenleistung.
    Welche Variablen gelesen werden, wird nur selten verändert. Daher würde ich gerne die Adresse der Variablen ermitteln um mit einem Pointer statt ADS zuzugreifen.

    Meine Frage:
    Gibt es eine Möglichkeit, die Adresse der interessierenden Variable zu ermitteln, wenn ich nur die ADS-Group und Offset Angaben habe?

    Der gesuchte Code könnte so aussehen:
    varAdresse:=gesuchteTolleFunktion(Group, Index);
    Und der Zugriff wäre ein simples:
    varWert:=varAdresse^;


    Hier der momentane Code (leider verschwindet die Einrückung):
    ---
    Adressliste_Group: ARRAY[0..100]OF DWORD:=100(0);
    Adressliste_Offset:ARRAY[0..100]OF DWORD:=100(0);
    Istwertliste:ARRAY[0..100]OF REAL;
    AdsRd:ARRAY[0..100] OF ADSREAD;
    ---
    FOR i:=0 TO 100 DO
    IF 0=Adressliste_Group[i] THEN EXIT; END_IF
    AdsRd[i](READ:=0);
    IF NOT AdsRd[i].BUSY THEN
    AdsRd[i](NETID:='172.16.17.100.1.1', (* Das bin ich selbst *)
    PORT:=801,
    IDXGRP:=Adressliste_Group[i],
    IDXOFFS:=Adressliste_Offset[i],
    LEN:=SIZEOF(Istwertliste[0]),
    READ:=1,
    DESTADDR:=ADR(Istwertliste[i])
    );
    END_IF
    END_FOR
    Zitieren Zitieren ADR(var) ermitteln, wenn ADS-Group/Offset bekannt  

  2. #2
    zabex ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für Variablen der Gruppe 16448 (16#4040) habe ich einen Workaround:
    Ich lege eine Variable AdressreferenzWORD; an, die in dieser Gruppe enthalten ist und hole mir mit ADR(Adressreferenz)deren Adresse. Von außen lasse ich mir nun Group/Offset dieser Variable liefern (ermittelt aus der aus.tpy Datei), merke ihn mir in Referenzoffset und kann nun für alle anderen Offsets in der Gruppe die Speicheradresse ermitteln, da die Differenz der Offsets ja der Differenz der Speicheradressen ist.
    varAdresse:=ADR(Adressreferenz) + (Referenzoffset-VarOffset);
    Blöd ist halt, dass ich für alle möglichen Gruppen nun Referenzvariablen vorsehen muss.

Ähnliche Themen

  1. Eingangswort per ADS und Group/Offset auslesen
    Von AKNOT im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 26.03.2012, 17:13
  2. Antworten: 3
    Letzter Beitrag: 13.04.2011, 07:22
  3. Managed-Switch finden, wenn nur Mac-Adresse bekannt
    Von Krumnix im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 26.08.2010, 13:04
  4. Antworten: 7
    Letzter Beitrag: 04.05.2005, 11:27

Stichworte

Lesezeichen

Berechtigungen

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