AGB  ·  Datenschutz  ·  Impressum  







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

USB-Port, Python to Delphi, Delphi XE3

Ein Thema von newIndy · begonnen am 18. Dez 2018 · letzter Beitrag vom 18. Dez 2018
Antwort Antwort
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#1

USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 12:53
Hallo, schön dass es die 'Delphi-Praxis' noch gibt.

Ich habe folgendes Problem, an dem ich schon einige Tage hänge.
Ein externer Baustein(ein Sensor) wird über USB angesprochen.
Dazu sind simple ASCII-Kommandos erforderlich.
Leider gibt es nur einen Python-Beispielcode.
Das Problem ist also genau gesagt der Verbindungsaufbau und die Decodierung.

Ich habe den Sourcecode mit dem, was ich bisher erreicht habe und
ein Bild der TestForm angehängt
und würde mich sehr über eure Antworten freuen.
Miniaturansicht angehängter Grafiken
uart.jpg  
Angehängte Dateien
Dateityp: pas Main.pas (7,6 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#2

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 13:11
Zunächst mal: Man kann mit Delphi auch Konsolenanwendungen schreiben, dann muss man sich nicht mit SchnickSchnack beschäftigen und kann sich auf das wesentliche konzentrieren. Es wäre dann auch viel einfacher den Python-Code zu übertragen. Mir fällt dabei dann auf, daß Dein Delphi JustSendCommand nicht dem Python justSendCommand entspricht.
Die ser.write Methode in Python entspricht ziemlich genau der ser.Write Methode in Delphi. Warum Du also nach dem "/n" was "new line" bedeutet, noch ein Carriage Return und Line Feed hängst, verstehe ich nicht. Edith formuliert das mal etwas um: Das /n wird von Python und vielen anderen Sprachen als New Line interpretiert. Delphi macht das IIRC nicht. Darum lässt du das /n weg und packst Dein CR+LF dazu. Vielleicht tut es auch einfahc nur das LF, wie es in Deinen Kommentaren eigentlich auch steht.

Ab da geht vermutlich schon die Antwort in die Binsen. Versuch es halt erstmal einfacher.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (18. Dez 2018 um 13:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#3

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 15:46
Hallo Sherlock. Erst mal vielen Dank für deine Antwort.

Das ein "/n" und CR an das Kommando angehängt wird, habe ich der (leider schlechten) Dokumentation entnommen, aber hier hast du wohl recht.
Der Sensor schickt nun nach "! #13#10" etwas zurück, was aber leider nicht lesbar ist. Hier ist wohl die Decodierung falsch.
Wie kann man das 'encode' und 'decode' korrekt in Delphi einsetzen.

ser.write(str.encode(command+"\n"))

reply = ser.readline().decode("utf-8")
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#4

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 16:04
Ja, das decode ist etwas schwieriger. Ich weiß leider nicht, was das für ein Serialport-Objekt ist, mit dem Du da in Delphi arbeitest. Gut wäre es, wenn es beim readline lieber eine Bytefolge im Stile eines Array of Byte zurückgäbe. Im String könnte bereits etwas verloren gehen. Oder Du musst dem Ding irgendwo noch mitteilen, wie es die Bytes zu interpretieren hat. Das da String rauskommt, ist etwas unglücklich.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#5

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 16:19
Ok danke. Ich werde da später nochmals experimentieren und die 'function Readline' umschreiben.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

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

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 17:14
Wie Sherlock schon schreibt: "\n" ist Python nur ein Linefeed (#10).
Ansonsten kannst Du davon ausgehen, dass Sensoren bei serieller Kommunikation immer nur ASCII-Zeichen senden und empfangen. Je nachdem, welche Serial Port Komponenten Du verwendest, konvertiert die die Bytes fehlerhaft. Am Besten Du liest und schreibst nicht Strings sondern RawByteArray's.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#7

AW: USB-Port, Python to Delphi, Delphi XE3

  Alt 18. Dez 2018, 18:04
Danke an euch beide.
Lesen und schreiben klappt jetzt.
Ich habe die 'ReadLine' entsprechend umgeschrieben.

Function TSerialPort.ReadLine:String;
var d: array[1..100] of Byte;
s: string;
i: Integer;
BytesRead:Cardinal;
begin
BytesToRead := SizeOf(d);
Result := '';
if not ReadFile(ComFile, d, BytesToRead, BytesRead, nil) then
begin
{ Raise an exception }
MainForm.Memo1.Lines.Add('Fehler, BytesRead: '+IntToStr(BytesRead));
end else MainForm.Memo1.Lines.Add('BytesRead: '+IntToStr(BytesRead));
s := '';
for i := 1 to BytesRead do s := s + Chr(d[i]);
Result := s;
end;
Schöne Feiertage
  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 07:53 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