Step 7 Step SCL Compiler neues Netzwerk erstellen

Maagic7

Level-2
Beiträge
384
Reaktionspunkte
180
Zuviel Werbung?
-> Hier kostenlos registrieren
kann man den S7 SCL Compiler irgendwie dazu veranlassen, den erzeugten AWL-Code in mehrere Netzwerke zu splitten.
Hinergrund ist, dass SCL ewig lange Netzwerke produiert, die dann in AWL nicht mehr bearbeitabar sind!
 
Dazu gibt es keine Option.
Davon abgesehen, ist auch nicht jedes vom SCL-Compiler erzeugte Programm mit dem AWL-Editor später bearbeitbar, auch wenn es die maximale Länge nicht überschreitet. Weil der Compiler in speziellen Fällen MC7-Code erzeugt, den der AWL-Editor zwar anzeigen, aber selber nicht erstellen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe hier schon viele irre Anforderungen gelesen, aber das hier ist glaube ich unter den Top Ten.

Welchen Grund (außer absolutem Off-Label-Use sämtlicher Programmierwerkzeuge) soll es denn geben, vom SCL Compiler erzeugte Bausteine später händisch in AWL bearbeiten zu können ?
 
Warum willst Du vom SCL-Compiler erzeuten Code nachbearbeiten?
Was versprichst Du Dir davon? AWL-Code den kaum jemand versteht? Und der voll mit schmutzigen Direkt-Adressierungen ist? Machst Du dann wenigstens KnowHow-Schutz drauf? ;)
Warum sind Deine SCL-Bausteine so groß?

Du könntest in mehreren Schritten Teile des SCL-Quellcode zum Compilieren auskommentieren und so Stück für Stück Teil-AWL-Code erzeugen, den Du in getrennte Netzwerke eines zweiten AWL-Bausteins kopierst. Den Code kannst Du dann bearbeiten.

Harald
 
Eine Lösung wäre, aus dem zu großen Baustein eine AWL-Quelle zu generieren und dann mit dieser zu arbeiten. Damit dir der Baustein zum Generieren der Quelle angeboten wird, musst du allerdings erst die Erstellsprache von SCL auf AWL umstellen (z.B. mit MS-Access die subblk.dbf modifizieren, am Besten in einem separaten Projekt). Evtl. ist das auch über die Kommandoschnittstelle einfacher möglich.
Aber wie schon geschrieben, funktioniert das nur wenn aus dem SCL Programm ein AWL kompatibles Programm erzeugt wurde. Hast du z.B. Funktionsaufrufe mit Parameterübergabe im Programm, dann ist das nicht AWL kompatibel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit der AWL Quelle generieren geht! Aber nicht mehr von Quelle nach AWL!
Das hat sich somit erledigt!

Aber ich erklär nochmal für was man das brächte.

Ich schreibe Standardsoftware im Auftrag! Was der Baustein leisten muss ist 1. nur in SCL umzusetzen, 2. muss auf verschiedenen System laufen (300/400, 1200/1500)
Im Baustein werden IEC Funktionen und weitere FC's aufgerufen.

- jetzt kann man bei S7-Classic nicht davon ausgehen, dass in allen Projekten aller Endkunden die gleichen Nummern haben. Man muss also individuell neu übersetzen
- nicht jeder hat bei Classic auch SCL zur Verfügung
- Mein Kunde möchte den SCL-Code nicht weitergeben, sondern nur die übersetzte Version

Jetzt ist man dann evtl. darauf angewiesen im AWL Code manuell die FC-Aufrufe anzupassen.
Oder das von einer AWL-Quelle neu zu übersetzen.

Leider geht das gar nicht, da SCL die FC-Aufrufe mit UC FCxy codiert und die Übergabeparameter
selbst vorher auf den Stack schiebt.
Bei AWL Quelle übersetzen geht das schief, da SCL eine Fehlermeldung bringt, dass SFC-Bausteine
in AWL nicht mit dieser Aufrufkovention übersetzbar sind. Bei FC Aufrufen geht es aber wohl!

D.h. es würde auch nichts bringen, wenn der SCL-Kompiler das auf mehrere Netzwerke verteilen könnte,
da in AWL die UC SFC Aufrufe aus SCL nicht mehr gespeichert werden.
 
Kannst du da nicht besser die in SCL verfassten Bausteine so schreiben, dass diese nicht direkte Abhängigkeiten zu anderen Funktionen beinhalten? Also z.B. Funktionen deren Bausteinnummer sich von Kunde zu Kunde unterscheiden in einen weiteren in AWL/FUP/KOP geschriebenen FC packen den der Kunde bearbeiten kann, und der dann im SCL Code aufgerufen wird.
Könnte bei der Weitergabe von Parametern zwar etwas trickreich und unperformant sein, aber besser als das SCL Compilat verändern zu wollen.

Bestimmte Nummern müssen dann natürlich trotzdem fix bleiben dürfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, deine Aufgabe ist, Standard-Bausteine an Kunden erstellen, somit dass die Kunden diese Bausteine in seine Programme selber weiteverwenden kann.
Das ist einfach. Sämtliche Daten die von die Bausteine verwendet werden müssen über das Bausteinschnittstelle übertragen werden (IN, OUT, IN_OUT). Keine direkte Addressierungen von Globaldaten innerhalb von die Bausteine.
Dann muss der Kunde nicht die Bausteine selber kompilieren. Und er Kann die Baustein-Nr und Symbolnamen frei umbenennen wie er will.
 
Zurück
Oben