# Visualisieren mit Libnodave



## Hocheck (6 Mai 2010)

Hallo,

Libnodave bietet sehr viele Möglichkeiten. Kann man einen Industrie PC in Verbindung mit einem mit Libnodave implementierten Programm verwenden um zum Beispiel eine einfache Sortierungsanlage zu visualisieren? Förderband und Zuführeinrichtung (Zylinder)

Generell sollte es doch möglich sein den PC über eine TCP/IP Verbindung als Statusanzeige (Zylinder x Aus... etc) zu verwenden, oder?...

Nur wie gestaltet sich dies, wenn man in den Prozess eingreifen möchte? (Zylinder x einfahren...etc)

Unter anderem sind doch Microsoft XP etc und eben das Ethernet doch eher schlecht für solche Anwendungen... Ethernet --> Echtzeit etc...

Wie weit kann man denn da ohne Risiko gehen?!


----------



## Earny (6 Mai 2010)

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!

```
[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


----------



## MW (6 Mai 2010)

Hocheck schrieb:


> Hallo,
> 
> Libnodave bietet sehr viele Möglichkeiten. Kann man einen Industrie PC in Verbindung mit einem mit Libnodave implementierten Programm verwenden um zum Beispiel eine einfache Sortierungsanlage zu visualisieren? Förderband und Zuführeinrichtung (Zylinder)
> 
> Generell sollte es doch möglich sein den PC über eine TCP/IP Verbindung als Statusanzeige (Zylinder x Aus... etc) zu verwenden, oder?...



ist möglich bzw. würd ich das als einer der Hauptverwendungsbereiche von Libnodave bezeichnen



Hocheck schrieb:


> Nur wie gestaltet sich dies, wenn man in den Prozess eingreifen möchte?  (Zylinder x einfahren...etc)
> 
> Unter anderem sind doch Microsoft XP etc und eben das Ethernet doch eher  schlecht für solche Anwendungen... Ethernet --> Echtzeit etc...
> 
> Wie weit kann man denn da ohne Risiko gehen?!



Echtzeit geht mit Libnodave nicht (zumindest nicht ganz). Kommt drauf an was du Steuern willst, wenn du irgendwas per Tippbetrieb in Position bringen willst wirds schwierig, aber nen Zylinder ausfahren und wieder einfahren sollte problemlos möglich sein. Wobei ich den Ausgang nie direkt vom PC steuern lasse, sondern immer nur ein Startbefehl in der SPS setzte. So sind dann auch die Sicherheiten (Endschalter, Sicherheitsbereich ok. und Co.) noch aktiv.

da war ich wohl zu langsam


----------



## vierlagig (6 Mai 2010)

MW schrieb:


> Echtzeit geht mit Libnodave nicht


 
was verstehst du bitte unter Echtzeit und warum soll das mit libnodave nicht gehen?


----------



## Hocheck (7 Mai 2010)

Danke für die zahlreichen und schnellen antworten!!




> Zitat von Earny
> 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.:
> ...


Ok das klingt sehr logisch und plausibel auch der Programmcode super- Da macht doch die WinCC Flexible Runtime eigentlich nicht viel anders oder ist die viel komplexer? 



> Zitat von MW
> Echtzeit geht mit Libnodave nicht (zumindest nicht ganz). Kommt drauf an  was du Steuern willst, wenn du irgendwas per Tippbetrieb in Position  bringen willst wirds schwierig, aber nen Zylinder ausfahren und wieder  einfahren sollte problemlos möglich sein.


Ok warum funktioniert das Tippen bei einem Simatic Panel?! Also mein Lösungsvorschlag wäre, bitte berichtigt diese Aussage falls falsch, dass man erstens den MPI Bus oder Profinet hat. Dementsprechend gibt es "Echtzeit"- zyklische Datenübertragung, da normales Ethernet TCP/IP nicht zyklisch ist und mit csma/cd arbeitet. 

Nur hat es doch auch was mit der Runtime zu tun, dass wir "Echtzeit" haben, oder nicht?!
Ob die Runtime also auf WinCE oder XP installiert ist scheint demnach egal zu sein, oder?!

Was ist so besonders an der Runtime? Und könnte LibNoDave so etwas auch (wenn man nicht Ethernet TCP/IP benutzen würde)..

Es gibt ja noch den unterschied zwischen harter und weicher Echtzeit....


----------

