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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: DB Aktualwerte als Initialwerte hinterlegen

  1. #1
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    190
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe Leute,

    langsam aber sicher werde ich Banane im Kopf. Im Forum selber habe ich schon einige Sachen gefunden was das Thema angeht allerdings habe ich es trotzdem nicht zum laufen bekommen.

    CPU 314C 2PN/DP (Test Projekt) mit mmc

    Ich möchte gerne die Aktualwerte aus meinen DB´s, als Anfangswerte haben. Wenn die MMC Karte mal gezogen wird, so dass nicht wieder alles erneut eingestellt werden muss. In der CPU sind Standardmäßig alle DB remanent und ich habe auch KEIN hacken am "NON-Retain" gesetzt, also soweit alles gut.

    Die CPU lädt nach einem Stopp oder nach dem ziehen der MMC die Anfangswerte in die DB´s und hat nicht mehr die Aktualwerte!

    SFC 83: ermöglicht DB MMC-> DB Arbeitsspeicher
    SFC 84: ermöglicht DB Arbeitsspeicher-> DB MMC

    Alles schön und gut, trotzdem klappt es bei mir nicht.

    Beispiel:

    im DB1 4 Var in word
    Über die Variablentabelle lade ich in
    db1.dbw0 Anfangswert: 1 Aktualwert: 1
    db1.dbw2 Anfangswert: 2 Aktualwert: 2

    Code:
          CALL  SFC   83
           REQ    :=M1.0
           SRCBLK :=P#DB1.DBX 0.0 WORD 2
           RET_VAL:=MW10
           BUSY   :=M1.1
           DSTBLK :=P#DB1.DBX 4.0 WORD 2

    db1.dbw4 Anfangswert: 0 Aktualwert: 1
    db1.dbw6 Anfangswert: 0 Aktualwert: 2


    Das funktioniert!
    Nur leider wollte ich nicht die Aktualwerte in die Aktualwerte verschoben haben sondern in die Anfangswerte.

    Mit SFC84 passiert Garnichts, da kann ich drehen und hebeln aber es passiert nichts.
    Geändert von Junge (18.08.2015 um 10:59 Uhr)
    Zitieren Zitieren DB Aktualwerte als Initialwerte hinterlegen  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von Junge Beitrag anzeigen
    Ich möchte gerne die Aktualwerte aus meinen DB´s, als Anfangswerte haben. Wenn die MMC Karte mal gezogen wird, so dass nicht wieder alles erneut eingestellt werden muss.
    Um die DB-Aktualwerte aus dem Arbeitspeicher als Urlösch-"Anfangswerte" auf die MMC zu bekommen, braucht man nur den DB aus der CPU laden und wieder hineinladen. Oder RAM-nach-ROM-kopieren (alle DB aus dem Arbeitsspeicher in die MMC schreiben). Oder mit SFC84 im Programm direkt aus dem Arbeitsspeicher in die MMC schreiben.

    Auf der MMC gibt es keine Anfangswerte sondern nur "anfängliche" Aktualwerte. Die Aktualwerte im Arbeitsspeicher werden mit den Aktualwerten von der MMC überschrieben, wenn der DB von der MMC in den Arbeitspeicher geladen wird (z.B. bei Urlöschen oder mit SFC83).

    Die DB-"Anfangswerte" werden nur offline im Projekt verwendet, z.B. zum Initialisieren von IDB-Instanzen. Willst Du Aktualwerte in die offline-Anfangswerte kopieren, dann mußt Du das manuell für jeden Wert einzeln tun (in die Spalte "Anfangswert" eintragen).

    Harald
    Geändert von PN/DP (18.08.2015 um 11:31 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    190
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Jetzt bin ich ganz verwirrt

    Hab ich das richtig verstanden, dass ich, um meine DB-Aktualwerte aus dem Arbeitspeicher als Urlösch-"Anfangswerte" auf die MMC zu bekommen, zunächst nur den SFC84 aufrufen muss? ..Kann ich dann die veränderten Aktualwerte im DB sehen?

    Was muss ich denn dann mit dem SFC84 anstellen? Ich habe es ja schon versucht, aber es ist nichts passiert! Ähnlich wie im Beispiel oben, habe ich das selbe gemacht nur statt sfc83 halt sfc84 verwendet. Aber ich konnte keine Veränderung im Datenbaustein sehen.

  4. #4
    Registriert seit
    06.08.2015
    Beiträge
    7
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Um die DB-Aktualwerte aus dem Arbeitspeicher als Urlösch-"Anfangswerte" auf die MMC zu bekommen, braucht man nur den DB aus der CPU laden und wieder hineinladen. Oder RAM-nach-ROM-kopieren (alle DB aus dem Arbeitsspeicher in die MMC schreiben).
    Also: Im Simatic-Manager in die Online-Ansicht gehen, den gewünschten DB markieren und mit Strg+C kopieren, in die Offline-Ansicht gehen und den DB mit Strg+V einfügen. Dann nochmals diesen DB markieren und mit Strg+L wiederum in die CPU laden.

  5. Folgender Benutzer sagt Danke zu jomatic für den nützlichen Beitrag:

    djmaxtor (04.04.2017)

  6. #5
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    190
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Nun das ist genau das, was ich nicht machen wollte
    Ich suche eine Lösung womit dies umgehen werden kann. Dazu muss man mit dem PG an der Steuerung hängen und es muss/sollte auch ohne gehen.

    Aber ich glaube ich hab den SFC84 noch nicht verstanden, bzw. ich bin schon seit geraumer Zeit dran und versuche damit irgendwelche Ergebnisse zu bekommen, aber es tut sich nichts. Es verändert sich einfach nichts im DB.

    Ebenfalls die Idee von RAM-nach-ROM-kopieren hat kein Erfolg gebracht. Könnte mir vllt jemand eine Code oder Beispiel Projekt geben, womit ich auf die Lösung kommen kann?

  7. #6
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.345
    Danke
    451
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Punkt 1: Versuch Begriffe wie "Urlösch-Anfangswerte" zu vermeiden. Das führt nur zur Verwirrung mit der Spalte "Anfangswert" in der Offline DB-Ansicht.
    Auf der CPU gibt es diese nicht und auch in der MMC hast du nur die Spalte Aktualwerte, nur eben mit dem Stand vom letzten mal RAM/ROM oder SFC84.

    Punkt 2:
    Zitat Zitat von Junge Beitrag anzeigen
    Aber ich glaube ich hab den SFC84 noch nicht verstanden, bzw. ich bin schon seit geraumer Zeit dran und versuche damit irgendwelche Ergebnisse zu bekommen, aber es tut sich nichts.
    Es verändert sich einfach nichts im DB.
    Hier hast du ein Verständnisproblem: Was soll sich denn deiner Meinung nach, nach dem Ausführen von SFC84 in der Online-Ansicht tun? Richtig, gar nix.
    SFC84 kopiert die Aktualwerte des DBs im RAM in die MMC. Beobachten kannst du nur den RAM, der bleibt aber logischerweise von SFC84 unbeeinflusst.

    Zitat Zitat von Junge Beitrag anzeigen
    Ebenfalls die Idee von RAM-nach-ROM-kopieren hat kein Erfolg gebracht. Könnte mir vllt jemand eine Code oder Beispiel Projekt geben, womit ich auf die Lösung kommen kann?
    Selbes Problem wie oben.

    Punkt 3:
    Wenn du sehen willst was SFC84 tut, gehe folgendermaßen vor:
    • Erstelle ein DB mit ein paar Werten und lade diesen auf die CPU.
    • Verändere Online die Aktualwerte und merke dir diese.
    • Führe den SFC84 für den DB aus
    • Ändere die Aktualwerte nochmal im RAM
    • Wenn du jetzt die CPU spannungslos machst und neustartest hast du immer noch die Werte vom zweiten mal Ändern im DB.
    • Als nächstes ziehe die MMC und stecke Sie wieder (oder führe ein Urlöschen der CPU per PG aus). Nach dem ziehen/Stecken der MMC führt die CPU beim Neustart automatisch ein Urlöschen aus (erkennbar am Blinken der Stop-LED)
    • Jetzt solltest du die Aktualwerte nach dem ersten mal ändern im DB(RAM) haben (den Stand bevor du SFC84 ausgeführt hast).
    Geändert von RONIN (18.08.2015 um 13:17 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  8. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    djmaxtor (04.04.2017)

  9. #7
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.345
    Danke
    451
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Dem Verständnis halber weise ich Nochmal auf die Speicherarchitektur der S7 hin.

    RAM:
    Enthält während des Betriebs das Programm und alle DBs mit denen die CPU(Ablaufprogramm) arbeitet.
    REMANENZSPEICHER (in der CPU selbst verbaut)
    Sichert (nicht ganz) den RAM bei Spannungsausfall. Hier drin liegt ebenfalls das Programm so wie die Datenbausteine.
    Bei Neustart nach Spannungsausfall (etc.) wird das SPS-Programm und der Letztstand der DB-Werte von dort aus in den RAM geladen.
    MMC (LADESPEICHER):
    Enthält den Programmstand und die Datenbausteine so wie zuletzt mit dem PG übertragen. (Sofern keine Änderungen durch RAM/ROM oder SFC84)
    Die MMC wird im Normalbetrieb der CPU nie angefasst, auch nicht bei einem Neustart nach Spannungsausfall.
    VOn der MMC wird das Programm und die Datenbausteinwerte nur während dem Urlösch-Vorgang geholt.

    Ist so nicht 100% korrekt/vollständig, sollte aber das Grundprinzip verständlich machen.
    Details, Siehe Handbuch zum S7-300 Speicherkonzept: https://support.industry.siemens.com...e/view/7302326
    Geändert von RONIN (18.08.2015 um 13:31 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  10. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Junge (18.08.2015)

  11. #8
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    190
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    .... fühl dich gedrückt und geknutscht RONIN! Tausend Dank, jetzt ist der Groschen mehr als nur gefallen. Auch Danke an die anderen beiden!

    Super Erklärung!

    Ich wollte nur noch kurz Ergänzen für andere mit ähnlichen Problem, fürs allgemeine Verständnis.


    SFC83: liest einen Datensatz aus einen DB aus dem LADESPEICHER (aus der MMC) und speichert dies in den Ziel DB
    SFC84: überträgt einen Datensatz aus einen DB aus dem Arbeitsspeicher (aus der CPU) und speichert diesen in dem Ladespeicher der MMC

  12. #9
    Avatar von Junge
    Junge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.11.2014
    Ort
    Paderborn
    Beiträge
    190
    Danke
    15
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Soweit funktioniert alles wunderbar, ABER jetzt frage ich mich wie ich es hinbekomme einen DB mit verschiedenen Datentypen (und nicht sortiert) schön und einfach zu Übertragen. 20x den SFC84 aufzurufen mit unterschiedlichen ANYpointer ist nicht so schön, da der SFC84 jeweils genau den Datentyp wissen will den man übertragen möchte.

  13. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Immer den kompletten DB schreiben. Als "P#...BYTE nn", dann sind die Datentypen uninteressant.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  14. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Junge (19.08.2015)

Ähnliche Themen

  1. Step 7 Messdaten hinterlegen ?
    Von ihoffiwerdbaldtechniker im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 23.08.2013, 09:25
  2. DBs gehen auf initialwerte
    Von mnuesser im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 03.06.2011, 19:37
  3. Antworten: 2
    Letzter Beitrag: 29.09.2009, 08:12
  4. Antworten: 6
    Letzter Beitrag: 31.10.2008, 11:40
  5. DB Aktualwerte als Anfangswerte übernehmen ?
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.02.2006, 16:06

Lesezeichen

Berechtigungen

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