平台环境:WIN2000pro+VB6.O
问题描述:VB6编写的通信软件,通过串口自动接收外部设备发来的信息.现在存在的问题是当外部几个设备同时向通信软件发送数据时,MSCOMM控件是否能同时接收下来?
我同事告诉我在WIN2000的操作平台下,当同时来几个不同串口的数据时,MSCOMM控件只能接收到一个的数据.请熟悉该控件的同行,不吝赐教!在线等待!100分!!

解决方案 »

  1.   

    关键看你用几个串口了,如果你只控制com1然后在com1上并联多个串口设备,这时候这些串口设备必须要有防止竞争冒险的机制,也就是说大家不能同时发数据,要不然数据线上面的电平就乱了套了,其实这就像是一种总线结构了。还有就是必须建立通讯协议,每个设备首先判断目前又没有别的设备正占用总线,如果总线空闲,则开始发送数据包,每个数据包必须包含本设备的唯一标识,于是上位机能够判断到底是哪一台设备的数据从而正确处理。上位机发送数据的时候也必须在数据包中包含数据目的地设备的唯一表识,由于是总线结构,所有设备都接受到数据包,接收到数据包以后设备应该通过唯一标识判断数据是否是发给自己的,如果是自己的就处理,否则就抛弃数据包。
    如果你用com1和com2分别接收两台设备那就另当别论啦,呵呵。
    必须强调,总线上多台总线设备如果这些设备能够在同一时间点同时发送数据,那么只能说这些设备硬件设计上绝对不合格。和操作系统没有关系。我以前呆的一家公司就是在通过com处理8台设备。虽然最终用户用的是98系统,但是我们的开发环境全部在2000
      

  2.   

    我们采用的是MSCOMM数组来接收多台设备的数据,如MSCOMM(1)对应1设备,MSCOMM(2)对应2设备,依此类推.当MSCOMM(1)事件触发时,串口2的数据也刚好同时到,这样会不会导致在MSCOMM(1)事件接收到的是串口2的数据.
      

  3.   

    两个不同的控件对应不同的串口数据不会冲突,需要注意的一点是:mscimm(1)的事件被触发以后必须等待事件处理完毕才会处理com2的事件。在这期间如果时间比较长可能会出点问题。但是绝大多数情况下没关系,除非你们的系统要求实时性比较高,不过串口本来就属于低速设备。你可以试验一下,你说的这种情况调试没什么难度