首页 » 互联网 » 用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据

用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据

少女玫瑰心 2025-01-21 14:54:09 0

扫一扫用手机浏览

文章目录 [+]

手一次发送多个数据给我们的程序,我们自己做的串口调试工具只能每次显示4个16进制数,这明显是程序有问题。

这是如何造成的呢?首先我们可以将程序定位到吸收部分,可能是吸收处理函数出了问题,导致显示数据不太正常。
先来看一下我们的吸收程序,由于是数值模式吸收,以是红框内的程序嫌疑最大:

用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据 用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据 互联网

我们打断点来看一下,问题究竟出在哪里。

用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据 用C编写串口数据接收轨范却碰着接收不全的BUG看看怎么修改_数组_数据 互联网
(图片来自网络侵删)

通过打断点我们创造,程序确实只吸收到了这几个数字。
到底是由于什么呢?

吸收程序中,我们利用了 serialPort1.ReadByte();这个函数,意思是吸收一个字节。

而串口吸收事宜利用 serialPort1.DataReceived 进行事宜注册,通过F1查看帮助后创造,DataReceived不担保为每个吸收的字节引发事宜,以是就有可能造成数据丢失。
以是我们可以换个思路,利用数组来进行吸收。

byte[] rcvByte = new byte[20]; //新建一个20个字节的数组 serialPort1.Read(rcvByte,0,

rcvByte.Length); //直接按数组的长度来读取缓冲区的数据个数

从运行结果可以看到,我们已经成功地将数据吸收到数组中。
到这里实在还有一个问题,如果实际发送的数据大于数组长度,又会造成数据丢失。
以是我们可以再加上一段程序,在串口事宜触发后,先判断串口读取缓冲区内的数据个数,然后建立相应个数的数组,这样就实现了不定长度的读取。

int data;

data = serialPort1.BytesToRead;

byte[] rcvByte = new byte[data]; //读取20个字节的数据

serialPort1.Read(rcvByte,

0,rcvByte.Length);

来运行一下看看效果:

从上面的图我们可以看到,当发送端数据个数变革时,吸收的数组长度也发生了变革,基本达到了目的。
下面须要做的便是将数组在Textbox中显示出来。

try

{

int data;

data = serialPort1.BytesToRead;

byte[] rcvByte = new byte[data]; //读取20个字节的数据

serialPort1.Read(rcvByte,0,rcvByte.Length);

StringBuilder st = new StringBuilder(); //定义一个可变字符串

for (int i = 0; i < rcvByte.Length; i++) //将字节数组的元素组成字符串

{

st.AppendFormat("{0:x2}" + " ", rcvByte[i]);

}

textBox1.AppendText(st.ToString().ToUpper()); //将字符串显示到文本框中

}

catch

{

this.Close();//关闭当前窗体

}

运行起来看当作果,可以实现了。
好了,本日的课程就到这里,下期见!

标签:

相关文章

贴片电容与贴片电阻的差异_贴片_电阻

贴片电容和贴片电阻在外不雅观上的相同点:1、两者在形状上很相似,都是长方体。2、贴片电阻器的规格尺寸(紧张指长度和宽度 与贴片电容...

互联网 2025-01-21 阅读0 评论0

载波抄表筹划你理解吗_载波_电表

载波通信,常日是指低压电力线载波通信(PLC),即依托电力线进行通信,对付电表抄表具有天然上风——可依托自有电力线来通信。载波的发...

互联网 2025-01-21 阅读0 评论0