Hallo Peter,
erst mal besten Dank für deine Antwort
Ich lese die com in der MCU per Interrupt mit inkey aus und hänge jedes eingelesene Byte an ein String an bis ein chr(13) eintrifft,Die Länge, möglichst als erstes Byte erspart dir eine Menge Ärger und Aufwand.
- Jetzt weisst du die Länge erst wenn du das Kommando dekodiert hast. Hast du ein älteres Modul, welches ein neues Kommando nicht kennt, hat es keine Ahnung wie lange die Meldung ist.
- Mit einer Länge darf ein "#" in einem Text enthalten sein.
- Mit der Länge am Anfang kann man eine Schlaufenzähler setzen und entsprechend viele Zeichen einlesen. Ist die Länge grösser als der Puffer, ignoriert man einfach alles bis zum nächsten chr(13)
- Ist der Zähler durch, MUSS das nächste Zeichen ein chr(13) sein, andernfalls ist die Meldung fehlerhaft.
erst dann wird die Zeichenfolge übergeben und ausgewertet (Startzeichen) länge statischer Header, Plausibilität und Anzahl der Felder .
Treffen mehr als 100 Zeichen ohne chr(13) ein, wird der String verworfen ... der Tipp mit der Prüfsumme (-1) ist gut,
wobei ich nur Ascii übertrage, sendet ein Modul permanent Zeichen ist eh der BUS gestört, da hilft nur abschalten ...
Mein Home-Server läuft immer, der wird die Aktivitäten auf den BUS mit sniffen und in eine LOG schreiben,
Derzeit baue ich den BUS erst mal auf meinem Schreibtisch auf und teste alles, bevor ein Modul an seine Stelle kommt.
Ich betreibe an dem BUS keine Geräte die kontrolliert betrieben werden müssen, nur Außenbeleuchtung und Event-Beleuchtungen und Sensoren,
die Steuerung der Lüftungs-Anlage ist autonom und soll nur über den BUS im zugelassenem Bereich beeinflusst werden können.
Das Updaten der FW über den BUS werde ich nicht vorsehen, denke darauf kann man gut verzichten ...
Lesezeichen