Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用USB到COM电缆接收的SerialPort.DataAct与物理COM不同_C#_Visual Studio 2012_Serial Port - Fatal编程技术网

C# 使用USB到COM电缆接收的SerialPort.DataAct与物理COM不同

C# 使用USB到COM电缆接收的SerialPort.DataAct与物理COM不同,c#,visual-studio-2012,serial-port,C#,Visual Studio 2012,Serial Port,我的C#桌面类库与COM串行端口通信。 com不是真正的com,它是连接到另一台计算机上USB到com的USB到com电缆,另一台计算机使用模拟器发送数据 此解决方案工作正常,然后端口成功打开: serialPort.Open(); if (serialPort.IsOpen) { serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } void serialPor

我的C#桌面类库与COM串行端口通信。
com不是真正的com,它是连接到另一台计算机上USB到com的USB到com电缆,另一台计算机使用模拟器发送数据

此解决方案工作正常,然后端口成功打开:

serialPort.Open();
if (serialPort.IsOpen)
{
   serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
}

void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  try
  {
     var length = serialPort.BytesToRead;
     byte[] buffer = new byte[length];
     serialPort.Read(buffer, 0, length);
     for (int i = 0; i < buffer.Length; i++)
     {
        System.IO.File.AppendAllText(@"c:\TestLogging.txt", string.Format("[Time = {0}]  Data was received from serial port !", DateTime.Now));         }
     } 
serialPort.Open();
if(serialPort.IsOpen)
{
serialPort.DataReceived+=新的SerialDataReceiveDevenHandler(serialPort_DataReceived);
}
无效serialPort_DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
尝试
{
var length=serialPort.BytesToRead;
字节[]缓冲区=新字节[长度];
读取(缓冲区,0,长度);
for(int i=0;i
模拟器一直在发送数据,我在课堂上收到了数据,但我没有一直收到,我看到每30秒打印一行,虽然它假设一直在打印


奇怪的是,如果我把断点放在var length=…行中,那么我会看到一个在断点处暂停时的打印结果。传输的数据似乎是“缓存”的,当我点击“播放”时我收到了数据,但只是在暂停进程时收到的数据。

我认为您在那里注册
DataReceived
eventhandler已经太晚了。您应该在打开端口之前注册它:

serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
if (serialPort.IsOpen)
{

}

我认为您在那里注册
DataReceived
eventhandler为时已晚。您应该在打开端口之前注册它:

serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
if (serialPort.IsOpen)
{

}

尝试使用超级终端连接您的计算机,并检查通信是否正常。如果正常,则说明是应用程序的故障(仔细检查串行端口设置)。否则,可能是电缆或端口本身造成的


您确定没有收到任何错误数据吗?您是否订阅了SerialPort.ErrorReceived事件处理程序?如果您在那里捕获到一些SerialError.Frame错误,则可能是电缆故障或端口断开,或者存在一些干扰通信的情况(可能性不大,但也可能发生,例如,如果附近有强大的电源,例如逆变器)。

尝试使用超级终端连接您的机器,并检查通信是否正常。如果正常,则是应用程序的故障(仔细检查串行端口设置).否则可能是电缆或端口本身


您确定没有收到任何错误数据吗?您是否订阅了SerialPort.ErrorReceived事件处理程序?如果您在那里捕获到一些SerialError.Frame错误,则可能是电缆故障或端口断开,或者存在一些干扰通信的情况(不太可能发生变化,但可能发生,例如,如果附近有强大的电源,例如逆变器)。

好的,问题出在哪里?
我使用的是USB到COM电缆,而不是真正的COM端口。
从SerialPort接收数据事件的行为是不同的 我侦听并捕获数据事件,但不是获取字节数组(如在real COM中),而是每次接收一个字节(数组大小为1)…
含义:当使用USB到COM端口时,在DataReceived事件上:我得到:1-1-1-1-1-1每个DataReceived事件给我一个字节。
真实物理COM.DataReceived事件给我:5-30-42等。字节数组
因此,我的解决方案在使用USB到COM端口(有些人可能称之为“虚拟COM端口”)时,我需要检查serialPort.BytesToRead是否大于X,然后我实际是这样做的

if (serialPort.BytesToRead > 2) //I dont want to get it 1-1-1.. want to get it atleast 2-2-2-2
    serialPort.Read(buffer, 0, length);

因为serialPort.BytesToRead将告诉我当前块中有多少字节,并进行读取。用我的话来说,将获取缓冲区并清除它。

好的,有什么问题吗?
我使用的是USB到COM电缆,而不是真正的COM端口。
从SerialPort接收数据事件的行为是不同的 我侦听并捕获数据事件,但不是获取字节数组(如在real COM中),而是每次接收一个字节(数组大小为1)…
含义:当使用USB到COM端口时,在DataReceived事件上:我得到:1-1-1-1-1-1每个DataReceived事件给我一个字节。
真实物理COM.DataReceived事件给我:5-30-42等。字节数组
因此,我的解决方案在使用USB到COM端口(有些人可能称之为“虚拟COM端口”)时,我需要检查serialPort.BytesToRead是否大于X,然后我实际是这样做的

if (serialPort.BytesToRead > 2) //I dont want to get it 1-1-1.. want to get it atleast 2-2-2-2
    serialPort.Read(buffer, 0, length);

因为serialPort.BytesToRead将告诉我当前区块中有多少字节,并读取。用我的话来说,将获取缓冲区并清理它。

这是正确的。在端口打开之前,将eventhandler连接起来。谢谢。解决方案不是这种情况。但是由于您的注释,我更改了事件签名的代码。这是正确的。Ge eveN在端口打开前已连接Handler。谢谢。解决方案不是这种情况。但由于您的评论,我更改了用于签署事件的代码。显示串行端口的设置。可以更改设置,这些设置正确,并且可以从XML设置文件读取。端口打开OK显示串行端口的设置。可以更改设置ged,它们是正确的,从XML设置文件读取..端口打开okHi,感谢您提供的信息,通信正常,当我连接putty时,我获得了数据,并且我注册了错误接收-未提出。问题与这是“虚拟com”有关我相信嗨,谢谢你提供的信息,通讯正常,当我与putty连接时,我得到了数据,并且我注册了错误接收-没有提出。问题与我相信这是“虚拟com”有关