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

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

Thema: Problem bei Übergabe von Wert an Pointer

  1. #1
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe SPS-Gemeinde,

    ich habe ein Problem bei einer Pointerprogrammierung bzw. stehe ich gerade auf dem Schlauch.

    Ich arbeite mit Step7 V5.4+SP1.

    Ich habe mir einen eigenen FC 520 geschaffen, der Aufruf sieht wie folgt aus:

    Code:
          CALL  FC   520
           Parameter_DB        :="DATA_IDENT_01"
           Write_Length        :=B#16#E
           Write_Address_MDS   :=B#16#0
           Write_DAT_DB_number :="IDENT_01_WT"
           Write_DAT_DB_address:=B#16#0
           Read_Length         :=B#16#E
           Read_Address_MDS    :=B#16#0
           Read_DAT_DB_number  :="IDENT_01_RD"
           Read_DAT_DB_address :=B#16#0
           SchreibenStarten    :="BIS_Kommunikation"._0._2
           LesenStarten        :="BIS_Kommunikation"._0._1
           Reset_BIS           :="BIS_Kommunikation"._0._0
    Nun mein Problem, die Eingangsparameter Write_DAT_DB_address und Read_DAT_DB_address (vom Typ Byte) sollen in meinem FC 520 jeweils einem Pointer zugewiesen werden.

    Für den Parameter Write_DAT_DB_address habe ich dies wie folgt gelöst:
    Code:
        
    L     P##Write_DAT_DB_address    
    T     #Zeiger
    Arbeite ich nun aber mit dem #Zeiger (Datentyp Byte) weiter bekomme ich einen Fehler:

    Code:
    AUF #Write_DAT_DB_number
    L     DBB [#Zeiger] //Hier ist der Fehler, die Meldung ist: "Typkonflikt für Zeiger"
    Ich hoffe Ihr könnt mir weiterhelfen.
    MfG
    rapser
    Zitieren Zitieren Problem bei Übergabe von Wert an Pointer  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... mach doch mal folgendes :
    Code:
    L     P##Write_DAT_DB_address    
    SLD 3
    T     #Zeiger
    Gruß
    LL

    Nachsatz :
    #Zeiger muß natürlich ein DWORD sein ...

  3. #3
    rapser ist offline Benutzer
    Themenstarter
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... mach doch mal folgendes :
    Code:
    L     P##Write_DAT_DB_address    
    SLD 3
    T     #Zeiger
    Gruß
    LL

    Nachsatz :
    #Zeiger muß natürlich ein DWORD sein ...
    Vielen Dank für deine Antwort,

    ich habe #Zeiger jetzt zu DWORD gemacht möchte ich jetzt aber mit dem #Zeiger wie folgt weiterarbeiten geht die CPU in STOP und die SF LED leuchtet rot.

    Code:
     
    AUF   #Write_DAT_DB_number
    L     DBB [#Zeiger]
    Hast du dazu eine Erklärung?
    MfG
    rapser

  4. #4
    Registriert seit
    19.09.2006
    Beiträge
    60
    Danke
    10
    Erhielt 4 Danke für 4 Beiträge

    Standard

    schau mal unter Zielsystem/Baugruppenzustand welcher Fehler aufgetreten ist, so mit meiner Kristallkugel würde ich sagen, dass du eine Adresse im DB aufrufst die es nicht gibt...

  5. #5
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard

    und was sagt der Diagnosepuffer?

    Gruß wolder

  6. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Probier mal:

    Code:
    L Write_DAT_DB_address
    SLD 3
    T Zeiger // Temporäre Lokaldaten als Doppelwort definiert
     
    AUF #Write_DAT_DB_number
    L DBB[Zeiger]
    So wie ich es schnell sehe, brauchst du keinen Pointer auf Write_DAT_DB_adress, sondern den Wert der Variablen

    Gruß
    Dieter

  7. #7
    rapser ist offline Benutzer
    Themenstarter
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Die CPU sagt folgendes:

    Diagnosepuffer der Baugruppe CPU 317F-2 DP

    Bestell-Nr./ Bezeichn. Komponente Ausgabestand
    6ES7 317-6FF03-0AB0 Hardware 2
    - - - Firmware V 2.6.10
    Boot Loader Firmware-Erweiterung A 10.13.9

    Baugruppenträger: 0
    Steckplatz: 2


    Ereignis 1 von 100: Ereignis-ID 16# 4562
    STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
    Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
    Prioritätsklasse: 1
    FC-Nummer: 520
    Bausteinadresse: 18
    Bisheriger Betriebszustand: RUN
    Angeforderter Betriebszustand: STOP (intern)
    interner Fehler, kommendes Ereignis
    07:24:23.895 26.03.1994


    Ereignis 2 von 100: Ereignis-ID 16# 2522
    Bereichslängenfehler beim Lesen
    Global -DB , Bytezugriff, Zugriffsadresse: 184
    Angeforderter OB: Programmierfehler-OB (OB 121)
    OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
    interner Fehler, kommendes Ereignis
    07:24:23.881 26.03.1994

    .
    .
    .
    .
    .
    .
    MfG
    rapser

  8. #8
    rapser ist offline Benutzer
    Themenstarter
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Probier mal:

    Code:
    L Write_DAT_DB_address
    SLD 3
    T Zeiger // Temporäre Lokaldaten als Doppelwort definiert
     
    AUF #Write_DAT_DB_number
    L DBB[Zeiger]
    So wie ich es schnell sehe, brauchst du keinen Pointer auf Write_DAT_DB_adress, sondern den Wert der Variablen

    Gruß
    Dieter
    vielen Dank für deine Antwort, so wie du es geschrieben hast bekomme ich den Wert, der hinter
    Code:
    AUF #Write_DAT_DB_number
    L DBB[Zeiger]
    steckt, dies möchte ich auch, doch wie bekomme ich jetzt den Wert der hinter "L DBB[Zeiger+1]", quasi aus dem nächsten DBB?
    MfG
    rapser

  9. #9
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo rapser,

    mit
    Code:
    L #Zeiger
    L P#1.0
    +D
    T #Zeiger
    Grüße
    Gebs

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    das ginge z.B. so :
    Code:
    L Write_DAT_DB_address
    SLD 3
    T Zeiger // Temporäre Lokaldaten als Doppelwort definiert
     
    AUF #Write_DAT_DB_number
    LAR1 #Zeiger
     
    L DBB [AR1,p#0.0]  // Byte an Zeiger-Adresse
    L DBB [AR1,p#1.0]  // Byte an Zeiger-Adresse +1
     
    // etc ...
    Gruß
    LL

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 18.12.2009, 13:29
  2. Problem mit Pointer
    Von Mathias im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.02.2009, 10:03
  3. Pointer Problem??
    Von INST im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 24.11.2005, 10:30
  4. Antworten: 2
    Letzter Beitrag: 01.01.2005, 21:13
  5. Parametrierter FC - Problem mit Pointer
    Von kaufmann-michael im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.01.2004, 11:50

Lesezeichen

Berechtigungen

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