首页 新闻 会员 周边

如何读取SerialPort 缓冲区的值?

0
[已解决问题] 解决于 2017-12-29 14:39

嗨,亲爱的朋友们:

    下午好

 

 

我这边serialPort  缓冲区 接收到了一些16进制数据,但是我不知道这些是什么数据,需要借助于serialPort的相关方法把这些数据给读出来。亲爱的朋友们,是不是用read()方法?

代码应该怎么写呢?因为我不知道接收到的是几组16进制数据,可能是0X20 ,0X21,也可能是0X20,0X30,0X34,0X45  等等。肯定有数据到serialPOrt, 我想知道都接收到了什么数据,想通过TextBOx,把这些数据显示出来,代码应该怎么写呢?

 

亲爱的朋友们,进来讨论讨论吧,最好把完整的代码给写出来,我好做个参考。

绿绿山水的主页 绿绿山水 | 菜鸟二级 | 园豆:248
提问于:2017-12-28 15:25
< >
分享
最佳答案
1
奖励园豆:5
dudu | 高人七级 |园豆:30994 | 2017-12-28 15:32

勇哥,读取数据一定要用到委托吗?一定要用到虚拟串口连接吗?

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-28 15:49

@绿绿山水: 只是给你参考

dudu | 园豆:30994 (高人七级) | 2017-12-28 16:12

@dudu: 勇哥:你看他写的:

SerialPort spSend;  //spSend,spReceive用虚拟串口连接,它们之间可以相互传输数据。spSend发送数据
SerialPort spReceive;  //spReceive接受数据

spSend ,   spReceive   这都是什么东西啊?既不是Serialport的属性,也不是Serialport的名字,真不知道他是什么意思,这代码看得我郁闷。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-28 16:56

@dudu: 

勇哥:

 

我写了一段代码测试,但是报错了,提示操作超时,我是写在Serialport 事件里去的,只要有数据过来,就会触发,但是为什么会操作超时呢?怎么回事?应该如何修改呢?

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-28 17:24

@绿绿山水: 参考 c#中确保数据接收完整的串口处理程序 中的代码:

void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    //接收数据
    string str = "";
    do
    {
        int count = serialPort.BytesToRead;
        if (count <= 0)
            break;
        byte[] readBuffer = new byte[count];

        Application.DoEvents();
        serialPort.Read(readBuffer, 0, count);
        str += System.Text.Encoding.Default.GetString(readBuffer);

    } while (serialPort.BytesToRead > 0);

    listBox1.Items.Add(str);
}
dudu | 园豆:30994 (高人七级) | 2017-12-29 14:34

@dudu: 谢谢你,勇哥。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-29 14:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册