TIA Konvertieren S7 Classic nach TIA und DINO

Waelder

Level-2
Beiträge
977
Reaktionspunkte
121
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich ärgere mich gerade mit konvertieren von S7-Classic nach TIA herum. Es handelt sich um folgende mir etwas schwer begreifliche Dinge :ROFLMAO:

L DINO

Innerhalb eines FCs bringt der mich ein wenig zum Verzweifeln. Leider habe ich mich nie richtig gut tief AWL befasst ☹ selber schuld.

Der Befehl steht innerhalb (Beispiel) von FC60.
Der FC60 wird in einem FB70 mit zugehöriger Instanz DB70 aufgerufen. Soweit ich nun kapiert habe, bekomme ich als Ergebnis von DINO nun 70 zum Vergleichen.
TIA meckert natürlich nun und ich … suche und suche 😊.
Meine Lösung ist nun Quick&Dirty ich übergebe am FC60 als Input die DB Nummer „#INST_DB“ und ersetze DINO durch „INST_DB“ müsste doch funktionieren oder ?
Ich muss halt alle Aufrufe vom FC60 anpassen aber das ist das kleinere Übel.

mag TIA nicht
DINO 01.jpg
Könnte so gehen ?
DINO 02.jpg

P##PE_W mein nächster Stolperstein


In einem Baustein zur Skalierung eines Analogwertes wird der Eingang per Pointer eingelesen.
PEW ist die Inputvariable vom Typ Word

S7 Code alt

PEW 01.jpg


Das kann ich doch direkt einlesen oder ?

Mein TIA Code
PEW 02.jpg

#TEMPValue = INT

Datenbausteine
Ach ja eine ganz andere Frage wie beommt ihr die aktuellen Werte der DBs aus der S7 Classic (online) in die neuen TIA DBs ?
Gibt es da ein Trick ? Ich würde alle Online runterladen und per Hand rumkopieren.

Sorry für die blöden Fragen und schonmal danke für Eure Hilfe.
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
@TP-Inc
Danke für die Idee, der Code könnte gepostet werden. Sorry aber das teil werde ich nicht umprogrammieren. Bin schon ein paaaaaaar Jahre im Geschäft tätig und dein Vorschlag ist mir auch schon untergekommen. Aber ich lass die Figer davon
und Ja TIA V16 mag das DINO nicht.

@Ralle
Du hast vollkommen recht er übergibt von aussen ein %EW an den FC deshalb hab ich das so interpretiert.


Code:
!!!! ALTER S7-Classic CODE !!!!
      U     #TempStom                   //Fehler loeschen
      UN    #TempStom
      =     #TempStom
      L     P##PEW                      // Laden PEW Adresse
      T     #TempADR
      L     PEW [#TempADR]              // Laden PEW Inhalt in MW200
      T     #TempValue
      L     #TempValue                  // Drahtbruch Überwachung
      L     -864                        // I < 3.5mA (-864 Digits)
      >I  
      SPB   MAX
      =     #TempStom
      SPA   ENDE
MAX:  L     #TempValue                  // Max Bereich Überwachung
      L     28570                       // I > 20.5mA (+28512 Digits)
      <I  
      SPB   we03
      =     #TempStom
      SPA   ENDE

we03: SET  
      R     #STOM

ENDE: L     #W100                       // Messspanne Oben
      L     #W0                         // Messspanne Unten
      -R  
      T     #Bandbreite
      L     1.000000e+003
      /R  
      L     #Hyst
      ITD  
      DTR  
      *R  
      T     #Hysterese
      L     #Bandbreite
      L     2.764800e+004               // Auflösung 0-27648 Digits
      /R  
      L     #TempValue
      ITD  
      DTR  
      *R  
      L     #W0
      +R  
      T     #ISTD                       // Istwert in Gleitpunkt

      UN    #TempStom
      SPB   we01
      UN    "TAK#1S"
      SPB   we02

      L     #XT_Stom_verz
      L     1
      +I  
      T     #XT_Stom_verz

      U(  
      L     #XT_Stom_verz
      L     #Stom_verz
      >=I  
      )    
      S     #STOM

      SPA   we02
we01: L     0
      T     #XT_Stom_verz

we02: L     #Low                        //Unterer Grenzwert
      T     #Temp_Low                   //Speicher Faktor als Gleitpunktzahl
      U(  
      L     #Temp_Low
      L     #ISTD
      >R  
      )    
      U     #Enable_Low
      S     #ALow
      L     #ISTD
      L     #Temp_Low                   //Lowlevel
      -R  
      L     #Hysterese
      -R  
      L     0.000000e+000
      >R  
      R     #ALow
      L     #High                       //Oberer Grenzwert
      T     #Temp_High
      U(  
      L     #Temp_High                  //Highlevelwert
      L     #ISTD
      <R  
      )    
      U     #Enable_High
      S     #AHigh
      L     #Temp_High
      L     #ISTD
      -R  
      L     #Hysterese
      -R  
      L     0.000000e+000
      >R  
      R     #AHigh


      L     #ISTD
      L     #W0
      >R  
      SPB   m001
      L     #W0
      T     #ISTD


m001: L     #ISTD
      L     #W100
      <=R  
      SPB   m002

      L     #W100
      T     #ISTD

m002: NOP   0
 
Hallo Waelder,

in SCL sollte es so funktionieren (Der FB darf dafür nicht optimiert sein) :
Code:
FUNCTION_BLOCK "Baustein_1"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT
      Test_Input : Bool;
   END_VAR

   VAR_OUTPUT
      DBNummer : Int;
   END_VAR

   VAR_TEMP
      AnyPointer : Any;
      AtAny AT AnyPointer : Struct
         ID_Code : Byte;
         DataTyp : Byte;
         Anzahl : Int;
         DB_Nr : Int;
         SpeicherPtr : DWord;
      END_STRUCT;
   END_VAR


BEGIN
        #AnyPointer := #Test_Input;
        #DBNummer := #AtAny.DB_Nr;
END_FUNCTION_BLOCK

Schöne Grüße
Laforge
 
Zurück
Oben