Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi COM - Port Kommunikation (https://www.delphipraxis.net/6990-com-port-kommunikation.html)

schneckman 29. Jul 2003 14:40


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.

Sanchez 29. Jul 2003 14:43

Re: COM - Port Kommunikation
 
hallo,

wie versuchst du aufs comport zuzugreifen?

schneckman 29. Jul 2003 14:50

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.

flomei 29. Jul 2003 14:58

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:

schneckman 29. Jul 2003 15:01

Re: COM - Port Kommunikation
 
Kann ich denn den Treiber mit Delphi benutzen? Wenn ja: wie?

flomei 29. Jul 2003 15:57

Re: COM - Port Kommunikation
 
Naja vom Prinzip her geht das wie folgt:
Code:
OS Check ---> Kein NT System ---> Keinen Treiber laden
  |
  |
  |
  v
NT System
  |
  |
  |
  v
Treiber laden
  |
  |
  |
  v
Arbeiten
  |
  |
  |
  v
Beim Beenden Treiber entladen
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 www.torry.ru zu suchen. Dort findet sich bestimmt die ein oder andere Komponente oder ein Treiber.

MfG Florian :hi:

mika 29. Jul 2003 17:02

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:

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;
Hoffe das hilft dir, aber nicht beschweren über fehlende Variablen oder
so :) hab es wie gesagt nur schnell hier reingeworfen.



Gruß, Mika

schneckman 31. Jul 2003 12:33

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.

BungeeBug 31. Jul 2003 15:21

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.

schneckman 5. Aug 2003 12:38

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 03:12 Uhr.
Seite 1 von 2  1 2      

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