AGB  ·  Datenschutz  ·  Impressum  







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

CPort: Comport auslesen DOS-> Delphi

Ein Thema von Freiwilderer · begonnen am 6. Mär 2012 · letzter Beitrag vom 13. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#1

CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 09:35
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:
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
Es wird also erst der Comport als #96 geöffnet, anschließend Chr6 und Chr13 geschrieben und dann ausgelesen.
... leider funktioniert das in Delphi nicht.
Delphi-Quellcode:
   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;
Kann mir jemand da einen Tip geben?
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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 10:08
Interessant wäre auch, was CS und DS Bedeuten soll.
Erste Vermutung bei seriellen Schnittstellen ist doch CTS und DSR, und tatsächlich ergibt ein paar Sekunden Suche:
Zitat von FreeBASIC-Referenz:
CSn Setze die CTS-Dauer (in ms) (n>=0), 0 = abschalten, Standard = 1000
DSn Setze die DSR-Dauer (in ms) (n>=0), 0 = abschalten, Standard = 1000
und auf http://www.elektronik-labor.de/RS232/RS232_3_2.htm
Zitat:
CS,DS,CD: ohne eine Zusatzangabe bewirken diese Parameter,dass die Eingangsleitungen CTS, DSR bzw. DCD nicht beachtet werden. Für jede dieser Eingangsleitungen kann eine Wartezeit n in ms angegeben werden, während der auf ein Signal eintreffen muss.

Beispiel: OPEN "COM1:9600,N,8,1,RS,CS,DS,CD" as #2

Beim Öffnen bleibt RS zurückgesetzt, und keine der Handshake-Eingangsleitungen wird beachtet.

Geändert von gammatester ( 6. Mär 2012 um 10:14 Uhr)
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 10:12
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.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 10:22
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.
Also zumindest in meiner Uraltversion 2.01 kann man das im Objektinspektor/Flowcontrol sehr schön ein- und ausschalten; und mit der mitgelieferten Form sogar zur Laufzeit via Dialog. Was bei den neuen Schnickschnack-Versionen nicht mehr möglich ist kann ich nicht sagen.
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 10:31
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.)
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 10:36
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
Klaus
  Mit Zitat antworten Zitat
Wal

Registriert seit: 22. Sep 2006
57 Beiträge
 
#7

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 11:28
Versuch mal ein crlf mitzusenden.
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));
Gruß Wal

Es gibt viel zu tun, sitzen wir's aus ! 0(°~°)0

Geändert von Wal ( 6. Mär 2012 um 11:55 Uhr)
  Mit Zitat antworten Zitat
Wal

Registriert seit: 22. Sep 2006
57 Beiträge
 
#8

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 12:19
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.
Gruß Wal

Es gibt viel zu tun, sitzen wir's aus ! 0(°~°)0
  Mit Zitat antworten Zitat
Freiwilderer

Registriert seit: 26. Mai 2009
163 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 13:36
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.
  Mit Zitat antworten Zitat
Wal

Registriert seit: 22. Sep 2006
57 Beiträge
 
#10

AW: CPort: Comport auslesen DOS-> Delphi

  Alt 6. Mär 2012, 15:53
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.
Glaube ich nicht, das dein Gerät Daten sendet. Die Procedure wird angesprungen, sobald Daten empfangen werden, auch wenn's Schrott ist z.B. bei falscher Baudrate.

Ich denke, das dein Gerät anzeigt, das es Daten empfängt es sendet nur nichts zurück, da die Anfrage falsch sein wird.
Gruß Wal

Es gibt viel zu tun, sitzen wir's aus ! 0(°~°)0

Geändert von Wal ( 6. Mär 2012 um 15:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:23 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