www.mikrocontroller.net

Forum: PC-Programmierung µC über Serielle Schnittstelle steuern


Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute.
Ich hab ein kleines Problem Daten die von dem µC kommen in VB 2005
zu verarbeiten. Ich hab einen Mega32 mit Bascom Programmiert, und der
sendet mir jede Sekunde einen Temperaturwert, der als "temp_out = 12"
ins Hyperterminal kommt. Nun kann ich mir das ganze schon in VB
mithilfe einer Messagebox anzeigen lassen. Ich brauch aber
diesen Wert in eienr Variablen, so das ich den Wert weiterverarbeiten
kann. Es sollen aber dann noch mehrere Werte kommen die ebenfalls
verarbeitet werden müssen. Desweiteren müssen Daten die vom PC kommen
in Variablen vom µC wo ich dann bestimmte Aktionen wie z.B. Ausgänge
ein und ausschalten kann. Ich hoff ihr könnt mir folgen und Helfen:-).

Gruß
Tobi

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Schmid wrote:
> Hallo Leute.
> Ich hab ein kleines Problem Daten die von dem µC kommen in VB 2005
> zu verarbeiten. Ich hab einen Mega32 mit Bascom Programmiert, und der
> sendet mir jede Sekunde einen Temperaturwert, der als "temp_out = 12"
> ins Hyperterminal kommt. Nun kann ich mir das ganze schon in VB
> mithilfe einer Messagebox anzeigen lassen. Ich brauch aber
> diesen Wert in eienr Variablen, so das ich den Wert weiterverarbeiten
> kann.

Dann musst du dir den Wert aus dem empfangenen String herausholen.
Du gehst im VB den String Zeichen für Zeichen durch, bis du deinen
'Trigger' findest und liest weiter, bis du das Ende der Zahl
erkannt hast.

Dazu ist es von Vorteil, wenn dein Trigger, sowie das Ende einer
Zahl möglichst einfach erkennbar sind. Man will sich ja schliesslich
das Leben nicht selbst unnötig kompliziert werden.

Ersetzte im Text, den du vom µC sendest die 'Einleitung' mal
durch einen simplen Kennbuchstaben und häng hinten an die Zahl
noch ein abschliessendes Zeichen drann.
zb. Könntest du den Temperaturwert ganz einfach als "T12;"
senden. Im VB Programm liest du dann ganz einfach Zeichen
aus dem empfangenen String, bis ein grosses 'T' kommt. Aha, als
nächstes kommt ein Zahlenwert, den extrahierst du dann aus dem
String, bis du das Zeichen ';' siehst. Dort ist die Zahl
zuende. Den Text dazwischen extrahierst du und lässt ihn in
eine Zahl umwandeln. Fettich.

> Es sollen aber dann noch mehrere Werte kommen die ebenfalls
> verarbeitet werden müssen.

Du gibst jedem 'Wert' einen anderen Kennbuchstaben, der seine
Verwendung kennzeichnet. Dadurch kann das VB Programm erkennen,
was es mit dem Wert tun soll.

> Desweiteren müssen Daten die vom PC kommen
> in Variablen vom µC wo ich dann bestimmte Aktionen wie z.B. Ausgänge
> ein und ausschalten kann.
Das geht dann in die andere Richtung. Aber du kannst das gleiche
Prinzip benutzen.

Autor: vbtobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Karl heinz Buchegger,
erstmal Danke für deine Hilfe. Bin aber was VB angeht noch ein wenig
unerfahren. Deswegen wär es mir sehr hilfreich wenn du mir einen 
Beispiel-Code senden würdest, so wie ich das in VB schreiben muss.

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, aber das ist simple Stringverarbeitung.
Wenn du unerfahren bist, dann wirst du das lernen muessen.
Schau dir die Funktionen Length, Mid, Left, Right, Val in
der VB Doku an.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> Sorry, aber das ist simple Stringverarbeitung.
> Wenn du unerfahren bist, dann wirst du das lernen muessen.
> Schau dir die Funktionen Length, Mid, Left, Right, Val in
> der VB Doku an.

Wurgs, bloss nicht. VB2005 läuft mit dem .NET-Framework, da sollte man 
möglichst nicht auf die Compatibility-Funktionen zurückgreifen müssen. 
Strings sind nun auch einfach Objekte mit ihren Methoden und 
Eigenschaften.
    Sub Main()
        Dim s As String = "T5;T-18;T30;T60;T0;T-200;"

        Dim t As Integer = 0, e As Integer
        Do
            t = s.IndexOf("T"c, t) + 1
            e = s.IndexOf(";"c, t)
            If t < 1 OrElse e < 0 OrElse e < t Then Exit Do

            Call Console.WriteLine("T: " & s.Substring(t, e - t))
        Loop

        Call Console.Read()
    End Sub

Wenn du auf s.SubString(t, e - t) nun noch Integer.Parse() (Bzw. 
Integer.TryParse() um sicherzugehen) anwendest kriegst du den 
entsprechenden Zahlenwert raus. Oder halt Double.Parse(), falls du 
Fliesskommazahlen bekommst.

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Philipp Burch,
Danke für dein Beispiel. Wenn ich das richtig sehe werden die Zahlen in
dem String untereinander der Reihe nach aufgelistet. Soweit versteh ich 
deinen Code schon nur wie gehts dann weiter?? Also bei mir wird der
String im µC so erzeugt:

  Mess = Druck                                            'Luftdruck
    Mess_string = Str(mess)                                 'Messwert in 
String umwandeln
    Mess_string = Mid(mess_string , 1 , 6)
    Zeichenspeicher = Z1 + Mess_string


    Mess = Rhlintemp                                        'Feuchte 
RHT 11
    Mess_string = Str(mess)                                 'Messwert in 
String umwandeln
    Mess_string = Mid(mess_string , 1 , 6)
    Zeichenspeicher = Zeichenspeicher + Z2
    Zeichenspeicher = Zeichenspeicher + Mess_string


    Mess = Tempc                                            'Temperatur 
RHT 11
    Mess_string = Str(mess)                                 'Messwert in 
String umwandeln
    Mess_string = Mid(mess_string , 1 , 6)
    Zeichenspeicher = Zeichenspeicher + Z3
    Zeichenspeicher = Zeichenspeicher + Mess_string

   Zeichenspeicher = Zeichenspeicher + Z7


    If Senden = 1 Then
    Print Zeichenspeicher
    Senden = 0
    End If

Und diese Werte kommen dann an der Seriellen Schnittstell wieder an und
muss dann in Variablen von VB reingepackt werden. Leider ähnelt sich
Bascom nur ein wenig mit VB, sonst wär das alles nicht so schlimm.

Autor: sechszweifuenf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, alternativ koenntest du dir die Messdaten als Binaerwerte senden 
lassen und dir das String-gepfriemel sparen.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn da mehrere verschiedene Typen ausgewertet werden sollen, dann geht 
das wohl einfacher mit einem regulären Ausdruck (RegEx):
Module Module1

    Sub Main()
        Dim buf As String = "245;T5;D1013;F80;T35;T31;F+10;T-3;D+800;F90;D5"

        Dim regex As New Text.RegularExpressions.Regex("[TDF][-\+]?\d+;", Text.RegularExpressions.RegexOptions.Compiled)
        For Each m As Text.RegularExpressions.Match In regex.Matches(buf)
            Dim val As Integer = Integer.Parse(m.Value.Substring(1, m.Length - 2))
            Select Case m.Value.Chars(0)
                Case "T"c
                    Call Console.WriteLine("Temperatur: {0}°C", val)
                Case "D"c
                    Call Console.WriteLine("Druck: {0}hpa", val)
                Case "F"c
                    Call Console.WriteLine("Feuchtigkeit: {0}%", val)
            End Select
            buf = buf.Replace(m.Value, "")
        Next

        Call Console.WriteLine("buf: {0}", buf)

        Call Console.Read()
    End Sub

End Module

Erklärung:
'buf' beinhaltet deinen empfangenen String. Du könntest dir also eine 
Modulglobale Variable erzeugen (Z.B. 'Buf' oder so) und alles was du an 
der RS232 empfängst einfach dort anhängen. In einem Timer, der z.B. fünf 
Mal pro Sekunde feuert lässt du dann den obigen Code laufen um 'Buf' zu 
zerlegen und die Werte zu extrahieren. Gefundene Werte werden dann 
gelöscht, so dass sie beim nächsten Aufruf nicht wieder gefunden werden.

Der RegEx "[TDF][-\+]?\d+;" findet alle Vorkommen in 'buf', die mit 
einem 'T', einem 'D' oder einem 'F' anfangen, danach optional ein 
Vorzeichen besitzen, folgend eine beliebige Anzahl Ziffern haben und mit 
einem ';' enden.

In der Schleife werden nun alle Vorkommen durchgegangen und ausgegeben.

Ich hoffe, das hilft.

@sechszweifuenf:

Das wäre natürlich eigentlich die bessere Variante, aber bei Binärdaten 
musst du immer aufpassen, dass du irgendwas wie ein Start- und 
Endzeichen hast, das ist bei Klartexten wesentlich einfacher, da hier 
nie alle möglichen Zeichen vorkommen.

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal Danke für das Beispiel, dass ist genau das was ich gesucht und
probiert habe. jetzt muss ich das ganz nur noch in eine Grafisch Windows
Anwendung packen. Das müsste ja kein Problem sein. Mal kurz zur 
Verwendung
des ganze, so das man sich auch drunter was vorstellen kann.
Ich hab den µC so programmiert, dass er mir alle 5 sec Werte wie
Temperatur, Feuchte, Druck, Schaltzustände usw. an den Pc
sendet diese werden dann am Pc Visualisiert und angezeigt. Bei der 
Temperatur soll dann noch eine Soll und Istwert Vergleichung stattfinden
und gegebenenfalls einen Ausgang schalten. Ich bin aber immer Dankbar,
wenn weitere Ratschläge oder Verbesserungen gemeldet werden.

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So nun steh ich mal wieder vor einem Problem. wenn ich nun
den Code so eingebe:
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        empfangs_string = SerialPort1.ReadLine 'dort werden die empfangenen Daten deklariert

        Dim regex As New Text.RegularExpressions.regex("[TDF][-\+]?\d+;", Text.RegularExpressions.RegexOptions.Compiled)
        For Each m As Text.RegularExpressions.Match In regex.Matches(empfangs_string)
            empfangs_string = Integer.Parse(m.Value.Substring(1, m.Length - 2))
            Select Case m.Value.Chars(0)
                Case "TI"
                    temp_in_ist = Val()
                Case "TA"
                    temp_out_ist = Val()
               
            End Select
            empfangs_string = buf.Replace(m.Value, "")
        Next
    End Sub 

Dann kommt bei "Text.RegularExpressions.regex" Text nicht eindeutig?
Das gleich ist auch bei "Text.RegularExpressions.Match".
Wo ist oder mach ich den fehler?

Autor: Klaus Kehrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tobias,
Du hast das "Imports" vergessen.
Beispiel:
Imports System.Text.RegularExpressions
Module Module1

    Sub Main()
        Dim buf As String = "245;T5;D1013;F80;T35;T31;F+10;T-3;D+800;F90;D5"

        Dim regex As New Regex("[TDF][-\+]?\d+;", RegexOptions.Compiled)
        For Each m As Match In regex.Matches(buf)
            Dim val As Integer = Integer.Parse(m.Value.Substring(1, m.Length - 2))
            Select Case m.Value.Chars(0)
                Case "T"' mach was daraus
                Case "D"' mach was daraus
                Case "F"' mach was daraus
            End Select
            buf = buf.Replace(m.Value, "")
        Next

          ' ....

    End Sub

End Module


Danach sollte es funktionieren.
Bye
Klaus

Autor: Klaus Kehrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tobias,
alternative zu den RegularExp kannst Du für Strings auch die 
Split-Methoden verwenden.

Z.B.:
Dim buf As String = "245;T5;D1013;F80;T35;T31;F+10;T-3;D+800;F90;D5"
Dim aData as string

aData = Split(buf, ";")

Dim Data As String
For Each Data In aData
   If Len(Data) <> 0 Then
      Select Case Data.Chars(0)
       Case "T"' mach was daraus
       Case "D"' mach was daraus
       Case "F"' mach was daraus
       Case Else' mach was daraus
     End Select
   End If
Next


Welche Methode Du letzt endliche verwendest ist reine Geschmacksache.
Bye
Klaus

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias Schmid wrote:
> So nun steh ich mal wieder vor einem Problem. wenn ich nun
> den Code so eingebe:
> Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e
> As System.IO.Ports.SerialDataReceivedEventArgs) Handles
> SerialPort1.DataReceived
>         empfangs_string = SerialPort1.ReadLine 'dort werden die
> empfangenen Daten deklariert
>
>         Dim regex As New
> Text.RegularExpressions.regex("[TDF][-\+]?\d+;",
> Text.RegularExpressions.RegexOptions.Compiled)
>         For Each m As Text.RegularExpressions.Match In
> regex.Matches(empfangs_string)
>             empfangs_string = Integer.Parse(m.Value.Substring(1,
> m.Length - 2))
>             Select Case m.Value.Chars(0)
>                 Case "TI"
>                     temp_in_ist = Val()
>                 Case "TA"
>                     temp_out_ist = Val()
>
>             End Select
>             empfangs_string = buf.Replace(m.Value, "")
>         Next
>     End Sub
>
> Dann kommt bei "Text.RegularExpressions.regex" Text nicht eindeutig?
> Das gleich ist auch bei "Text.RegularExpressions.Match".
> Wo ist oder mach ich den fehler?

Das kann so nicht funktionieren. Erstens musst du den Regex anpassen, 
damit er wieder auf deine Zeichen passt:
"(TI|TA)[-\+]?\d+;"
Desweiteren stimmt deine Select Case-Anweisung so nicht mehr, da dort 
nur anhand des ersten Zeichens verzweigt wird, aber "TI" und "TA" sind 
ja nunmal zwei. Ich bin mir gerade nicht sicher, ob sich auch nach 
Strings verzweigen lässt, müsste aber eigentlich gehen. Also
Select Case m.Value.SubString(0, 2)
    Case "TI"
        '...

Die Lösung ist allerdings nicht so toll wenn du verschieden lange 
Bezeichner hast. Dann solltest du entweder auf mehrere Ifs anstelle von 
Select Case zurückgreifen oder aber, wie bereits erwähnt, den String mit 
'Split' zerlegen und die einzelnen Teile auswerten.
Ausserdem macht 'temp_out_ist = Val()' wohl nicht das, was du möchtest. 
Versuch's mal mit
temp_out_ist = Integer.Parse(m.Value.SubString(2, m.Value.Length - 3))

Stell mal in den Projektoptionen -> Kompilieren 'Option Strict' und 
'Option Explicit' auf 'On' und wundere dich über ca. 100 Compilerfehler 
und -warnungen.

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
so jetzt hab ich nochmal alle Möglichkeiten ausprobiert und nachgelesen.
Aber ich komm auf keinen grünen Zweig.
Vieleicht nochmal von Anfang an. Ich hab das Projekt "Windows Anwendung"
gestartet. Mir mal eine Grobe Oberfläche angelegt. Der jetzige Code 
sieht
so aus:
Public Class Form1
    
    Dim temp As Integer
    Dim druck As Integer
    Dim feuchte As Integer
    Dim Sende_string As String
    Dim empfangen As String

    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged

    End Sub

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If SerialPort1.IsOpen = False Then
            SerialPort1.Open()
            MsgBox("Com 1 geöffnet")
        Else
            MsgBox("Com 1 bereits geöffnet")


        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SerialPort1.Close()
        MsgBox("Com 1 geschlossen")


    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        'empfangen = SerialPort1.ReadLine 'dort werden die empfangenen Daten deklariert
        Dim buf As String = "245;T5;D1013;F80;T35;T31;F+10;T-3;D+800;F90;D5"

        Dim regex As New Text.RegularExpressions.Regex("[TDF][-\+]?\d+;", Text.RegularExpressions.RegexOptions.Compiled)
        For Each m As Text.RegularExpressions.Match In regex.Matches(buf)
            Dim val As Integer = Integer.Parse(m.Value.Substring(1, m.Length - 2))
            Select Case m.Value.Chars(0)
                Case "T" = temp
                Case "D" = druck
                Case "F" = feuchte

            End Select
            buf = buf.Replace(m.Value, "")
        Next

        Call Console.WriteLine("buf: {0}", buf)

        Call Console.Read()
      
    End Sub



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

Die Werte Temp Feuchte und Druck sollen in einer TextBox angezeigt 
werden
Das würd ich dann so schreiben:
TextBox3_TextChanged = temp
Ich hoff das wenigstens das mal richtig formuliert ist.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- Hast du das Prog jemals kompiliert?
- Hast du Option Strict eingeschaltet?
- Hast du dir die Compilerwarnungen zu Herzen genommen?
- Liest du meine Posts überhaupt?

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JA ich hab schon alles Probiert was du mir geschrieben hast, hab auch 
deine Posts immer und immerwieder durchgelesen. Ich komm aber einfach 
nicht
weiter. Abgesehen mal von den deklarationen die ich in dem case hab, die 
auch falsch sind, hab ich nichts unversucht gelassen. Es kommt
immer das gleich wie ich es schon oben beschrieben habe!

Autor: Klaus Kehrer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tobias,
ich glaube, Du hast noch nie in vb.net programmiert.
Deshalb habe ich das (sehr einfache) Beispiel im Anhang eingefügt.

Besorge Dir ein vernünftiges Buch, um vb.net zu lernen.
(Beispiel: Michael Kolfer - Visual Basic 2005)
Ohne dem geht es nicht.

Bitte entscheide Dich:
Willst Du eine Consolen-Anwendung oder eine Windows-Anwendung?

Überlege Dir ein Kommunikationsprotokoll und den dazu gehörigen
Ablauf zwischen der Windowsanwendung und Deinem µC.
(z.B Wer ist der Master bzw. der Slave? Woran soll die Windowsanwendung
erkennen, das alle Daten angekommen sind? usw. )
Wenn Du dieses getan hast, kann man über die Windowsanwendung sprechen.

Bitte beherzige Philipp Vorschläge! Dein gepostetes Beispiel ist nicht
lauffähig.


Bye
Klaus

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Klaus und Philipp,
danke erst mal für eure bemühungen. Ja das stimmt ich hab fast keine
Ahnung vom VB 2005. Ich hab mal kleinere Programme für Berechnungen
gemacht also nichts großartiges.Ich brauch halt immer ein Beispiel an
dem ich mich orientieren kann. Wenn ich das dann sehen kann versteh ich
das dann auch.Das mit dem Buch werd ich mir zu Herzen nehmen!
Also ich möchte eine Windowsanwendung die man dann Anpassen kann
wie man sie braucht.

das Kommunikationsprotokoll soll über die RS232 Schnittstelle laufen.
Der Master ist der µC der ja die eigentlichen Prozesse ausführt. Slave
ist der PC der nur Hauptsächlich Daten empfängt diese ausgiebt
und je nach bedarf geändert werden und wieder zurückgesendet werden.

Im µC Überprüf ich das mit einem Case ob die Daten vollständig
gesendet worden sind, dies kann ja im PC bestimmt auf die gleiche art
und weiße gemacht werden!? Oder gibt es bessere Ideen?

Danke nochmal für euer Bemühen

by

Tobi

Autor: sechsdreizwei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise ist der Controller der Slave und der PC der Master. Der 
Controller weiss was zu machen ist, und macht das, bis eine Anweisung 
vom PC kommt. Mit dem PC verstellt nur ein paar Parameter. Der PC fragt 
auch die Daten zum visualisieren ab. Wenn der PC nicht laeuft, so gibt's 
nichts anzuseigen, dann muss der controller auch nichts in dieser 
richtung machen.

Nur so als Idee.

Autor: Klaus Kehrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Tobi,
wenn der µC der Master ist, dann sorge bitte dafür, das er nicht
schneller als alle 200 ms sendet.
Grund:
Windows ist keine Realtimesystem und kann evtl. bei einer schnelleren
Übertragung durch einander kommen.
Bitte überlege Dir, ob die Anmerkung von "sechsdreizwei" nicht 
sinnvoller ist.

Zum Protokoll:
Du musst den Sendestring beschreiben.
Beispiel:
Sendestring:
"245;T5;D1013;F80;T35;T31;F+10;T-3;D+800;F90;D5"
Formaler Aufbau:
<id>;<Temp1>;<Druck1>;<Feuchte1>;<Temp2>;<Temp3>;<Feuchte2>;<Temp4>;<Dru 
ck3>;<Feuchte3>;<Druck4>
In den Klammer stehen mögliche Variablennamen. Du hast also mehr als 
eine Temperatur, Druck bzw. Feuchte. Ich nehme an, Du willst zwischen 
diesen
unterscheiden.

Sendestringende:
Als Ende des Sendestrings schlage ich Die ETX (= 0x03) vor.
Damit kannst Du der Windowsanwendung mitteilen, das alle Daten 
vorliegen.

Damit hast Du den folgenden Aufbau:
<id>;<Temp1>;<Druck1>;<Feuchte1>;<Temp2>;<Temp3>;<Feuchte2>;<Temp4>;<Dru 
ck3>;<Feuchte3>;<Druck4>ETX

Ist die Analyse korrekt?

Bye
Klaus

Autor: sechsdreizwei (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher nun Master oder Slave der Kommunikation ist hat in erster Linie 
nichts mit dem Server und Client Konzept zu tun. Bei mir sind die 
Controller jeweils die Kommunikations-slaves, und fuer die Prozesse sind 
sie die Server. Der PC ist der Client, der Anfragen macht. Das erlaubt 
mehrere an einen Bus zu haengen, und von einem PC zu kontrollieren.

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ich dir recht geben. Dae Controller läuft auch ohne PC,
Dann gibt er die Daren und Schaltzustände über das Display aus.

by

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Klaus,

das Senden der Daten erfolgt in einem Sub Menü, dass bis jetzt alle
500ms die werte schickt.

Die anmerkung von "sechsdreizwei" ist auf jeden Fall sinnvoller.
Werd das auch so umsetzen.

Ich werd auch den Aufbau des String so wie von dir beschrieben
Ausführen. Also so:
<id>;<Temp1>;<Druck1>;<Feuchte1>;<Temp2>;<Temp3>;<Feuchte2>;<Temp4>;<Dru 
ck3>;<Feuchte3>;<Druck4>ETX
 Anbei hab ich mir gerade das Buch das du mir vorgeschlagen hast 
Bestellt.
So das ich mir ein genaus Bild von VB machen kann.

by
Tobi

Autor: Tobias Schmid (vbtobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
erst mal Danke an Klaus für den Super Buchtip! Das Buch ist wirklich
Super! Ich denk wenn ich damit durch bin, sind solche Fragen
überflüssig:-).

by

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.