Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TSerial - RS232 ansprechen (https://www.delphipraxis.net/115140-tserial-rs232-ansprechen.html)

Lee500 20. Okt 2009 16:03

Re: TSerial - RS232 ansprechen
 
Also ich habe mir jetz ne LED an einen ausgang gebastelt. Wenn ich per Delphi sende passiert gar nix. Mach ichs per HyperTerminal geht sie an sobald ich was sende.

Zitat:

Hast Du z.B. daran gedacht RX und TX zu kreuzen? Senden auf der einen ist ja Empfangen auf der anderen Seite.
Wenn ich das nicht getan hätte würde die Verbindung wohl kaum mit dem HT gehen oder?

Gruß Lee

OldGrumpy 20. Okt 2009 16:17

Re: TSerial - RS232 ansprechen
 
Wenn Du nicht ganz grobe Verdrahtungsfehler drin hast (wovon ich nicht ausgehe) dann zeigt das ja zumindest schonmal, dass das Senden an den Controller geht, wenn auch nicht mit Delphi :mrgreen:. Geht denn auch die Antwort des Controllers? Die sollte durchaus auch per Hyperterminal zu sehen sein. Wenn das klappt, sind wir schonmal einen Schritt weiter mit der Fehlereingrenzung. Wenn der Part des Controllers dann komplett funktioniert, dann sehen wir uns die Delphi-Seite an. Immer einen Schritt nach dem anderen machen.

Lee500 20. Okt 2009 16:22

Re: TSerial - RS232 ansprechen
 
Ja der Hardware Teil funktioniert. Wenn ich per HyperTerminal ein 'x' sende, antwortet mir der Controller mit '12345678'.

Wenn ich per HT sende geht die LED auch an, da der Controller ein Zeichen empfangen hat. Bei Delphi ist dies nicht der fall. Also vermute ich mal, sendet Delphi gar nicht, oder so, dass der Controller es nicht lesen kann.

Gruß Lee

shmia 20. Okt 2009 16:23

Re: TSerial - RS232 ansprechen
 
Hast du schon mit Portmon nachgeschaut, was da rein und raus geht?

Lee500 20. Okt 2009 16:32

Re: TSerial - RS232 ansprechen
 
Per HT sagt mir Portmon folgendes:
Delphi-Quellcode:
0.12418143   hypertrm.exe   IRP_MJ_CREATE   Serial2   SUCCESS   Options: Open    
0.00000782   hypertrm.exe   IOCTL_SERIAL_SET_QUEUE_SIZE   Serial2   SUCCESS   InSize: 8192 OutSize: 8192   
0.00000251   hypertrm.exe   IOCTL_SERIAL_CONFIG_SIZE   Serial2   SUCCESS   Size: 0   
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_BAUD_RATE   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_LINE_CONTROL   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_CHARS   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_HANDFLOW   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_BAUD_RATE   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_LINE_CONTROL   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_CHARS   Serial2   SUCCESS      
0.00000196   hypertrm.exe   IOCTL_SERIAL_GET_HANDFLOW   Serial2   SUCCESS      
0.00000223   hypertrm.exe   IOCTL_SERIAL_SET_BAUD_RATE   Serial2   SUCCESS   Rate: 9600   
0.00275426   hypertrm.exe   IOCTL_SERIAL_SET_RTS   Serial2   SUCCESS      
0.00297496   hypertrm.exe   IOCTL_SERIAL_SET_DTR   Serial2   SUCCESS      
0.00000279   hypertrm.exe   IOCTL_SERIAL_SET_LINE_CONTROL   Serial2   SUCCESS   StopBits: 1 Parity: NONE WordLength: 8   
0.00295652   hypertrm.exe   IOCTL_SERIAL_SET_CHAR   Serial2   SUCCESS   EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13   
0.01298852   hypertrm.exe   IOCTL_SERIAL_SET_HANDFLOW   Serial2   SUCCESS   Shake:80000001 Replace:80000040 XonLimit:80 XoffLimit:200   
0.00000391   hypertrm.exe   IOCTL_SERIAL_SET_TIMEOUTS   Serial2   SUCCESS   RI:10 RM:0 RC:0 WM:0 WC:5000   
0.00000363   hypertrm.exe   IOCTL_SERIAL_SET_WAIT_MASK   Serial2   SUCCESS   Mask: RLSD ERR    
0.00000000   hypertrm.exe   IOCTL_SERIAL_WAIT_ON_MASK   Serial2         
0.00000000   hypertrm.exe   IRP_MJ_READ   Serial2      Length 80   
0.00076993   hypertrm.exe   IRP_MJ_WRITE   Serial2   SUCCESS   Length 1: .   
0.00000670   hypertrm.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00092945   hypertrm.exe   IRP_MJ_WRITE   Serial2   SUCCESS   Length 1: .   
21.23459630   hypertrm.exe   IRP_MJ_READ   Serial2   TIMEOUT   Length 8: 12305678
per Delphi macht es das:
Delphi-Quellcode:
0.12224207   Zeitmessung.exe   IRP_MJ_CREATE   Serial2   SUCCESS   Options: Open    
0.00000475   Zeitmessung.exe   IOCTL_SERIAL_GET_BAUD_RATE   Serial2   SUCCESS      
0.00000251   Zeitmessung.exe   IOCTL_SERIAL_GET_LINE_CONTROL   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_CHARS   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_HANDFLOW   Serial2   SUCCESS      
0.00000196   Zeitmessung.exe   IOCTL_SERIAL_GET_BAUD_RATE   Serial2   SUCCESS      
0.00000196   Zeitmessung.exe   IOCTL_SERIAL_GET_LINE_CONTROL   Serial2   SUCCESS      
0.00000196   Zeitmessung.exe   IOCTL_SERIAL_GET_CHARS   Serial2   SUCCESS      
0.00000196   Zeitmessung.exe   IOCTL_SERIAL_GET_HANDFLOW   Serial2   SUCCESS      
0.00000196   Zeitmessung.exe   IOCTL_SERIAL_SET_BAUD_RATE   Serial2   SUCCESS   Rate: 9600   
0.00277857   Zeitmessung.exe   IOCTL_SERIAL_CLR_RTS   Serial2   SUCCESS      
0.00299871   Zeitmessung.exe   IOCTL_SERIAL_CLR_DTR   Serial2   SUCCESS      
0.00000251   Zeitmessung.exe   IOCTL_SERIAL_SET_LINE_CONTROL   Serial2   SUCCESS   StopBits: 1 Parity: NONE WordLength: 8   
0.00295764   Zeitmessung.exe   IOCTL_SERIAL_SET_CHAR   Serial2   SUCCESS   EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13   
0.00000307   Zeitmessung.exe   IOCTL_SERIAL_SET_HANDFLOW   Serial2   SUCCESS   Shake:80000000 Replace:80000000 XonLimit:2048 XoffLimit:512   
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_SET_QUEUE_SIZE   Serial2   SUCCESS   InSize: 1024 OutSize: 1024   
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_SET_TIMEOUTS   Serial2   SUCCESS   RI:0 RM:0 RC:1 WM:0 WC:0   
0.00090235   Zeitmessung.exe   IRP_MJ_WRITE   Serial2   SUCCESS   Length 1: x   
0.00000279   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000251   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000251   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
0.00000223   Zeitmessung.exe   IOCTL_SERIAL_GET_COMMSTATUS   Serial2   SUCCESS      
... es folgt noch mehr davon
Gruß Lee

Klaus01 20. Okt 2009 17:28

Re: TSerial - RS232 ansprechen
 
.. in Deinem 2. Protokoll taucht doch ein x auf
Zitat:

.00090235 Zeitmessung.exe IRP_MJ_WRITE Serial2 SUCCESS Length 1: x
Wohingegen im 1. Protokoll zwei mal der Punkt '.' auftaucht.

Grüße
Klaus

Lee500 20. Okt 2009 17:30

Re: TSerial - RS232 ansprechen
 
Das hat ja nix zu sagen, weil es das Zeichen ist was gesendet wird. Der Controller sendet aber auch zurück wenn er ein x bekommt, da er sendet sobald ein Zeichen kommt, egal welches.

Gruß Lee

//EDIT: Habe jetzt herausgefunden warum es nicht ging. Mein Controller erwartete einen Zeilenumbruch bzw. ein Zeilenende oder sowas. Ohne dieses Ende antwortet er nicht, weil er glaubt nichts empfangen zu haben. Jetzt, mit Zeilenumbruch, funktioniert es wunderbar.

delphihasen 2. Apr 2012 11:45

AW: TSerial - RS232 ansprechen
 
Hallo erstmal,

vielen Dank für die Com Unit! Hab allerdings ein Problem:
Ich mochte den Port RTS auf High schalten.

So hab ich mir das vorgestellt


Delphi-Quellcode:
//////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
begin

  with TCom.Create(nil) do
  try
    // com öffnen
    if Open(COM,RTS_DISABLED,DTR_DISABLED) then
    begin
        Memo1.Lines.Add ('Com'+IntToStr(Com)+' ausgewählt!');
        SetRTS(akt);
    end;
  finally
    // com schließen
    Close;
    Free;
end;
///////////////////////////////////////////////////////////////////

Bei der Prozedur SetRTS gibt Delphi mir allerdings die Fehlermeldung "Missing Operator" aus. Die Variable akt(boolean) habe ich zuvor jedoch schon true zugewiesen...

Kann mir jemand helfen???


Vielen Dank für eure Mühen

DeddyH 2. Apr 2012 12:58

AW: TSerial - RS232 ansprechen
 
Schmeiß erst einmal das "with" raus. Und dann scheint da noch das "end" zum "finally" zu fehlen.

delphihasen 2. Apr 2012 13:03

AW: TSerial - RS232 ansprechen
 
Ohne with gehts gar nicht. Sorry end war noch drin-->habs lediglich nicht mitkopiert...

Denke das Problem liegt an der Prozedur:

Delphi-Quellcode:
procedure TCOM.SetRTS(const Value: boolean);
begin
  if (Value = True) then
    EscapeCommFunction(FHandle, WinTypes.SETRTS)
  else
    EscapeCommFunction(FHandle, WinTypes.CLRRTS);
end;
Um diese auszuführen bzw. RTS zu schalten sollte ich sie doch lediglich so:
Delphi-Quellcode:
SetRTS(true);
ausführen können oder nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 4 von 5   « Erste     234 5      

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