C++ 连续检查串行端口上的状态

C++ 连续检查串行端口上的状态,c++,qt,serial-port,C++,Qt,Serial Port,我在用QT开发的串行应用程序中遇到一些问题 我需要通过串行连续输出一个命令,以从我使用的控制器(电机位置、电机速度等)获得回复 它看起来像这样: void MainWindow::updateMCTarRotvalues() { HANDLE RS232Handle; RS232Handle=OpenRS232(MotorControlCommPortSelection(), 9600); SendCmd(RS232Handle, 1, 6, 3, 5, 0)

我在用QT开发的串行应用程序中遇到一些问题

我需要通过串行连续输出一个命令,以从我使用的控制器(电机位置、电机速度等)获得回复

它看起来像这样:

void MainWindow::updateMCTarRotvalues()
{
      HANDLE RS232Handle;
      RS232Handle=OpenRS232(MotorControlCommPortSelection(), 9600);
      SendCmd(RS232Handle, 1, 6, 3, 5, 0); //motor 5 get speed
      auto result = GetResult(RS232Handle);
      QString AddressOutCS = QString::number(result.address);
      QString GuessOutCS = QString::number(result.guess);
      QString StatusOutCS = QString::number(result.status);
      QString ValueOutCS = QString::number(result.value);
      CloseRS232(RS232Handle);

      RS232Handle=OpenRS232(MotorControlCommPortSelection(), 9600);
      SendCmd(RS232Handle, 1, 6, 3, 4, 0); //motor 4 get speed
      auto result2 = GetResult(RS232Handle);
      QString AddressOutCS2 = QString::number(result.address);
      QString GuessOutCS2 = QString::number(result.guess);
      QString StatusOutCS2 = QString::number(result.status);
      QString ValueOutCS2 = QString::number(result.value);
      CloseRS232(RS232Handle);
}
然后我使用QString变量来打印我要查找的数据

我想出了一个使用QTimer调用函数的解决方案:

QTimer *timer2 = new QTimer(this);
connect(timer2, SIGNAL(timeout()), this, SLOT(updateMCTarRotvalues()));
timer2 -> start();
这实际上对一个电机很有效,但现在当我想调用另一个电机参数时,我得到了变量的混合。这意味着有时AddressOutCS不是电机5,而是电机4。如果这有道理的话。它类似于异步运行函数,并发生混合

我希望我能很好地解释我的问题,以便得到一些帮助。如果不清楚,请告诉我


是否有更好的解决方案?

似乎问题出在发送的数据上?如果在程序看到它的时候它是混合的,那么你似乎没有什么可以做的。你能控制数据的发送方式吗?我只是在使用控制器附带的一些C代码。实际上,我在这里发布了另一个问题,将其转换为使用QSerial。你认为这会有帮助吗?也许可以引入互斥来确保一次只发送一组参数?还有其他想法吗?我试图把一些延迟和诸如此类的东西放进去,但似乎什么都不管用。我真的不想把所有的东西都转换成使用QSerial集成,因为我甚至不确定这是否有效。持续打开和关闭串行端口的想法是错误的。这可能需要很长时间,是阻塞,你不应该这样做。您应该打开
QSerialPort
实例并准备好执行命令。