Pointer aus Global DB laden

Markus

Administrator
Teammitglied
Beiträge
6.324
Reaktionspunkte
2.342
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo

habe einen koppel db für die visu.
in diesen sind einiege istwerte und weiter hinten die parameter der aktuellen rezeptur.

die rezeptur besteht wieder aus mehreren udt´s die in einem array liegen.
jeder eintrag des arrays enthält die daten für einen schritt.


die werte des aktuellen schrittes will ich nun mit sfc20 in eine weitere structur kopieren.

das ist alles kein problem, ich habe nur in der berechnung des anypointers den offset der rezepturdaten im koppel db fest eingetragen.

das gefällt mir nicht...

folgendes geht nicht:

L P#"VISU_Station_1".Prg_Parameter.Prg.Schritt[1]

wie kann ich das machen?

danke!
 
Hallo Markus,

du könntest den Any von außen als Bausteinparameter anlegen. Oder den Any an eine FC übergeben, dort zerlegen und seine Bestandteile als Ausgänge zurückgeben. Darauf bist du sicherlich auch schon gekommen. Eine andere Möglichkeit kenne ich nicht.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie meinst du das?

eine fc der ich an einem any eingang das übergebe:

"VISU_Station_1".Prg_Parameter.Prg.Schritt


sie gibt mir dann an den augangsparametern die db-nr, die startadresse und die länge aus?


geht das?
habe das "rückwärts" mit any pointern noch nie gemacht...

das wäre eine lösung...

bastel mit gleich mal ne fc dafür...

danke!
 
ok habe mir jetzt mal folgendes gebastelt:

Code:
      L     P##SRC_ANY
      LAR1  
      L     LB [AR1,P#0.0]              // Syntax-ID in den Any-Pointer auslesen
      T     #SyntaxID
      L     LB [AR1,P#1.0]              // Bereichstyp auslesen (B#16#2 = Byte; B#16#4 = Word)
      T     #Bereichstyp
      L     LW [AR1,P#2.0]              // Anzahl der zu übertragenden Werte (Byte/Word)
      T     #Anzahl_Werte
      L     LW [AR1,P#4.0]              // DB-Nummer auslesen
      T     #DB_Nr
      L     LD [AR1,P#6.0]              // Pointer Startadresse auslesen
      T     #Startadresse


wozu ist eigentlich die syntax id gut?
sagt die wie lange der any selber ist?
kann man damit was cooles machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nein mache ich nicht! :ROFLMAO:
ich will den pointer doch auslesen.

wozu isse den nun gut die syntax id...

was für eine db-nr erhalte ich eigentlich wenn ich einen pointer auf einen merkerbereich zerlege?
 
Ich glaube null oder auch was undefiniertes. Jedenfalls kannst du umgekehrt was beliebiges reinschreiben (auch eine DB-Nummer, die es nicht gibt), wenn du auf einen Merkerbreich schreibst. Die DB-Nummer wird dann einfach ignoriert.
 
ok danke für die tips, jetzt sieht das ganze so aus:

Code:
      CALL  "ANY_OFFSET"
       SRC_ANY :="VISU_Station_1".Prg_Parameter.Prg.Schritt[1]
       ENTRY_NO:=#Schrittnummer
       DST_ANY :=#Pointer_Schritt_Aktuell
 
CALL  "BLKMOV"
       SRCBLK :=#Pointer_Schritt_Aktuell
       RET_VAL:=#retval
       DSTBLK :=#Schritt_Aktuell


code vom ersten baustein:

Code:
 L     P##SRC_ANY
      LAR1  
      L     LB [AR1,P#0.0]              // Syntax-ID aus dem Any-Pointer auslesen
      T     #SyntaxID
      L     LB [AR1,P#1.0]              // Bereichstyp auslesen (B#16#2 = Byte; B#16#4 = Word)
      T     #Bereichstyp
      L     LW [AR1,P#2.0]              // Anzahl der zu übertragenden Werte (Byte/Word)
      T     #Anzahl_Werte
      L     LW [AR1,P#4.0]              // DB-Nummer auslesen
      T     #DB_Nr
      L     LD [AR1,P#6.0]              // Pointer Startadresse auslesen
      T     #Startadresse

 
 
 L     #ENTRY_NO
      +     -1
      L     #Anzahl_Werte
      *I    
      ITD   
      SLD   3
      L     #Startadresse
      +D    
      T     #Startadresse

 
 
  L     P##DST_ANY
      LAR1  
      L     #SyntaxID
      T     LB [AR1,P#0.0]              // Syntax-ID aus dem Any-Pointer auslesen
      L     #Bereichstyp
      T     LB [AR1,P#1.0]              // Bereichstyp auslesen (B#16#2 = Byte; B#16#4 = Word)
      L     #Anzahl_Werte
      T     LW [AR1,P#2.0]              // Anzahl der zu übertragenden Werte (Byte/Word)
      L     #DB_Nr
      T     LW [AR1,P#4.0]              // DB-Nummer auslesen
      L     #Startadresse
      T     LD [AR1,P#6.0]              // Pointer Startadresse auslesen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldigt, ich war zwar gestern noch online, hatte aber nicht mehr im Forum gelesen. Ich bin z.Z. schwer mit WinCC Flexible beschäftigt. WinCC Flexible grenzt an Freiheitsberaubung :( !

Die Syntax-ID ist bei Step7 immer 10hex. Ich denke, sie ist ein Ident dafür dass der ANY zu einer S7 gehört. Keine Ahnung wo oder wann man das brauchen kann.


Gruß, Onkel



AR1 gesichert?
Code:
//*** AR1 sichern
TAR1 #AR1_TEMP
SET 
SAVE 
 
//*** AR1-Register wiederherstellen
LAR1 #AR1_TEMP
 
Zuletzt bearbeitet:
Zurück
Oben