LabVIEWForum.de - Global Variable in Ereignis Struktur hinzufügen

LabVIEWForum.de

Normale Version: Global Variable in Ereignis Struktur hinzufügen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo Martin,

Zitat:das Beispiel für die ETH Module, darf man GerdW auch nicht zeigen
Dieses Code-Snippet war mir auch schon aufgefallen.
Ich habe das unter "Code-Obfuscation" verbucht, passend zu deinem Kommentar:
Zitat:Dass … so etwas liefert, ist nicht beschrieben und schon gar nicht, was man damit anfangen kann.

Big Grin
Hi Martin,

beim Starten, bekomme ich diesen Fehler im Anhang.
Gegenwärtig funktioniert es mit der VB.NET und der VB6 Code.

Dieses Teil wie in VB.NET muss da sein lt. Lieferant Support:
Code:
Private Sub _server_OnRead(device As Device, data As ReadData) Handles YMcom.OnRead
        Dim line As String = $"Device Read (Addresse {device.Adresse}): {data.RelaisCount1}"


        Invoke(Sub()
                   Dim index As Integer = ComboBox1.SelectedIndex
                   Dim text As String = ComboBox1.Text


                   If (index > -1 AndAlso Not String.IsNullOrEmpty(text)) Then

                       Dim selectedAdresse As Integer = Convert.ToInt32(text)

                       Debug.WriteLine("selected2: " & selectedAdresse)

                       If (selectedAdresse = device.Adresse) Then
                           _UpdateChechboxes(data)
                       End If
                   End If

               End Sub)

        Debug.WriteLine(line)


    End Sub

Nach dem Starten, gibt die Hardware die Adresse zurück und diese muss dann angenommen werden.

Pfuuuuuuuuuuuh, alles so schwer :-)
Bin halt immer noch beim Experimentieren :-)


VG
Natalie
Hi nochmal!

Ich denke mal mit dem Callback register muss etwas gemacht werden,
denn im VB.NET code wird auch das Event OnRead getriggert.
Hi Nathalie,

ich glaub niucht, dass die Callbacks gebraucht werden. Die sind ja nur dazu da um festzustellen, ob ein Gerät connected und/oder disconnected wurde. So passiert das auch bei den ETH Modulen. Das schließen/öffnen eines Relais läuft nicht über irgendwelche Callbacks (wozu auch).

Die Fehlermeldung sagt ja auch nur, dass er das "Device" nicht gefunden hat. Vielleicht braucht der ganze Quatsch der da um ein simples Relaisboard herum gestrickt wurde, einfach ein bisschen viel Zeit? Vielleicht funktioniert das auch nicht mit dem Server Start.
(20.10.2022 17:08 )Martin.Henz schrieb: [ -> ]Vielleicht braucht der ganze Quatsch der da um ein simples Relaisboard herum gestrickt wurde, einfach ein bisschen viel Zeit?

Meinst du die Hardware oder das was im Blockdiagramm ist?
Wenn ich das, was auf der Yamutec-Seite steht, richtig interpretiere, ist offensichtlich folgendes norwendig:

Von der Yamutec-Seite:
Code:
// ... das automatische Erkennen der Hardware durch das System und das Ein- und Ausschalten der Relais.

Private Sub TestForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

YMcom = New DeviceServer With
  {
.DeviceConnectedCallback = AddressOf DeviceConnectedCallback,
.DevicesChangedCallback = AddressOf DevicesChangedCallback,
.DeviceDisconnectedCallback = AddressOf DeviceDisconnectedCallback,
.ReadAllDevicesContinuously = True,
.ReadAllDevicesInterval = 1,
.ReadCallback = AddressOf ReadCallback
}

End Sub

// SendByte1 = 1 = Relais einschalten / SendByte1 = 0 = Relais ausschalten

Private Async Sub SchaltZustandSenden()
Try
  Await YMcom.SEND_OUTPUT_STATUS_8(ComboBox1.Text, SendeByte1)
Catch ex As Exception
  WriteOutput.Text = „error or no device found by adresse“ & „/“ & ex.Message
End Sub

Das heißt dann wohl offensichtlich:
  • Über den Callback DeviceConnectedCallback wird dem Programm mitgeteilt, dass ein Device connected wurde - und welche Adresse das Device hat. Steht gemäß eines anderen Eintrags dann in ComboBox1.Text.
  • Mittels der gemeldeten Adresse kann SEND_OUTPUT_STATUS_8 nun Relais schalten - selbstverständlich ohne Callback.
  • Ein weiterer Callback (DeviceDisconnectedCallback ?) teilt dem Programm mit, dass das Device disconnected wurde. Das Programm sollte nun nicht mehr auf die bisher bekannte Adresse schreiben.

Ich vermute nun, dass folgendermaßen vorgegangen werden muss:
  • VI schreiben für Callback DeviceConnectedCallback. Tritt der Callback dann ein, hat jemand die Relais-Karte eingesteckt. Ab jetzt ist die Adresse gültig.
  • VI schreiben zum Schalten von Relais: verwendet wird die im Callback übergebene Adresse.
  • VI schreiben für Callback DeviceDisconnectedCallback. Ab jetzt ist die Adresse aus DeviceConnectedCallback ungültig.

Wer schreibt jetzt das Callback-VI?
(21.10.2022 10:56 )Natalie1984 schrieb: [ -> ]Meinst du die Hardware oder das was im Blockdiagramm ist?
Wenn du meinen Versuch einfach so startest, dann kommt nach StartAsync ziemlich schnell der erste Schreibvorgang. Wenn der Server aber noch Zeit braucht um festzustellen, ob die Hardware vorhanden ist, dann bekommst du logischerweise erst einmal die Meldung, dass das Board nicht existiert.

BTW: Vielleicht habe ich es überlesen: Welches Board hast du genau, bzw. wie viele Relais sind da drauf?
Wenn es mehr als 4 Relais hat, dann müsste mein VI auch noch an das verwendete Board angepasst werden.


Hallo IchSelbst,

egal, was man von den Callbacks hält: da fehlt noch StartAsync was laut API Beschreibung notwendig ist. Das muss auch irgendwo in dem VB Code stecken.
(21.10.2022 19:01 )IchSelbst schrieb: [ -> ]Ich vermute nun, dass folgendermaßen vorgegangen werden muss:
  • VI schreiben für Callback DeviceConnectedCallback. Tritt der Callback dann ein, hat jemand die Relais-Karte eingesteckt. Ab jetzt ist die Adresse gültig.
  • VI schreiben zum Schalten von Relais: verwendet wird die im Callback übergebene Adresse.
  • VI schreiben für Callback DeviceDisconnectedCallback. Ab jetzt ist die Adresse aus DeviceConnectedCallback ungültig.

Wer schreibt jetzt das Callback-VI?

Ich würde es gerne schreiben wollen, wenn Ihr mich dabei unterstützen würdet.
Wie könnte ich da anfangen?

VG
Natalie
(24.10.2022 17:14 )Natalie1984 schrieb: [ -> ]Wie könnte ich da anfangen?
Leider hab ich kein vorzeigbares Muster. Meine .NET-DLLs sind kundenspezifisch und nicht zur Veröffentlichung geeignet.

Du kannst mal wie folgt anfangen:
Suche aus der DLL den Konstruktor heraus, der beim Anschuss am Referenzeingang des Knotens "Ereignis-Callback registrieren" in der ersten Zeile des Knotens einen Text erscheinen lässt, der auf eine Callback-Funktionalität schließen lässt.
(26.10.2022 07:45 )IchSelbst schrieb: [ -> ]
(24.10.2022 17:14 )Natalie1984 schrieb: [ -> ]Wie könnte ich da anfangen?
Leider hab ich kein vorzeigbares Muster. Meine .NET-DLLs sind kundenspezifisch und nicht zur Veröffentlichung geeignet.

Du kannst mal wie folgt anfangen:
Suche aus der DLL den Konstruktor heraus, der beim Anschuss am Referenzeingang des Knotens "Ereignis-Callback registrieren" in der ersten Zeile des Knotens einen Text erscheinen lässt, der auf eine Callback-Funktionalität schließen lässt.

Hi,

meinst du so etwa?
Seiten: 1 2 3 4
Referenz-URLs