开发者社区 问答 正文

在Ubuntu中从ttyUSB端口创建COM端口

问题 我在工作与它的那一刻一个比较尴尬的API 坚持在我身上给人一种设备的地址,通过USB接口相连,在形式COM *。但是,在我正在使用且必须使用的Ubuntu计算机上,如果我插入此设备,则会自动为它分配一个地址,格式为/ dev / ttyUSB *。

鉴于我无法修改API的源代码-我非常想这样做!-使API与所述设备进行通讯的最痛苦的方式是什么?

额外细节 手册中有关如何使用API​​的示例:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using com.caen.RFIDLibrary;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      CAENRFIDReader MyReader = new CAENRFIDReader();
      MyReader.Connect(CAENRFIDPort.CAENRFID_RS232, "COM3");
      CAENRFIDLogicalSource MySource = MyReader.GetSource("Source_0");
      CAENRFIDTag[] MyTags = MySource.InventoryTag();

      if (MyTags.Length > 0)
      {
        for (int i = 0; i < MyTags.Length; i++)
        {
          String s = BitConverter.ToString(MyTags[i].GetId());
          Console.WriteLine(s);
        }
      }
      Console.WriteLine("Press a key to end the program.");
      Console.ReadKey();
      MyReader.Disconnect();
    }
  }
}

```  是我遇到问题的地方。

在手册的稍后部分,它指出该Connect方法具有两个参数:

ConType:用于连接的通信链接。

地址:取决于ConType参数:TCP / IP通信的IP地址(“ xxx.xxx.xxx.xxx”),RS232通信的COM端口(“ COMx”),USB通信的索引(尚不支持)。

奖金问题
有问题的API似乎是在可以在Windows计算机上运行的假设下编写的。(在C#中。)Windows体系结构似乎更喜欢COM *格式-我很高兴在这一点上得到纠正,而Ubuntu似乎更喜欢ttyUSB *格式。假设我可以将设备中的数据从ttyUSB *端口传送到COM *端口,那么API实际能够找到所说的数据吗?还是会错误地遵循默认的Windows路径?

展开
收起
Puppet 2019-12-11 09:51:43 832 分享 版权
阿里云 AI 助理回答

要解决您在Ubuntu上使用API与设备通信的问题,由于您无法修改API源代码以直接接受Linux的/dev/ttyUSB*格式,您可以考虑以下几种方法来间接实现这一目标:

方法1:符号链接

创建一个从Windows风格的COM端口名到实际Linux设备文件的符号链接。例如,如果您的设备被分配为/dev/ttyUSB0,您可以创建一个链接名为COM3

sudo ln -s /dev/ttyUSB0 /dev/COM3

这样,当API尝试连接到COM3时,它实际上会连接到正确的USB设备。请注意,每次设备的ttyUSB编号变化时,您都需要更新这个链接。

方法2:使用socat工具

socat是一个强大的工具,可以用来创建不同类型的I/O流之间的双向管道。您可以使用它来监听一个虚拟的COM端口(如/dev/ttyCOM3),并将所有数据转发到实际的USB设备端口上。

首先,安装socat(如果尚未安装):

sudo apt-get install socat

然后,运行以下命令来建立连接:

sudo socat pty,link=/dev/ttyCOM3,raw,echo=0,ispeed=115200 os:/dev/ttyUSB0,raw,echo=0,ispeed=115200

这将创建一个名为/dev/ttyCOM3的伪终端,其数据会被透明地传递给/dev/ttyUSB0。请根据实际的USB设备端口号调整上述命令。

奖金问题回答

关于您的奖金问题,如果能够成功地将数据从/dev/ttyUSB*端口传输到API期望的COM*格式(通过上述任一方法),理论上API应该能够正常工作,因为它看到的是预期的接口名称。但是,这种方法依赖于数据传输的透明性和兼容性,以及API内部如何处理底层通信细节。在大多数情况下,只要数据流动正确且协议匹配,API应该能够识别和处理这些数据,而不会关心操作系统层面的具体实现路径。

不过,实际应用中可能需要对API的行为进行测试,以确保一切按预期工作。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: