0

我有一些 C++ 代码可以与调制解调器通信,这些代码基于使用 boost 中的串行库的类BufferedAsyncSerial(参见此处)。用这样的 C++ 短代码

BufferedAsyncSerial device("/dev/ttyACM0",9600);
device.writeString("AT\r");
std::cout << device.readString() << std::endl;
boost::this_thread::sleep(boost::posix_time::seconds(2));
std::cout << device.readString() << std::endl;
device.close()

我能够AT在串行端口向模拟调制解调器发送命令,/dev/ttyACM0并从端口接收正确答案,即“ OK”。中间的睡眠是为了确保调制解调器有一些时间来处理输入。

所有这些我都包装在一个 xmlrpc 类中,以在不同的计算机上进行读/写通信(对于测试,它实际上是相同的),因此要使用xmlrpcpython 访问该功能:

device = xmlrpclib.ServerProxy("http://localhost:8080/RPC2")
device.serial.open("/dev/ttyACM0")
device.serial.send("AT\r")
for i in range(100):
    time.sleep(0.1)
    print device.serial.read()

在 C++ 服务器端,打开/关闭/读取/写入函数被相应地包装,端口名称和波特率相同。但是,当执行这些 python 函数时,它AT被发送到调制解调器(我可以通过 xmlrpc 连接读回它!),但是OK无论我尝试多久或多久尝试一次,都不会出现。

如果有可用的 C++/boost/serial/xmlrpc/python 专家,我将不胜感激。以下是一些额外的评论和说明:

  • 使用的C++ xmlrpc服务器是abyss/xmlrpc-c,我都不熟悉
  • 如果我将所有打开/写入/读取/关闭链编码在一个函数中,我无法通过 xmlrpc,我得到预期的结果
  • 我检查了对实际 BufferedAsyncSerial 实例的访问是通过一个类完成的,并记录了每个命令的顺序和详细信息。它们在两种情况下都是相同的,我不会错过任何东西。
  • 我还检查了我正在处理的对象是同一个对象,即在内存中具有相同的地址
4

0 回答 0