tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1001
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    basti1985 basti1985 ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    2
    Hallo,
    ich habe ein Problem und hoffe Ihr könnt mir helfen.

    Ich schreibe an einem Programm für eine Maschinensteuerrung,
    nun möchte ich eine Textbox die mir den inhalt versendet?!

    Also die textbox habe ich, sie ist auch schon soweit das sich bei einem Klick darauf ein kleines Fenster mit Button (Zahlen 0-9) öffnet, man einen Wert eintippt und dieser dann in der Textbox angezeigt wird.

    Ich möchte den Inhalt als Variable, die ich dann mit noch anderen Programmcode an die Maschine senden kann.

    Ungefähr so: Textbox(5,3) die 5,3 dann als Variable(x) dann in meinen Befehle
    Me.Send("P49=x")
    die P49 ist die Position in der maschine für diesen Parameter?



    Ich hoffe ich habe mich verständlich ausgedrückt und ihr könnt mir helfen,
    schon mal eine GROßES DANKE an euch.

    Grus Basti


    ##EDIT##

    Hab´s geschafft,
    musste einfach nur etwas an dem send befehl ändern

    Me.Send("P49=x") ---> Me.Send("P49="&Variable)

    Jetzt habe ich aber ein neues Problem ich kann zwar Daten senden, aber das mit dem Empfangen funktioniert nicht

    Würde mich über Hilfe sehr freuen.
    DANKE

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    
    Public Class ***
     
        ' Das Delegat muss die selbe Signature haben
        Delegate Sub TextBoxCallback(ByVal text As String)
     
        Private WithEvents myComPort As IO.Ports.SerialPort
     
        ' Bei den meisten Geräten ist ein Abschlußzeichen erforderlich, meistens 
        '  wird ChrW(13) oder ChrW(10) oder beide benötigt 
        '  - Wählt was eure Gegenstelle benötigt:
        ' Private EndOfCommand As String = Constants.vbCr.ToString
        ' Private EndOfCommand As String = Constants.vbLf.ToString
        Private EndOfCommand As String = Constants.vbCrLf.ToString
     
        Private Sub Form1ÄNDERUNG_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
     
            ' Mal nachschauen, ob es hier SerialPorts gibt
            Dim str() As String = IO.Ports.SerialPort.GetPortNames()
     
            ' Wenn nein, dann beenden:
            If str.Length = 0 Then
                MsgBox("Kein Gerät angeschlossen!", MsgBoxStyle.Critical)
                Me.Close()
            End If
     
            ' Eine Instance von SerialPort erstellen
            ' Im Normalfall ist das COM1:
            Me.myComPort = New IO.Ports.SerialPort(str(0))
     
            ' Die folgenden vier Einstellungen müssen denen der 
            ' Gegenstelle entsprechen
            Me.myComPort.BaudRate = 9600
            Me.myComPort.DataBits = 8
            Me.myComPort.StopBits = IO.Ports.StopBits.One
            Me.myComPort.Parity = IO.Ports.Parity.None
     
            ' Wichtig! Hier wird eingestellt nach wieviel Bytes im Eingangspuffer 
            ' das DataReceived Event gefeuert wird
            Me.myComPort.ReceivedBytesThreshold = 1
     
            ' Und nun öffnen wir den Port
            Me.myComPort.Open()
        End Sub
     
        ''' <summary>
        ''' Wird ausgelöst wenn die Comm die in ReceivedBytesThreshold eingestellte 
        ''' Anzahl Bytes empfangen hat
        ''' </summary>
        Private Sub myComPort_DataReceived( _
            ByVal sender As Object, _
            ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
            Handles myComPort.DataReceived
     
            Select Case e.EventType
                Case IO.Ports.SerialData.Chars
                    ' Ein Zeichen wurde empfangen und im Eingabepuffer platziert.
     
                Case IO.Ports.SerialData.Eof
                    ' Das Dateiendezeichen wurde empfangen und im 
                    '  Eingabepuffer platziert. 
     
            End Select
            Dim msg As String = Me.myComPort.ReadExisting
            Me.ShowText(msg)
        End Sub
     
        ''' <summary>
        ''' Wird ausgelöst wenn sich die Steuerleitungen geändert haben
        ''' </summary>
        Private Sub myComPort_PinChanged(ByVal sender As Object, ByVal e As _
            System.IO.Ports.SerialPinChangedEventArgs) Handles myComPort.PinChanged
            Select Case e.EventType
                Case IO.Ports.SerialPinChange.Break
                    ' Bei der Eingabe wurde ein "break" erkannt.
     
                Case IO.Ports.SerialPinChange.CDChanged
                    ' Der Zustand des CD-Signals (Carrier Detect) hat sich geändert.
                    ' Mit diesem Signal wird angezeigt, ob ein Modem mit einer 
                    '  Telefonleitung verbunden ist und ein Datenträgersignal 
                    '  erkannt wurde.
     
                Case IO.Ports.SerialPinChange.CtsChanged
                    ' Der Zustand des CTS-Signals (Clear to Send) hat sich geändert.
                    '  Mit diesem Signal wird angegeben, ob Daten über den seriellen
                    '  Anschluss gesendet werden können. 
     
                Case IO.Ports.SerialPinChange.DsrChanged
                    ' Zustand des DSR-Signals (Data Set Ready) hat sich geändert.
                    '  Mit diesem Signal wird angezeigt, ob das Gerät am seriellen
                    '  Anschluss betriebsbereit ist.
     
                Case IO.Ports.SerialPinChange.Ring
                    'Ein Ringindikator wurde erkannt. 
     
            End Select
        End Sub
     
        ''' <summary>
        ''' Wird ausgelöst wenn ein Fehler in der Übertragung endeckt wurde
        ''' </summary>
        Private Sub myComPort_ErrorReceived( _
            ByVal sender As Object, _
            ByVal e As System.IO.Ports.SerialErrorReceivedEventArgs) _
            Handles myComPort.ErrorReceived
     
            Select Case e.EventType
                Case IO.Ports.SerialError.Frame
                    ' Die Hardware hat einen Rahmenfehler erkannt.
     
                Case IO.Ports.SerialError.Overrun
                    ' Ein Zeichenpufferüberlauf ist aufgetreten. Das nächste 
                    '  Zeichen geht verloren. 
     
                Case IO.Ports.SerialError.RXOver
                    ' Ein Eingabepufferüberlauf ist aufgetreten.
                    ' Die Kapazität des Eingabepuffers ist erschöpft,
                    '  oder es wurde ein Zeichen nach dem Dateiendezeichen 
                    '  (EOF, end-of-file) empfangen. 
     
                Case IO.Ports.SerialError.RXParity
                    ' Die Hardware hat einen Paritätsfehler erkannt.
     
                Case IO.Ports.SerialError.TXFull
                    ' Die Anwendung hat versucht, ein Zeichen zu übertragen, aber 
                    ' die Kapazität des Ausgabepuffers war erschöpft. 
     
            End Select
            Me.ShowText("ERROR" & vbCrLf)
        End Sub
     
        ''' <summary>
        '''  Da die Daten aus einem anderem Thread kommen müssen wir die Ausgabe 
        '''  über Invoke machen
        ''' </summary>
        Private Sub ShowText(ByVal text As String)
            If Me.TextBox3.InvokeRequired Then
                Dim d As New TextBoxCallback(AddressOf ShowText)
                Me.Invoke(d, New Object() {text})
            Else
                Me.TextBox3.Text = Me.TextBox3.Text & text
     
            End If
        End Sub
     
        ''' <summary>
        ''' Hier wird der Command zusammengesetzt und versendet
        ''' </summary>
        ''' <param name="command"></param>
        ''' <remarks></remarks>
        Private Sub Send(ByVal command As String)
            Me.myComPort.Write(command & Me.EndOfCommand)
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnstart.Click
            btnmsnull.BackColor = Color.Chartreuse
            btnstart.BackColor = Color.Cyan
            btnstop.BackColor = Color.Chartreuse
            btnpos1.Enabled = False
            btnpos2.Enabled = False
            btnoben.Enabled = False
            btnunten.Enabled = False
            btnmsnull.Enabled = False
            Dim überg, speed As String
            überg = txtübergang.Text
            Me.Send("p46=" & überg)
            speed = txtspeed.Text
            Me.Send("p45=" & speed)
            Me.Send("start")
        End Sub
    Geändert von basti1985 (04.11.09 um 16:26 Uhr)
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Kannst du bitte genauer angeben, was "funktioniert nicht" für dich bedeutet? Das DataReceived-Event hast du ja schon gefunden.
     
    hihi = -h²

  3. #3
    basti1985 basti1985 ist offline Grünschnabel
    Registriert seit
    Nov 2009
    Beiträge
    2
    Ich weiss ehrlich gesagt nicht genau wie ich anstellen muss (programmieren), das mir das programm den empfangenen code in eine Text oder listbox ausgibt
    Ich bin VB anfänger...
     

Ähnliche Themen

  1. Textbox-Inhalt per E-Mail versenden
    Von Kaleidsocopskalei im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 27.02.09, 20:22
  2. Email mit Inhalt der Textbox versenden
    Von yunses im Forum .NET Café
    Antworten: 42
    Letzter Beitrag: 16.07.08, 20:03
  3. [VB 2005] Inhalt aus einer TextBox in einer *.txt speichern
    Von Mausmatte im Forum .NET Windows Forms
    Antworten: 7
    Letzter Beitrag: 17.10.07, 20:53
  4. [VB 2005] *.txt lesen und in einer TextBox anzeigen
    Von Snowbear139 im Forum .NET Datenverwaltung
    Antworten: 4
    Letzter Beitrag: 23.05.07, 19:23
  5. Cursor in TextBox belassen [C# VS 2005]
    Von Moan im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 12.01.06, 11:28

Stichworte