问题 我在工作与它的那一刻一个比较尴尬的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路径?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要解决您在Ubuntu上使用API与设备通信的问题,由于您无法修改API源代码以直接接受Linux的/dev/ttyUSB*
格式,您可以考虑以下几种方法来间接实现这一目标:
创建一个从Windows风格的COM端口名到实际Linux设备文件的符号链接。例如,如果您的设备被分配为/dev/ttyUSB0
,您可以创建一个链接名为COM3
。
sudo ln -s /dev/ttyUSB0 /dev/COM3
这样,当API尝试连接到COM3
时,它实际上会连接到正确的USB设备。请注意,每次设备的ttyUSB编号变化时,您都需要更新这个链接。
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的行为进行测试,以确保一切按预期工作。