Step 7 Unterschiedliche Aufrufzeiten realisieren/ Struktur meines Vorhabens

walkingtoaster

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche mich im Rahmen meiner Abschlussarbeit mal wieder an einer SPS, Grundkenntnisse aus dem Studium sind vorhanden und auch ein bisschen mit S7 rumgespielt hab ich auch schon.

Ich möchte eine kleine Anlage mittels einer S7 überwachen und steuern. Zunächst soll das ganze erstmal mit plcsim simuliert werden deshalb hab ich mir mal eine S7-1500 plus 16 AE + 4AA zusammengebaut habe. Nutze STEP 7 Professional V12 SP1. Folgende Sachen habe ich vor:

Es gibt mehrere Durckmessstellen, 1x Temperatur (Pt100), sowie 2 Durchflussmessungen. Die Messwerte sollen alle paar Sekunden (alle 3sec) geloggt werden (daher auch die S7-1500, die 1200 würde auch gehen bietet allerdings kein PLCSIM), weiterhin werden aus den Durchflussmesswerten Solldrehzahlen für einen Motor errechnet. Diese sollen als AA 0-10V an einen FU ausgegeben werden.

Das Datalogging soll unabhängig von der Sollwertberechnung durchgeführt werden, ich würde mich jetzt freuen wenn ihr mir ein paar Denkanstöße geben könntet wie man jetzt die Grundstruktur realisieren kann. Wie gesagt meine Kenntnisse sind jetzt nicht so vorhanden, dass ich eben sofort weiß was man da machen kann und wie es am einfachsten ist.

Muss man dafür Timer verwenden oder kann man die beiden "Aufgaben" jeweils in einen FB packen und die in unterschiedlichen Zeiten über den OB1 aufrufen?

Vielen Dank :)
 
Zuletzt bearbeitet:
Abschlussarbeit = Bachelor-/Master-/Diplomarbeit ??

Du kannst dir einen Zeit-OB alle 3 Sekunden aufrufen lassen und in diesem OB deine Werte speichern. (Alternative: Timer alle 3sec gibt ein Bool... und diesen Boolwert an den EN Eingang eines FCs/FBs - je nachdem, was du da noch alles machen willst).
Sollwertberechnung: "Bastel" dir einen Baustein, in dem der Sollwert berechnet werden soll. Als In oder InOut deine Werte an deinen Baustein übergeben... Dann biste so gut wie fertig


NACHTRAG: Der Präfix dieses Beitrags sollte TIA und nicht Step7 sein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ok schon mal Danke. Abschlussarbeit ist Master, aber das hat mit der Fragestellung ja nichts zu tun ;)

Mit TIA ist natürlich richtig, ist jetzt auch das erste Mal bei mir mit TIA; kenne sonst nur die "alte" Oberfläche. Kann das jetzt aber nicht mehr editieren,eventuell ist ja ein Mod so nett und würde das berichtigen.

Zu dem Zeit OB bzw Timer, gibts da einen gravierenden Unterschied zwischen beiden Varianten oder ist es im Prinzip egal?
 
Zunächst: Du verwendest nicht Step7 V5.x sondern TIA V...?

Die Steuerung des FU machst Du am besten im OB1 bzw in aus dem OB1 aufgerufenen Bausteinen "so oft wie möglich".

Das Loggen von Meßwerten mache ich gewöhnlich im OB35 (oder anderer OB3x), weil der ein gleichbleibendes Aufrufraster garantiert und ich mir das mitschreiben eines Zeitstempels bei jedem Datensatz dadurch erspare. Bei "alle 3 Sekunden" ist aber wahrscheinlich ein Aufruf aus der OB1-Ebene auch genau genug. Zum Erzeugen des 3s-Triggers in der OB1-Ebene würde ich keinen Timer benutzen (zu ungenau, Abfragefehler summieren sich), sondern Impulse vom Taktmerkerbyte abzählen. Die Uhrzeit auswerten ist auch nicht gut, wenn die Uhr synchronisiert wird.

Als Speicher für das Mitloggen der Meßwerte nimmt man üblicherweise einen Ringpuffer in einem ARRAY OF Datensatz (STRUCT), bei großen Archiven ggf. auf mehrere Datenbausteine verteilt, bei noch größeren Archiven ggf. in den Ladespeicher ausgelagert. Weiters sollte man sich Gedanken machen, wie später die geloggten Meßwerte zur Langzeitspeicherung oder Kurvenanzeige aus der SPS herausgelesen/-geschrieben werden sollen.

Harald
 
Dein Zeit-OB unterbricht die aktuelle zyklische Bearbeitung und führt den Code im Zeit-OB aus (also deine Daten speichern). Danach arbeitet der OB1 dort weiter, wo er aufgehört hat.
Wenn du das ohne Zeit-OB machst, musst du damit rechnen, dass du abhängig von deiner Zykluszeit deine Werte speicherst (3Sek + max. Zykluszeit). Und erst dann würdest du ja den Timer wieder neu starten. Ich würde behaupten, dass du auf lange Sicht, über einen längeren Zeitraum gemessen hast, aber "weniger" Messwerte tatsächlich hast. Ich hoffe, dass kam etwas verständlich rüber.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@shutdown ja war verständlich, jetzt wo du es sagst klingelt da wieder was :)

@PN/DP ich nutze STEP 7 Professional V12 SP1 also wohl TIA. Um ehrlich zu sein steig ich da nicht so gaz durch was der Unterschied zwischen TIA und Step7 in den neuen Versionen ist^^
Auch dir vielen Dank für die Ansätze. Wenn die Tage weiterer Fragen aufkommen werde ich mich wieder melden :)

So und hier ist auch schon die erste Frage :)

Ich rufe aus dem OB1 einen FB auf, dem ich Eingabewerte übergebe. Diese Wertübergabe funktioniert auch. In dem Bild wird Permeat_Soll aus dem OB1 an den FB übergeben

http://i.imgur.com/zzhDsPj.jpg

jetzt ruf ich in dem FB eine FC auf, das Problem hier ist jetzt, dass die Übergabewerte in der Funktion nicht ankommen sondern immer 0 da steht. Die Funktion ist im nächsten Bild zu sehen

http://i.imgur.com/wg35zzu.jpg

Das ganze hab ich jetzt mit PLCSIM simuliert, da keine Hardware zur Verfügung steht . Kann mir jemand sagen an was das liegt?
 
Zuletzt bearbeitet:
Ich nutze STEP 7 Professional V12 SP1 (so heißt der Download auf der Siemens Seite) sollte dann also TIA sein. Allerdings ist mir nicht ganz klar was der Unterschied zwischen TIA und Step7 ist. Heißt doch irgendiw beides Step7 :confused:

**************************************************

So da sind dann auch die ersten Fragen :)

Wo finde ich diesen OB35? Hab mir jetzt selbst einen OB erstellt der alle 3 sec aufgerufen wird. Muss ich dann noch etwas einstellen oder einfach die Anweisungen in diesen OB packen damit diese alle 3sec aufgerufen werden?

Dann mein zweites Problem:

Ich habe jetzt mit PLCSIM mal meine Drehzahlberechnung getestet dabei hab ich folgendes Problem.

Aus dem OB1 ruf ich den FB zur Berechnung auf und übergeb ihm 2 Eingangswerte, das funktioniert so weit (Permeat-Soll wurde an den FB übergeben)
scr2.JPG

jetzt ist das Problem, dass der Wert den ich an die Funktion übergebe, nicht in der Funktion ankommt
scr1.JPG
bei Kubikmeter_pro_stunde liegt eine 0, sollte aber 252.0 sein. Kann mir jemand sagen warum das so ist? Ist bei allen Funktionen die ich benutze so in der Simulation
 
Zuletzt bearbeitet:
In PLCSIM kann es vorkommen, dass Werte nicht, oder falsch angezeigt werden. Welches Update hast du drauf? Schau dir doch die Werte mal über eine Beobachtugstabelle an.
Aber...kann es sein, dass du den falschen FC beobachtest? Die beiden Bilder passen nicht zusammen.


Der "OB35" den man halt aus Step 7 kennt.... tja ja, den findet man so nicht.
Neuen Baustein hinzufügen --> Organisationsbaustein --> Cyclic interrupt --> Zeittakt in ys angeben.
Diesen OB öffnen und deinen Code reinspeichern. Fertig
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann es sein, daß Du den falschen Baustein beobachtest?
Im ersten Bild übergibst Du 252.0 an FC5.IN.Kubikmeter_pro_Tag, im zweiten Bild hat die Funktion einen IN-Parameter Kubikmeter_pro_Stunde

Harald
 
Das stimmt die Bilder passen nicht zusammen, aber das Problem besteht so :) hab die funktion einmal zum umrechnen von Tag auf Sekunde und einmal von Stunde auf Sekunde, der Ausgang ist aber Null, was nicht stimmen kann wenn die Werte richtig übergeben werden

Ich nutze STEP 7 Professional V12 SP1
 
Bleibt Dein Problem auch, wenn Du außen statt der Variable testweise mal direkt den konstanten Wert 252.0 dranschreibst?
Wie ist Deine außen angelegte Variable #PermeatSoll deklariert?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also hab jetzt ein bisschen probiert. es sieht so aus, als ob die temporären Variablen innerhalb der Funktion nicht richtig angezeigt werden. Erst wenn man die Variable global unter PLC-Variablen in die Standard-Variablentabelle einträgt und diese Variable dann in der Funktion setzt kann man den richtigen Wert online beobachten. Siehe bei Netzwerk 2 Kubikmeter_pro_Tag

umrechnung.JPG

die Berechnung innerhalb der Funktion passt auch, allerdings kommt dann das Ergebnis nicht aus der Funktion raus

aufruf.JPG

permeat_soll_l/s müsste ja jetzt den Wert 2,916667 haben
 

Anhänge

  • umrechnung.JPG
    umrechnung.JPG
    54,4 KB · Aufrufe: 13
Ich kenne mich mit FUP ja so garnicht aus, aber muss der Eingang "EN" nicht erst einmal gesetzt sein, damit überhaupt etwas passiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Diesen Fehler kenne ich... Es ist ein Anzeigeproblem im PLCSIM. Bei Bausteinen werden nicht immer alle Werte angezeigt (Wert ist Null) (Dein MD72 hat aber den richten Wert- kannst du einfach überprüfen, wenn du einfach mal ein AWL Netzwerk nach deinem Netzwerk vom Bild 3 einfügst (Rechtsklick --> AWL Netzwerk einfügen) und einfach mal folgenden code eingibst

Code:
L MD72

Ich wette, dort wird dir der richige Wert angezeigt.

Das Problem habe ich auch mit Siemensbausteinen... Beim SCALE z.B. wurd immer Null angezeigt; beim UNSCALE wiederum wurde der korrekte Wert angezeigt


Ich kenne mich mit FUP ja so garnicht aus, aber muss der Eingang "EN" nicht erst einmal gesetzt sein, damit überhaupt etwas passiert?​

Nein.
Wenn man EN jedoch beschaltet, muss ein TRUE bzw. eine EINS angelegt sein, damit der Baustein bearbeitet wird
 
Ja das kann ich jetzt nach einigen Tests so weitgehend bestätigen. Meine Erkenntnisse:

alle Variablen die nicht in den PLC-Variablen mit Merker-Adresse aufgeführt sind, werden fälschlicherweiße mit Null angezeigt obwohl diese den richtigen Wert haben.

Alle meine Funktionen geben keinen Wert zurück (hier schließe ich aber nicht aus, dass ich eventuell etwas falsch konfiguriert hab in der Funktion selbst). Ich habe die Funktionen mal testweise als FB gemacht und hier funktioniert der Ausgabewert.

Deine Beobachtung dass dieses Problem nur bei SIemens Blöcken besteht kann ich nicht teilen, weil ich bisher alle FB's und FC's selbst geschrieben habe.

Sehr ärgerlich ist natürlich die Geschichte mit den Nicht-PLC-Variablen, wenn man dann doch immer eine Variable für jede Funktion oder FB anlegen muss um nachzuvollziehen. Das führt den eigentlichen Gedanken der Temporären Variablen natürlich ad absurdum.

Glücklicherweise muss ich ja nicht ganz so viel programmieren dann geht das ja noch...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hab das Update 3 mittlerweile auch drauf, kurioser weise werden mal die Werte beim beobachten richtig angezeigt und dann beim nächsten laden steht eine Null drin. Naja hab mich drauf eingestellt.

Eine Frage noch zum Datalogging:

ich habe mir mal das Siemens Sampleprogramm angeschaut und auf die S7-1500 übertragen. Gibts jetzt eine Möglichkeit die erzeugten .csv-Dateien einzusehen, wenn man das alles nur mitels PLCSIM macht oder muss man dafür Hardware vor sich haben?
 
Zurück
Oben