![]() |
CPort: Comport auslesen DOS-> Delphi
hi,
ich habe ein DOS Programm, dass Daten über den ComPort von einem Windows CE Gerät runter lädt. Das muss ich jetzt in Delphi umsetzen... hier mal der Basic Code:
Code:
Es wird also erst der Comport als #96 geöffnet, anschließend Chr6 und Chr13 geschrieben und dann ausgelesen.
Close #96
Open "COM2:9600,N,8,1,CS,DS" As #96 ITry = 0 Do While ITry < 10 AND IFound = 0 ITry = ITry + 1 Print #96, Chr$(6) + Chr$(13); Call WaitSec(0.5) If Not EOF(96) Then ATmp = Input$(1,#96) If ATmp = Chr$(6) Then IFound = 1 end if Loop ... leider funktioniert das in Delphi nicht.
Delphi-Quellcode:
Kann mir jemand da einen Tip geben?
try
iTry := 0; bFound := False; AComPort:=Concat('COM',Edit1.Text); tmpWeightString := ''; FirstStart:= Now(); ComPort := TComport.Create(fHandscannerCOM); ComPort.Port := AComPort; ComPort.BaudRate := br9600; ComPort.Parity.Bits := prNone; ComPort.DataBits := dbEight; ComPort.StopBits := sbOneStopBit; ComPort.Open; comport.WriteStr(CHR(6)+ CHR(13)); sleep(500); i:=1; while (not bFound) and (i< 10) do begin AStr := ''; inc(i); ComPort.ReadStr(AStr,1); if Astr='' then Astr:=IntToStr(i); Memo1.Lines.Add(AStr); if AStr = CHR(6) then bFound := True; sleep(10); end; finally FreeAndNil(ComPort); end; bei einem anderen Gerät (einer Waage) habe ich das auslesen in ähnlicher form bereits hin bekommen ... Interessant wäre auch, was CS und DS Bedeuten soll. Über Hilfe würde ich mich sehr freuen. Mfg |
AW: CPort: Comport auslesen DOS-> Delphi
Zitat:
Zitat:
![]() Zitat:
|
AW: CPort: Comport auslesen DOS-> Delphi
Naja, gedacht hatte ich mir das auch schon... Allerdings gibt es bei CPort scheinbar keine Möglichkeit diese Werte zu verändern. Weswegen ich mir über deren Bedeutung nicht sicher bin.
|
AW: CPort: Comport auslesen DOS-> Delphi
Zitat:
|
AW: CPort: Comport auslesen DOS-> Delphi
Ich glaub auch gar nicht mal unbedingt, dass es daran liegt, sondern vielleicht eher an der Art des auslesens ... Wie gesagt, die Waage, die ich hier stehen hab, kann ich ansprechen. (Auch ohne CS und DS vorher einzustellen.)
|
AW: CPort: Comport auslesen DOS-> Delphi
CTS, DSR auch, wenn ich mich nicht täusche, unter HardwareHandshake bekannt.
Wenn der das Windows CE Gerät so eingestellt ist, dass HardwareHandshake verlangt wird sollte Dein Programm das auch unterstützen. Grüße Klaus |
AW: CPort: Comport auslesen DOS-> Delphi
Versuch mal ein crlf mitzusenden.
Delphi-Quellcode:
ComPort.WriteStr(#6#13#13#10);
Ok, durch das ; wird #13 beim Print-Befehl unterdrückt, crlf wird auch nicht funzen. Da würde ich es mal so versuchen:
Delphi-Quellcode:
var
Buffer: PACKED ARRAY[0..1] OF Byte; Buffer[0]:= $06; Buffer[1]:= $13; ComPort.Write(Buffer, SizeOf(Buffer)); |
AW: CPort: Comport auslesen DOS-> Delphi
Hab' ich mal schnell zusammen gestellt :
Delphi-Quellcode:
unit uMain;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, CPort, Vcl.StdCtrls; type TfrmMain = class(TForm) Memo1: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } ComPort: TComPort; procedure ComPortRxChar(Sender: TObject; Count: Integer); end; var frmMain: TfrmMain; Buffer: PACKED ARRAY[0..1] OF Byte; implementation {$R *.dfm} procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin ComPort.Close; ComPort.Free; end; procedure TfrmMain.FormCreate(Sender: TObject); begin ComPort := TComPort.Create(Nil); ComPort.OnRxChar := ComPortRxChar; ComPort.Port := 'COM1'; ComPort.BaudRate := br9600; ComPort.Parity.Bits := prNone; ComPort.DataBits := dbEight; ComPort.StopBits := sbOneStopBit; ComPort.Open; end; procedure TfrmMain.Button1Click(Sender: TObject); begin Buffer[0]:= $06; Buffer[1]:= $13; ComPort.Write(Buffer, SizeOf(Buffer)); end; procedure TfrmMain.ComPortRxChar(Sender: TObject; Count: Integer); var A: String; begin ComPort.ReadStr(A, Count); memo1.Text := memo1.Text + 'Daten: ' + A + #13#10; end; end. |
AW: CPort: Comport auslesen DOS-> Delphi
hi,
danke für die Ausführliche Antwort. Also die Verbindung zu Windows CE und dem darauf laufenden Programm scheint zu funktionieren. Das Gerät zeigt jetzt nämlich immerhin an, dass es Daten sendet. (Mit dem Buffer gings nicht. Mit WriteStr(CHR(6),CHR(13)) aber.) Leider geht er nie in den ComPortRxChar Abschnitt rein. |
AW: CPort: Comport auslesen DOS-> Delphi
Zitat:
Ich denke, das dein Gerät anzeigt, das es Daten empfängt es sendet nur nichts zurück, da die Anfrage falsch sein wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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