AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Loconet uber USB

Ein Thema von js747a · begonnen am 6. Apr 2022 · letzter Beitrag vom 7. Apr 2022
Antwort Antwort
js747a

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

Loconet uber USB

  Alt 6. Apr 2022, 18:53
Hallo, ich erweitere mein Modellbahnprogramm mit LOCONET über USB

Bisher habe ich Daten verschickt über den COM Port (cPort)
- InterfacePort := TComPort.Create
- InterfacePort.Open
- z.B. Mit InterfacePort.WriteStr('x' + Chr(160));

oder über ein Netzwerk mit TClientSocket - WLAN - Netwerkkabel...

Jetzt möchte ich Daten verschicken über USB.

Ich habe versucht mit den COM Port(cPort)
- InterfacePort.Open
- If InterfacePort.Connected zeigt mir das der Port verbunden ist.

Im LOCONET Protokol steht das
Die Daten-Bytes auf dem LocoNet® sind als 8-Bit-Daten definiert, die mit dem als letztes Bit im Oktett übertragenen höchstwertigen Bit (ms) eine Befehlscode-Markierung (OPCODE) erhalten. Wenn das ms-Bit (D7) 1 ist, werden die 7 geringwertigeren Bits als Netzwerk-OPCODE interpretiert. Dieses OPCODE-Byte ist immner nur einmal in einer gültigen Nachricht enthalten und ist das erste Byte einer Nachricht. In allen überigen Bytes der Nachricht muss inklusive des letzten Prüfsummenbytes (CHECKSUM) das höchstwertige Bit auf 0 gesetzt sein. Die CHECKSUM ist das Einer-COMPLEMENT eines Exclusiv-Oder über alle Bytes der Nachricht, außer der CHECKSUM selbst. Um die Datengenauigkeit zu prüfen, sind alle Bytes einer korrekten Nachricht exclusiv-oder-verknüpft. Wenn der resultierende Wert hexadezimal “FF” ist, werden die Daten als richtig akzeptiert.

Irgendwie verstehe ich das ganze nicht so.
Ich habe versucht mit


OPC_GPON ,CheckByte ,Checksum : Integer;

OPC_GPON := 130; //0x83
CheckByte := $00;
Checksum := OPC_GPON xor CheckByte;
InterfacePort.WriteStr(Chr(OPC_GPON)+Chr(Checksum) );

Es tut sich nichts.
Mache ich was falsch bei exclusiv-oder-verknüpfung oder geht das mit dem Com Port für USB nicht.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Loconet uber USB

  Alt 6. Apr 2022, 19:04
Normalerweise sollte ein per USB angeschlossener COM-Port genauso funktionieren wie ein nativer.

Es gibt aber ggf. ein paar Parameter des Treibers, an denen man drehen kann bzw. sollte. Falls es ein FTDI-Chip ist, kann man z.B. die Größe des Empfangs- bzw. Sendepuffers einstellen, sowie einen Timeout fürs Empfangen und Senden. Diese Einstellungen legen fest, wann der Treiber jeweils die Daten empfängt oder sendet. Sie sie zu groß, wartet der Treiber ggf. zu lange, weil der Puffer noch nicht voll ist bzw. der Timeout noch nicht abgelaufen ist.

Ob das mit Deinem Problem zu tun hat, kann ich aber nicht sagen. Ggf. lohnt es sich , mal mittels Nullmodemkabel die Daten, die gesendet werden, auszulesen. Ein Kollege hatte mir dazu mal ein Y-Kabel gelötet, so dass ich sogar live mitlesen konnte, was über die Leitung ging. War sehr hilfreich.

Hm, wo ich gerade so darüber nachenke: Hast Du die Parameter für die serielle Schnittstelle korrekt gesetzt? Baudrate, Data-Bits, Stop-Bits und Handshake?
Thomas Mueller
  Mit Zitat antworten Zitat
js747a

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

AW: Loconet uber USB

  Alt 7. Apr 2022, 15:17
An alle Delphi User die sich mit xor Verknupfungen auskennen.

zunächst muss ich mal diesen Satz in Delphi umsetzen.

Im LOCONET Protokol steht das
Die Daten-Bytes auf dem LocoNet® sind als 8-Bit-Daten definiert, die mit dem als letztes Bit im Oktett übertragenen höchstwertigen Bit (ms) eine Befehlscode-Markierung (OPCODE) erhalten. Wenn das ms-Bit (D7) 1 ist, werden die 7 geringwertigeren Bits als Netzwerk-OPCODE interpretiert. Dieses OPCODE-Byte ist immner nur einmal in einer gültigen Nachricht enthalten und ist das erste Byte einer Nachricht. In allen überigen Bytes der Nachricht muss inklusive des letzten Prüfsummenbytes (CHECKSUM) das höchstwertige Bit auf 0 gesetzt sein. Die CHECKSUM ist das Einer-COMPLEMENT eines Exclusiv-Oder über alle Bytes der Nachricht, außer der CHECKSUM selbst. Um die Datengenauigkeit zu prüfen, sind alle Bytes einer korrekten Nachricht exclusiv-oder-verknüpft. Wenn der resultierende Wert hexadezimal “FF” ist, werden die Daten als richtig akzeptiert.

mein Versuch

Dieses OPCODE-Byte ist immner nur einmal in einer gültigen Nachricht enthalten und ist das erste Byte einer Nachricht.

OPCODE 0x83 also z.B.

OPCODE ; Byte;
OPCODE := 130; //0x83

Die CHECKSUM ist das Einer-COMPLEMENT eines Exclusiv-Oder über alle Bytes der Nachricht

CheckByte ,Checksum : Byte;
CheckByte := $00;
Checksum := OPC_GPON xor CheckByte;


Senden
InterfacePort.WriteStr(Chr(OPCODE )+Chr(Checksum));
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz