Solved

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

Posted on 2000-03-06
12
330 Views
Last Modified: 2010-04-04
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
Comment
Question by:Probie
  • 3
  • 3
  • 3
  • +3
12 Comments
 
LVL 1

Expert Comment

by:yk030299
ID: 2589790
haha. 50pts costs this:
:-)
assignfile(f,'COM1:');

read(f,byte1);
write(f,byte1);
0
 
LVL 17

Expert Comment

by:inthe
ID: 2590421
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
 
LVL 1

Author Comment

by:Probie
ID: 2590596
Well, I would also like to know how I can setup the port, using all the possible setup values (bps, 7/8bit, stopbit)
0
 
LVL 9

Expert Comment

by:ITugay
ID: 2590716
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
 
LVL 8

Expert Comment

by:ZifNab
ID: 2590767
Hi Probie,

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

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

Zif.
0
 
LVL 4

Expert Comment

by:jeurk
ID: 2615476
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 17

Expert Comment

by:inthe
ID: 2616120
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
 
LVL 8

Expert Comment

by:ZifNab
ID: 2617065
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
 
LVL 1

Author Comment

by:Probie
ID: 2617605
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
 
LVL 17

Accepted Solution

by:
inthe earned 50 total points
ID: 2617715
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
 
LVL 1

Author Comment

by:Probie
ID: 2618126
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
 
LVL 8

Expert Comment

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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now