C# 在Ubuntu中从ttyUSB端口创建COM端口 问题

C# 在Ubuntu中从ttyUSB端口创建COM端口 问题,c#,windows,ubuntu,usb,C#,Windows,Ubuntu,Usb,目前我不得不使用一个相当笨拙的API,坚持要求我以COM*的形式提供通过USB端口链接的设备地址。然而,在我正在使用的Ubuntu机器上,如果我插入这个设备,它将自动以/dev/ttyUSB*的形式分配一个地址 考虑到我不能修改API的源代码——我非常想这么做让API与所述设备对话最不痛苦的方式是什么 额外细节 如何使用手册中API的示例: 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用com.caen.RFIDLibr

目前我不得不使用一个相当笨拙的API,坚持要求我以COM*的形式提供通过USB端口链接的设备地址。然而,在我正在使用的Ubuntu机器上,如果我插入这个设备,它将自动以/dev/ttyUSB*的形式分配一个地址

考虑到我不能修改API的源代码——我非常想这么做让API与所述设备对话最不痛苦的方式是什么

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

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用com.caen.RFIDLibrary;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
CAENRFIDReader MyReader=新的CAENRFIDReader();
MyReader.Connect(CAENRFIDPort.CAENRFID_RS232,“COM3”);
CAENRFIDLogicalSource MySource=MyReader.GetSource(“Source_0”);
CAENRFIDTag[]MyTags=MySource.InventoryTag();
如果(MyTags.Length>0)
{
for(int i=0;i
MyReader.Connect(CAENRFIDPort.CAENRFID_RS232,“COM3”)是我遇到问题的地方

本手册稍后部分指出,
Connect
方法有两个参数:

ConType:用于连接的通信链接

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

奖金问题
所讨论的API似乎是在假定它将在Windows机器上运行的情况下编写的。(用C#)COM*格式似乎受到Windows架构的青睐——我很高兴在这一点上得到纠正——而Ubuntu似乎更喜欢ttyUSB*格式。假设我可以将数据从我的设备从ttyUSB*端口传输到COM*端口,那么API真的能够找到这些数据吗?或者它是否会错误地遵循默认的Windows路径?

如果提供了新的信息,我怀疑您可以将ttyUSB作为参数,mono将正确处理连接。但是,对于下面的线端,同样的注意事项仍然适用。您还可以考虑将参数设为命令行参数,从而使代码能够在任何平台上运行,从而能够通过命令行参数提供COM/USB。使用此代码时,我看不到其他问题。你试过了吗

PS:我想你的困惑是,实际上usb id的声明还不受支持,我怀疑这是因为库依赖于(基于文本的)串行连接,这与直接usb连接(通常由驱动程序处理)是根本不同的,后者以更直接的方式处理连接。然而,linux上的ttyUSB端口确实以与windows COM端口相同的方式表示(UART)串行连接,它们不是直接USB连接

关于差异的一些有用信息:

旧答案

我假设你在Mono上运行这个程序


Mono需要端口的路径,所以COM*不需要。您可以尝试创建一个名为COM*的符号链接到ttyUSB*。首选位于环境目录中。一旦你把它们连接起来,程序就不会有什么不同了。但是,数据/程序中的行尾可能与windows中的不同。如果设备需要CRLF,而程序使用Environment.NewLine,则可能会出现意外行为。如果您有权限/权限使用重新编译工具编辑程序集,这可能会更容易。

我确实在Mono中运行此程序!我想你有点误会了——这是我的错——因为我的代码没有直接处理端口地址。相反,我将端口地址从API传递给一个对象,然后API会对其进行巫毒。由于所说的API不是开源的,我既看不到到底发生了什么,也不能做任何修改。为了让事情更清楚一点,我将在刚才的问题中添加一些细节。汤姆,你有没有试着制作符号链接?这可能会奏效。谢谢你再次调查此事。不幸的是,我知道有一件事肯定行不通,那就是用“/dev/ttyUSB0”或“ttyUSB0”代替“COM3”。这两种情况都会导致程序抛出异常。我今天和明天都不在办公室,但我可能会在周三做更多的实验。无论如何,您提供了一个非常好的答案,即使它没有解决我的特定问题。@TomHosker我决心看到这个问题得到了实际解决:),如果我理解正确,您试图在linux上运行它,您需要将示例中的“COM3”替换为“/dev/ttyUSB0”或者无论你连接设备时得到什么号码。如果像您所说的那样抛出一个错误,那么附加错误可能会很有用,这样我们就可以确定是什么错误了。友好的问候。是的,我有一个坏消息告诉你,这个库不是为linux制作的,并且对你给它的端口做了一些愚蠢的检查。我建议您尝试符号链接方法。(该库搜索“/DEV/TTYUSB0”,因此我怀疑它在某个地方在端口上执行了
ToUpper()
。将COM0符号链接到usb,然后使用COM0可以工作。