【问题标题】:Opening a virtual serial port created by SOCAT with Qt用 Qt 打开 SOCAT 创建的虚拟串口
【发布时间】:2014-02-18 23:17:34
【问题描述】:

我正在 MacOS 上开发 Qt5 应用程序。

我想测试我的应用程序串行端口通信。

我想使用socat,但我无法打开使用 socat 创建的端口:QSerialPortInfo::availablePorts() 仅列出 /dev/cu-XXXXXX 端口...

【问题讨论】:

  • 不获取可用端口而直接打开端口怎么办?
  • 怎么样? QSerialPort 只能由文件名初始化(只有端口名或 QSerialPortInfo&)。

标签: qt serial-port socat


【解决方案1】:

Socat 端口创建示例:

socat  pty,link=/dev/mytty,raw  tcp:192.168.254.254:2001&

在这之后你得到你的伪端口/dev/mytty

现在你可以通过QSerialPort引用这个端口

serial = new QSerialPort("/dev/mytty");

【讨论】:

  • 尝试打开串口时,出现“没有这样的文件或目录”错误。
  • 你能告诉我更多关于你的 socat 命令的信息吗? /dev/mytty串口发送的数据写在哪里?
  • socat192.168.254.254:2001 建立连接,然后来自/dev/mytty 的每个字节将自动发送到192.168.254.254:2001,来自192.168.254.254:2001 的每个字节都将发送到@987654330 @。你可以拿netcat来测试这个socat连接。
  • 感谢您的信息!这很奇怪,因为在使用 QSerialPort 打开时我总是有这个“没有这样的文件或目录”,但它与 QFile 一起工作正常......我想我最终会用 QFile 做我的测试。
  • 这不适用于 QtSerialPort。由于某种原因,它无法打开pts
【解决方案2】:

您可能会因为符号链接而遇到麻烦。

你可以试试这样的:

QFileInfo file_info("/dev/mytty");
QSerialPort* serial = nullptr;
if (file_info.isSymLink()) {
  serial = new QSerialPort(file_info.symLinkTarget());
} else {
  serial = new QSerialPort(file_info.path());
}
serial->open(QIODevice::ReadWrite);

您也可以使用这些路径构造一个 QSerialPortInfo 类,而不是直接创建端口。

【讨论】:

  • 我总是有这个“没有这样的文件或目录”错误。我试图通过重写 systemLocation() 方法来构建自己的 QSerialPortInfo 类,但它不是虚拟的。
  • 这可能是权限问题吗?
  • 不,我试图在没有成功的情况下在另一个路径中创建没有权限问题
【解决方案3】:

也许这只是权限问题。 确保运行您的应用程序的用户有权访问虚拟端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多