Zählen über Variablen/Datenbank, scheinbar willkürliche Werte

@René: Puhh, da hast mir aber ganz schön was zum nachdenken gegeben. Vielen Dank schonmal!

@borromeus: Das probier ich mal aus.

Also eins steht fest: Bevor ich das nächste Mal irgend ne SPS anfass geh ich auf Fortbildung, egal was Chefchen will.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das letzte "= #Lampe" gewinnt klarerweise, egal was davor zugewiesen wurde.
Du kannst die einzelnen Bedingungen verordern, oder ein kleiner Programmiertrick:
Bei der ersten Zuweisung mit "= #Lampe" arbeiten.
Und danach mit "S #Lampe".
Das bewirkt, dass wenn eine Bedinung erfüllt ist, die Lampe leuchtet.
 
@René: Puhh, da hast mir aber ganz schön was zum nachdenken gegeben. Vielen Dank schonmal!

Es geht mir drum das du den Unterschied siehst zwischen der Art der Zugriffe die du auf den DB machst.

Du hast das bei dir etwas gemischt (vom ersten Post bis zum letzten):
Einerseits hast du vollqualifizierte absolutadressierte Zugriffe gemacht "DB1.DBD0"

Anderseits vollqualifizierte symbolische Zugriffe "DB1".dbd0 (der könnte auch die absolute Adresse DB1.dbd2 haben, darum würde ich bei Symbolen Abstand nehmen von Hinweisen zur direkten Adresse)
Dann kommt auch keiner auf die Idee über das Symbol auf irgendeine absolute Adresse zu schliessen.

Und dann noch nichtqualifizierte Zugriffe
"OPN DB1" Mit direktzugriff auf den geöffneten DB

Jede dieser Vorgehensweisen hat ihre Berechtigung, man sollte nur wissen wann man welche Nutzen will und warum.

Für dich als Anfänger empfehle ich dir nur vollqualifizierte Symbolische Zugriffe zu nutzen.
Es wird dann noch früh genug kompliziert (Pointer) ;)

mfG René
 
Ich hab heute überall eindeutige Namen vergeben und alles in symbolische und vollqualifizierte Zugriffe geändert, nicht qualifizierte Zugriffe gibts keine mehr.
Die Lampe-Funktion hab ich mit Merkerbits realisiert, die vor einem Oder hängen.
Die Merkerdoppelwörter in der Variablentabelle sind nur zum beobachten der Werte da, die übernehmen keine wesentliche Funktion im Programm.

Die Sache mit den Zugriffen hab ich verstanden, bei den Instanzen häng ich noch. Sind das die Flanken, die du statt den Merkern, die ich bei den positiven Flanken benutzt hab, verwendet hast? Sind Merker eigentlich Global und Flanken nicht? Was unterscheidet Merker und Flanken?
Und wo wir gerade bei Merkern sind: Warum kann ich MD300 ff. nicht benutzen? Ist der Speicher für irgendwas spezielles reserviert?

Das Programm läuft jetzt und tut was es soll. Der gravierendste Fehler war die Lampe selber. Die hing mit den Kontakten der Relais auf einem gemeinsamen Nullpotential, was zur Folge hatte, dass sobald der Ausgang für die Lampe geschaltet werden sollte alle vier Eingänge ein Signal bekamen. So konnte der Wert 10 nie überschritten werden. Nachdem ich die Lampe auf ein anderes Nullpotential gehängt hab hats funktioniert.

Ich hab heute leider meinen Stick inner Firma vergessen, sonst würde ich das Programm nochmal hochladen. Mach ich morgen, dann kann da nochmal jemand drüberschauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Merker sind Speicherstellen. Ueberbleibsel aus der S5 Zeit.
Flanken sind Funktionen. Eine positiver Flankenmerker stellt dir einfach für einen Zyklus ein True hin wenn der Eingang von 0 nach 1 Wechselt.

Ob du den Flankenmerker wirklich als Merker deklarierst, als Bit in einem DB ist eigentlich egal.
DBs sind genauso global wie Merker.
Das "Flanke_0" bei dem Baustein den ich eingefügt habe ist nur der Name für den Flankenspeicher. Du kannst die auch "Binky" oder "Brain" benamsen. Was darin abgespeicher wird ist nur abhängig von deinem Programm.

In der Spalte Name, legst du effektiv nur eine Bezeichnung fest die idealerweise darauf hinweist was die Speicherstelle beeinhält.
"Puls1" ist auch nur ein Name, Bei Datentyp wird dann festgelegt um was es sich effektiv handelt. Hier ist das die Systemfunktion "TP" Also Pulstimer. Oder Bool für ein Bit, oder INT für ein Wortgrosses Integer, oder Word für ein Wortgrosses, genau Wort. Das können aber auch Zeiten, Zeichen etc. sein.

MD300 ist in einer 314er CPU nicht zugänglich, erst ab einer 315er CPU gibts die Möglichkeit auf MD ab 256 zuzugreifen.
Die Speichermöglichkeiten sind in der Operationenliste S7-300 ersichtlich. kannste auf der Siemens Supportwebseite runterladen.

mfG René
 
Zurück
Oben