Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 19.08.10 15:45 
Hallo,

bei der Umstellung von Delphi 2007 auf Delphi 2010 habe ich Probleme mit dem Datenempfang bei der seriellen Schnittstelle.

Ich nutze die Comport Komponente von HBTapi.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TFHaupt.ComportReceive(Sender: TObject; Count: Integer);
var data: string;
begin
data := comport.ReadStr(Count);
memo1.lines.add(data);
end;

so wie oben klappte es in Delphi 2007

in 2010 werden in dem Memo nur abweichende Zeichen dargestellt.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 19.08.10 15:51 
Weil String in Delphi2007 ungleich String in Delphi2010 ist. ;) Stichwort Unicode. Demnach müsstest du data als AnsiString deklarieren.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 19.08.10 16:12 
danke elundril für die sehr schnelle Antwort.

Wenn ich "data" als Ansistring deklariere, werden die Zeichen zwar anders angezeigt, aber es sind auch nicht die "normalen" lesbaren Zeichen.

Wenn ich den Comport über hyperterminal auslesen, kommen lesbare Zeichen.

Kann es sein, dass delphi 2010 die Bytes aus dem Comport anders interpretiert?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 19.08.10 16:25 
Dann musst du auch natürlich statt ReadStr(Count) einfach ReadAnsiStr(Count) verwenden. Hättest du leicht in der Online-Hilfe vom Hersteller nachlesen können. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 19.08.10 17:44 
ja ich habe mir die neueste Version nun installiert.

Leider gehts auch nicht mit ReadAnsiStr.

Genau das gleiche wie vorher.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 19.08.10 17:48 
Hmm, dann bin ich auch ratlos. Hab die Komponente selbst nie verwendet, tut leid.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Do 19.08.10 19:49 
Gibts ne Alternative?

Wie programmiert ihr die serielle Schnittstelle?
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Do 19.08.10 20:59 
user profile iconJosef-B hat folgendes geschrieben Zum zitierten Posting springen:
Gibts ne Alternative?

Wie programmiert ihr die serielle Schnittstelle?


Hallo,

nach dem WIN32-API, auch wenn das hier nicht als Programmieren anerkannt ist. Um genau zu sein, ich schreibe mir jeweils meine eigene Klasse, weil man in der Praxis immer nur einen Bruchteil der möglichen Funktionen braucht. Meistens kommt man mit Konstruktor, Destruktor und einer passenden Version von send und receive aus. Problematisch ist bloss der Konstruktor wegen der vielen Einstellungen.

Komponenten, die alle Möglichkeiten der seriellen Übertragung berücksichtigen, lohnen sich in den meisten Fällen nicht wirklich, weil die Einarbeitung mindestens genauso aufwendig ist wie in das direkte API.

Gruss Reinhard
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Fr 20.08.10 08:00 
Hallo Reinhard,

bin in Delphi eher der Praktiker. Ich nutze es für meinen eigenen Laden.

Ich möchte eine Waage anbinden.

Gibt es für die API-Geschichte ein Tutorial oder was anderes, wo ich mir das abschauen kann?

Ich muss auch nur ASCII Zeichen auslesen und senden. Ist eigentlich ne einfache Anwendung.

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 20.08.10 14:10 
user profile iconJosef-B hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es für die API-Geschichte ein Tutorial oder was anderes, wo ich mir das abschauen kann?


Hallo,

ich zitiere einen nickdmax, Moderator von www.dreamincode.net, besser kann ich es auch nicht formulieren:

Indeed the windows API is really all you need for serial communication: msdn.microsoft.com/e...ibrary/ms810467.aspx

There really is nothing particularly hard about using the API's. There are also some 3rd party libraries (open source I believe) that can map a USB device to COM ports allowing one to use the serial API to communicate with USB devices (not really sure how this works but it is how my cellphone's drivers work -- I have been thinking about trying to use this to get data off of my old digital camera).

You can get LOTS of example of using the serial port by just going to sourceforge.net and searching for "Serial Port Communications" -- plenty of open source examples.

Another way to research example is to use Google Code Search or Koders -- Use MSDN to get the names of functions used and then use Google CS/Koders to search for uses of that function.

On sourceforge you can also find lots of libraries that wrap the API and make it a little easier to use.

Gruss Reinhard
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Fr 20.08.10 14:19 
Danke,

werde mich damit dann mal beschäftigen.