2013-03-04 131 views
1

我试图通过串口读取消息(通过USB插入RS-422到我的电脑)无法从串口读取

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

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

我已经安装了所有驱动程序。 我写的行:m_Pod.read(response, 0, 1000);其中m_Pod是SerialPort对象和response在byte []中保存读取的消息。

这条线是在一个事件,如果数据收到,所以我读的消息。

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

这是第二适配器的图片: http://oi50.tinypic.com/34nh4kz.jpg

在右边的USB到RS-232和左侧是RS-232与RS-422。

+2

如果第一个连接器工作正常,我怀疑你的问题是与第二个连接器,而不是C#。 – 2013-03-04 18:57:43

+0

有一点是有另一个程序(用C++编写),第二个程序在那里工作。 抱歉保存此信息。 – 2013-03-04 19:06:46

+0

你有该C++程序的源代码吗?你可以分析它,并检查你的C#应用​​程序的差异... – 2013-03-04 19:13:31

回答

1

你有没有试过玩Handshake属性? http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.handshake.aspx 根据您的适配器使用/提供的信号,您可能需要从软件/硬件握手中进行选择。

+0

我尝试阅读有关握手的内容,当我要求它时,它用于发送消息吗? 我不知道它是否会帮助我,因为串口不发送消息,只有“??” – 2013-03-04 19:57:18

+0

握手用于流量控制。某些设备可能无法进行全双工通信,或者可能不会经常汇聚以读取数据,而是等待一些启动传输的“信号”(中断)。 这样,这些“握手”部分对于建立通信至关重要。某些设备(和/或电缆)可能仅支持特定的握手类型。 这也解释了为什么两个适配器都用C#工作,而第二个适配器只用C++工作。 – 2013-03-05 18:37:15

+0

您也可以尝试使用http://www.rohitab.com/来监控C++应用程序的API调用。这样你可以很容易地知道它是如何访问串行端口的。 – 2013-03-05 18:44:02