Delphi 7 Serial Port

broken image


Listening to serial port on Delphi 7 closed Ask Question Asked 9 years, 7 months ago. Active 3 years, 11 months ago. Viewed 16k times 5. This question needs to be more focused. It is not currently accepting answers. Serial Port Synchronization in Delphi. See Reading binary data from serial port using Dejan TComport Delphi component for an example, but as MBo says. Torry's Delphi Pages. Description The Serial Framework is the Software Developer Kit (SDK) for software developers that provides an easy access to the Serial Ports features on the Windows desktop. The Windows Standard Serial Communications Library for Delphi (WSC4D) is an serial communication library based on the Windows Includes 52 functions plus modem control, serial comm API. To a serial port from within a Delphi application. A simple interface allows accessing data from a serial port using RS232 or multi-drop RS422 / RS485 serial ports.

Serial I/O (RS232) Using Delphi (RS232)

Serial
All Intel PCs have one or two serial ports usually referred to as Com1 and Com2. These comm ports provide voltages and pin outs consistent with RS-232C. Normally, these ports are used for mice, modems, printers, and the like.

Using ActiveXperts Serial Port Component with Delphi. ActiveXperts Serial Port Component is a software development kit (SDK) that enables the user to communicate to a device over a serial interface. Such a device can be: a weight indicator, a modem, a scanner, or any other device that is equiped with a serial port. How do I read in from a serial port. Serial port and reading the RX buffer? Reading/writing serial port - code won't work. Read/Write the parallell or serial port in NT. Win95: Reading Serial port with Delphi. Reading a serial port. Serial Port - Reading from??? Reading serial port COM1. Try to read from serial port.

Under DOS, it was possible to directly access these ports. However, Windows 95 and above forbid direct hardware access. Therefore, this page exists to help get around windows.

Generic References | Basic Commands | Writing a Port | Reading a Port | TCommPort | Additional References

Generic References

I provide numerous references in Serial I/O (RS232).

Basic Commands

I really don't get it, with all the available windows API commands, why doesn't Delphi provide a built-in wrapper function for SerialIO?

Borland provides the following Delphi FAQ's (delphi-faq.zip 915K).

  • 16193: Setting comm port configuration programmatically under Win95
  • 16199: Changing com port config via Win95 CommConfig Dialog
    (Pure gold :) ... except that only the baud rate can be changed :( the other 4 fields are ignored.
  • 16400: How can I dial out through the modem under Win32?
    How to write to the comm port
  • 16774: How can I determine the names of the installed comm ports?
    The data is read from the registry
In addition to the Delphi File I/O commands, there are several Windows API commands. Most of these comm
Delphi 7 Serial Port
commands (such as CommConfigDialog) are defined in kernel32.

Writing a Port

The following code from FAQ 16400 shows how to write to the comm port as a file. The code in the FAQ also verifies a valid handle before writing to it. Warning: There is an error in the FAQ - NumberWritten
Communication
must be dword not LongInt

This code works for comports 1 thru 9, but not for ports 10 and higher. Instead, use code similar to the following

Reading a Port

Well, reading the port is almost trivial ... if you know the trick.

You must configure the TimeOutBuffer. I don't know what good values should be, so I used 300.

Having done that, ReadFile waits until I scan a barcode. Eventually, I will use ReadFileEx because it will call a routine when a barcode is scanned.

Once the port is open and configured, here are 2 routines that will read the port. For test purposes, each was connected to its own button. Uh, both routines work when run from the IDE ... the second refuses to work if you double click on the exe file. I have no idea why.

Delphi 7 Serial And Key

This next routine works from the IDE, but not if you run the app by double clicking the exe file.

When CreateFile, ReadFile, and WriteFile are used, Delphi does not use MSComm. Instead, it uses the following Kernel32 commands (found using Depends.exe)

If you try to search the Delphi 5 help for ReadFile, there are no hits. This is because ReadFile is a Windows API command ... not a Delphi command. Instead, click on it in your code and press F1.

Here is a reference that helped me develop this section.

TCommPort

On the Internet, there are several TCommPort type components (see the references below or just search for them).

I have been successful using TCommPort by Dirk Claessens (freeware with full source code).

Delphi 7 serial portable
All Intel PCs have one or two serial ports usually referred to as Com1 and Com2. These comm ports provide voltages and pin outs consistent with RS-232C. Normally, these ports are used for mice, modems, printers, and the like.

Using ActiveXperts Serial Port Component with Delphi. ActiveXperts Serial Port Component is a software development kit (SDK) that enables the user to communicate to a device over a serial interface. Such a device can be: a weight indicator, a modem, a scanner, or any other device that is equiped with a serial port. How do I read in from a serial port. Serial port and reading the RX buffer? Reading/writing serial port - code won't work. Read/Write the parallell or serial port in NT. Win95: Reading Serial port with Delphi. Reading a serial port. Serial Port - Reading from??? Reading serial port COM1. Try to read from serial port.

Under DOS, it was possible to directly access these ports. However, Windows 95 and above forbid direct hardware access. Therefore, this page exists to help get around windows.

Generic References | Basic Commands | Writing a Port | Reading a Port | TCommPort | Additional References

Generic References

I provide numerous references in Serial I/O (RS232).

Basic Commands

I really don't get it, with all the available windows API commands, why doesn't Delphi provide a built-in wrapper function for SerialIO?

Borland provides the following Delphi FAQ's (delphi-faq.zip 915K).

  • 16193: Setting comm port configuration programmatically under Win95
  • 16199: Changing com port config via Win95 CommConfig Dialog
    (Pure gold :) ... except that only the baud rate can be changed :( the other 4 fields are ignored.
  • 16400: How can I dial out through the modem under Win32?
    How to write to the comm port
  • 16774: How can I determine the names of the installed comm ports?
    The data is read from the registry
In addition to the Delphi File I/O commands, there are several Windows API commands. Most of these comm commands (such as CommConfigDialog) are defined in kernel32.

Writing a Port

The following code from FAQ 16400 shows how to write to the comm port as a file. The code in the FAQ also verifies a valid handle before writing to it. Warning: There is an error in the FAQ - NumberWritten must be dword not LongInt

This code works for comports 1 thru 9, but not for ports 10 and higher. Instead, use code similar to the following

Reading a Port

Well, reading the port is almost trivial ... if you know the trick.

You must configure the TimeOutBuffer. I don't know what good values should be, so I used 300.

Having done that, ReadFile waits until I scan a barcode. Eventually, I will use ReadFileEx because it will call a routine when a barcode is scanned.

Once the port is open and configured, here are 2 routines that will read the port. For test purposes, each was connected to its own button. Uh, both routines work when run from the IDE ... the second refuses to work if you double click on the exe file. I have no idea why.

Delphi 7 Serial And Key

This next routine works from the IDE, but not if you run the app by double clicking the exe file.

When CreateFile, ReadFile, and WriteFile are used, Delphi does not use MSComm. Instead, it uses the following Kernel32 commands (found using Depends.exe)

If you try to search the Delphi 5 help for ReadFile, there are no hits. This is because ReadFile is a Windows API command ... not a Delphi command. Instead, click on it in your code and press F1.

Here is a reference that helped me develop this section.

TCommPort

On the Internet, there are several TCommPort type components (see the references below or just search for them).

I have been successful using TCommPort by Dirk Claessens (freeware with full source code).

I strongly suggest using someone else's component rather than trying to build one yourself. Why? Because they have already been tested on numerous systems and various undocumented 'features' have been taken into account.

Additional References

There are numerous communications routines available at Torry's Delphi Pages, including
  • TSerial (shareware) is frequently mentioned in the Delphi newsgroups
  • Delphi I/O Port Programming under NT v2.0 which includes a driver for manipulating the kernel I/O permissions map
  • Simple I/O for Windows 95/98 only. Assembler code fails in NT.
Dirk's Delphi Pages - lots of freeware with source code - including TCommPort. Author: Robert Clemenzi - clemenzi@cpcug.org
URL: http:// cpcug.org / user / clemenzi / technical / Languages / Delphi / Delphi_SerialIO.htm

Windows Standard Serial Communication Library for Delphi

The Windows Standard Serial Communications Library for Delphi (WSC4D) is an serial communication library based on the WindowsAPI. Includes 52 functions plus modem control, serial comm API. WSC4D uses the core Windows API to communicate with any device connectedto a serial port from within a Delphi application.

A simple interface allows accessing data from a serial port using RS232 or multi-drop RS422 / RS485 serial ports. WSC also supports virtual ports such as those created by Bluetooth and USB/serial converters. WSC4D provides the capability to quickly write 32 bit and 64 bit Delphi applications to control serial devices such as barcode scanners, modems, lab instruments, medical devices, USB serial devices, scales, GPS navigation, etc.

Delphi 7 Serial Port Example

The Delphi component library includes 49 functions plus serial line status & control, modem control,ASCII/XMODEM/YMODEM protocols, and a good selection of Delphi exampleprograms.

Delphi 7 Serial Port Orange

WSC4D can be used with any version of Borland/Codegear/Embarcadero Delphi (including Embarcadero XE8 and Delphi 10 Seattle/Berlin).

Features of WSC4D include:

  • Includes 64-bit (WSC64.DLL) and 32-bit (WSC32.DLL) versions.
  • Free technical support and updates for one year.
  • Royalty free distribution with your compiled application.
  • Evaluation versions are fully functional. No unlock code is required.
  • Includes 52 functions plus modem control.
  • Can control any serial device (scale, barcode reader, etc.) connected to a serial port.
  • Can be used from GUI mode or console mode programs.
  • Can control multiple ports simultaneously.
  • Can be used with virtual serial ports using Bluetooth serial or a USB to serial converter.
  • Supports RS232, and multidrop RS422, and RS485 ports.
  • Includes hardware and software flow control.
  • Supports character peek (SioEventChar).
  • Supports transmit and receive timeouts.
  • Can send Windows messages on completion of events (incoming character, etc.)
  • Supports any baud rate (32-bit and 64-bit versions).
  • Ability to specify the parity, word size, and number of stop bits.
  • Comes with ANSI emulation and ASCII, XMODEM and YMODEM.
  • Supports binary and text data transfer.
  • Is port re-entrant.
  • State driven Xmodem and Ymodem on multiple ports simultaneously.
  • Is fully thread safe.
  • Supports Windows XP through Windows 10.
  • Works with all 32-bit versions of Borland, Codegear and Embarcadero Delphi.
  • Works with 32- bit and 64-bit verisons of Embarcadero Delta XE through Delphi XE8, and Delphi 10 Seattle and Berlin.
  • Does not depend on support libraries. Makes calls to core Windows API functions only.
  • Can be used with any program in any language (C/C++,.NET, Delphi, VB, VB.NET, Foxpro, etc.) that can call the Windows API.
  • License covers all programming languages. Purchase a developer license for WSC4D and use the DLLs with any other development environment (C++, Visual FoxPro, etc).
  • Implemented as a standard Windows DLL, which will work with all versions of Windows.
  • Will run on machines with or without .NET installed
  • Can be purchased with or without ANSI C source code to the WSC DLLs.
  • Documentation online as well as in printable format.

WSC4D can be used in the development of Win32 and Win64Delphi applications running under Windows XP through Windows 10.The evaluation version of WSC4D is fully functional.

The current version of the Windows Std Serial Comm Lib for Delphi is 7.0 (October 3, 2019).Registration is $119 for email delivery ($199 with C language source code).

Order

Order Page

Links

HOME
Download WSC4D
WSC4D Programmer's Manual
WSC User's Manual
WSC Reference Manual




broken image