有个问题想向大家虚心请教!
有哪方面的程序可以使两个程序通过一个物理串口<RS-232>去程控一台外部设备,即把一个虚拟串口映射到真实串口,使两个程序上的串口设置不会产生冲突,但又能同时控制一台外部设备.进行一系列的读写操作.我曾使用过最新版本的ELTIMA Serial Splitter,但不知为何总是不成功的.
注:我正在用VB编写两个程序(双线程)同时共享一台仪器,该仪器是使用RS-232通信协议的.但由于串口是独占性资源的,因此不能两个进程同时去占用它.或者哪个高手有这方面的解决方案,也可详细告知我.
谢谢!
My personal email address: [email protected]

解决方案 »

  1.   

    可一把其中一台作为服务器,另外一台作为客户端,串口设备连接在服务器上,当服务器和串口通讯时,同时和客户端用WINSOCK控件建立连接,把接收和发送的数据实时再传给客户端不就可以了.
      

  2.   

    hubeigaofeng(湖北峰仔):]
      我的是意思是指:同一台电脑、两个EXE程序(两个进程)、同一个串口,共同访问一台外部设备.(该设备与电脑间通信是用RS-232),所以要实现以上目的,首先要解决串口独占性资源的瓶颈问题。
      

  3.   

    ZOU_SEAFARER(国际海员):
      时间轮片应该是个很不错的概念,但具体怎样实现不是很清楚,据我所知应该涉及到多线程方面的吧?可否详细指点一下?或者给些代码参考?谢谢!
      

  4.   

    做一个Active Exe串口通信服务器的中间件就行,可以实现n个程序共享一个串口。
      

  5.   

    如何做一个Active Exe串口通信服务器的中间件?听起来很有意义,可否再详尽道来啊?非常感谢!
    呵呵~各位的主意都不错,但对这方面有所了解的朋友可否说具体详细一点,因为我有点无所适从的感觉了。再次感谢!
      

  6.   

    benyfeifei:
      可否给一个关于<Active Exe串口通信服务器的中间件>具体的实例或源码我参考?如问题解决后马上结贴赠分。
      

  7.   

    在不知道外部设备的通讯指令格式(即通讯协议)的情况下,楼主你的想法几乎是无解的。假设:
    1. 通讯协议(通讯指令)是不定长的;
    2. 有这么一个程序能虚拟出两个串口,并能将这两个串口接收到的数据“合并”后从另外一个物理串口发送给外部设备。那么,这个关键的“合并”操作到底该如何进行呢?是接收到任何数据就直接从物理串口发送出去吗?如果是,那么外部设备将接收到一个不伦不类的指令。这个程序有点类似于TCP的网络代理(Proxy),但是由于外部设备并不象提供TCP服务的主机那样可以同时支持多个连接,所以不仅存在着上面说的指令发送给外部设备的问题,同时还存在着外部设备返回的数据该返回给哪个命令发送方的问题。难啊!
      

  8.   

    如果楼主的外部设备只是受控制,而不会返回数据;如果楼主的外部设备接收的命令长度不长且命令发送的频率不高,
    那么,楼主可以考虑一定时间的轮流独占的方式。即:从A虚拟串口接收到数据后,在一段时间内从B虚拟串口接收到的数据只缓存而不发送,直到A虚拟串口在一定时间内不再接收到数据,然后再将B虚拟串口接收并缓存的数据发送,如此反复。至于如何虚拟出串口来,网上已经有现成的程序了,它可以虚拟出多个串口,并能将从虚拟串口中接收到的数据转换成TCP或UDP数据包。
    这样一来,你只需要写一个程序,一方面是接收TCP数据包的TCP/IP通讯,另一方面是连接外部设备的串口通讯。只是,这个程序不得不考虑我上面所谈到的这些问题。
      

  9.   

    外部设备是一台测试仪,需要受控及返回数据给PC.因此按你的说法"一定时间的轮流独占的方式"也是其中一种方法,即"时序占用资源",早前我也尝试过了,但由于两进程对仪器的操作次数太频繁了,所以实现起来不是那么容易.可能是我的方法不对吧,我也很想采用"时间轮片方法
    "或"Active Exe串口通信"的方法,请熟悉这方面的高手不吝赐教吧!
    虚拟出串口的程序,我上网查过,最为理想的是ELTIMA Serial Splitter,并也安装试用过,但不知为何,我设置好一个物理串口附加一个虚拟串口之后运行于后台,再运行VB程序,竟然说那个物理串口已经打开,并且虚拟串口也不能使用.我猜测是那个ELTIMA Serial Splitter占用了物理串口,而VB再使用物理串口便返回串口占用的信息了.郁闷....!
    各位有谁知道更好的虚拟串口的软件(可以把虚拟串口映射到物理串口,实现串口资源共享的),介绍一下吧.谢谢!
      

  10.   

    外部设备是一台测试仪,需要受控及返回数据给PC.因此按你的说法"一定时间的轮流独占的方式"也是其中一种方法,即"时序占用资源",早前我也尝试过了,但由于两进程对仪器的操作次数太频繁了,所以实现起来不是那么容易.可能是我的方法不对吧,我也很想采用"时间轮片方法
    "或"Active Exe串口通信"的方法,请熟悉这方面的高手不吝赐教吧!"时间轮片方法"是不可取的,原因我前面已经分析过了,通讯会乱套的。
      

  11.   

    jadeluo(秀峰):
    "Active Exe串口通信"的方法呢?或有哪种好用的虚拟串口软件可以推荐一下?谢谢!