Step 7 Bitte um Tipps für Diplomarbeit und SCL Compiler

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube du müsstest zuerst die SFCs 20 und 21 in deinen Bausteinordner bringen, und dann die AWL-Quelle NOCH EINMAL erzeugen. Dann wird
bei der Rückübersetzung ein CALL SFC20 oder CALL BLKMOV mit passenden Parametern erzeugt wird und nicht der UC-Befehl und eine Menge L und T-Befehle zur Parameterübergabe.
 
Der SFC20 und 21 ist geschützt. Ist es trotzdem möglich?

Und kann man den Schutz eines SFC enfernen?
Bei FB ist es ja möglich :)

mfg.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der SFC20 und 21 ist geschützt. Ist es trotzdem möglich?
Nein ist es nicht, SFC20/21 haben keinen Quellcode sondern nur eine Schnittstelle, der eigentliche "Code" ist Teil des Betriebssystems (Firmware) der CPU.
Gleichzeitig ist es aber auch unnötig, weil die Bausteine (falls Siemens nicht mal wieder was vergeigt) ausgesprochen problemlos das tun was sie sollen.

In deinem Quellcode
UC BLKMOV
L# Bla
Das ist also dann ein Teil des MC7 Code, so funktioniert ein Bausteinaufruf da nunmal (generell und nicht nur auf SFCs bezogen).


Zur genaueren Erklärung (ist die erste BLKMOV Fundstelle):
UC "BLKMOV" {
P#L 68.0,
P#L 2.0,
P#L 78.0};

In den Zeilen unmittelbar vorher wird also in LD68 bzw. LD78 ff. ein AnyPointer für SRC/DST gebastelt, anhand der HEX-Werte lässt sich mit Sicherheit auch bestimmen wo da gelesen bzw. hingeschrieben wird (überlasse ich jetzt mal dir), die Hilfe in Step7 zum Any-Pointer ist da sehr hilfreich.
L2.0 bzw. genauer LW2 ist in der Deklaration als INT_TEMP deklariert.
Mit diesem Wissen solltest du nun also den UC BLKMOV MC7 Aufruf durch einen "normalen" wie von Zottel geposteten CALL BLKMOV AWL-Aufruf tauschen können.

Mfg
Manuel
 
Das ist das was ich in meinem Post #5 mit dem Punkt a) meinte.

Der SCL-Compiler erzeugt manchmal kein AWL sondern MC7-Code. Dieser kann vom AWL-Editor nur dargestellt, aber nicht bearbeitet werden.
Damit du das im AWL-Editor bearbeiten kannst, musst du aus dem MC7-Code das AWL-Makro wiederherstellen. Das ist möglich, dazu muss man aber z.B. bei deinem Code wissen die ein ANY-Pointer aufgebaut ist, und wie die Parameterübergabe an Funktionen ist.

Beispiel:
Code:
A7d5: L     DW#16#10020058; 
      T     LD    68; 
      L     DINO; 
      T     LW    72; 
      TAR2  ; 
      +     L#1696; 
      T     LD    74; 
      L     DW#16#10020058; 
      T     LD    78; 
      L     DINO; 
      T     LW    82; 
      TAR2  ; 
      +     L#240; 
      T     LD    84; 
      TAR2  LD    88; 
      UC    "BLKMOV" {
            P#L 68.0,
            P#L 2.0,
            P#L 78.0};

Die Parameterreihenfolge des BLKMOV-Aufrufs ist genauso wie du ihn in AWL sehen würdest
Code:
      CALL  "BLKMOV"
       SRCBLK :=
       RET_VAL:=
       DSTBLK :=
D.h. dem Parameter SRCBLK wird ein Zeiger auf L68.0 übergeben, RET_VAL auf L2.0 und DSTBLK auf L78.0.

Das "L" steht für Lokaldaten, also Temp-Variablen.

Datentyp des Parameters SRCBLK ist ANY, dieser ist 10 Byte groß.
Da eine S7 maximal 32 Bit = 4 Bytes in einem Rutsch verarbeiten kann, baut der Compiler die Daten aus Einzelwerten zusammen und übergibt der Funktion die Startadresse.

Das Zusammenbauen des ANY-Pointers macht dieser Teil:
Code:
      L     DW#16#10020058; 
      T     LD    68; 
      L     DINO; 
      T     LW    72; 
      TAR2  ; 
      +     L#1696; 
      T     LD    74;

Und jetzt kommst du ins Spiel, und machst dich in der Step7-Hilfe schlau wie ein ANY-Pointer aufgebaut ist, und wohin dieser zeigt den der SCL-Compiler dir zusammenbaut.

Wenn du das weißt und das Wissen mit der Variablendeklaration deiner AWL-Quelle kombinierst, weißt du wie die originale Parameterbeschaltung in AWL oder auch SCL aussieht.
Dann löscht du den MC7-Code und erstetzt es durch ein adäquates AWL-Makro, was du dann durch den AWL-Übersetzer schicken kannst.

:)
 
Danke für eure tipps und ratschläge :)
Hab mich in der Hilfe schlaugemacht und in verschiedenste Foren nachgelesen...

Muss jedoch leider zugeben, dass diese Umwandlung über meine Programmierfähigkeiten hinausragen :oops:



Mfg.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Heißpresse wird mittels SPS gesteuert und hier treten einige Fehler auf.
Die Maschine besitzt einen Wegsensor der den Stempel der Maschine auf und ab bewegen lässt. Wir möchten diesen Weg auslesen und dadurch die Maschine steuern.

Was willst du eigentlich ?
Reicht es dir, den Weg abzufragen ?
Die Eingangs und Ausgangsadresse sollte nun bekannt sein.
Auch einen Link zu der 338-Baugruppe mit den benötigten Infos hast du bereits.

Ist es möglich, nach dem besagtem FB die Ablauffolge/Anweisungen zu korrigieren ?

Erkläre uns, was du planst, nur so können wir dir Tipps geben.
 
Ich verstehe Karl :)

Zum 1 Punkt:
Zu unserer Aufgabe:
Die Heißpresse besitzt einen Wegsensor Modell: Tempotonics RPM 0400M D70 1 S1 G 1 1 00 (Datenblatt im Anhang)
Dieser Wegsensor misst die Höhe des Pressstempels.
Der Sensor ist am Modul SM338 angeschlossen.
Weiters besitzt die Maschine eine Visualisierung die den Stempelweg anzeigt, jedoch haben diese Werte keinen Zusammenhang mit dem eigentlichen Weg des Stempels.
Wir möchten die Umwandlung Finden um so die Werte richtig zu stellen.

Zum 2. Punkt:
Ja wir müssen herausfinden wo die Abfrage erfolgt (Eingangsadresse). Und anschließend einen Zusammenhang zwischen den Daten und dem Weg finden.

Zum 3. Punkt:
Der FB kann in seinem Uhrzustand nicht bearbeitet werden da die Zeilenanzahl überschritten wurde.
Um dies möglich zu machen möchten wir aus der Quelldatei den Baustein neu generieren um ihn wieder bearbeiten zu können.

Zum 4. Punkt:
Die Maschine erhitz Material das sich nach einer gewissen Zeit verflüssigt.
Der Stempel Drückt jedoch mit konstanten druck auf das Material. Es kann passieren das sich das Material verflüssigt und der Stempel presst anschließen das Material heraus. Dies sollte nicht passieren.

Wir möchten also den Stempelweg beobachten um den Stempel zu stoppen, wenn er sich bei Verflüssigung des Materials in Bewegung setzt.
mfg.

Anhang anzeigen rserie_katalog_e.pdf
 
Oder könnte jemand von euch, mir als Beispiel eine Umwandlung zeigen?

Du nimmst dir deine Quelle, und löschst alles zwischen BEGIN und END_FUNCTION_BLOCK heraus, also alle Anweisungen. Dann hast du nur die Variablendeklaration. Dieses lässt du über eine AWL-Quelle im Step7 Editor übersetzen. Wenn du den daraus generierten FB öffnest, hast du im Editor die Schnittstelle die Variablen mit den Speicheradressen stehen.

Dann gehts daran den Any-Pointer zu interpretieren.

L DW#16#10020058;
-> 10h = Syntax ID für S7
-> 02h = Datentyp Byte
-> 00058h = Wiederholfaktor = 88 dez

L DINO;
-> Das ist die aktuelle Instanz-DB Nummer, d.h. der ANY zeigt auf Variablen im Stat-Bereich der Schnittstelle

TAR2 ;
+ L#1696;
-> mit TAR2 passiert mehreres. 1. wird die Kennung für den Speicherbereich übernommen, und 2. wird der Multiinstanzoffset zur Adresse aufaddiert
-> wichtig ist aber das L#1698. Das ist die Speicheradresse als Byte/Bit-Adresse kodiert. Die Byteadresse bekommst du indem du die Zahl durch 8 teilst, die Bitadresse durch Modulo 8, also der Rest der bei der Division überbleibt.
Byte: 1696 / 8 = 212
Bit: 1696 mod 8 = 0
D.h. die Adresse ist DIX 212.0

Gesamt sowas wie:
P#DIX 212.0 BYTE 88

Nun guckst du in der Schnittstelle des Bausteins was an Speicheradresse 212.0 steht.
Dort steht eine Struct #IDATA. Die gesamte Struktur ist aber größer als 88 Bytes, darum kann es nicht die gesamte Struktur sein. Innerhalb der Struktur befindet sich am Anfang noch eine Struktur namens #DBINT, und diese ist genau 88 Bytes groß.
Das wäre also der erste Parameter:

Code:
      CALL  "BLKMOV"
       SRCBLK :=#IDATA.DBINT
       RET_VAL:=
       DSTBLK :=

So viele Aufrufe sind das nun auch nicht, als dass es ein Riesenaufwand wäre.

Nur ist die Bausteinprüfsumme später eine andere als beim Ursprungsbaustein. Du kannst daran nicht vergleichen ob deine Änderungen korrekt waren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst doch die Quelle aus dem Quellenverzeichnis des Projektes exportieren und dann als Anhang hier einfügen.
Wegen der Länge habe ich dir doch geschrieben was du wie machen kannst um den Baustein so zu ändern, dass du diesen beobachten kannst.
Es funktioniert jedoch nur, wenn das Projekt komplett ist, bevor du die Quelle generierst.
Wenn du nur einen AG Abzug hast, dann musst du über QVL schauen, welche Bausteine du aus der Bibliothek du benötigst, also SFC / SFB etc.
Bei nur einem AG Abzug, wird es heftig für euch, das zu machen was ihr machen wollt / müßt.


bike
 
Es ist zwar schön den Aufbau von Anypointern und CALL-Makros zu kennen, aber für diesen Zweck nicht nötig. Der einfachste und sicherste Weg, ist der den ich in den vorigen Postings beschrieb und hier noch mal zusammenfasse:
1. Erzeuge einen neuen Baustein im Bausteinordner.
2. Gib dort CALL SFC20 eín
3. Die Parameter kannst du ignorierenoder irgendwie ausfüllen
4, Gib dort CALL SFC21 eín
5. Die Parameter kannst du ignorierenoder irgendwie ausfüllen
6. Den neuen Baustein kannst du speichern oder einfach verwerfen.Er interessiert nicht.
7. Als "wunderbare" Nebenwirkung der Benutzung von SFC20 und SFC21 stehen diese jetzt im Bausteinordner!
Und ihre symbolischen Namen BLKMOV und FILL stehen jetzt in der Symboltabelle!
8. Erzeuge noch einmal die AWL-Quelle. Diesmal sind die Namen der Bausteine und ihre Schnuttstellen dem Übersetzer bekannt und erzeugt die Call-Anweisungen mit den richtigen Parametern.
9. poste die Quelle nochmal
Natürlich geht das auch von Hand, wie von Thomas beschrieben, aber automatisch ist es halt wesentlich weniger fehleranfällig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die erste logisch folgende Frage wäre dann:
Wieso suchst du in einem Baustein der schlicht "Temperaturregler" heißt nach einer Wegerfassung von was auch immer?


P.S.
Der erste BLKMOV in AWLerisch:
CALL SFC20
SRCBLK: IDATA
RETVAL: INT_TEMP
DSTBLK: DB_PID_INTERFACE

Warum wieso weshalb kannst du dir jetzt ja mal gedanken machen ...

Mfg
Manuel
 
Du meinst also dass in diesem FB gar keine Wegerfassung vorhanden ist?
Ich muss eigentlich nur finden wo die Wegerfassung ist.

Has du eine Vorschlag wie ich diese finden Kann?
Und muss ich dafür den FB richtig stellen?

Mfg. Lukas
 
Wir haben uns die anze Zeit auf den falschen Baustein konzentriert... (Unser Prof. meinte es müsste im FB2 sein -.-)

Ich glaube es ist der FC102, FC112, FC122 sein.
Doch wie suche ich am besten nach der Wegerfassung?
mfg. Lukas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für Wegerfassung gibt mehr als einen Begriff und auch wir könnten ja Wegmessung und noch viel mehr sagen.
Erfassung, Messung: rilevamento, misura, misuarazione
Weg: percorso, itinerario,cammino,distanza
 
Wie ist der Wegsensor angschlossen? Analogeingang? Dann in den Querverweisen nach dem PEW suchen. Profibus? Entweder nach dem PEW oder (wahrscheinlicher) nach einem Aufruf des SFC14 (Datenblock von PB lesen) suchen. Ein Aufruf von SFC14 legt die Daten wahrscheinlich in einem DB ab. Nach Weiterverwendung des DB suchen.
 
Beim SM338 modul gehen die Eingangsadressen von 320-335 kann ich danach suchen?
Wenn ich diese finden würde würde ich ja auch die Wegerfassung finden oder liege ich da falsch?

Kann ich euch irgendwie die Bausteine geben? :)

mfg.
 
Zuletzt bearbeitet:
Zurück
Oben