我是靠谱客的博主 饱满方盒,这篇文章主要介绍C#串口通信-----------解析串口发来数据,现在分享给大家,希望可以做个参考。

首先我们得先知道串口发来的数据是什么样子的:

例如:

复制代码
1
55 AA 02 04 01 02 03 04 05 0F

我们看一下上面的例子

        数据头: 55 AA 02

        有效数据位:04        有效数据位的意思是,从这个字符往后数多少位。是他的有效数据

        代表数值:01 02 03 04 05

        代表校验码:0F

 

首先我们需要准备一个串口对象

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 我们需要有一个串口 SerialPort ser = new SerIalPort(); // 设置端口基本信息 PortName = "COM2"; BaudRate = 57600; DataBits = 8; Handshake = Handshake.None; StopBits = StopBits.One; ReadTimeout = -1; ser.DtrEnable = true; ser.Parity = Parity.None; // 打开串口端口 ser.open(); // 这里只做一个比较 该有try/catch还是要加上

 

给串口发送信息,接下来。串口会给上位机发送一些指令

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public int sendMsg(String str){ // 判断一下端口是否被关闭 if (!ser.IsOpen) { return 0; // 代表端口已被开启 } // 去除传输来的String字符串 str = str.Replace(" ", ""); // 保证字符串能够整除2 if(str.Length % 2 != 0) { str += " "; } // 准备数组 byte[] value = new byte[str.Length / 2]; // 为数组赋值 for (int i = 0; i < value.Length; i++){ value[i] = Convert.ToByte(str.Substring(i * 2, 2).Replace(" ", ""),16); } // 发送数据 ser.Write(value, 0, value.Length); return 1; }

发送完命令以后。串口设备会给上位机发送一连串的他的命令

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 在接收数据之前。我们需要绑定串口读取事件 // 例如我在load事件中接收 private void Form1_Load(object sender, EventArgs e){ // 刚刚在上面定义了一个打开端口的方法 this.openPort(); // 假设他开启成功 ser.DataReceived += GetData; // 在后面生成一个接收事件方法 } // 准备一个队列(作为缓冲数据) Queue<byte> resultBytes = new Queue<byte>(); // 接收事件方法 private void GetData(object sender, SerialDataReceivedEventArgs e){ // 读取他准备接收的条目数 byte[] result = new byte[ser.BytesToRead]; // 开始读取数据 ser.Read(result, 0, result.Length); // 把数据存入队列 for (int i = 0; i < result.Length; i++){ resultBytes.Enqueue(result[i]); } // 解析步骤 while(resultBytes.Count >= 10){ // 这里的10.意思是你接收到的完整数据 // 开始解析数据头 if(resultBytes.Dequeue() == 0x55 && resultBytes.Dequeue() == 0xAA && resultBytes.Dequeue() == 0x02){ // 最后的结果 byte[] resultArray = new byte[resultBytes.Dequeue()]; for(int i = 0 ; i < resultArray.Length;i++){ // 没拿到一个数据就存入结果集中 resultArray[i] = resultBytes.Dequeue(); } // 数据读取完了。 ResultArray就是最后的值集合 } } }

本人小菜。本篇博客只是作为个人记录。。如果对各位有帮助。那最好。。。如果无用。轻喷。谢谢

最后

以上就是饱满方盒最近收集整理的关于C#串口通信-----------解析串口发来数据的全部内容,更多相关C#串口通信-----------解析串口发来数据内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部