Problem bei Übergabe von Wert an Pointer

rapser

Level-1
Beiträge
48
Reaktionspunkte
6
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.
 
... 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 ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... 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?
 
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...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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

.
.
.
.
.
.
 
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?
 
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
 
Super :s12:,

vielen Dank an alle die mir weitergeholfen haben.
Ich glaube ich komm jetzt alleine weiter.

Die Leute in diesem Forum sind doch sehr hilfsbereit.

thx
 
Zurück
Oben