Der nachfolgende Programmcode ist VB.Net, ohne libnodave.net.dll.
Die Stellungsabfrage eines Pneumatik- oder Hydraulikzylinders kannst Du z.B. in einer Timer-Prozedur machen lassen. Dabei dürfte eine Timer-Zykluszeit von 500 ms in vielen Fällen genügen. Bei der dargestellten Lösung wird die Stellung des Zylinders (eigentlich ist die Stellung der Kolbenstange gemeint) in einer Textbox dargestellt. Es werden hier 4 Fälle unterschieden.
[/CODE]
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
Dim buf1(0), buf2(0) As Byte
'E10.0 = Grenztaster Zylinderkolbenstange eingefahren
'E10.1 = Grenztaster Zylinderkolbenstange ausgefahren
'E10.0 = 8x10+0 = 80; E10.1 = 8x10+1 = 81
res = daveReadBits(dc, daveInputs, 0, 80, 1, buf1(0)) 'E10.0 - eingefahren
res = daveReadBits(dc, daveInputs, 0, 81, 1, buf2(0)) 'E10.1 - ausgefahren
If buf1(0) = 1 And buf2(0) = 0 Then
txtZylinderstellung.Text = "Kolbenstange ist eingefahren"
txtZylinderstellung.BackColor = System.Drawing.Color.White
ElseIf buf1(0) = 0 And buf2(0) = 1 Then
txtZylinderstellung.Text = "Kolbenstange ist ausgefahren"
txtZylinderstellung.BackColor = System.Drawing.Color.White
ElseIf buf1(0) = 0 And buf2(0) = 0 Then
txtZylinderstellung.Text = "" 'Kolbenstange verfhrt noch
txtZylinderstellung.BackColor = System.Drawing.Color.White
Else
txtZylinderstellung.Text = "Zylindergrenztaster defekt?"
txtZylinderstellung.BackColor = System.Drawing.Color.Red
End If
End Sub
[/CODE]
Die Befehle für das Ein- und Ausfahren können z.B. mit Hilfe zweier Buttons gegeben werden. In diesem Fall geht der Merker M30.0 im S7-Programm (musst Du Dir dazudenken) auf den SPS-Ausgang, der das Ventil ansteuert, das den Zylinder ausfahren lässt. In diesem Fall wird ein federrückgestelltes Ventil mit nur einer Ventilspule unterstellt. Bei Impulsventilen mit zwei Spulen müsstest Du bei dieser Ansteuerungsvariante 2 Merker bzw. 2 Ausgänge einsetzen.
Bemerkung: Das Ausschalten der Ventilspule lässt wegen der Federrückstellung den Zylinder wieder einfahren!
Code:
[FONT=Courier New][COLOR=#0000ff][COLOR=#0000ff]Private[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR] btnAusfahren_Click([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] sender [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.Object, [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] e [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.EventArgs) [COLOR=#0000ff][COLOR=#0000ff]Handles[/COLOR][/COLOR][/FONT][FONT=Courier New] btnAusfahren.Click[/FONT]
[COLOR=#008000][COLOR=#008000][FONT=Courier New]'M30.0 einschalten[/FONT][/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000][FONT=Courier New]'M30.0 = 30x8+0 = 240[/FONT][/COLOR]
[/COLOR][FONT=Courier New]res = daveWriteBits(dc, daveFlags, 0, 240, 1, 1)[/FONT]
[FONT=Courier New][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR][/FONT][COLOR=#0000ff]
[/COLOR]
[FONT=Courier New][COLOR=#0000ff][COLOR=#0000ff]Private[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR] btnEinfahren_Click([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] sender [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.Object, [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] e [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.EventArgs) [COLOR=#0000ff][COLOR=#0000ff]Handles[/COLOR][/COLOR][/FONT][FONT=Courier New] btnEinfahren.Click[/FONT]
[COLOR=#008000][COLOR=#008000][FONT=Courier New]'M30.0 ausschalten[/FONT][/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000][FONT=Courier New]'M30.0 = 30x8+0 = 240[/FONT][/COLOR]
[/COLOR][FONT=Courier New]res = daveWriteBits(dc, daveFlags, 0, 240, 1, 0)[/FONT]
[FONT=Courier New][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR][/FONT][COLOR=#0000ff]
[/COLOR]
Zum Thema "Echtzeit" könnte man sagen, dass "Echtzeit" normalerweise nur von der SPS realisiert werden kann. Die angekoppelte Visualisierung muss häufig nicht sehr schnell auf sich ändernde Situationen in der SPS reagieren können, weil dass nunmal von dem in der SPS ablaufenden Steuerungsprogramm erledigt wird. Bei der angekoppelten Visualisierung sind Reaktionszeiten von 100 ms, 500 ms oder auch manchmal 1 s häufig als normal anzusehen. Das kann man kaum als "Echtzeit" bezeichnen.
Zum Thema Risiko oder besser Sicherheit kann man anmerken, dass sich hier bestimmte Lösungen herausgebildet haben, z.B.:
Klassische Variante: SPS steuert die Maschine; die vor- bzw. nachgeschalteten Sicherheitsschaltgeräte, Not-Aus-Schalter und Schützverschaltungen übernehmen die Sicherheitsfunktion
Wohl immer mehr am Kommen: Einsatz von Sicherheits-SPS, die die Sicherheitsfunktion direkt übernehmen
Mir ist unbekannt, ob zur Zeit schon PC-Visualisierungen oder Operator-Panels eingesetzt werden, die in den Sicherheitskreis mit einbezogen werden können.
Die gesteuerte Maschine oder Anlage muss immer in einem sicheren Zustand bleiben oder gehen können, auch wenn der Gabelstapler das Ethernet- oder Profibuskabel durchtrennt hat und damit die VISU ihre zugehörige Steuerung nicht mehr sieht.
Gruß
Earny