在C ++中将多个串行端口输入序列化为一个

时间:2012-11-12 16:40:33

标签: c++ serial-port

在我的场景中,我有4台设备通过RS232连接将串行数据发送到我的PC。我还使用硬件将所有4个数据流收集到一个USB连接中。

现在,此设置在Windows中创建了4个COM端口,这是我的问题,因为我有一个现成的软件读取 串口。

我正在尝试创建一个小型的C ++软件来从我的4个RS232串口端口获取数据包并将流转发到一个串口。交替数据包肯定会起作用。到目前为止,我已经知道了,我需要创建一个虚拟串行端口来编写序列化流,并确保现成的软件从中读取。现在我还没有对此进行过测试,但我认为如果没有桥接器,我将无法做到这一点,因为我无法保持端口打开以编写序列化数据并使用现成的软件打开它来读取数据

我当时要做的是

  • 设置虚拟端口
  • 设置到该虚拟端口的网桥
  • 将现成软件设置为从虚拟端口的副本中读取
  • 在我的C ++软件中,打开4个端口和虚拟端口
  • 将我的东西写入虚拟端口(参见COMport_TARGET下面)

我的问题

考虑下面的代码示例,

  • 你会这样做吗?
  • 你还怎么做?
  • 您将使用什么软件来设置虚拟端口和网桥?

这是一个应该执行此操作的天真代码:

unsigned char receiveBuffer[PACKET_LENGTH];

OpenCOMPort(COMport_A);
OpenCOMPort(COMport_B);
OpenCOMPort(COMport_C);
OpenCOMPort(COMport_D);

OpenCOMPort(COMport_TARGET); // This is the virtual COM Port to write to

while(true) {
    packetReadFromDevice(COMport_A);
    packetWriteToDevice(*(receiveBuffer), COMport_TARGET); // Write COM A data
    packetReadFromDevice(COMport_B);
    packetWriteToDevice(*(receiveBuffer), COMport_TARGET); // Write COM B data
    packetReadFromDevice(COMport_C);
    packetWriteToDevice(*(receiveBuffer), COMport_TARGET); // Write COM C data
    packetReadFromDevice(COMport_D);
    packetWriteToDevice(*(receiveBuffer), COMport_TARGET); // Write COM D data
    if(somethingHappens)
        break;
}

closeCOMPort(COMport_A);
closeCOMPort(COMport_B);
closeCOMPort(COMport_C);
closeCOMPort(COMport_D);

closeCOMPort(COMport_TARGET);

0 个答案:

没有答案