Beispiel Machine mit Microsoft Expression Blend (VB)

Microsoft Expression Blend ist ein Programm zum Erstellen von Programmoberflächen für C# und Visual Basic. In diesem Beispiel wird eine, mit dem Programm erstellte Oberfläche mit dem Beispiel Machine verbunden und anschließend in den Vista Media Center eingebunden. Dabei wird die Programmiersprache Visual Basic verwendet.

Zielplattform

Implementierung

Erforderliche Software

Die ersten Schritte ...

Schritt für Schritt lernen Sie die Entwicklung eines Programms mit Microsoft Visual Studio und Microsoft Expression Blend und das Einbinden der TwinCAT ADS .NET Komponente anhand eines Beispiels kennen und binden dieses dann in den Vista Media Center ein.

1. Neues Projekt erstellen:

Starten Sie Microsoft Visual Studio und erstellen Sie ein neue XAML Browser Applikation. Dazu gehen Sie über das Menü unter 'File -> New -> Project...' . Das Dialogfeld 'New Project' öffnet sich. Zuerst wählen Sie den Projekt Typ aus: 'Project types -> Visual Basic -> Net Framework 3.0'. Rechts erscheinen dann die Templates des Projekt Typs. Dort wählen Sie 'XAML Browser Application'. Sie geben Ihrem Projekt jetzt noch einen Namen, in diesem Fall ist 'Machine' und legen die Location fest.

Beispiel Machine mit Microsoft Expression Blend (VB) 1:

2. Bedienungsoberfläche erstellen

Wechseln Sie jetzt zu Microsoft Expression Blend, wo Sie Ihr eben erstelltes Projekt öffnen, um dort die Bedienoberfläche zu erstellen.

Beispiel Machine mit Microsoft Expression Blend (VB) 2:

Im oberen linken Bereich sehen Sie die beiden Ausgänge, die auch auf den Busklemmen ausgegeben werden. Unten links ist die Variable abgebildet, welche die Werkstücke zählt. Rechts können Sie mit dem Feld 'Speed' die Taktgeschwindigkeit des Motors verändern. Die Anzeige 'Steps' entspricht der Anzahl der Takte, die auf den Ausgang 1 ausgegeben werden.

Wollen Sie, dass die Bedienoberfläche ständig ihre Größe anpassen, so kopieren Sie den obersten Grid und fügen dann anstelle des Grids eine Viewbox ein. In diese Viewbox fügen Sie nun den Grid ein. Jetzt müssen Sie nur noch die Größe der Seite, der Viewbox und des Grids auf 'Auto' setzen. Hierbei kann es zu einer Verschiebung von Elementen kommen. Diese müssen Sie dann erneut positionieren. Achten Sie dabei darauf, dass Sie die Größe der Seite, der Viewbox und des Grids nicht wieder festsetzen.

3. Referenz hinzufügen

Nach dem Erstellen der Oberfläche muss zuerst eine Referenz namens 'TwinCAT.Ads.dll' hinzugefügt werden. Dies kann sowohl in Visual Studio, als auch in Expression Blend erfolgen. In beiden Fällen geht man über das Menü unter 'Project --> Add Reference'.

Beispiel Machine mit Microsoft Expression Blend (VB) 3:

4. Sicherheitsfreigabe

Gehen Sie im Menü unter 'Project -> <Name ihres Projektes> Properties....' .

Beispiel Machine mit Microsoft Expression Blend (VB) 4:

Es öffnet sich nun ein Tab, in dem Sie die Projekteigenschaften festlegen können. Gehen Sie dort auf 'Security' und wählen Sie 'this is a full trust application' aus.

Beispiel Machine mit Microsoft Expression Blend (VB) 5:

5. Quelltext bearbeiten

Nun kann mit dem Erstellen des Quelltextes in C# begonnen werden.
In die oberste Zeile des Quelltextes werden die benötigten Namespaces 'System.IO' und 'TwinCAT.Ads' eingefügt.

Imports  System.IO
Imports  TwinCAT.Ads

Danach folgen die Deklarationen.

Private hEngine As Integer 
Private hDeviceUp As Integer 
Private hDeviceDown As Integer
Private hSteps As Integer
Private hCount As Integer
Private hSwitchNotify As Integer
Private hSwitchWrite As Integer

Private tcClient As TwinCAT.Ads.TcAdsClient
Private dataStream As TwinCAT.Ads.AdsStream
Private binReader As System.IO.BinaryReader

Die erste Methode, ist die 'Load' Methode. In ihr werden Instanzen verschiedener Klassen erzeugt und eine Verbindung zum Port 801 hergestellt.

Private Sub Page1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    Try' Eine neue Instanz der Klasse AdsStream erzeugen
        ' Create a new instance of the AdsStream class
        dataStream = New AdsStream(7)

        ' Eine neue Instanz der Klasse BinaryReader erzeugen
        ' Create a new instance of the BinaryReader class
        binReader = New BinaryReader(dataStream)

        ' Eine neue Instanz der Klasse TcAdsClient erzeugen
        ' Create a new instance of the TcAdsClient class
        tcClient = New TwinCAT.Ads.TcAdsClient()

        ' Verbinden mit lokaler SPS - Laufzeit 1 - Port 801
        ' Connecting to local PLC - Runtime 1 - Port 801
        tcClient.Connect(801)
    Catch
        MessageBox.Show("Error while loading")
    End Try
...

Dann werden in der Methode 'Load' die Variablen noch verbunden und mit einer Methode (die noch geschrieben werden muss) verknüpft, die bei einer Änderung einer Variable aufgerufen wird.

Try' Initialisieren der Überwachung der SPS-Variablen
        ' Initializing the monitoring of the PLC variables
        hEngine = tcClient.AddDeviceNotification(".engine", dataStream, 0, 1, AdsTransMode.OnChange, 10, 0, DBNull.Value)
        hDeviceUp = tcClient.AddDeviceNotification(".deviceUp", dataStream, 1, 1, AdsTransMode.OnChange, 10, 0, DBNull.Value)
        hDeviceDown = tcClient.AddDeviceNotification(".deviceDown", dataStream, 2, 1, AdsTransMode.OnChange, 10, 0, DBNull.Value)
        hSteps = tcClient.AddDeviceNotification(".steps", dataStream, 0, 1, AdsTransMode.OnChange, 10, 0, DBNull.Value)
        hCount = tcClient.AddDeviceNotification(".count", dataStream, 4, 2, AdsTransMode.OnChange, 10, 0, DBNull.Value)
        hSwitchNotify = tcClient.AddDeviceNotification(".switch", dataStream, 6, 1, AdsTransMode.OnChange, 10, 0, DBNull.Value)

        ' Holen des Handles von "switch" - wird für das Schreiben des Wertes benötigt
        ' Getting the handle for "switch" - needed for writing the value
        hSwitchWrite = tcClient.CreateVariableHandle(".switch")

        ' Erstellen eines Events für Änderungen an den SPS-Variablen-Werten 
        ' Creating an event for changes of the PLC variable valuesAddHandler tcClient.AdsNotification, AddressOf tcClient_OnNotification
    Catch
        MessageBox.Show("Error when connecting")
    End Try
    End Sub


6. Definition

SPS Variablen verbinden:
Zum Verbinden der Variablen wurde die Methode AddDeviceNotification verwendet.

public int AddDeviceNotification(string variableName, AdsStream dataStream, int  offset, int length, AdsTransMode transMode, int cycleTime, int maxDelay, object userData);

Zum Verbinden der Variablen 'hSwitchWrite' wurde die Methode CreateVariableHandle verwendet.

int TcAdsClient.CreateVariableHandle(string variableName);


7. Methode schreiben:

Oben wurde bereits auf eine Methode verwiesen, die noch gar nicht existiert. Daher wird diese Methode, die 'tcClient_OnNotification' genannt wurde, als nächstes geschrieben. Diese Methode wird aufgerufen, wenn sich eine der SPS-Variable geändert hat.

'------------------------------------------------' wird bei Änderung einer SPS-Variablen aufgerufen' is activated when a PLC variable changes'------------------------------------------------Private Sub tcClient_OnNotification(ByVal sender As Object, ByVal e As AdsNotificationEventArgs)
    Try' Setzen der Position von e.DataStream auf die des aktuellen benötigten Wertes
        ' Setting the position of e.DataStream to the position of the current needed value
        e.DataStream.Position = e.Offset

        ' Ermittlung welche Variable sich geändert hat
        ' Detecting which variable has changedIf (e.NotificationHandle = hDeviceUp) Then'Die Farben der Grafiken entsprechened der Variablen anpassen
        'Adapt colors of graphics according to the variablesIf (binReader.ReadBoolean() = True) Then
            DeviceUp_LED.Foreground = New SolidColorBrush(Colors.Red)
        Else
            DeviceUp_LED.Foreground = New SolidColorBrush(Colors.White)
        End If
        ElseIf (e.NotificationHandle = hDeviceDown) Then
        If (binReader.ReadBoolean() = True) Then
            DeviceDown_LED.Foreground = New SolidColorBrush(Colors.Red)
        Else
            DeviceDown_LED.Foreground = New SolidColorBrush(Colors.White)
        End If
        ElseIf (e.NotificationHandle = hSteps) Then' Einstellen der ProgressBar auf den aktuellen Schritt
        ' Setting the ProgressBar to the current step
        prgSteps.Value = (binReader.ReadByte() * 4)
        ElseIf (e.NotificationHandle = hCount) Then' Anzeigen des "count"-Werts
        ' Displaying the "count" value
        lblCount.Content = binReader.ReadUInt16().ToString()
        ElseIf (e.NotificationHandle = hSwitchNotify) Then' Markieren des korrekten RadioButtons
        ' Checking the correct RadioButtonIf (binReader.ReadBoolean() = True) Then
            optSpeedFast.IsChecked = TrueElse
            optSpeedSlow.IsChecked = True
        End If
        End If
    Catch
        MessageBox.Show("Error")
    End Try
    End Sub

Es fehlen noch zwei Methoden, mit denen die Geschwindigkeit der Maschine eingestellt werden kann. In Ihnen wird ein virtueller Schalter umgelegt, hier wird ein Wert in die SPS-Variablen switch geschrieben.

'------------------------------------------------------' wird aufgerufen, wenn das Feld 'schnell' markiert wird' is activated when the 'fast' field is marked'------------------------------------------------------Private Sub optSpeedFast_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles optSpeedFast.Click
    Try
        tcClient.WriteAny(hSwitchWrite, True)
    Catch
        MessageBox.Show("Error")
    End Try
End Sub'------------------------------------------------------' wird aufgerufen, wenn das Feld 'langsam' markiert wird' is activated when the 'slow' field is marked'------------------------------------------------------Private Sub optSpeedSlow_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles optSpeedSlow.Click
    Try
        tcClient.WriteAny(hSwitchWrite, False)
    Catch
        MessageBox.Show("Error")
    End Try
End Sub


8. Notifications und Handles löschen:

In dem Close-Ereignis des Fensters werden die Verbindungen wieder mit der Methode DeleteDeviceNotification() freigegeben.

//------------------------------------------------------// wird beim Beenden des Programms aufgerufen// is activated when ending the program//------------------------------------------------------Private Sub Page1_Unloaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Unloaded
    Try' Löschen der Notifications und Handles
        ' Deleting of the notifications and handles
        tcClient.DeleteDeviceNotification(hEngine)
        tcClient.DeleteDeviceNotification(hDeviceUp)
        tcClient.DeleteDeviceNotification(hDeviceDown)
        tcClient.DeleteDeviceNotification(hSteps)
        tcClient.DeleteDeviceNotification(hCount)
        tcClient.DeleteDeviceNotification(hSwitchNotify)

        tcClient.DeleteVariableHandle(hSwitchWrite)
    Catch
        MessageBox.Show("Error")
    End Try
    tcClient.Dispose()
End Sub


Das SPS Maschinenprogramm Machine_Final.pro muss auf dem Laufzeitsystem 1 laufen und das Programm kann im Internet Explorer 7 getestet werden.

9. Einbinden in den Vista Media Center

Habe Sie ihr Projekt hinreichend getestet und keinen Fehler festgestellt, dann können Sie es nun in den Media Center einbinden.
Rufen Sie wieder in Visual Studio die Projekteigenschaften auf, jedoch gehen Sie dann auf 'Publish'. Dort klicken Sie dann auf 'Publish Now'. Es wird nun die xbap-Datei erstellt die Sie später im Media Center aufrufen. Diesen Schritt müssen Sie immer machen, wenn Sie ihr Programm verändert haben und die Änderung auch in den Media Center übernommen werden soll.

Beispiel Machine mit Microsoft Expression Blend (VB) 6:

Gehen Sie jetzt in einen Texteditor, z.B. Notepad geben Sie folgendes ein:

<application
    URL = "C:\Users\<User>\Documents\Visual Studio 2005\Projects\Machine\Machine\Publish\Machine.xbap">
</application>


Speichern Sie es unter: 'C:\Users\<User>\AppData\Roaming\Media Center Programs\Machine.mcl'. Wenn Sie nun Ihren Media Center starten finden Sie ihr Programm unter 'Online Media -> program library -> programs by name -> Machine'.
Dies ist die einfachste Form der Einbindung in den Windows Vista Media Center. Weitere Informationen zur Einbindung in den Media Center finden Sie hier.

10. Download Expression Blend Beispiel:

Expression Beispiel