Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 49

Thema: Bitte um Tipps für Diplomarbeit und SCL Compiler

  1. #21
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    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.

  2. #22
    Registriert seit
    25.10.2014
    Beiträge
    35
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  3. #23
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.735
    Danke
    321
    Erhielt 1.523 Danke für 1.283 Beiträge

    Standard

    Zitat Zitat von luckyman Beitrag anzeigen
    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
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  4. #24
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    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.


  5. #25
    Registriert seit
    25.10.2014
    Beiträge
    35
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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




    Mfg.
    Geändert von luckyman (26.10.2014 um 09:02 Uhr)

  6. #26
    Registriert seit
    10.05.2005
    Beiträge
    1.996
    Danke
    220
    Erhielt 233 Danke für 204 Beiträge

    Standard

    Zitat Zitat von luckyman Beitrag anzeigen
    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.
    Karl

  7. #27
    Registriert seit
    25.10.2014
    Beiträge
    35
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

    rserie_katalog_e.pdf

  8. #28
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Zitat Zitat von luckyman Beitrag anzeigen
    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.

  9. #29
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    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
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  10. #30
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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.

Ähnliche Themen

  1. Antworten: 79
    Letzter Beitrag: 29.05.2015, 14:16
  2. Antworten: 8
    Letzter Beitrag: 24.12.2013, 11:01
  3. SCL-Compiler und Case-Anweisung
    Von herdi im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.09.2008, 10:02
  4. Antworten: 15
    Letzter Beitrag: 21.02.2008, 21:55
  5. Freier SCL-Compiler ?
    Von linax im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 04.12.2003, 20:25

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •