Problem mit S7-Micro/Win S7-200

Parallax

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

ich arbeite normalerweise mit Beckhoffsteuerungen und habe nun eine S7-200. Dabei verwende ich das Programm S7-Micro/Win V4.0.


Ich hab mir ein Stromstoßrealis gebastelt und die einzelnen Bausteine mit Symbolen versehen welche ich oben in einer Symboltabelle eingetragen wurden.

#Output als IN_OUT in Bool
#Input als IN in Bool
und einen Hilfsbaustein als
#Hilfsmerker1 als Temp in Bool

Frage 1: Warum muss ich bei einer Setzen-Spule oben den Symbolnamen angeben und unten noch mal irgendwas, und was ist das überhaupt was ich da angeben muss

Das Stromstoßrelais hab ich in eine Bibliothek gepresst und verwende es in meinem Hauptprogramm.
Das funktioniert auch solange wunderbar, bis ich die Bibliothek das zweite mal verwende. Hier beeinflussen sich die beiden Funktionen untereinander. Scheinbar wird keine eigene Instanz des Stromstoßrelais erstellt.

Frage 2: Wo liegt hier der Fehler, wie kann ich eine Bibliothek in einem Programm mehrfach verwenden?

Ich hoffe das ihr mir helfen könnte und bedanke mich schon mal im voraus,
freundliche Grüße,

Andre Wagner
 
Frage 1: Warum muss ich bei einer Setzen-Spule oben den Symbolnamen angeben und unten noch mal irgendwas, und was ist das überhaupt was ich da angeben muss
Mit der Zahl drunter wird angegeben, wieviele Bits ab der angegebenen Position gesetzt werden sollen. Man kann also mehrere Bits in einem Rutsch setzen oder rücksetzen.


Ich hab mir ein Stromstoßrealis gebastelt und die einzelnen Bausteine mit Symbolen versehen welche ich oben in einer Symboltabelle eingetragen wurden.

#Output als IN_OUT in Bool
#Input als IN in Bool
und einen Hilfsbaustein als
#Hilfsmerker1 als Temp in Bool

Frage 2: Wo liegt hier der Fehler, wie kann ich eine Bibliothek in einem Programm mehrfach verwenden?
Du mußt den Hilfsmerker über IN/OUT nach außen führen und global z.B. in einer Variablen Vx.x speichern. Die Temp-Variable wird mit dem Beenden der SBR wieder gelöscht und ist höchstens noch zufällig beim nächsten Aufruf vorhanden, weil sie nicht überschrieben wurde. Dafür gibt's aber keine Garantie.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, danke... das mit der Zahl sei schon mal geklärt...

Nur den Rest hab ich net ganz verstanden...

Also... Ich mach das ganze in KOP und mein Stromstoßrelais schaut in etwas so aus:

ich habe einen Schließerkontakt welchem ich das Symbol #Input zugewiesen habe. Dies ist von Typ IN als Bool

weiterhin eine Spule, welcher ich das Symbol #Output zugewiesen haben. Dies ist von Typ IN_OUT und auch Bool

Wenn ich das ganze nun als Bibliothek erstelle erhalte ich einen Funktiosblock mit dem den Kontakten EN, Input und Output...
EN muss immer 1 sein, das ist klar. Wenn ich auf Input nun einen Pulse gebe wechselt Output seinen Zustand.
Das erreiche ich durch eine Konstruktion mit Öffnern und Schließern welchen ich das Symbol #Hilfsmerker zugewiesen hab, als TEMP und BOOL...
Also Temp darf ich scheinbar nicht nehmen, da sonst der Status des Hilfsmerkers nicht gespeichert wird, was soll ich dann nehmen? Wenn ich IN_OUT nehme, erhalte ich einen weiteren Kontakt an meinem Funktionsblock, mit was soll ich diesen beschalten?

So und nun das Hauptproblem... Füge ich diesen Funktionsblock 2x ein, wechselt der Ausgang von beiden Funktionsblöcken, egal bei welchem ich Input beschalte... Scheinbar wird die Funktion nur 1x hinterlegt und deswegen beeinflussen sich die beiden Funktionsblöcke gegenseitig...

Mfg
Parallax
 
Das Problem ist einfach, das 'ne SBR nichts intern speichert. Wenn die SBR geschlossen wird, vergißt sie die Zustände ihrer Ausgänge und Temp-Variablen. Du mußt in jedem Zyklus wieder bei 0 beginnen. Wenn Du eine SBR nur ein einziges Mal benutzt, kannst Du Glück haben, das die benutzten Speicherbereiche bis zum nächsten Zyklus erhalten bleiben. Dieses Glück hast Du beim mehrfachen Aufruf einer SBR eigentlich nie.

Poste bitte mal deinen SBR-Code und ich schau's mir mal an. Dazu die Ansicht einfach auf AWL umschalten und kopieren. Oder das ganze als AWL-Quelle exportieren.
 
So sieht ein Stromstoßschalter in einer SBR aus, den man mehrfach in einem Zyklus benutzen kann:
Code:
[FONT=courier new]SUBROUTINE_BLOCK Stromstoßschalter:SBR0
[/FONT][FONT=courier new]TITLE=[/FONT]

[FONT=courier new]VAR_INPUT[/FONT]
[FONT=courier new]    Toggle:BOOL;[/FONT]
[FONT=courier new]END_VAR[/FONT]

[FONT=courier new]VAR_IN_OUT[/FONT]
[FONT=courier new]    Output:BOOL;[/FONT]
[FONT=courier new]END_VAR[/FONT]
[FONT=courier new]
[/FONT]
[FONT=courier new]BEGIN[/FONT]

[FONT=courier new]Network 1 // Stromstoßschalter[/FONT]
[FONT=courier new]// XOR-Verknüpfung von Toggle und Output[/FONT]
[FONT=courier new]// Toggle wird außerhalb der SBR mit einer Flanke versehen[/FONT]
[FONT=courier new]    LD     L0.0[/FONT]
[FONT=courier new]    UN     L0.1[/FONT]
[FONT=courier new]    LDN    L0.0[/FONT]
[FONT=courier new]    U      L0.1[/FONT]
[FONT=courier new]    OLD[/FONT]
[FONT=courier new]    =      L0.1[/FONT]
[FONT=courier new]
[/FONT][FONT=courier new]END_SUBROUTINE_BLOCK[/FONT]
Die Flanke für Toggle muß außen erzeugt werden, damit der Umschaltimpuls nur einen Zyklus anliegt. Sonst schaltet der Stromstoßschalter in jedem Zyklus, in dem Toggle auf 1 ist, ein und wieder aus.
Soll die Flanke auch in die SBR braucht man noch eine 2. IN/OUT-Variable für den Flankenmerker. Die Flankenmerker von MicroWin kann man dann nicht nutzen, da sie nicht mehrfach aufrufbar sind. Wenn die Flanke in der SBR detektiert wird, kann man Taster direkt auf die SBR geben.



PS: Und weil das so einfach ist, lohnt es sich in meinen Augen eigentlich nicht, daraus 'ne Bibliothek zu machen.
;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hm,

leider hab ich Micro/Win hier nicht am Rechner... Aber ich hab das Programm mal aufgemalen, is ja nur ne Kleinigkeit:

DSC_0167[1].jpg

Kannst ja mal anschauen... is in 5 min programmiert...

Danke für die Mühe,

Grüße,

Andre
 
Also wie gesagt, so'ne SBR hat kein Gedächtnis!

Auch wenn Du Deine Hilfsmerker setzt, da sie nicht außerhalb der SBR gespeichert werden, sind sie beim nächsten Aufruf der SBR in keinem definiertem Zustand. Bei einmaligem Aufruf der SBR können sie noch den Zustand vom vorigen Zyklus haben, beim mehrfachen Aufruf werden sie unter Garantie wieder überschrieben.

Wenn Du die Hilfsmerker als IN/OUT deklarierst, wird der Zustand außerhalb der SBR gespeichert (Out) und beim nächsten Aufruf der SBR wieder zurückgeschrieben (IN). Der Speicher außerhalb kann allerdings auch außerhalb der SBR manipuliert werden.
 
Zuletzt bearbeitet:
hab mal im anhang zwei lib angehängt eines davon war mein ich das was du brauchst :D kann es nur nicht grad probieren und weiß es nicht mehr weil ich sowas nie benutze :ROFLMAO:
 

Anhänge

  • lib.zip
    3,4 KB · Aufrufe: 1
Zurück
Oben