![]() |
COM - Port Kommunikation
Hallo allerseits,
ich versuche meinen COM1 Port über Delphi 5 anzusprechen, aber bekomme immer wieder Fehlermeldungen wie "nicht erlaubter Zugriff". Liegt es an meinem OS (win2000)? Kann mir jemand weiterhelfen? Ich möchte nur eine bestimmte Zeichenkette an ein Gerät übertragen, dass an COM1 angeschlossen ist. |
Re: COM - Port Kommunikation
hallo,
wie versuchst du aufs comport zuzugreifen? |
Re: COM - Port Kommunikation
habe es mit AssignFile(f,'COM1') versucht (dann wie eine Datei behandelt)
und auch mit verschiedenen kleinen Programmen mit entsprechenden DLLs, die ich im Netz gefunden habe. Hat nichts funktioniert. Mein Problem ist eigentlich ganz simpel. Ich möchte "CC" oder "CW" an einen kleinen Motor übergeben, der an COM1 liegt. Dies hat auch schon funktioniert, aber mit anderen Programmen. Nun möchte ich es gerne in Delphi haben. |
Re: COM - Port Kommunikation
Das dürfte am OS liegen. Verhält sich wahrscheinlich ähnlich wie beim LPT ansteuern. Ist ein privilegierter Zugriff der Treibern vorbehalten ist.
MfG Florian :hi: |
Re: COM - Port Kommunikation
Kann ich denn den Treiber mit Delphi benutzen? Wenn ja: wie?
|
Re: COM - Port Kommunikation
Naja vom Prinzip her geht das wie folgt:
Code:
Wie genau man das macht weiss ich nicht und ich weiss leider auch nicht was man für nen Treiber nehmen muss, aber ich würde dir empfehlen mal auf
OS Check ---> Kein NT System ---> Keinen Treiber laden
| | | v NT System | | | v Treiber laden | | | v Arbeiten | | | v Beim Beenden Treiber entladen ![]() MfG Florian :hi: |
Re: COM - Port Kommunikation
Normalerweise brauchst du keinen Treiber wenn du nur Zeichen über den
ComPort senden willst, das sollte auch so gehen! Hier mal n paar Codeschnipseln, ich hoffe Sie helfen dir, hab die nur grade aus einer meiner Units kopiert und nicht extra angepasst. Beim Verständnis sollten die helfen ansonsten frag noch mal nach.
Delphi-Quellcode:
Hoffe das hilft dir, aber nicht beschweren über fehlende Variablen oder Const comport = 'com1'; FUNCTION OeffnePort():boolean; VAR DCB : TDCB; TIMEO : TCommTimeouts; BEGIN result := true; CommHandle:=CreateFile(pchar(comport), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); if CommHandle <= 0 then begin result := false; end else begin DCB.DCBlength:=SizeOf(DCB); DCB.ByteSize:=8; DCB.Parity:=NoParity; DCB.StopBits:=TWOSTOPBITS; DCB.BaudRate:=9600; DCB.Flags:=5123; // Wenn 2 Pins belegt sind DCB.EofChar:=#0; DCB.ErrorChar:=#0; DCB.EvtChar:=#0; DCB.XoffChar:=#0; DCB.XoffLim:=0; DCB.XonChar:=#0; DCB.XonLim:=0; SetCommState(CommHandle, DCB); GetCommTimeOuts(CommHandle, TimeO); TimeO.ReadIntervalTimeOut:=100; TimeO.ReadTotalTimeoutMultiplier:=0; TimeO.ReadTotalTimeoutConstant:=250; TimeO.WriteTotalTimeoutMultiplier:=0; TimeO.WriteTotalTimeoutConstant:=200; SetCommTimeouts(CommHandle, TimeO); end; END; // ............................................................................. PROCEDURE SchliessePort; BEGIN FileClose(CommHandle); END; // ............................................................................. FUNCTION SchreibePort (Text: string):boolean; VAR i,x : integer; BEGIN (* // Einen String senden, jedes Zeichen einzeln result := true; x := 0; For i := 1 to length(text) do begin x := x + filewrite(CommHandle, Text[I], 1); sleep (1); end; IF X <> length (text) then result := false; *) // String als ganzes senden result := true; i := filewrite(CommHandle, Text[1], Length(text)); If i <> Length(text) then result := false; END; // ############################################################################# FUNCTION INBuffer():integer; VAR l : TComStat; i : Cardinal; BEGIN ClearCommError(CommHandle,i,@l); if i = ce_txfull then purgecomm (commhandle, purge_txclear); Result:=l.cbInQue; END; // ............................................................................. FUNCTION LoescheBuffer():boolean; VAR temp : LongBool; BEGIN temp := purgecomm(commhandle,purge_txabort OR purge_rxabort OR purge_txclear OR purge_rxclear); If temp = false then result := false else result := true; END; // ............................................................................. FUNCTION LeseBuffer():String; VAR anzahl : integer; temp : string; BEGIN anzahl := InBuffer; SetLength(Temp, Anzahl); If anzahl > 0 then begin FileRead(CommHandle, Temp[1], anzahl); result := temp; end else result := ''; END; so :) hab es wie gesagt nur schnell hier reingeworfen. Gruß, Mika |
Re: COM - Port Kommunikation
Habe mitlerweile Erfolge erzielt!
Es ist mir mit einer Kombination von hier dargelegtem Wissen und einem sehr zu empfelenden Buch ("Handbuch der PC-Mess-und Steuertechnik") gelungen, meine 3 Befehle an die entsprechenden COM Ports zu senden. Danke an alle, die dabei geholfen haben! :hello: :hello: :hello: Wer genaueres wissen möchte, kann mich gerne kontaktieren. |
Re: COM - Port Kommunikation
Hi,
könntest dus evl. eben posten ... ich versuch nämlich grad ne Steuersoftware für ne Shimadzu UV-160/CL-750 zuschreiben. THX schon mal. |
Re: COM - Port Kommunikation
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
procedure Serielle_Schnittstelle_Pumpen; var Openstring: String; j : Integer; Zeichen : char; COM : integer; begin Openstring := 'COM'+IntToStr(COM)+':9600,N,8,1'; OPENCOM (pchar (Openstring)); for j:=1 to Length(tosend) do begin Zeichen:=tosend[j]; SendByte (ord(Zeichen)); end; SendByte (ord(VK_RETURN)); CloseCOM; end; damit´s funktioniert, braucht man natürlich noch eine entsprechende DLL. Meine heißt "RSCOMdec". Ich hoffe ich konnte helfen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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 by Thomas Breitkreuz