![]() |
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:
Gruß Lee |
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.
|
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 |
Re: TSerial - RS232 ansprechen
Hast du schon mit
![]() |
Re: TSerial - RS232 ansprechen
Per HT sagt mir Portmon folgendes:
Delphi-Quellcode:
per Delphi macht es das:
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
Delphi-Quellcode:
Gruß Lee
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 |
Re: TSerial - RS232 ansprechen
.. in Deinem 2. Protokoll taucht doch ein x auf
Zitat:
Grüße Klaus |
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. |
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 |
AW: TSerial - RS232 ansprechen
Schmeiß erst einmal das "with" raus. Und dann scheint da noch das "end" zum "finally" zu fehlen.
|
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:
Um diese auszuführen bzw. RTS zu schalten sollte ich sie doch lediglich so:
procedure TCOM.SetRTS(const Value: boolean);
begin if (Value = True) then EscapeCommFunction(FHandle, WinTypes.SETRTS) else EscapeCommFunction(FHandle, WinTypes.CLRRTS); end;
Delphi-Quellcode:
ausführen können oder nicht?
SetRTS(true);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 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