AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Daten aus TClientSocket verarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus TClientSocket verarbeiten

Ein Thema von js747a · begonnen am 19. Jan 2021 · letzter Beitrag vom 20. Jan 2021
 
js747a

Registriert seit: 11. Aug 2008
Ort: Nord hessen
43 Beiträge
 
Delphi 7 Enterprise
 
#1

Daten aus TClientSocket verarbeiten

  Alt 19. Jan 2021, 19:35
Ich schreibe ein Programm zur steuerung eine Modellbahn. Ich schicke Daten über TCP (TClientSocket) an eine Modellbahn Zentrale.
Die Daten bestehen aus 13 Bytes

Ich bekomme diese 13 Byte leicht verändert wieder zurück.

- Bytes 1 bis 4 sind die Meldungskennung.
- Byte 5 entspricht dem DLC der CAN-Meldung.
- Bytes 6 - 13 sind die entsprechenden Nutzdaten.

Wie kan ich diese jetzt wieder zerlegen um

Zun Beispiel den PowerOn Button schickt 00004711 5 00 00 00 00 01

procedure TForm1.PowerOnButtonClick(Sender: TObject); //00004711 5 00 00 00 00 01 GO Alle
Var i : Integer;
mySendingString : String;
myDLC : Byte; //Anzahl der Datenbytes im CAN-Paket, 1 Byte
myPrio : Byte; //Priorität des befehls
myResponseBit : Byte; // wenn wir als PC-Programm senden, ist dieses Bit immer 0
myStartWord : SmallInt; // die Kombination aus Prio, Command und Responsebit
myUID : Integer; // Zieladresse des Objektes auf dem CAN, 32 Bits
myHash : SmallInt; // unser Hash, 16 Bits
myCommand : Byte; // unser Befehl, 8 Bits
mySubCommand : Byte; // unser Unterbefehl, 8 Bits
myDataBytes : Array[0..7] of Byte; // array[0..7] of Byte,

begin
myPrio := 0; // wir haben keine Priorität
myCommand := 0; // 0x00 = 0 Systembefehl
mySubCommand := 1; // Power ON - System Go (0x01)
myHash := 18193; // wie im Beispiel, kann aber auch &h0300 sein (als Minimum)
myDLC := 5; // 5 Bytes Nutzdatenlänge
myUID := 0; // UID = 0 bedeutet: sende den Befehl an alle
for i := 0 to 7 do myDataBytes[i] := 0; //Märklins Doku zählt auch von D0 .. D7

myStartWord := ( ((myPrio SHL 12) + (myCommand SHL 1) + (myResponseBit AND 1)) AND 255 );
myDataBytes[0] := ((myUID SHR 24) AND 255); // Big Endian encoding
myDataBytes[1] := ((myUID SHR 16) AND 255);
myDataBytes[2] := ((myUID SHR 8) AND 255);
myDataBytes[3] := (myUID AND 255);
myDataBytes[4] := mySubCommand;

mySendingString := Chr((myStartWord SHR 8) AND 255) + Chr(myStartWord AND 255);
mySendingString := mySendingString + Chr((myHash SHR 8) AND 255) + Chr(myHash AND 255);
mySendingString := mySendingString + Chr(myDLC AND 255);
for i := 0 to 7 do mySendingString := mySendingString + Chr(myDataBytes[i] AND 255);

CS2ClientSocketSend.Socket.SendText(mySendingStrin g);

end;


Wenn ich die Antwort in eine Memo gebe sehe ich nichts.

CS2MeldungenMemo.lines.add('Empfangen : ' + Socket.ReceiveText + IntToStr(Length(Socket.ReceiveText)));

zeigt mir nur 'Empfangen :'
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz