Hallo
Ich Arbeite gerade an meinem ersten C++ Programm, einer Client Server Anwendung um Messdaten eines Solarladereglers auszulesen und speichern und an einen Server und oder Display weiterzuleiten (Modbus Protokoll).
Gewisse Sachen verstehe ich aber nicht und bräuchte dafür bitte eure Hilfe.
1. Ich Lese vom SolarRegler Die Werte als Register (Modbus) in einen Buffer *uint8_t und Speicher sie in einem Array uint16_t. Ein Register hat ja 2 Byte.
zum Umwandeln der Werte von x bit in y bit verwnde ich diese Funktionen aus der LibModbus:
Display Spoiler
zum versenden übers Netzwerk würde ich sie auch mit hilfe der Funktionen wieder in einen uint8_t bzw. char Buffer Legen.
die gegenseite sollte sie dann analog zum Client wieder in uint16_t umwandeln und Speichern.
Muss ich da wegen Endianess etwas beachten?
Ich bin der meineung dass das nur wichtig ist bei Werten größer ein Byte damit sie nicht in einem int16_t buffer "falsch" abgelegt wird.
2. Ich würde zum versenden über Netzwerk gern mein eigenes Protokoll entwerfen. Da die Werte aber alle Binär vorhanden sind will ich sie auch so versenden wie oben beschrieben.
Sollte ich dann im Header zum beschreiben was zu machen ist bzw. was in der Payload ist Text verwenden oder sollte besser alles Binär gesendet werden?
zb.: 8bitt -> Action 16bit -> Message lenght 16bit -> Payload Type 16Bit -> Register StartAddress 16bitt -> Register Count...
Sollte ich auch bevor das Protokoll ausgewertet wird Message Lenght überprüfen ob alles empfangen wurde und evt. mit einem weiteren recv den fehlenten Rest and den Buffer anhängen?
wie lange bleiben eigentlich die Daten die empfangen werden in dem Socket.
3. Wie sieh es mit Thresds aus? Sollte ich den Server in einem eigenen Thread laufen lassen. oder kann er auch als Teil der Hauptschleife laufen, in der dann auch noch evt. Daten wieder an das Display gesendet werden.
Für den Client wollte ich eigentlich keine Threads verwenden da er zuerst sowieso die Daten vom Solar Lade Regler liest und Speichert und dann über Netzwerk an den Server sendet. Oder sollte ich da auch Threads verwenden.
wenn Ja welche sollte ich verwenden POSIX oder die Thread Class aus c++?
4. Was muss beim Multi Threading beachtet werden?
Ich habe eine Klasse memory die die ganzen Register in Arrays speichert und die natürlich zum versenden auch wieder ausgelesen werden müssen. Muss ich da mit mutex Arbeiten?
Nur beim Schreiben oder auch beim Lesen?
So das wars jetzt erst mal. Ist nicht leicht als Neuling alle Infos richtig zu interpretieren.
Hoffe mir kann einer von den Profis die ein oder andere Frage beantworten.
mfg Thomas