Connect to a remote IO Module with Windows
The network connectivity of LucidControl USB IO Modules opens them to a much wider field of remote io applications. Together with the Raspberry Pi, the USB IO Modules are e.g. able to measure or control temperatures over the Internet.
In earlier articles I described how the LucidControl USB IO Modules can be accessed over a network by employing a Raspberry Pi. There are solutions available that make the USB IO Modules ready for remote io network communication.
First of all, and that’s true for all described solutions, ser2net can establish a TCP communication on the network device server. The ser2net application is routing a data stream from a TCP socket to a local device like a serial port. And since our LucidControl USB IO modules use the standard USB CDM profile, they behave like a standard serial port. The LucidIoCtrl command line tool as well as the API support direct socket communication. We recommended this method for remote io solutions.
I also described how to create a virtual serial device with socat on a Linux client computer. Virtual devices are routed to a TCP socket of a network device server ser2net is listening to. The virtual devices are transparent and accessible on the client computer the same way as a local device is.
In this article I show now a method how to create virtual remote io devices on Windows operating systems which are routed to a USB IO Module connected to a network device server.
But why should you use this method, when the LucidControl tools support direct TCP connections?
Beside of the tools we provide it is also possible to access the USB IO modules directly. The protocol of the USB IO modules is fully documented and easy to understand. Because of this, a developer can implement the USB IO module from scratch sending data frames to devices.
ProfiLab-Expert 4.0 for example, accesses the USB IO Modules natively without using an API. It sends data frames directly via the serial port to the IO Module.
ProfiLab-Expert is an application for visualization and control of analog and digital signals. It allows you to employ the USB IO Modules in order to control e.g. a temperature by changing the state of a digital output module which controls a heater by switching it on and off.
How to create of a virtual remote IO device on Windows?
LucidControl USB IO Modules can be used with Windows without the need of a driver. The IO modules implement the standard CDM profile which most Windows versions support natively .
Linux provides with ser2net and socat all tools which are needed in order to create a network device server. Is can also provide a virtual device on the client computer connected to the network device server.
Windows does not provide such tools out of the box and third party tools are necessary. A comport needs installation of a new device. This requires a kernel mode driver what is very different compared to application software. Special skills are necessary in order to develop a device driver with Windows Driver Development Kit (WDK).
If an application running in user mode has a bug it should probably not crash the whole system. In worst case the application terminates, but the system should remain responsive. Other applications should not be affected by this and should continue running.
In kernel mode things are different and everyone who is involved into driver programming knows that the famous “blue screen” still exists and is not a thing of the past.
We developed device driver in the past for our RFID Universal Reader Module. This device is a reader for contactless cards that can e.g. access contactless passports. It can also be used in banking applications. PC/SC is a standardized interface and a reader should support the Windows Smart Card API. Having this experience, I belive I can estimate how complicated it is to develop a new kernel device driver working.
Fortunately, there are serial port redirectors available that install a new serial port which is forwarded to a TCP socket. We successfully tested our USB IO Modules e.g. with COM2TCP and the VSP driver of HW Group.
Finally, we put special attention on the open source project com0com. It is not a port redirector as e.g. the VSP driver is, but a null-modem emulator. It installs a pair of virtual serial ports connected to each other.
The picture explains the concept of connecting to a network device server via a null-modem emulator driver. At a first glance it seems to be difficult using two virtual serial ports instead of one. The gray highlighted part shows the function of the kernel mode driver, the yellow highlighted part shows applications running in user mode.
com0com creates a pair of serial port devices (here COMa and COMb) connected to each other. It receives data on COMa and sends it to COMb and vice versa.
This concept has a big advantage because it allows using an application running in user mode in between the serial ports. It accesses the serial port COMa and connects it with a remote io TCP socket. The program com2tcp (not to mix up with COM2TCP in capital letters) connects a serial port with a remote TCP socket. It belongs to the com0com project but it is not automatically installed by the setup and must be downloaded separately.
How to install com0com device driver?
The com0com project can be downloaded as a Windows installable file. On recent Windows versions the installation of the driver may fail. This happens because the driver is unsigned and new Windows versions test the driver signature.
Nowadays, Windows allows to use device drivers with a valid signature. While this was earlier only true for the 64 bit versions of Windows 7 it became more difficult in newer Windows versions to run unsigned kernel mode software. The validation of driver signatures can be disabled in general (e.g. when the system is started) but the complete deactivation should only be a temporary solution for a development computer. We cannot recommend this for a productive system.
On our download page we provide a signed driver of com0com that can be used with our USB IO Modules. The installation is straight forward and it is explained in this document.
Note:We are not the developer of com0com, we only signed the existing kernel modules and we appreciate the developers work very much. The com0com project can be found on Sourceforge.
Continue the installation as explained. Windows will ask you to confirm the installation of the signed software. Click Install in order to agree that you want to install the kernel mode driver signed with our signature. It can be necessary to confirm the signature several times during driver installation.
If Windows searches Windows Update in order to find a more recent driver you can skip this by clicking Skip obtaining driver software from Windows Update. There is no newer driver available than the one you already downloaded.
It might take a few minutes (at least on my system) to complete the installation.
After the installation has completed, com0com devices appear on the Ports section. In this example you can see the new installed serial ports COM6 and COM7.
It is possible to change com0com ports settings and to create lso new ports with Setup for com0com. The installation process copies this application to the system during the com0com setup.
How to setup TCP redirection ?
This screen shot shows the current configuration on our machine. It is possible to create a new pair of linked serial ports by clicking onto Add Pair. The installation of a new pair of serial ports took some time on our machine because Windows Update was looking for some more recent driver versions.
The fresh created ports have the names CNCA2 and CNCB2.
For compatibility reasons we recommend using standard names for serial ports. Some applications may not be able to work with a serial port name like CNCA0 but needs standard names like COM6. We also recommend activating use Ports class what installs a serial port in the Ports section of the device manager. Otherwise the port pair appears in the com0com section only.
The setup program recognizes the slow installation and shows a dialog. A confirmation could be necessary.
The fresh created ports have the names CNCA2 and CNCB2.
For compatibility reasons we recommend using standard names for serial ports. Some applications may not be able to work with a serial port name like CNCA0 but needs standard names like COM6. We also recommend activating use Ports class what installs a serial port in the Ports section of the device manager. Otherwise, the port pair appears in the com0com section only.
Connecting serial ports to a remote IO TCP socket
Now you can connect one virtual comport of the pair with the TCP socket of a network device server running ser2net.
This command connects the virtual serial port COM6 (that is connected to COM7) with the TCP port 4001 of the computer named RPI-AZ-2.
This command connects to COM7 with COM6. com2tcp opened and redirected COM6. LucidIoCtrl queries the USB IO Module for device information. The Analog Input Module answers and returns that it is able to measure 4 voltages in the range of 0 to 10V.
This article explained how to connect a virtual serial port to a TCP socket. It explained how to install the driver on a Windows machine and how to establish a connection to a network device server by using the LucidIoCtrl tool.
Although our tools and API support direct TCP socket communication, a virtual comport that is redirected to a TCP socket is helpful for compatibility reasons. E.g. using the USB remote io modules together with ProfiLab-Expert.
Using com0com it is possible to switch to remote io access quickly. If you are using USB IO modules locally, it is not necessary to change your software. You can change the comport number of the measurement object in order to route to an IO module connected to a remote network device server.