# .NET - C# - Apps im Maschinenbau  - Konzept, Stand heute, was ist möglich?



## ThomasAdler (30 Juni 2015)

Hallo,
ich suche nach einem guten Konzept.


SPS macht das Management, .NET, VS2013, C# die UI und das Handling mit dem MES System via XML Protokollaustausch.
Touchscreenbedienung ist ein MUSS, gerne auch über Apps.

Was suche ich?
  - Konzept, Treiber, Realisierungsmöglichkeiten
  - Gute WebCasts, Tutorials

A) mit Siemens S7
B) mit Codesys, Beckhoff oder xy

Danke im Voraus für hilfreiche Tipps. Beispielprojekt.

Grüße Thomas


----------



## Morymmus (30 Juni 2015)

Hallo,

ich habe zunächst noch 1-2 Fragen zu Deinem Konzept.

- Auf Deiner Skizze sieht das so aus, als ob die Daten von der SPS durch den Rechner an z.B. das SCADA geroutet werden sollen - ist das wirklich Deine Absicht?
- Was genau meinst Du mit "SPS macht das Management"? Ich gehe mal davon aus, das die SPS eine Maschine oder Anlage steuert?
- Inwieweit willst Du von dem PC aus auf das MES (oder Produktionsleitsystem, für alle, die wie ich erstmal googeln müssen ) zugreifen? Also was genau soll da passieren?
- Inwieweit greift die UI die Dir vorschwebt auf die SPS zu? Also was genau soll dem Benutzer an diesem Terminal möglich sein?
- Was genau meint Deine Schnittstelle Kunde? Was soll hier möglich sein?
- Sind die Schnittstellen SCADA, MES und Kunde Optionen oder sollen die alle realisiert werden?

Gruß

Christian


----------



## norustnotrust (30 Juni 2015)

Wieso muss die GUI in C#.NET VS2013 realisiert werden? Mehraufwand der Entwicklung gegenüber einen HMI vom Markt macht imho nur bei großen Stückzahlen oder sehr, sehr speziellen Anforderungen Sinn. Und selbst bei den speziellen Anforderungen würde ich mir überlegen nicht ein normales HMI als Basis zu verwenden.


----------



## MasterOhh (30 Juni 2015)

Beckhoff IPC oder Panel PC oder eine der größeren CXen (51XX oder 2XXX). Der SPS Teil läuft über die integrierte Soft SPS (TwinCAT). Anschluss der Peripherie entwender direkt (bei den CX) oder über EtherCAT Buskoppler beim IPC und Panel. 
Kommunikationstreiber ist Beckhoff ADS. Die Schnittstelle ist offen und Beckhoff bietet die entsprechenden DLLs mit Beispielprogrammen kostenlos an. Die Integration in C# ist recht einfach, je nach Programmiererfahrung hat man schon nach 15-30 Minuten die ersten Erfolge.

Die PLC Runtime von TwinCAT gibt es zum Testen kostenlos. Die Lizenz muss dann alle 30 Tage (Bei TwinCAT 2) oder alle 7 Tage (bei TwinCAT 3) erneuert werden.

Visualisierung entweder Eigenbau (C#, VB, etc. pp) oder von einem Anbieter von SCADA Software (z.B. Atvise usw. usf.) 

Tutorials / Beispiele : Beckhoff Infosys, die Webinare auf der Beckhoff Seite und Youtube.


----------



## ThomasAdler (1 Juli 2015)

Morymmus schrieb:


> - Auf Deiner Skizze sieht das so aus, als ob die Daten von der SPS durch den Rechner an z.B. das SCADA geroutet werden sollen - ist das wirklich Deine Absicht?
> - Was genau meinst Du mit "SPS macht das Management"? Ich gehe mal davon aus, das die SPS eine Maschine oder Anlage steuert?
> - Inwieweit willst Du von dem PC aus auf das MES (oder Produktionsleitsystem, für alle, die wie ich erstmal googeln müssen ) zugreifen? Also was genau soll da passieren?
> - Inwieweit greift die UI die Dir vorschwebt auf die SPS zu? Also was genau soll dem Benutzer an diesem Terminal möglich sein?
> ...



Nein, es soll lediglich zu einem Datenaustausch kommen.
  In der Regel zu einem MES System - Socket, Serialisierung.

SPS - Management.
  Steuert die Achsen, die Markiereinheit, macht den Automatisierungsprozess

UI - Teils kommen vorgaben, Variablen vom MES, die in den Prozess eingreifen müssen.
  Das Ergebnis wieder an das MES muss zurückgemeldet werden.#

Identifiercode kommt vom Kunden, der auf das zu bearbeitete Werkstück aufgetragen werden muss.
  Teils pro Werkstück bis zu 50 Identifier, die bei Start vom MES angefragt werden.

MES - Interface, Protokoll ist vorgegeben, die meist auf XML rausläuft, deshalb der Ansatz u.a. auch mit .NET, C#
Hoffe Du das Tipps, Beispiele.

Grüße Thomas


----------



## Larry Laffer (1 Juli 2015)

Hallo,
ich könnte hier noch VisiWin von InoSoft anführen.
Hier wird auch schon so Einiges bereit gestellt.
Du solltest aber in diesem Zusammenhang den Einwand von NoTrustNoRust nicht unberücksichtigt lassen : Das Ganze über VS als EXE-File laufen zu lassen macht nur dann Sinn, wenn die Basis deiner Maschinen / Anlagen immer ziemlich gleich ist - du dir also für die Basis eine Art Framework erstellen kannst. Dann sparst du in Folge (also nicht beim ersten Mal) eine ganze Menge Zeit ein - immer vorausgesetzt du vernagelst dich nicht mit deinem Konzept ...

Zu deiner Frage nach einem Beispiel :  wie sollte das deiner Ansicht nach aussehen ...?

Gruß
Larry


----------



## ThomasAdler (1 Juli 2015)

MasterOhh schrieb:


> Visualisierung entweder Eigenbau (C#, VB, etc. pp) oder von einem Anbieter von SCADA Software (z.B. Atvise usw. usf.)
> 
> Tutorials / Beispiele : Beckhoff Infosys, die Webinare auf der Beckhoff Seite und Youtube.



Hallo,

ok, kannst Du dennoch evtl. bei Youtube was *konkretes *für den Einstieg empfehlen. Ihr hier wisst am besten wie man reinkommt.
Wäre super in 30 Minuten einen groben Überblick zu bekommen

Ideal über C# Button SetzeAusgang(3)

Event - Eingang von 0->1
Event - Eingang von 1->0

Analog - Spannung von 0 auf 12 V drehen.

Ist das bei Eingangsänderung so zu sehen, dass ich wie bei einem Button Klick in eine Funktion reinkomme.

-----
z.B. Achssystem
    MoveReferenz()
    MovePosition(234)   234mm

Das gibt der Anwender im UI - WinForm C# oder über WPF vor.

Danke im Voraus und Grüße Thomas


----------



## Morymmus (1 Juli 2015)

Hallo Thomas,

Sorry, das ich immer noch nicht konkrete Beispiele in den Vordergrund stelle, aber ich finde es genauso wichtig die richtigen Fragen zu stellen 




> UI - Teils kommen vorgaben, Variablen vom MES, die in den Prozess eingreifen müssen.
> Das Ergebnis wieder an das MES muss zurückgemeldet werden.#



Das klingt für mich aber nicht nach einem UI sondern einer Schnittstelle SPS<->MES, warum muss/soll der Benutzer hier eingreifen können?



> Identifiercode kommt vom Kunden, der auf das zu bearbeitete Werkstück aufgetragen werden muss.
> Teils pro Werkstück bis zu 50 Identifier, die bei Start vom MES angefragt werden.
> 
> MES - Interface, Protokoll ist vorgegeben, die meist auf XML rausläuft, deshalb der Ansatz u.a. auch mit .NET, C#


Soweit ich Deine Anforderungen verstehe brauchst Du ein zuverlässiges Kommunikationsmittel MES <-> SPS wobei an der SPS eine Anzeigeeinheit für den Benutzer vorgesehen wird.
Ich möchte hier auch nochmal norustnotrust zitieren:


> Mehraufwand der Entwicklung gegenüber einen HMI vom Markt macht imho nur bei großen Stückzahlen oder sehr, sehr speziellen Anforderungen Sinn.


Neben der Thematik das Rad neu zu erfinden denke ich dabei auch an den Aufwand für das Instandhaltungs-/Wartungspersonal. Letztendes nützt Dir eine Super-High-Tech-Lösung nix, wenn das Wartungspersonal anfängt Work-Arounds für Deine Abfragen zu entwickeln, weil sie das System nicht beherrschen. - Nur so ein Gedanke -


----------



## MasterOhh (1 Juli 2015)

Hmmm Beispiele auf Youtube weiss ich jetzt nicht. Aber die Doku zur ads.NET findest du =HIER=. Gleich mit Kurzbeispiel für das Lesen und schreiben einer Variable.

Das Erstellen einer eigenen HMI/SCADA Lösung in C#, C++ etc. erfordert viel Vorarbeit. Du musst richtig Planen und dir nach und nach ein Framework aufbauen, das du immer wieder verwenden und leicht erweitern kannst. 
Wir haben das in der Firma gemacht und sind mittlerweile (nach gut 3 Jahren) so weit, das wir Standard HMI Lösungen im Visual Studio genauso schnell zusammenklicken können wie mit jedem beliebigen WYSIWYG HMI-Editor. Plus die ganzen Sonder-Controls (Erweitere Kurvendarstellung, Datenlogger, 3D Objekte, Kamera Einbindung, SAP Kommunikation ... ) die man so nicht in jeder Software findet. 
Und wenn man Langeweile hat kann man noch etwas Schabernack treiben  (Wer hat schonmal einen Industrieroboter mit einer Wiimote gesteuert?)


----------



## ThomasAdler (1 Juli 2015)

Larry Laffer schrieb:


> Zu deiner Frage nach einem Beispiel :  wie sollte das deiner Ansicht nach aussehen ...?
> 
> Gruß
> Larry




Hallo Larry,

einfach mal so.

Ideal über C# Button SetzeAusgang(3)

 Event - Eingang von 0->1
 Event - Eingang von 1->0

 Analog - Spannung von 0 auf 12 V drehen.

 Ist das bei Eingangsänderung so zu sehen, dass ich wie bei einem Button Klick in eine Funktion reinkomme.

-----
z.B. Achssystem
    MoveReferenz()
    MovePosition(234)   234mm

 Das gibt der Anwender im UI - WinForm C# oder über WPF vor.

Grüße Thomas


----------



## ThomasAdler (1 Juli 2015)

Morymmus schrieb:


> Das klingt für mich aber nicht nach einem UI sondern einer Schnittstelle SPS<->MES, warum muss/soll der Benutzer hier eingreifen können?


Hallo,
nein, es muss schon ein PC, Win7 oder ggf. Win10 demnächst sein.

   Ich gebe Achspositionen vor, beim Erreichen muss ein ID Code aufgebracht werden.
   Da bietet sich eben die Schnittstelle XML Serialisierung an. Teils erhält man auch vom Kunden eine Assembly, die dann auf funktionsbasierte Schnittstellen zurückgreift, da tue ich mir noch schwerer mit einer SPS.

Ich will das Rad nicht neu erfinden, sondern mal sehen was der Markt her gibt.
Die richtigen Tools verwenden.

Wie macht das die Lebensmittel-und Automotiveindustrie heutzutage?

Es muss doch eine Art 'Patentrezept' geben, die an Unis etc. gelehrt wird.

Viele Grüße Thomas.


----------



## ThomasAdler (1 Juli 2015)

MasterOhh schrieb:


> Hmmm Beispiele auf Youtube weiss ich jetzt nicht. Aber die Doku zur ads.NET findest du =HIER=. Gleich mit Kurzbeispiel für das Lesen und schreiben einer Variable.



Ja ok, das wäre ich von Beckhoff abhängig, aber durch die Assembly habe ich es leichter.

Touchscreen, HMI  wird das mit Visual Studio 2013 in der Industrie verwendet und bietet es dann später auch mal die Apps (Smartphone) an.

Ich will ein zukunftssicher starten.

Wenn Beckhoff, gibt es so eine Art Staterkit? Evtl. auch für den Privatgebrauch.

Viele Grüße Thomas


----------



## Larry Laffer (1 Juli 2015)

ThomasAdler schrieb:


> einfach mal so.
> 
> Ideal über C# Button SetzeAusgang(3)
> 
> ...



Hallo Thomas,

das kannst du so machen. Es gibt die Möglichkeit, einen definierten Item direkt abzufragen und/oder ihn ein Event auslösen zu lassen.
Genauso kannst natürlich auch den Wert vom PC aus beschreiben.
Für beide Richtungen gibt es dann auch noch die Variante, es so zu machen, wie z.B. Flex es tut (du bekommst den letzten irgendwann einmal eingelesenen Wert bzw. der zu übertragende Wert landet irgendwann einmal in der SPS - also asynchron) oder du kannst es auch synchron tun (also der Wert, den du anfragst und erhältst ist exakt der Wert, der gerade in der SPS vorhanden ist bzw. beim Schreiben wird der Wert direkt geschrieben und du kannst im Programm den Result abfragen. Dann gibt es das noch zusätzlich über einen Trigger (also die Variablen eine Gruppe werden aktualisiert mit einem Trigger-Ereignis).

Gruß
Larry


----------



## Larry Laffer (1 Juli 2015)

@Thomas:
Der von mir vorgeschlagene Weg (VisiWin) funktioniert sowohl mit Siemens als auch mit Beckhoff.

und ...

Es gibt KEIN Patent-Rezept ...


----------



## ThomasAdler (1 Juli 2015)

Larry Laffer schrieb:


> das kannst du so machen. Es gibt die Möglichkeit, einen definierten Item direkt abzufragen und/oder ihn ein Event auslösen zu lassen.
> Genauso kannst natürlich auch den Wert vom PC aus beschreiben.



Hallo Larry,

schön. Gibt es da einen Beispielcode, um das richtige Gespür zu bekommen?
Das wäre supernett.

Grüße  Thomas


----------



## ThomasAdler (1 Juli 2015)

Larry Laffer schrieb:


> @Thomas:
> Der von mir vorgeschlagene Weg (VisiWin) funktioniert sowohl mit Siemens als auch mit Beckhoff.
> 
> und ...
> ...




```
public StateProcessWorkflow State
        {
            get { return StateProcessWorkflowCustomer; }
            set
            {
                StateProcessWorkflowCustomer = value;
                switch (StateProcessWorkflowCustomer)
                {
                    default:
                        System.Diagnostics.Debug.Assert(false);
                        break;
                    case StateProcessWorkflow.NotDefine:
                        break;
                    case StateProcessWorkflow.BaseInformations:
                        break;
                    case StateProcessWorkflow.TypeSelectionOrderStartReflow1:
                    case StateProcessWorkflow.TypeSelectionOrderEndReflow1:
                        State = StateProcessWorkflow.ProductionAllowed;
                        break;
```

Konzeptaufteilung
   Zustände Maschine ------ Je nach Zustand muss am MES was mitgeteilt werden.

Sicher kein Patent Rezept, aber aus Schulungen etc. muss es doch eine Herangehensweise geben.

Grüße Thomas


----------



## MasterOhh (1 Juli 2015)

Ich denke, du solltest dir erstmal anschauen was die ganzen Anbieter von SCADA und HMI Software so im Portfolio haben. Da gibt es meist auch Kommunikationstreiber für alle gängigen Steuerungssysteme im Programm oder du verwendest einen Standard wie OPC UA.
Bei einer Eigenbaulösung musst du die ganze Kommunikation selber regeln. Das geht mit Beckhoff ADS vieleicht ganz gut, aber spätestens wenn du auf Siemenssteuerungen zugreifen willst, musst du entweder Lösungen zukaufen oder dich z.B. in Libnodave einarbeiten (Klasse Bib, aber vom Komplexitätsgrad meiner Meinung nach doch ein paar Nummern härter als ADS)

Zudem solltest du dir auch mal Gedanken machen, wie es in Zukunft Personalmäßig bei euch aussieht. Die Wahrscheinlichkeit einen Ingenieur oder Techniker zu finden, der mit WinCC oder einer anderen HMI Software umgehen kann ist um Welten größer, als das dir ein Hochsprachen Crack über dem Weg läuft.

Momentan ist Siemens in Deutschland immernoch Marktführer (Tendenz vlt. leicht fallend, aber die anderen Hersteller werden noch Jahre brauchen um da wirklich am Sockel Wackeln zu können). Da musst du dir überlegen für wen ihr Anlagen baut. 

Ein Starterkit in dem Sinne kenne ich jetzt von Beckhoff nicht, aber du brauchst ja auch keine Hardware um zu testen. Es reicht schon aus, wenn du dir TwinCAT runterlädst (am besten gleich die 3er Version) und die Runtime mit einer Test Lizenz auf deinem PC laufen lässt.


----------



## Larry Laffer (1 Juli 2015)

ThomasAdler schrieb:


> Gibt es da einen Beispielcode, um das richtige Gespür zu bekommen?
> Das wäre supernett.



Ja klar ... aber von mir nur VB.NET - C# kann ich zwar lesen ... Erstellen ist aber nicht unbedingt mein Ding.
Da das aber im Wesentlichen .Net ist sollte es kein Problem darstellen.
Ich suche dir mal etwas heraus ...


----------



## Larry Laffer (1 Juli 2015)

ThomasAdler schrieb:


> ```
> public StateProcessWorkflow State
> {
> get { return StateProcessWorkflowCustomer; }
> ...



An einer Property direkt festmachen würde ich das so aber nicht.
Ich denke mal, dass das eher so geht, das du einen Thread oder Backgroundworker hast in dem du den gewählten Arbeitsmodus abfragen wirst/mußt.


----------



## ThomasAdler (1 Juli 2015)

Larry Laffer schrieb:


> Da das aber im Wesentlichen .Net ist sollte es kein Problem darstellen.
> Ich suche dir mal etwas heraus ...



Dann sage ich jetzt schon Danke.

Viele Grüße Thomas


----------



## Morymmus (1 Juli 2015)

Irgendwie stehe ich auf dem Schlauch...

Ich verstehe immer weniger, warum Du nach Lösungsmöglichkeiten fragst, wenn Du doch eigentlich schon Komponenten gesetzt hast.
Also so wie ich das sehe muss auf Teufel komm raus ein PC und C eingesetzt werden, das zeigen mir zumindest Deine bisherigen Kommentare. 

Das ist sicherlich EIN möglicher Weg, aber aus meiner Sicht nicht der zeitlich kürzeste.
Und, wie schon erwähnt, Instandhaltungs- bzw. Wartungsfreundlich ist das auch eher nicht...

gesendet von meinem Moto G mit Tapatalk


----------



## Larry Laffer (1 Juli 2015)

@Morymmus:
Der Ansatz des TE hat schon seinen Sinn.
Wenn man die .Net-Applikation richtig aufstellt dann kann sie wie ein Flex-Projekt gehandelt werden - mit dem einen Unterschied, dass sie so ganz nebenher eine Menge mehr kann (die Bremse bist du dann wieder selber).

Gruß
Larry


----------



## Morymmus (1 Juli 2015)

@Larry

Ja, sorry, DAS hatte ich auch nicht gemeint.
Nur frag ich dann nicht allgemein nach Lösungsmöglichkeiten sondern konkret zu der bereits festgelegten Struktur/Hardware...

gesendet von meinem Moto G mit Tapatalk


----------



## ThomasAdler (1 Juli 2015)

Morymmus schrieb:


> Irgendwie stehe ich auf dem Schlauch...
> 
> ...
> Also so wie ich das sehe muss auf Teufel komm raus ein PC und C eingesetzt werden, das zeigen mir zumindest Deine bisherigen Kommentare.
> ...



Hallo,
ja VS2013, .NET, C# ist schon gesetzt, da kennt sich das Team aus.
Weniger mit den SPS Themen. Deshalb suche ich nach Ansätzen, wie man heutzutage richtige Automatisierung macht.
Beispiele, um ein Gespür zu bekommen.
Touchscreen, Apps(Smartphone) mit der Zeit gehen, ob man es braucht sei dahingestellt.
Grüße Thomas


----------



## Larry Laffer (1 Juli 2015)

So ... nun ein paar Code-Snippets :

Ich muss dazu sagen, dass ich das so aufgezogen habe, dass die Funktionalität in der Hauptsache aus eigenen Controls kommt. Dadurch kann das System auch von nicht-Programmierern gehandhabt werden, da so nur die Controls plaziert werden müssen und die entsprechenden Items zugewiesen werden müssen.

Der nachfolgende Code zeigt eine solche Item-Deklaration - hierbei wir nur die SPS-Adresse im Klartext (also z.B. A123.4) angegeben unn der Item-Name erstellt sich selbst.

```
#Region "Implementierung der Item-Funktionalität"
    Private my_VWItem_Status As New VisiWinNET.DataAccess.DigitalItem
    <Category("VisiWin"), Description("VisiWin-Pfad für die Variablen-Anbindung")>
    <DefaultValue(VisiWinPfad)>
    Public Property VW_Pfad As String
        Get
            Return my_VW_Pfad
        End Get
        Set(ByVal value As String)
            my_VW_Pfad = value
            Set_VWItem()
        End Set
    End Property
    Private my_VW_Pfad As String = VisiWinPfad
    <Category("VisiWin"), Description("Beschriftung der Anzeige")>
    Property SPS_Adresse As String
        Get
            Return my_SPS_Adresse.Adresse
        End Get
        Set(ByVal value As String)
            my_SPS_Adresse.Convert(value)
            If my_SPS_Adresse.Valid Then
                Me.Label.Text = my_SPS_Adresse.Adresse
                Set_VWItem()
                Me.Invalidate()
            End If
        End Set
    End Property
    Private my_SPS_Adresse As New SPS_Adresse_Converter
    <Category("VisiWin"), Description("Auswertung der SPS-Adresse invertieren ?")>
    <DefaultValue(False)>
    Property SPS_Adresse_invert As Boolean
        Get
            Return my_SPS_Adresse_invert
        End Get
        Set(ByVal value As Boolean)
            my_SPS_Adresse_invert = value
            Animation_Anzeige()
        End Set
    End Property
    Private my_SPS_Adresse_invert As Boolean = False
 
    Private Sub Set_VWItem()
        If my_SPS_Adresse.notValid Or my_VW_Pfad.Trim = "" Then
            my_VWItem_Status.Name = ""
        Else
            my_VWItem_Status.Name = my_VW_Pfad + "." + my_SPS_Adresse.VisiWinVar_Adr
            my_VWItem_Status.BitNumber = my_SPS_Adresse.BitNummer
        End If
    End Sub
 
    Protected Sub AttachItem()
        Dim Pfad2 As String = my_VW_Pfad + "."
        If my_SPS_Adresse.Valid AndAlso (my_VWItem_Status.Name.Trim <> my_VW_Pfad) AndAlso (my_VWItem_Status.Name.Trim <> Pfad2) Then
            AddHandler my_VWItem_Status.Change, AddressOf OnChange
            my_VWItem_Status.Attach()
        End If
    End Sub
    Protected Sub DetachItem()
        my_VWItem_Status.Detach()
        RemoveHandler my_VWItem_Status.Change, AddressOf OnChange
    End Sub
    Private Sub DisposeItem()
        DetachItem()
        my_VWItem_Status.Dispose()
    End Sub
    Protected Overridable Sub OnChange(ByVal sender As Object, ByVal e As VisiWinNET.DataAccess.DigitalChangeEventArgs)
        Dim mySender As VisiWinNET.Internals.DataAccess.ItemBase = CType(sender, VisiWinNET.Internals.DataAccess.ItemBase)
        If mySender.Name = my_VWItem_Status.Name Then
            If Trim(my_SPS_Adresse.Adresse) <> "" Then
                my_AnimationStatus = e.State
            Else
                my_AnimationStatus = CBool(e.Value)
            End If
            Animation_Anzeige()
        End If
    End Sub
#End Region
```

Hier wird das Item selbst deklariert und über einen Button gesetzt :
(In meinen Beispielen sind das BOOL-Items - die Handhabung von den anderen Items ist aber nicht anders)

```
#Region "Implementierung der Item-Funktionalität"
    Private my_VWItem_Button1 As New VisiWinNET.DataAccess.StateItem

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
     <Category("VisiWin"), Description("VisiWin Variablen-Anbindung Funktion 1")>
    Public ReadOnly Property VWItem_Button1() As VisiWinNET.DataAccess.StateItem
        Get
            Return my_VWItem_Button1
        End Get
    End Property

    Protected Sub AttachVWItems()
        my_VWItem_Button1.Attach()
    End Sub
    Protected Sub DetachVWItems()
        my_VWItem_Button1.Detach()
     End Sub
    Private Sub DisposeVWItems()
        DetachVWItems()
        my_VWItem_Button1.Dispose()
     End Sub
#End Region
#Region "Events / Steuerfunktionen"
    Private Sub Taste_1_gedrückt() Handles Button1.MouseDown
        my_Taste_1_betätigt = True
        my_VWItem_Button1.Value = True
    End Sub
    Private Sub Taste_1_losgelassen() Handles Button1.MouseUp
        my_Taste_1_betätigt = False
        my_VWItem_Button1.Value = False
    End Sub
#End Region
```

Hier wird ein Item synchron zugewiesen (die vorigen Zugriffe waren asynchron) :

```
VisiWinNET.Services.AppService.VWSet(ItemName , true)
```

Ich hoffe, ich konnte ein bißchen helfen ...

Gruß
Larry


----------

