Pointerverweis nach UC

hubert

Level-2
Beiträge
391
Reaktionspunkte
25
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Freunde.

Mal eine Frage an die SCL Profis. Habe von einem Baustein, den Bitverbieger für eine 'Sonnenstand-Berechnung' eingestellt hat folgende Code gesehen. Der Baustein wurde zwar in SCL geschrieben, da aber die SCL Date für diesen Baustein nich im Projekt war, hat siemens den Baustein automatisch in AWL übersetzt. Mir geht es speziell um frolgende Programm Zeile.
Code:
      SET   
      SAVE  
      =     L      0.1
      L     1.745329e-002
      L     #latitude
      *R    
      T     #B
      L     -1.450000e-002
      T     #h
      L     DINO
      T     LW     2
      TAR2  
      +     L#64
      T     LD     4
      TAR2  LD     8
      UC    "DT_DATE"
            P#L 2.0
            P#L 12.0
      LAR2  LD     8
      TAR2  LD     8
      UC    "day_of_year"
            P#L 12.0
            P#L 2.0

Und zwar vorallem um die Pointeraufrufe nach den UC Bausteinaufrufen. Was wird über diese Pointer dem aufgrufenen Baustein mitgeteilt. Wenn ich diesen Code in AWL so tippe läst er es nicht zu. Bin auf Euere Antworten gespannt.
 
Das ist letzten Endes ein CALL Aufruf,
in AWL würde man schreiben
CALL day_of_year
para1: LW12
para2: LW2

Ich vermute mal, das SCL direkt in MC7 Code übersetzt,
und ein Bausteinaufruf auf MC7 Ebene funktioniert wohl irgendwie mit UC,
und das ist dann letzten Endes eine Interpretation des MC7 Codes.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Uc

Hallo Hubert,

das sollten die Übergabeparameter der Funktion sein. Wichtig ist dass man sich durch speichern im KOP/FUP/AWL-Editor den Code so versauen kann dass im schlimmsten Fall die SPS die weisse Flagge raushängt. Komisch dass es mit UC übersetzt wird, aber immerhin besser als UG!

André
 
Hallo.

Danke schon mal für die Antworten. Dachte mir schon soetwas, dass das die Übergabeparamter für diesen Baustein sind. Was mich aber noch wundert, wenn ich die Zeile in AWL genauso nachtippe funktioniert es nicht. Die P#x.y nach den UC aufrufen werden rot. Ist es vielleicht so etwas was "MSB" schreibt? Das es durch die Übersetzung von SCL in AWL in einen Art MC7 Code gewandelt wird und die Bausteinaufrufen in MC7 mit "UC" so aussehen?
 
Hallo!

Sind das FC Bausteine?
Bei FC Bausteinen werden die Parameter indirekt übergeben.
Das heißt in deiner Variable im FC ist nicht der Wert hinterlegt von dem Speicherbereich was du aussen an den FC angibst sondern es ist zu dem Speicherbereich ein Pointer. Deshalb stehen hier die Pointer.

Halbwechs verständlich? ;)

godi
 
Der Thread auf den ich verlinkt habe besagt doch aber das es nur bei AWL so wäre und bei KOP/FUP nicht. Da wird der VAR_INPUT Bereich wohl auf den L Stack gelegt.
 
Bedeuten das, dass der VAR_INPUT = VAR_IN_OUT dreck aus AWL auch in SCL gilt?

Hallo Zotos,
ohne den oben genannten Link näher durchgelesen zu haben ...
KOP und FUP sind nur andere optische Darstellungsformen von AWL. Die können nichts mehr wie AWL auch. Wenn man den Bogen heraus hat, dann kann man auch in AWL proggen und der erstellte Code läßt sich in KOP und FUP darstellen (mache ich meisstens so). SCL hat vom "Compiler" her ein paar Überwachungsmöglichkeiten mehr - das Ergebnis muss aber zwingend das Gleiche sein - es wird ja hinterher von der selben CPU interpretiert. Etwas anderes wäre es, wenn bei der Übersetzung eine Art Assembler-Code heraus käme - dem ist aber nicht so ...
 
...
ohne den oben genannten Link näher durchgelesen zu haben ...
...

Ich habe ihn auch nicht richtig gelesen ;o(

Es geht nicht um die Sprache in der ein FC erstellt wurde sondern wie er Aufgerufen wird ;o)

Also von daher hast Du recht das Problem mit dem IN = IN_OUT (für bestimmte Datentypen) ist unabhängig von der Ersteller Sprache.

Der Aufruf von einem FC mit einer BOOL Variable am Eingang in FUP erstellt und nach AWL konvertiert:
Code:
      U     E      0.0
      =     L     26.0
      BLD   103
      CALL  FC     2
       IN :=L26.0
       OUT:=A0.0
      NOP   0
so würden das die wenigsten in AWL machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Danke schon mal für die Antworten. Dachte mir schon soetwas, dass das die Übergabeparamter für diesen Baustein sind. Was mich aber noch wundert, wenn ich die Zeile in AWL genauso nachtippe funktioniert es nicht. Die P#x.y nach den UC aufrufen werden rot. Ist es vielleicht so etwas was "MSB" schreibt? Das es durch die Übersetzung von SCL in AWL in einen Art MC7 Code gewandelt wird und die Bausteinaufrufen in MC7 mit "UC" so aussehen?

Hallo!

Der Code den man sieht, wenn man ein SCL-Programm im AWL-Editor öffnet ist immer noch kein "reiner" MC7 Code!

Speziell bei der Parameterübergabe sieht die Sache in Wirklichkeit so aus:



UC "DT_DATE"
SPA over
P#L 2.0
P#L 12.0
over: BLD 1



Den SPA bekommt man nie zu sehen, (das BLD 1) ist jetzt nicht fest, da kann auch etwas anderes stehen.
Wichtig ist nur, dass die Pointer übersprungen und nicht von der CPU bearbeitet werden.
Leider lässt der AWL-Editor es nicht zu die Pointer überhaupt als Code abzulegen, deswegen kann man so etwas von Hand nur im HEX codieren.

Spielt natürlich alles nur bei FCs eine Rolle, da die Parameterübergabe bei FBs über den DB läuft!


Gruß
 
Zurück
Oben