Ausgänge

Da immer mehr Zusi User von einem 1:1 Führerstand mit träumen, soll es zumindest an Datenaustausch nicht hapern.
Nachricht
Autor
F(R)S-Bauer
Beiträge: 6281
Registriert: 09.11.2002 02:00:47

Re: Ausgänge

#201 Beitrag von F(R)S-Bauer »

Hallo Zusammen,

VT24 hat mir die Notwendigen Dateien in Version 1.2 zukommen lassen. Ihr könnt das Zip-Paket hier (9,7KB) Downloaden.

Fragen bitte an Arndt (VT24) stellen.

mfg


Ralf
Zuletzt geändert von F(R)S-Bauer am 12.01.2014 17:00:20, insgesamt 1-mal geändert.
Verstehe die IT, heute: IoF -> Internet over Fax, eine Deutsch Erfindung...

Benutzeravatar
Arndt
Beiträge: 78
Registriert: 05.06.2011 14:24:18
Wohnort: Windeck Herchen

Re: Ausgänge

#202 Beitrag von Arndt »

Hallo zusammen,

bevor Ihr Euch alle auf die DLL stürzen: derzeit funktioniert (wie ich leider inzwischen feststellen musste) nur die Abfrage von float-Werten. Ich arbeite an der Korrektur, kann aber ein Bisschen dauern, da ich beruflich recht eingebunden bin. Ich gebe Bescheid, wenn dann V1.3 draußen ist.

Gruß,
Arndt

Benutzeravatar
Arndt
Beiträge: 78
Registriert: 05.06.2011 14:24:18
Wohnort: Windeck Herchen

Re: Ausgänge

#203 Beitrag von Arndt »

Hallo zusammen,

kurzer Zwischenstand: Da ich in letzter Zeit sehr viel um die Ohren hatte, hat es etwas länger gedauert, die DLL zu überarbeiten. Inzwischen ist die neue DLL fertig gestellt und befindet sich im Dauertest, damit es keine Überraschungen gibt. Sobald die Tests erfolgreich abgeschlossen sind, gebe ich Bescheid.

Gruß,
Arndt

Benutzeravatar
Arndt
Beiträge: 78
Registriert: 05.06.2011 14:24:18
Wohnort: Windeck Herchen

Re: Ausgänge

#204 Beitrag von Arndt »

Hallo zusammen,

nach längerem Testen steht jetzt die neue Version der TCP-DLL auf Ralfs Zusizone zum Download bereit.

Im Zuge der neuen Version hat sich auch die Funktion etwas geändert, daher bitte in der Kurzanleitung und der Header-Datei nachlesen.

Sollten Euch Fehler auffallen, gebt mir bitte Bescheid.

MfG Arndt

Benutzeravatar
Sebastian N.
Beiträge: 419
Registriert: 07.10.2011 06:24:53
Kontaktdaten:

Re: Ausgänge

#205 Beitrag von Sebastian N. »

Hi!


Ich versuche derzeit mir selbst ein kleines Programm für die Druckluftanzeige zu basteln. Auch wenn VB dafür wohl nicht die beste Lösung ist, habe ich es mittlerweile geschafft dass ich 2 drehende Zeiger habe (Überlagerung für 2 Zeiger geht leider nicht so einfach):
Bild

Nun will aber die TCP Übertragung, so wie ich sie bereits fürmein 1042 Fahrpult in Verwendung habe, nicht funktionieren. Den Teil für den Arduino habe ich entfernt, ich will die Daten ja lediglich auslesen. Es verbindet sich auch zum Server, Zusi zeigt auch die angeforderten Variablen an. Lediglich werden keine Werte in den Programmvariablen gespeichert. Vielleicht kann sich das mal jemand kurz ansehen, ich finde kann den Fehler leider nicht finden.

Code: Alles auswählen

'Die Grundstruktur des Programms geht auf Andreas Karg (TCP-Übertragung) und Jens Eggert aus dem Zusi-Forum zurück
'und wurde für die Diplomarbeit um einige Funktionen, sowie über eine Übertragung vom Arduino zum PC erweitert. 

Imports System
Imports System.IO.Ports
Imports System.Threading
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports Zusi_Datenausgabe
Imports System.Math

' ZusiTCPDemoApp
' This example shows basic usage of Andreas Karg's Zusi TCP interface for .Net.
' It is published under the GNU General Public License v3.0. Base your own work on it, play around, do what you want. :-)
' 
' 
' Using the interface requires three steps:
' - Write one or more handler methods
' - Create a ZusiTcpConn object, passing basic parameters
' - Tell your ZusiTcpConn object what measures you want to receive
' 
' Everything else is explained below. 
' ZusiTCPDemoAppVBA
' Translated C#-Project into VisualBasic.
'Declaration


Public Class CMainWindow

    'Es folgen die Bytes für die Werteausgabe an den Arduino:
    Dim L As Byte
    Dim B As Byte
    Dim H As Byte


    ' Deklaration des "ZusiTcpConn" Objekts:
    Private MyTCPConnection As ZusiTcpConn

    Public CMainWindow()
    Public Sub New()
        InitializeComponent()


        'Die Connection Class wird erstellt:
        'Hier wird der Name des Programms definiert, wie es im TCP Server aufscheint.

        MyTCPConnection = New ZusiTcpConn( _
        "Druckluft_1044", _
        ClientPriority.High, _
        New ReceiveEvent(Of Single)(AddressOf HandleIncomingData), _
        Nothing, _
        Nothing _
        )

        ' The name of this application (Shows up on the server's list)
        ' The priority with which the server should treat you
        ' A delegate method for the connection class to call when it receives float data (may be null)
        ' A delegate method for the connection class to call when it receives string data (may be null)
        ' A delegate method for the connection class to call when it receives byte[] data (may be null)

        'Hier werden nun jene Informationen aufgelistet, die von Zusi angefordert werden sollen.
        'Eine Liste mit den Zuordnungen der IDs findet sich im Anhang.

        MyTCPConnection.RequestData(2562)   'Druck Hauptluftleitung
        MyTCPConnection.RequestData(2563)   'Druck Bremszylinder
        MyTCPConnection.RequestData(2564)   'Druck HL Behälter


    End Sub

    'Es folgt die Verbindungsroutine, nach dem Klicken auf den "Verbinden" Button
    Private Declare Sub keybd_event Lib "user32" ( _
    ByVal bVk As Byte, _
    ByVal bScan As Byte, _
    ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long _
)


    Private Sub BtnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnect.Click
        'Ist die Verbindung getrennt,...
        If (MyTCPConnection.ConnectionState = Zusi_Datenausgabe.ConnectionState.Disconnected) Then
            ' ...wird versucht...
            Try
                ' ...eine Verbindung mit den im Hauptfenster eingetragenen Daten für Hostname und Port herzustellen:
                MyTCPConnection.Connect(TbServer.Text, Convert.ToInt32(TbPort.Text))

                ' Ist die Verbindung erfolgreich, ändert sich die Beschriftung des Buttons auf "Trennen".
                BtnConnect.Text = "Trennen"

                ' Kann keine Verbindung hergestellt werden,
            Catch ex As ZusiTcpException
                ' ... wird eine Fehlermeldung angezeigt.
                MessageBox.Show(String.Format("Ein Fehler trat bei der Verbindung auf: {0}", ex.Message))
            End Try

            ' Wenn bereits verbunden ist oder ein Error auftrag, wird die Verbindung zurückgesetzt:
        Else
            MyTCPConnection.Disconnnect()

            ' und der Button wird wieder auf "Verbinden" gesetzt
            BtnConnect.Text = "Verbinden"
        End If
    End Sub

    'Wenn Daten ankommen, wird dieses Subprogramm aufgerufen:
    Private Sub HandleIncomingData(ByVal dataSet As DataSet(Of Single))

        If Serial.IsOpen Then   'Die Werte werden über die TCP Verbindung ausgelesen und in lokale Variablen gespeichert:

            Select Case dataSet.Id
                Case 2562   'HL (Hauptluftleitung)
                    H = CByte(Math.Round(dataSet.Value, 0))

                Case 2563   'Druck Bremszylinder 
                    B = CByte(Math.Round(10 * dataSet.Value, 0))

                Case 2564   'HB (Hauptluftbehälter)
                    L = CByte(Math.Round(10 * dataSet.Value, 0))
                    Label3.Text = B
            End Select
        End If
    End Sub
Vielen Dank!

Gruß,
Sebastian
Zuletzt geändert von Sebastian N. am 12.07.2014 13:01:55, insgesamt 1-mal geändert.

Michael_Oppenauer
Beiträge: 182
Registriert: 29.06.2006 16:53:54
Wohnort: KBS 786 (Remsbahn) km 14,4

Re: Ausgänge

#206 Beitrag von Michael_Oppenauer »

Hallo Sebastian,

ich kenne jetzt den Code für die Arduino Übertragung nicht. Mir scheint aber das dein Problem vermutlich in HandleIncomingData() liegt. Dort gibt es die Abfrage "if Serial.IsOpen". Da sieht so aus, ob hier noch ein Fragment aus der Arduino Übermittlung drin ist und er schaut, ob eine serielle Verbindung zum Arduino besteht.
Probiere es mal ohne dieses if.

Hoffe geholfen zu haben
Michael
In der Hoffnung durch vorhandene Rechtschreibfehler nicht die Diskussion vom eigentlichen Thema abzulenken.

Benutzeravatar
F. Schn.
Beiträge: 6634
Registriert: 24.10.2011 18:58:26

Re: Ausgänge

#207 Beitrag von F. Schn. »

Hallo Sebastian,

wo hast du denn den Code-Schnipsel her?

Im Grunde ist es eine recht alte Version von Andras' TCP-Dll. Aktuellere Versionen (mit aktuelleren Beispielen) gibt es in seiner Aktuellen Version auf Git.

Ich weiß jetzt nicht genau, wo das keybd_event herkommt, aber ich bin mir unsicher, ob hier nicht ein Fehler mit den Datentypen vorliegt: Bei VB ist Integer eine 16-Bit-Varriable und Long eine 32-Bit, bei VB.Net ist bereits Integer eine 32-Bit-Varriable.

Die Tatsächliche Ursache deines Problemes sehe ich - wie Michael - auch eher am "If Serial.IsOpen".
Du kannst normalerweise einfach einen Haltepunkt in deinen Code setzten, und dann Schritt für Schritt Durchdebuggen, ob der Code erfolgreich durchläuft.

Und du kannst natürlich auch C# verwenden, wenn dir VB.Net nicht zusagt. :)

F. Schn.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Benutzeravatar
Sebastian N.
Beiträge: 419
Registriert: 07.10.2011 06:24:53
Kontaktdaten:

Re: Ausgänge

#208 Beitrag von Sebastian N. »

Da hätte ich aber auch selber drauf kommen können, herzlichen Dank. Jetzt funktioniert es wunderbar!

Lediglich die Darstellung ist teilweise etwas unruhig: Video
Zuletzt geändert von Sebastian N. am 12.07.2014 19:27:25, insgesamt 1-mal geändert.

Antworten