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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: ANY-Pointer auf UDT mit Bestimmter Länge

  1. #1
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    Ich schreibe gerade einen Multiinstanz-Fb zur Steuerung eines Danfoss Frequenzumformers via Profibus. Im statischen Bereich des FB´s habe ich einen UDT mit den erforderlichen Sende- (Byte 20-40) und Empfangsdaten Byte (0-20).

    Jetzt geht es um die Bausteine DPRD_DAT und DPWR_DAT, genauer um den Reccord Eingang. Die Bausteine brauchen einen Any-Pointer auf den Datenbereich der zu senden bzw empfangen ist. Beim DPRD_DAT bzw. DPWR_DAT muss ich jeweils 20 Byte übertragen, ich kann also nicht einfach den UDT am Reccord Eingang angeben (Siehe Bild) sondern muss irgendwie einen ANY Pointer auf den UDT von 0 bis 20 angeben.Also etwas wie

    Im Normalfall (DB) schreibt man einfach P#DB201.DBX20.0 BYTE 20 oder P#M 20.0 BYTE 20 usw.

    Leider funktionert P#Fudaten BYTE 20 oder ähnliches nicht.

    Kann man das doch irgenwie so schreiben oder muss ich mir den Erforderlichen Pointer erst händisch zusammenbauen.

    mfg RONIN
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren ANY-Pointer auf UDT mit Bestimmter Länge  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    wieso machst du keine UDT_IN und eine UDT_OUT? Nutzt du diese UDT noch anderweitig? Ansonsten kannst du doch auch je ein STRUCT für IN und OUT im STAT-Bereich anlegen. Ich bin mir jetzt nicht ganz sicher ob der FB automatisch multiinstanzfähig ist wenn du die Variable symbolisch ranschreibst. Falls du das mit der einen UDT beibehalten willst musst du dir deinen Pointer selbst bauen. Denke dabei an den Offset für Multiinstanzaufruf!

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Fb  

  3. Folgender Benutzer sagt Danke zu sps-concept für den nützlichen Beitrag:

    RONIN (07.08.2009)

  4. #3
    Avatar von RONIN
    RONIN ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard

    Zitat Zitat von sps-concept Beitrag anzeigen
    Hallo,
    wieso machst du keine UDT_IN und eine UDT_OUT? Nutzt du diese UDT noch anderweitig? Ansonsten kannst du doch auch je ein STRUCT für IN und OUT im STAT-Bereich anlegen.
    André
    Das war der nächste Plan falls es so nicht geht. Wird wohl auf 2 structs rauslaufen. Baue mir nähmlich im FB schon 2 Zeiger für laden mit dem BLKMOV zusammen, wenn ich jetzt auch noch 2 fürs DP mache ist mir das zuviel Zeigergebastle für einen FB.

    Zitat Zitat von sps-concept Beitrag anzeigen
    Hallo,
    Ich bin mir jetzt nicht ganz sicher ob der FB automatisch multiinstanzfähig ist wenn du die Variable symbolisch ranschreibst.
    André
    Ist ne gute Frage, aber normalerweise schon da wie beim jedem anderen symbolischen Aufruf der Offset ja ebenso im AR2 stehen müsste. Oder irre ich mich da????

    Zitat Zitat von sps-concept Beitrag anzeigen
    Hallo,
    Falls du das mit der einen UDT beibehalten willst musst du dir deinen Pointer selbst bauen. Denke dabei an den Offset für Multiinstanzaufruf!
    André
    geht doch nix über "Tar2"


    mfg RONIN
    Geändert von RONIN (05.08.2009 um 15:29 Uhr)

  5. #4
    Registriert seit
    05.03.2007
    Ort
    Lindlar
    Beiträge
    112
    Danke
    19
    Erhielt 20 Danke für 18 Beiträge

    Standard

    Hast du mal versucht einfach nur P##Fudaten anzubinden?
    IF Time < '09:00:00' THEN
    SELECT finger from right hand where ID=3
    END IF

  6. #5
    Avatar von RONIN
    RONIN ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard

    Zitat Zitat von Panzerknacker Beitrag anzeigen
    Hast du mal versucht einfach nur P##Fudaten anzubinden?
    P##Fudaten verursacht klarerweise einen Typenkonflikt.

    P##Fudaten ist vom Typ her ein Pointer auf die erste Adresse der Fudaten, DPWR-DAT usw benötigen aber eien Any-Pointer der einen Speicherbereich abdeckt.

    mfg

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    ich verstehe jetzt im Augenblick das Problem nicht.
    Wenn du FUDaten symbolisch an den SFC14 (oder 15) übergibst, so wird das als ANY-Pointer übergeben. Wo hakt es denn nun ?

  8. #7
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ich verstehe jetzt im Augenblick das Problem nicht.
    Wenn du FUDaten symbolisch an den SFC14 (oder 15) übergibst, so wird das als ANY-Pointer übergeben. Wo hakt es denn nun ?
    daran dass er eine gesamte UDT für IN und OUT hat und so nur die Hälfte des Bereiches am SFC benötigt.

    Ich würde wie schon erwähnt 2 STRUCT im STAT-Bereich anlegen. Von UDT (falls nicht an anderen Stellen noch verwendet) würde ich absehen, da sonst wieder eine unnötige Abhängigkeit besteht.

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Any  

  9. #8
    Avatar von RONIN
    RONIN ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.351
    Danke
    452
    Erhielt 692 Danke für 517 Beiträge

    Standard

    Hab ich auch schon längst so umgebaut (2 structs im Stat-Bereich). Meine Frage war ja auch lediglich ob es möglich ist bei einem symbolischen Anypointer einen Bereich zu vergeben. (Ohne dass mann ihn zusammenbasteln muss)

    Aber anscheinend geht das nur bei statischen Pointern wie: P#M 20.0 BYTE 20


    Was mich abschließend noch interresieren würde ist, meine vermutung im Beitrag #3 stimmt oder nicht

    Darf man sich eigentlich selber zitieren... Ach was solls
    Zitat Zitat von RONIN Beitrag anzeigen

    Ist ne gute Frage, aber normalerweise schon da wie beim jedem anderen symbolischen Aufruf der Offset ja ebenso im AR2 stehen müsste. Oder irre ich mich da????

    mfg RONIN
    Geändert von RONIN (06.08.2009 um 09:44 Uhr)

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo Ronin,
    bezüglich deiner Frage im Beitrag #3 bitte mal hier lesen. Ich denke, das ist im Grundsatz dein Problem ...

    Deine andere Frage verstehe ich nicht so recht :
    Meine Frage war ja auch lediglich ob es möglich ist bei einem symbolischen Anypointer einen Bereich zu vergeben. (Ohne dass mann ihn zusammenbasteln muss)
    was verstehst du unter einem symbolischen Any-Pointer ?

    Gruß
    LL

  11. #10
    Registriert seit
    13.05.2008
    Beiträge
    316
    Danke
    43
    Erhielt 23 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    *gelöscht*
    Geändert von Beren (04.07.2011 um 17:52 Uhr)

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 07.08.2010, 14:17
  2. SCL DB Länge ermitteln
    Von Dotzi im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.07.2010, 20:01
  3. Antworten: 9
    Letzter Beitrag: 06.01.2006, 13:39
  4. Antworten: 2
    Letzter Beitrag: 13.10.2005, 11:46
  5. Aufrufdauer bestimmter SFB's in einer S7-400
    Von Rengel im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.03.2005, 15:30

Lesezeichen

Berechtigungen

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