Serielle Schnittstelle auslesen. - Ist das wirklich so kompliziert?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Serielle Schnittstelle auslesen. - Ist das wirklich so kompliziert?

    Hallo,

    ich habe einen kleinen Temperatusensor der laufend die Temperatur per RS323- Schnittstelle an den Computer sendet. Jetzt möchte ich ein winziges Programm schreiben, welches mir einfach nur den aktuellen Temperaturwert liefert. ("Die Temperatur liegt bei 22,5°C").

    Sonst soll das Programm nichts weiter machen. Ich habe zuvor shcon die Suche angestrengt, aber finde ich nur haufenweise Code, der mir absolut nichts sagt. Ich hatte gehofft, es gäbe eine Funktion mit der ich einfach die COM-Schnittstelle auslesen, und den Inhalt dann an ein Label schicken könnte. Das geht so nicht?

    lg,
    mrniceguy
    Es wird dir aber sicher nicht einfach der Zahlenwert übermittelt. Du müsstest die ankommenden Werte schon selbst interpretieren. Dazu benötigst du die Info, in welcher Form der Sensor seine Daten übermittelt.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo,

    danke erstmal für die schnellen Antworten. Der Temperatursensor ist ein LM35, welcher an einem Microcontroller hängt. Der Microcontroller hängt per USB an meinem PC. Es ist also nicht wirklich seriell.

    Ich dachte einfach, man könnte es wie eine Serielle Schnittstelle behandeln, da ich mit dem Programm HTerm, welches ja die Serielle Schnittstelle ausliest, die richtigen Temperaturwerte bekomme.

    Doch nicht so einfach? :huh:
    Irgendwo sollte es eine Beschreibung geben, wie das Gerät anzusprechen ist.
    Wenn Du sagst: "Ey sag mir die Temperarur"
    und er antwortet: "Ob etom ja nitschewo nje panimaju" oder gar nix.
    So funktioniert das nicht.
    Damit das nicht so ist, musst Du ihm einen Steuerbefehl schicken, den er auch versteht, und er wird Dir eine Antwort schicken, die Du dann auch verstehst.
    Und das Dokument, egal, ob Papier oder PDF, solltest Du auftreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab mir die Hexwerte mal angeguckt und es sieht so aus als würde der Sensor den String: "21.40" und CRLF senden. Du könntest ja das Data-Received-Event des Serialports abfangen und dort bei jedem empfangenen Byte dieses in ein Array schreiben. Wenn dan CRLF kommt wertest du dieses Array aus.
    Das schaut doch ganz machbar aus.

    7 Bytes stellen ein Paket dar.

    ReceivedBytesThreshold auf 7 und dann auf DataRecieved hören.

    Im DataRecieved kannst dann den Buffer lesen. ReadExisting, dass dann .toString, und dann mit .Substring(2) die ersten 2 Bytes wegschmeißen.

    voilá. Müsste passen.

    Gruß,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()

    Und das Ding sendet, ohne dass es gefragt wird? Wenn da ein µP drin ist, glaube ich dass nicht so recht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wieso nicht? Wenn ich (oder halt auch jeder andere) den uC so programmieren, dass er regelmäßig die Temperatur senden soll, dann macht der das auch.

    Ich verfahre auch so, z.B. minütlich zu Sekunde 0 die Zeit senden, oder Statusveränderungen / "Systemmeldungen". Blöd wäre nur, wenn der uC per "Dauerfeuer" ständig paarhundertmal die Sekunde die Temperatur sendet. So schnell ändert die sich nicht und würde nur das Auswerteprogramm am PC "belasten". In diesem Fall würde ich dort die serielle Schnittstelle nur am Anfang einmal einen kompletten Durchlauf von 0D 0A bis zum nächsten 0D 0A einlesen und dann für z.B. eine Minute abschalten, wenn es sich um Raumpemteratur handelt.

    Ist es für eine Steuerung z.B. einer Heizung für z.B. Platinenätzung oder eine andere schnell ändernde Temperatur, dann würde ich die serielle Schnittstelle etwa alle 5 Sekunden kurz öffnen, wieder ein kompletten Satz Werte einlesen und dann wieder schließen.

    Soll der PC jedoch damit einen Ausgang und somit die Heizung steuern, dann ständig abfragen. Wegen Überhitzungsgefahr würde ich das so aber nie lösen, da der uC autark sowas besser kann.
    Aber auch da sollte dann ein STB mit rein. (Sicherheitstemperaturbegrenzer, z.B. Temperatursicherung)
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    peterfido schrieb:

    Blöd wäre nur, wenn der uC per "Dauerfeuer" ständig paarhundertmal die Sekunde die Temperatur sendet.
    Genau das ist es.
    Wer hat denn die göttliche Eingebung, wie oft das passieren soll?
    Möglicherweise kann man dem Ding mitteilen, in welchem Intervall die Temperatur gesendet werden soll, aber dazu müsste ja auch ein Kommando gesendet werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!