武汉波仕电子公司 2009-10 027-51518044 孙汉华
本文所说的“串口”是指RS-232或者RS-485/RS-422口,但是由于RS-485(或RS-422)口一般都是从PC机的RS-232口转换而来,其软件是通用的,所以本文评论的“串口”一般就指PC机的RS-232口。这里所说的“虚拟串口”是指通过USB/串口转换器生成的串口。有人在使用USB/串口转换器时发现某些以前在传统RS-232口上运行正常的软件却不能够使用,因而就说通过USB转换出来的串口不是真正的串口。这里所谓的“传统RS-232口”是指从PC机的主板或者从总线,比如台式机的PCI或者ISA总线、笔记本的PCMCIA总线上扩展出来的RS-232口,是有真实物理地址的串口。USB的全称是通用串行总线,它与PCI之类的并行总线有本质的区别。USB口没有分配固定的总线I/O地址也没有固定中断号,它的地址是通过软件来虚拟的,而传统的RS-232口有固定的I/O地址以及中断号。这就是某些通信软件在传统RS-232口可以运行而在USB/串口转换器的RS-232口上不能够运行的原因。如果通信软件内有直接I/O读写语句,那么肯定无法在USB/串口转换器的串口上运行。另外还有一个原因就是对RTS/CTS、DTR/DSR这些握手信号的操作,即使是通过虚拟读写不是通过直接I/O读写来操作这些握手信号,但由于USB/串口转换器对这些握手信号的虚拟读写过程的初始化往往比较耗时,所以容易导致握手信号读写失败。
现在的台式计算机大部分还都保留有一个真实物理地址的RS-232口,一般是COM1口。如果在计算机的背后有一个DB-9针的口,那就是COM1串口。COM1串口的基地址为3FC,COM2串口的基地址为2FC。在WINDOWS me以及以前版本操作系统下可以直接进行物理地址的I/O读写操作,比如
BASIC语言为OUT &H3FC,2 汇编语言为OUT 3FC,2
PASCAL语言为port[$3fc]:=2; C语言为outportb (0x3fc,2);
VC++语言为:_outp (0x3fc,2);
在Windows XP以及以后版本操作系统下,上面的语句已经禁止执行,但是可以将I/O操作指令编为动态连接库来调用,可以达到一样的I/O操作效果。
USB/串口转换器的虚拟串口代替传统的RS-232、RS-485、RS-422口是必然的发展趋势,就象PCI总线代替ISA总线、Windows代替DOS一样,尽管后者都更加适合工业通信和工业测控。Windows操作系统从来不是优先考虑工业通信和工业测控的实时性要求,反而越来越抛弃工业通信和工业测控。只有CPU、总线等硬件速度的改进使延时减小从而接近实时性。由于通过虚拟I/O操作代替物理的固定I/O读写是解决Windows可靠性的一条基本原则,所以用户越来越远离Windows内核的操作。事实上,从Windows XP开始就没有了直接I/O读写指令,甚至Windows me的直接I/O读写也是通过将DOS的I/O读写指令编辑成为动态连接库然后来调用的。Windows XP下的直接I/O读写是通过动态连接库的调用来实现,参见波仕电子网站的软件。另外减少USB虚拟串口对RTS/CTS、DTR/DSR这些握手信号的虚拟操作的延时也是一个技术难点,这主要是由USB/串口转换器内部UART的信号初始化处理延时导致的。避免频繁使用最好不要使用这些握手信号是较好的解决方法。波仕电子所有产品的RS-485接口均使用了零延时自动收发转换技术,这就保证转换过程中不需要任何握手信号来控制收与发的切换。
如果你的计算机的RS-232口是从USB转换出来的,那么肯定地说,这个RS-232口一定是虚拟串口。这是由USB的特性决定的。虚拟串口由于没有真实物理地址所以是不能够进行以上的对COM口地址(比如3FC、2FC)的I/O读写操作,包括用调用动态连接库的方法。USB口当然是可以进行其他地址的I/O操作的,可以参考波仕的U46BL、U812BL产品说明书。
如果你的计算机串口是从台式计算机的PCI插卡扩展出来的,那么目前的产品我们还没有见到虚拟串口的,也就是说现在的PCI串口卡都是真实物理地址的串口。由于PCI串口卡的电路板是没有壳子的,所以我们也很容易地从电路板上的元件型号看出来。从原理上来讲,也可以从PCI口先扩展出USB口再将这个USB转换出RS-232口。我们现在的许多笔记本的内置光驱就已经采用了USB口(不是指外挂的光驱!)。当你准备拔下U盘,按照要求用鼠标点击左面右下脚的“安全删除硬件”,如果同时出现USB光驱的提示就是说明你的笔记本光驱是USB接口的,虽然实际物理接口可能是一排插针的插卡。
唯一有可能混淆的是PCMCIA串口卡以及改进型EXPRESS CARD串口卡扩展出的RS-232口。大部分PCMCIA串口卡扩展的RS-232口都是真实物理地址的,否则就失去了它相对USB的优势。PCMCIA对于笔记本的作用就象PCI对于台式计算机一样。波仕的PCMCIA、EXPRESS CARD串口卡扩展出来的都是真实物理地址的串口。EXPRESS CARD是PCMCIA的一种改进,有L形和条形,见波仕PCMCIA232的说明书。EXPRESS CARD 与PCMCIA并不兼容。最近已经出现了某些EXPRESS CARD串口卡扩展出来的RS-232口并不是真实物理地址的串口,而是先将EXPRESS CARD转换成为USB然后再转换出RS-232口。如果你有包含读写串口物理地址的程序,就无法在这样的EXPRESS CARD上运行。
如何识别EXPRESS CARD扩展的串口是虚拟串口还是真实物理地址串口呢?以Windows XP为例,先安装驱动程序。点击:我的电脑属性系统属性硬件设备管理器端口,找到新出现的COM口,再点击: 属性详细信息,如果是真实物理地址的串口,就会显示物理地址以及中断号,比如3FC、2FC之类,如果是USB虚拟串口,就会显示USB的字样,比如设备范例ID:USBVID_067B&PID_23035&18CD3484&1&2。
如果你对以上的USB虚拟串口、PCI或PCMCIA扩展的串口都不满意,那么还有一种选择,就是以太网/串口转换器,见波仕ETH232系列说明书。虽然以太网/串口转换器生成的RS-232口也是虚拟串口,但是它并不出现在“设备管理器端口”中,所以也无法用上面看“属性详细信”的方法。我们大量应用的实际情况表明,以太网虚拟串口的通用性好于USB虚拟串口,可能是由于以太网支持全双工通信的原因。以太网/串口转换器的缺点是需要供电,另外驱动程序以及虚拟串口程序是专用的。