Step 7 AWL in SCL umprogrammieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Zeig doch als erstes mal wie dein aktueller Code denn jetzt ausschaut.
Wenn am Blockmove immer noch "P#DB1000.DBX0.0 BYTE 1556" steht, würde ich dir dringend empfehlen dem Programm DB eine Structur zur geben.
Dann sollte am SFC20 es ungefähr so ausschauen "ProgDB".Aktuell --> "ProgDB".Nr1 , oder so was in der Richtung, aber Hauptsache Symbolisch.
Anschließend lässt es sich leichter weiterarbeiten.
 
Wenn in beiden DBs eh' die gleiche Struktur besteht, kann man auch einfach direkt zuweisen (also ohne SFC20):
Code:
"[COLOR=#333333]ProgDB".Nr1 := "ProgDB".Aktuell;[/COLOR]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schonmal Danke für eure Ideen.

Hier der Code.
Die DBs´s haben die gleiche Struktur. Deswegen versuche ich es mal mit der einfachen Zuweisung. Ob das mit den IN_OUT so klappt weiß ich noch nicht. Was meint Ihr dazu? Ich kann das erst testen wenn ich die Anlage einschalten kann (leider noch keine CPU da). Bin noch in der Vorbereitungsphase des Programmes.

Dekl.png


IF #Prog_Nr = #aktuelle_Prog_Nr THEN
;
ELSE
#neue_Prog_Nr_plus := #Prog_Nr + #Prog_Nr_Plus;
#aktuelle_Prog_Nr_plus := #aktuelle_Prog_Nr + #Prog_Nr_Plus;
#Akt_Prog := #Akt_Daten + #aktuelle_Prog_Nr_plus; //Aktuelle Daten in Programm DB speichern
#Akt_Daten := #Neu_Prog + #Akt_Daten; //Neuen Programm DB in Aktuelle Daten laden

#aktuelle_Prog_Nr := #Prog_Nr; //neue Programmnummer in aktuelle Programmnumer schreiben

END_IF;
 
Zuletzt bearbeitet:
Wenn ich das recht verstehe dann hast du in deinem Programm einen ganzen Haufen von DB's mit gleichem Aufbau, die je nach Anwahl in den DB1000 hineinkopiert werden sollen bzw. der Inhalt des DB1000 in diese hineinkopiert werden. Ist das so richtig ?
Meine Frage wäre jetzt, warum das, wenn es mit den 300er bisher funktioniert hat, mit den 1500er nicht mehr funktioniert. Was ist hier anders ? Hast du jetzt optimierte DB's (vorher ja auf jeden Fall nicht) ? Wenn ja - warum sind diese DB's nun unbedingt optimiert ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Harald:
Ich habe mich auf die Beiträge #19 und #20 in diesem Thema bezogen.
Wobei die Antwort auf diese Frage dann auch unmittelbar zu der SCL-Realisierung führen wird. Er müßte ja jetzt aktuell einen ANY-Pointer zusammengebastelt haben für den variablen DB. Das würde sich ja in SCL nicht ändern. Danach wäre dann der Blockmove prinzipiell auch wieder so einsetztbar ...
 
Anhang anzeigen 34214


IF #Prog_Nr = #aktuelle_Prog_Nr THEN
;
ELSE
#neue_Prog_Nr_plus := #Prog_Nr + #Prog_Nr_Plus;
#aktuelle_Prog_Nr_plus := #aktuelle_Prog_Nr + #Prog_Nr_Plus;
#Akt_Prog := #Akt_Daten + #aktuelle_Prog_Nr_plus; //Aktuelle Daten in Programm DB speichern
#Akt_Daten := #Neu_Prog + #Akt_Daten; //Neuen Programm DB in Aktuelle Daten laden

#aktuelle_Prog_Nr := #Prog_Nr; //neue Programmnummer in aktuelle Programmnumer schreiben

END_IF;

Das soll dein aktueller SCL-Code von deiner 300ter sein? :confused:
Nie und nimmer läuft das Ding.

Ich kann das erst testen wenn ich die Anlage einschalten kann (leider noch keine CPU da). Bin noch in der Vorbereitungsphase des Programmes.
Das kann man doch auch im Simulator testen ;)
 
Hallo,

nein der Code läuft so nicht in der 300er. Das ist jetzt neu aufgezogen von mir. In der 300er habe ich den AWl Code bisher immer genutzt. Läuft so in der 1500er auch.
Ich möchte in SCL etwas fit werden und daher so nach und nach (je nach Zeit) unsere Standardbausteine anpassen.

Was ich beispielsweise mehrfach gelesen habe ist, das die 1200er kein AWL mehr kann. Ich habe bisher keine 1200er gehabt und kann dazu leider nichts agen. Ist das denn so? Denn unsere Standardbausteine sind zu 90% noch in AWL.
Deswegen wäre es daher ja schon sinnvoll das alles mal anzupacken und generell mal auf einen neuen Stand bringen, der in den neuen Tia CPU´s laufen (und zwar in allen).

Ich könnte bei dem aktuellen Projekt den AWL Code nehmen, möchte aber gerne die SCL Variante mal ans laufen bekommen :)

Gruß Willi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne deinen AWL-Code nun jetzt nicht, nehme aber an, dass er in etwa so aussieht :
Es wird ein ANY-Pointer erstellt, der auf den Gegen-DB zeigt mit dem entsprechenden Datenbereich als Angabe. Dieser ANY wird dann dem SFC BlockMove als Quelle bzw. als Ziel (je nach Übertragungsrichtung) übergeben. Der DB1000 ist möglicherweise als Fest-Parameter übergeben.
Genau so mußt du das nun auch in SCL lösen :
- du legst dir einen ANY-Pointer als Variable an
- du erzeugst dir eine AT-Sicht auf diesen ANY, die dessen Einzel-Bestandteile auflösst.
- Nun weisst du dieser AT-Sicht die entsprechenden Daten aus deiner Berechnung bzw. aus deinem Wissen zu
- Jetzt kannst du den so erzeugten ANY-Pointer an den SFC Blockmove übergeben.

Vielleicht fängst du das einfach mal so an und stellst dann (bei Problemen) deinen SCL-Code mit Deklarationen hier ein und wir reden dann darüber ...

Gruß
Larry
 
Genau so mußt du das nun auch in SCL lösen :
- du legst dir einen ANY-Pointer als Variable an
- du erzeugst dir eine AT-Sicht auf diesen ANY, die dessen Einzel-Bestandteile auflösst.
- Nun weisst du dieser AT-Sicht die entsprechenden Daten aus deiner Berechnung bzw. aus deinem Wissen zu
- Jetzt kannst du den so erzeugten ANY-Pointer an den SFC Blockmove übergeben.

Ich würde ja eher die Aufgabenstellung analysieren, und versuchen es möglichst ohne ANY und ohne AT-Sichten zu programmieren. Bei beidem gibt es doch wieder Einschränkungen bezügl. optimierte/ nicht optimierte Bausteine. Und es kommt mit großer Wahrscheinlichkeit besser les- und wartbarer Code heraus.
 
Zurück
Oben