C# 无法从串行端口读取

C# 无法从串行端口读取,c#,C#,我正试图通过插入RS-422的串行端口通过USB将信息读取到我的计算机 问题是我有2根这种类型的电缆 一个是直接连接到422的USB,另一个是带有RS-232到RS-422适配器的USB-RS-232电缆 我已经安装了所有的驱动程序。 我写了一行:m_Pod.readresponse,0,1000;其中m_Pod是SerialPort对象,并在字节[]中响应以保存已读消息 这一行是在一个事件中,如果收到数据,那么我就读取消息 第一个连接器工作正常,我在事件发生时读取消息。 但是,第二个连接器不工

我正试图通过插入RS-422的串行端口通过USB将信息读取到我的计算机

问题是我有2根这种类型的电缆

一个是直接连接到422的USB,另一个是带有RS-232到RS-422适配器的USB-RS-232电缆

我已经安装了所有的驱动程序。 我写了一行:m_Pod.readresponse,0,1000;其中m_Pod是SerialPort对象,并在字节[]中响应以保存已读消息

这一行是在一个事件中,如果收到数据,那么我就读取消息

第一个连接器工作正常,我在事件发生时读取消息。 但是,第二个连接器不工作。事件没有发生。 如果我尝试手动阅读消息,我会得到一个随机数63,而不是我应该看到的长消息

这是第二个适配器的图片:


右边是USB到RS-232,左边是RS-232到RS-422。

您尝试过使用握手属性吗?
根据适配器使用/提供的信号,您可能需要从软件/硬件握手中进行选择。

您是否尝试过使用握手属性?
根据你的适配器使用/提供的信号,你可能需要从软件/硬件握手中选择。

如果第一个连接器工作正常,我怀疑你的问题是第二个连接器而不是C。第一个问题是,另一个程序用C++编写,第二个程序在那里工作。很抱歉把这些信息保存下来。你有C++程序的源代码吗?您可以分析它并用C应用程序检查差异……63是一个神奇的数字,它是“?”的ascii码。这是默认SerialPort.Encoding在转换非有效ascii值的字节时生成的字符。这与信号类型有关的内容是不可用的。也许波特率不好。Hy Hans,我检查了所有的com端口属性,它们与程序中的相同。为什么串行端口会给我发送“?”?还有一件事,如果我读第二次,出现一个异常超时。如果第一个连接器工作正常,我怀疑你的问题是第二个连接器而不是C。第一个问题是,另一个程序用C++编写,第二个程序在那里工作。很抱歉把这些信息保存下来。你有C++程序的源代码吗?您可以分析它并用C应用程序检查差异……63是一个神奇的数字,它是“?”的ascii码。这是默认SerialPort.Encoding在转换非有效ascii值的字节时生成的字符。这与信号类型有关的内容是不可用的。也许波特率不好。Hy Hans,我检查了所有的com端口属性,它们与程序中的相同。为什么串行端口会给我发送“?”?还有一件事,如果我再次阅读,会出现一个异常-超时。我试着阅读有关握手的内容,它是用来在我请求时发送消息的,对吗?我不知道它是否对我有帮助,因为串行端口不向我发送消息,只有??握手用于流量控制。有些设备可能无法进行全双工通信,或者可能无法不断地汇集以读取数据,而是等待启动传输的某个信号中断。这样,这些握手部分对于建立通信至关重要。某些设备和/或电缆可能仅支持特定的握手类型。这也解释了为什么两个适配器都在C++中工作,而第二个适配器只在C++中工作。这样你就可以很容易地知道它是如何访问串行端口的。我试着阅读了有关握手的文章,它是用来在我请求时发送消息的,对吗?我不知道它是否对我有帮助,因为串行端口不向我发送消息,只有??握手用于流量控制。有些设备可能无法进行全双工通信,或者可能无法不断地汇集以读取数据,而是等待启动传输的某个信号中断。这样,这些握手部分对于建立通信至关重要。某些设备和/或电缆可能仅支持特定的握手类型。这也解释了为什么两个适配器都在C++中工作,而第二个适配器只在C++中工作。这样,您就可以很容易地知道它是如何访问串行端口的。