TIA Migration 300 zu 1500 in TIA V14

revilo16

Level-1
Beiträge
82
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich führe zum 1. Mal die Migration auf eine 1500er durch.
Generell ist die 1500er Premiere für mich.

Ein paar Fragen machen mir schon etwas Kopfschmerzen, vielleicht könnt ihr helfen:

1.
Im Migrationsbericht habe ich vielmals den Fehler:
Die teilqualifizierte Adresse kann nicht in eine vollqualifizierte Adresse umgewandelt werden.
Das Entsprechnde Netzwerk sieht z.B. so aus:

Code:
      U     "Einsmerker"
      R     "DB026 Werte"."BeideEIN"
      
      L     P#0.0                // Startadresse Aktualwerte
      LAR1
      L     P#8.0                // Startadresse Altwerte
      LAR2
      L     64                   // Anzahl Schleifen
lop1: T     #TMP_Loop
      AUF   "DB026 Werte"
      U DBX [ AR1 , P#0.0 ]
      U DBX [ AR2 , P#0.0 ]
      S     "DB026 Werte"."BeideEIN"
      AUF   "DB026 Werte"
      U DBX [ AR1 , P#0.0 ]      // Nachführen der Altwerte
      = DBX [ AR2 , P#0.0 ]
      SET                        // Reset Aktualwert
      R DBX [ AR1 , P#0.0 ]
      +AR1  P#0.1                // Offset Step =1 Bit
      +AR2  P#0.1
      L     #TMP_Loop
      LOOP  lop1

Im Netzwerk wird mir kein Fehler angezeigt. Auch das Übersetzten des Bausteins bleibt ohne Fehler+Warnung.
Kann das also trotz der vielen Fehler im Migrationsbericht so bleiben, oder wirft mir da die 1500er dann was durcheinander?

2.
Auch Teil des Projekt ist ein IPC mit WinCC RT Adv.
Wie kann ich nach der Migration der Steuerung am besten alle HMI-Variablen+Meldungen nun mit der 1500er statt mit der 300er verknüpfen?
Habe Angst mir hier die ganzen Variablen zu verballern.

Hilfe wäre super :)


Zur Umgebung:
317F -> 1516F
TIA V14SP1
IPC477D mit WinCC RT Adv. V14

Grüsse :)
 
Die teilqualifizierte Adresse kann nicht in eine vollqualifizierte Adresse umgewandelt werden.
Das bezieht sich mit sicherheit auf die Pointer Zugriffe.
Die 1500er konstrunktionsbedingt hat kein AR1 AR2 u.s.w. , diese Code gift für eine 1500er.
Anderseits ist dies nicht Vollsymbolisch.

Der Code sollte aber laufen..

Meldungstechnisch kannst du Bitmeldungen anlegen oder den programmalarm Baustein benutzen.
Bei Bitmeldungen kannst du so Vorgenen wie bei der 300er. (geh davon aus das ein WinnCC Flexibel drauf war)
Oder den programmalarm Baustein benutzen.

Bram
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort, aber ich verstehe nicht ganz.

AR1, AR2: Gibt es in der 1500er nicht mehr? Wieso Gift für 1500er?
Es wird ja beim Übersetzen nicht angemeckert. Also muss es die Befehle doch noch geben + muss funktionieren?
 
Die Adressregister (und weitere Register) sind in 300/400 eine echte Hardware-Komponente innerhalb der CPU. Die 1500er-CPU hat diese Komponente nicht mehr, daher werden die Register für solchen Code simuliert. Der genaue Mechanismus ist meines Wissens nicht dokumentiert, ob der Compiler z.B. zusätzlich Code zu deinem eigenem einbaut oder die CPU selbst die Register irgendwie simuliert.

Der alte Code mit den Registern ist grundsätzlich ablauffähig. Für Migrationen durchaus in Ordnung, für neue Anwendungen würde ich nach anderen Lösungen suchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Perfekt. Jetzt ist es klar. Vielen Dank!!
Werde das migrierte Programm diesbezüglich besonders testen.
Künftig werde ich versuchen diese Stellen nach und nach 1500er gerecht umzubauen.
 
Wenn man auf S7-1500 migriert dann sollte man mal drüber nachdenken, ob man den Code nicht auf konsequent symbolische Programmierung ändert. Gerne auch in SCL.
Code:
"DB026 Werte".BeideEIN := FALSE;
FOR #i := 0 TO 63 DO
    IF "DB026 Werte".Aktualwerte[#i] AND "DB026 Werte".Altwerte[#i] THEN
        "DB026 Werte".BeideEIN := TRUE;
    END_IF;
    "DB026 Werte".Altwerte[#i] := "DB026 Werte".Aktualwerte[#i];
    "DB026 Werte".Aktualwerte[#i] := FALSE;
END_FOR;


Speziell der gezeigte Beispielcode ist allerdings auch im unsymbolischen AWL ein bisschen umständlich und ineffizient programmiert...
Das geht auch ganz ohne Schleife kurz und zackig:
Code:
L DB26.DBD0   //Aktualwerte Bits 0..31
L DB26.DBD8   //Altwerte Bits 0..31
UD
U <>0
= "DB026 Werte".BeideEIN

POP           //Aktualwerte zurück, AKKU1 := AKKU2
T DB26.DBD8   //Altwerte := Aktualwerte
XOD           //AKKU1 auf 0 setzen
T DB26.DBD0   //Aktualwerte löschen (warum eigentlich?)

L DB26.DBD4   //Aktualwerte Bits 32..63
L DB26.DBD12  //Altwerte Bits 32..63
UD
U <>0
S "DB026 Werte".BeideEIN

POP
T DB26.DBD12
XOD
T DB26.DBD4
was man für die S7-1500 bei Verwendung von LWORD in SCL auf einen Dreizeiler reduzieren kann:
Code:
"DB026 Werte".BeideEIN := ("DB026 Werte".Aktualwerte64 AND "DB026 Werte".Altwerte64) <> 0;
"DB026 Werte".Altwerte64 := "DB026 Werte".Aktualwerte64;
"DB026 Werte".Aktualwerte64 := 0;

Harald
 
Grundsätzlich hast du sicher Recht.
Wenn ich wieder etwas Zeit hab möchte ich solche Dinge auch schöner machen.
Allerdings wird es wohl AWL bleiben, da komplett in AWL und KOP programmiert ist und das ist, womit sich die Progger hier auskennen.
Momentan habe ich aber alle Hände voll damit zu tun, einfach die Migration möglichst schnell zum laufen zu bekommen.

Btw: Die "Aktualwerte" werden wieder zurück gesetzt, da sie aus dem Programm heraus gesetzt werden.
 
Zurück
Oben