TwinCAT und C++ App auf Win CE laufen lassen

alist

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

ich habe folgendes Szenario:
Ein Beckhoff EtherCat-Klemmen-System steuert diveres Digitale I/Os. Wenn ich einen Laptop per EtherCat mit den Klemmen verbinde,
und mit TwinCat PLC / System Manager arbeite, kann ich das komplette TwinCat QuickStart Tutorial durchspielen.
http://infosys.beckhoff.com/content/1031/tcquickstart/html/note.htm?id=9909

Ich erstelle dann wie im Tutorial eine C++ App in MS Visual Studio 2005, wodurch ich das Beispielprogramm laufen lassen kann,
das dann die Steuerung über TwinCat ADS übernimmt.
http://infosys.beckhoff.com/content/1031/tcquickstart/html/tcquickstart_samplecpp.htm?id=9935

Jetzt würde ich die Steuerung gerne auf einem Backhoff Panel PC CP62xx-0000 mit Win CE 6 laufen lassen.
D.h. ich programmiere auf meinem Laptop und übertrage dann die Steuerung (mit C++ App auf den Panel PC)

Was bisher geht: EtherCat Verbindung des PanelPC zu dem Backhoff Klemmen, TCP/IP Verbindung PanelPC und Laptop.
Ich wähle im TwinCat System Manager den PanelPC als Target und das Beispielprogramm läuft dann in Echtzeit auf dem PanelPC
und steuert die Beckhoff Klemmen.

Jetzt komme ich zu meinem Problem: Ich möchte jetzt die C++ App auf dem Win CE PanelPC laufen lassen.
Ich denke ich benötige dazu wie unter http://infosys.beckhoff.com/content/1031/sw_os/html/cx1000_os_ce_sdk.htm?id=145 beschrieben,
die Bekchoff SDK um native C++ CE Applikationen für CE Geräte zu implementieren.
Leider komme ich dann jedoch nicht weiter. Was muss ich in Visual Studio einstellen, damit die App dann für das CE System kompatibel ist?
Muss ich dann jedesmal die *.exe manuell auf das CE System kopieren und starten?

Im Beckhoff Information System finde ich keine weiteren Infos dazu.

Hat jemand vielleicht Erfahrungen in diese Richtung?

Was ich im Grunde möchte: Die Beckhoff-Klemmen sollen von dem Win CE PanelPC gesteuert werden, wobei auf dem Display eine Gui mit verschiedenen Ausgaben und Eingabemöglichkeiten angezeigt werden soll. Die Programmierung läuft über den Laptop.

Tut mir Leid wenn ich manche Einzelheiten evtl. undeutlich beschreibe (Einsteiger in SPS-Programmierung)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein VB .net Code jetzt: (wie im beckhoff Infosys beschrieben)

Code:
Imports System.IO
Imports TwinCAT.Ads

Public Class Form1

    Private tcClient As TwinCAT.Ads.TcAdsClient
    Private dataStream As TwinCAT.Ads.AdsStream
    Private binReader As System.IO.BinaryReader
    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

    '-----------------------------------------------------
    'Wird als erstes beim Starten des Programms aufgerufen
    'Is activated first when the program is started
    '-----------------------------------------------------
    Private Sub frmMachine_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            ' Eine neue Instanz der Klasse AdsStream erzeugen
            dataStream = New AdsStream(7)

            ' Eine neue Instanz der Klasse BinaryReader erzeugen
            binReader = New BinaryReader(dataStream)

            ' Eine neue Instanz der Klasse TcAdsClient erzeugen
            tcClient = New TwinCAT.Ads.TcAdsClient()

            ' Verbinden mit lokaler SPS - Laufzeit 1 - Port 801 
            tcClient.Connect(801)

        Catch ex As Exception
            MessageBox.Show("Fehler beim Laden")
        End Try

        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, 3, 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 values
            AddHandler tcClient.AdsNotification, AddressOf tcClient_OnNotification
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    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 changed
            If e.NotificationHandle = hDeviceUp Then
                'Die Farben der Grafiken entsprechened der Variablen anpassen
                'Adapt colors of graphics according to the variables
                If binReader.ReadBoolean() = True Then
                    DeviceUp_LED.ForeColor = Color.Red
                Else
                    DeviceUp_LED.ForeColor = Color.White
                End If
            ElseIf e.NotificationHandle = hDeviceDown Then
                If binReader.ReadBoolean() = True Then
                    DeviceDown_LED.ForeColor = Color.Red
                Else
                    DeviceDown_LED.ForeColor = Color.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()
            ElseIf e.NotificationHandle = hCount Then
                ' Anzeigen des "count"-Werts
                ' Displaying the "count" value
                lblCount.Text = binReader.ReadUInt16().ToString()
            ElseIf e.NotificationHandle = hSwitchNotify Then
                ' Markieren des korrekten RadioButtons
                ' Checking the correct RadioButton
                If binReader.ReadBoolean() = True Then
                    optSpeedFast.Checked = True
                Else
                    optSpeedSlow.Checked = True
                End If

            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    ' Schreiben des Wertes von "switch"
    ' Writing the value of "switch"

    '------------------------------------------------------
    'wird aufgerufen, wenn das Feld 'fast' markiert wird
    'is activated when the 'fast' field is marked
    '------------------------------------------------------
    Private Sub optSpeedFast_Click(ByVal sender As Object, ByVal e As EventArgs) Handles optSpeedFast.Click
        Try
            ' Schreiben des Wertes von "switch"
            ' Writing the value of "switch"
            tcClient.WriteAny(hSwitchWrite, True)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    '------------------------------------------------------
    'wird aufgerufen, wenn das Feld 'slow' markiert wird
    'is activated when the 'slow' field is marked
    '------------------------------------------------------
    Private Sub optSpeedSlow_Click(ByVal sender As Object, ByVal e As EventArgs) Handles optSpeedSlow.Click
        Try
            tcClient.WriteAny(hSwitchWrite, False)

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class

Wenn ich die Applikation baue, übertrage und starten will, kommt folgendes:

File or assembly name "System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=B77A5C561934E089", or one of its dependencies, was not found.

Das Problem liegt denke ich an dem "EventArgs" im Code. Geht das nicht auf CE Plattformen?

Was ich bisher versucht hab:
Beim import oben auch System mitdazugenommen, also
Code:
Imports System
Was auch nicht geholfen hat:
Code:
Public Class Form1
    inherits Windows.System.Forms.Form

Für Hilfe wäre ich sehr dankbar.
 
Zuletzt bearbeitet:
Zurück
Oben