Typinformation doch in der SPS?

Beiträge
9.189
Reaktionspunkte
2.936
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe folgendes Programmstück zum Auslesen der Typinformation aus einem Any-Pointer:
Code:
      L     P##IN1
      LAR1  
      L     B [AR1,P#1.0]
      SET
      R     #xWORD
      R     #xINT
      R     #xDINT
      R     #xREAL
      R     #xDWORD
      T     #y_typ                      // Typ speichern
      L     4
      ==I   
      S     #xWORD                      // Typ WORD
      TAK   
      L     5
      ==I   
      S     #xINT                       // Typ INT
      TAK   
      L     6
      ==I   
      S     #xDWORD                     // Typ DWORD 
      TAK   
      L     7
      ==I   
      S     #xDINT                      // Typ DINT
      TAK   
      L     8
      ==I   
      S     #xREAL                      // Typ REAL
IN1 ist ein In-Parameter eines FCs vom Datentyp Any.

Jetzt kann ich an diesen Parameter z.B. auch MD40 eintragen. Bei der Auswertung kommt dabei genau der Datentyp heraus den ich in meiner Symboltabelle eingetragen habe.

Wie funktioniert das?
Setzt der Step7 Editor meine Eingabe automatisch in den passenden Any-Pointer um? Eigentlich sind in der SPS doch keine Typinformationen vorhanden.

Gruß
Thomas
 
Zuletzt bearbeitet:

Anhänge

  • CHECK_TEST.png
    CHECK_TEST.png
    5,8 KB · Aufrufe: 18
... wenn du den Operanden symbolisch angelegt hast, dann wird das m.E. so geschehen.
Wenn du in dein MD40 aber den Inhalt eines anderen Doppelwortes überträgst, so überträgst du damit nicht auch die Typ-Zuweisung ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du in dein MD40 aber den Inhalt eines anderen Doppelwortes überträgst, so überträgst du damit nicht auch die Typ-Zuweisung ...

ich bin mir relativ sicher, dass es so ist ... hatte ich doch vor kurzen erst einen baustein geschrieben, der das ausnutzt: http://sps-forum.de/showpost.php?p=164419&postcount=14

und schaut man sich den aufruf

Code:
*
      CALL  "UN-&SCALE_ANY"
       anyIn     :=MD40
       bParameter:=MB2
       anyOut    :=MW30

mal in der makro sicht an

Code:
*
      BLD   1
      =     L     48.0
      L     W#16#1006
      T     LW    49
 
      L     1
      T     LW    51
      L     0
      T     LW    53
      L     P#M 40.0
      T     LD    55
      L     W#16#1004
      T     LW    59
      L     1
      T     LW    61
      L     0
      T     LW    63
      L     P#M 30.0
      T     LD    65
      UC    "UN-&SCALE_ANY"
            P#L 49.0
            P#M 2.0
            P#L 59.0
      BLD   2

wirds auch klarer :rolleyes:
 
4L:
Wie hast du denn die Ansicht hinbekommen sodass er dir die Pointer anzeigt?

Bei mir steht egal was ist anstelle immer nur MD40 da.
Das Ganze funktioniert übrigens auch mit Einträgen aus Datenbausteinen.

So ganz glücklich bin ich damit aber nicht was der Step7 Editor macht. Wenn ich nachträglich in der Symboltabelle oder DB den Datentyp ändere, sollte Step7 beim Online gehen eigentlich meckern dass der Baustein nicht mit dem in der Station übereinstimmt - macht es aber nicht.
 
es ist egal ob du einen pointer ala P#M40.0 REAL 1 oder direkt das MD40 angibst, es wird immer der Pointer übergeben, gleicher aufbau, gleiche parameter.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@4L:
Ich weiß gerade nicht, was du mir mit deinem Beitrag sagen wolltest ... aber ich meinte :
Code:
L MD 30   // deklariert als DINT
T MD 40  // deklariert als REAL
hier liegt der Typ in der Symbolik und nicht in dem Variablen-Inhalt ...

Gruß
LL
 
hier liegt der Typ in der Symbolik und nicht in dem Variablen-Inhalt ...

stimmt :D

wenn keine symbolik definiert ist wird der wert als DWORD (06) übergeben
definiere ich den datentyp als DINT wird auch 07 übergeben
entsprechend bei REAL 08

das sieht man aber nur in der makrosicht.

hmm ... was war eigentlich die frage?
 
Ich finde es nur interessant zu wissen an welchen Stellen der Step 7 Editor selbst Programmteile erstellt/ergänzt.

Mal angenommen es schreibt sich jemand diese Typ-universalen Bausteine. Denkt sich dann: ah, ich bin ja flexibel, dann kann ich ja mal gerade in einem DB den Typ von REAL auf DINT ändern. Dann machen alle Auswertebausteine an denen im Programm mit z.B. DB100.DBD0 beschaltet wurde Unsinn. Und ich kann nichtmal sehen dass ein falscher Any-Pointer dransteht.

@4l:
Wie geht denn nun diese "Makro-Ansicht"?
 
Setzt der Step7 Editor meine Eingabe automatisch in den passenden Any-Pointer um? Eigentlich sind in der SPS doch keine Typinformationen vorhanden.

um die eingangsfrage nun endgültig zu klären.

die typinformationen sind in der SPS enthalten, da der abzuarbeitende code nicht dem, für den programmierer sichtbaren entspricht.
bei der übersetzung des codes wird ein pointer, mit eindeutigem datentyp entsprechend der deklaration in der symboltabelle oder eines DBs zusammengebaut, welcher dem aufgerufenen baustein übergeben wird.
 
Zurück
Oben