• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 354
  • Last Modified:

How do I talk to a COM port under Windows9x/NT/2000 using Delphi?

Can anyone give me an example on how to reterive and send data (byte by byte) to/from a COM port using 2400bps as speed 8bit?
0
Probie
Asked:
Probie
  • 3
  • 3
  • 3
  • +3
1 Solution
 
yk030299Commented:
haha. 50pts costs this:
:-)
assignfile(f,'COM1:');

read(f,byte1);
write(f,byte1);
0
 
intheCommented:
Hi
i would use a component from here:
http://www.torry.ru/comms.htm
the Async32 v1.49 one is good and for free.
Regards Barry
0
 
ProbieAuthor Commented:
Well, I would also like to know how I can setup the port, using all the possible setup values (bps, 7/8bit, stopbit)
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
ITugayCommented:
The best library to work with COM ports is "Asyncpro" by TurboPower. (It may be only my idea).  There you can download trial version of it. If you will have "some troubles" with trial version,just  let me know;)


http://www.turbopower.com/products/apro/

Best regards,
igor@novell.kz
0
 
ZifNabCommented:
Hi Probie,

I prefer this one: free and works like a charme.

http://www2.arnes.si/~sopecrni/

Zif.
0
 
jeurkCommented:
Hello,

Zif ? Would you recommend that component
even for some commercial stuff. It's for
big and heavy productive use. Is it really working like a charm ?
Have you tested version 2.51 ? or 2.50 ?
Thanks

-Jeurk.
0
 
intheCommented:
probie,
if you use any of the components we have suggested they have examples etc and you can set baud rates etc in object inspector..or code:

with comport1 do begin
device := comm2;
baudrate := br9600;
databits := da8;
stopbits := sb10;
end;
0
 
ZifNabCommented:
Hi jeurk,

Yes, I've tested it, but not in heavy productive use. However, I'm going to use it in a commercial product.

Regards, Tom.
0
 
ProbieAuthor Commented:
How does all these components work?
Is there any Windows API that can be used or can I write direct to the port.
like:
 mov DX,0x2F8;
 out DX,FF;
(which I know how to do)

I guess that windows uses the COMM.DRV file located in C:\WINDOWS\SYSTEM
But how does windows use this file and can I use it myself in delphi?


0
 
intheCommented:
you should download some of them and study the sources.the one i posted and the one zif posted comes with sources so you can see how they do it.
basicaly they are using the
createfile,readfile etc api's..
example:
procedure TForm1.Button1Click(Sender: TObject);
 var
   CommPort : string;
   hCommFile : THandle;
   ModemStat : DWord;
 begin
   CommPort := 'COM2';

  {Open the comm port}
   hCommFile := CreateFile(PChar(CommPort),
                           GENERIC_READ,
                           0,
                           nil,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           0);
   if hCommFile = INVALID_HANDLE_VALUE then
   begin
     ShowMessage('Unable to open '+ CommPort);
     exit;
   end;

  {Get the Modem Status}
   if GetCommModemStatus(hCommFile, ModemStat) <> false then begin
     if ModemStat and MS_CTS_ON <> 0 then
       ShowMessage('The CTS (clear-to-send) is on.');
     if ModemStat and MS_DSR_ON <> 0 then
       ShowMessage('The DSR (data-set-ready) is on.');
     if ModemStat and MS_RING_ON <> 0then
       ShowMessage('The ring indicator is on.');
     if ModemStat and MS_RLSD_ON <> 0 then
       ShowMessage('The RLSD (receive-line-signal-detect) is
 on.');
 end;

  {Close the comm port}
   CloseHandle(hCommFile);
 end;

but it is so much simpler to use a component than do it all by code.
have you looked at any of them yet ?

0
 
ProbieAuthor Commented:
Yes, but I wan't to learn how it works.
Not just use a component that someone else has written.
I wrote many COM applications during the old Turbo Pascal time by writing direct to the COM port and the status registers that is used like:
2F8h,2F9h,2FAh.
I basiclly wanted to know the name of the Windows API, which I now do with help of the example Inthe gave.





0
 
ZifNabCommented:
If you look at the source code's of the components we published, you can learn everything from it.
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 3
  • 3
  • 3
  • +3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now