[C#基础]Serialport收发信息
2013-01-14 10:09
113 查看
调用库:
创建serialport对象并设置,当然也可以直接拖serialport控件然后设置属性:
public SerialPort test = new SerialPort();
test.PortName = "COM1"; //串口名称
test.BaudRate = 38400; //波特率
test.Parity = Parity.None; //校验位
test.DataBits = 8; //数据位
test.StopBits = StopBits.One; //停止位
test.RtsEnable = true; //确定是否使 Request To Send (RTS) 线有效,一般设置为true
test.ReadTimeout = 100; //读数据时限
设置完之后就可以用了,首先打开/关闭操作
然后是接受数据部分,由Serialport对象自带的data_received完成,收下来分类然后存到相应的list中
假设接受的数据为
public void test_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
int n = test.BytesToRead;
byte[] temp = new byte
;
test.Read(temp, 0, n);
buffer.AddRange(temp);
while (buffer.Count > 0)
{
if (buffer[0] == 0xee) //如果看到ee,认为是结束符号,跳过
{
received_data.Add(buffer[0]);
buffer.RemoveAt(0);
}
else if (buffer[0] == 0x01) //如果看到01,认为是数据头
{
if (buffer.Count >= 4)
{
int len = (buffer[1] << 8) + buffer[2]; //获得长度
if (buffer.Count >= len + 4)
{
byte[] print = new byte[len];
for (int j = 0; j < len; j++)
{
print[j] = buffer[3 + j];
}
/*
对数据操作,这边我将他转换成字符然后存到另一个list中
print_info.Add(System.Text.Encoding.Default.GetString(print));
*/
buffer.RemoveRange(0, 4 + len);
}
else
{
break;
}
}
else
{
break;
}
}
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, "连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
//return "";
}
finally
{
//test.close();
}
}
发送部分,这里的strToByte是自己写的,将字符转换成byte然后发送
public string op_port(string send, int received_len)
{
string received = "";
byte[] t = new byte[send.Length / 2];
t = strToByte(send);
if (!test.IsOpen)
{
test.Open();
}
test.Write(t, 0, send.Length / 2);
for (int i = 0; i < received_len; i++)
{
received += Convert.ToString(received_data[0], 16).PadLeft(2, '0');
received_data.RemoveAt(0);
}
return received;
}
using System.IO.Ports;
创建serialport对象并设置,当然也可以直接拖serialport控件然后设置属性:
public SerialPort test = new SerialPort();
test.PortName = "COM1"; //串口名称
test.BaudRate = 38400; //波特率
test.Parity = Parity.None; //校验位
test.DataBits = 8; //数据位
test.StopBits = StopBits.One; //停止位
test.RtsEnable = true; //确定是否使 Request To Send (RTS) 线有效,一般设置为true
test.ReadTimeout = 100; //读数据时限
设置完之后就可以用了,首先打开/关闭操作
//打开 if (!test.IsOpen) test.Open(); //关闭 test.Close();
然后是接受数据部分,由Serialport对象自带的data_received完成,收下来分类然后存到相应的list中
假设接受的数据为
数据头 | 长度(高位) | 长度(低位) | 数据段 | 结束符 |
0x01 | 0x00 | 0x10 | ... | 0xee |
{
try
{
int n = test.BytesToRead;
byte[] temp = new byte
;
test.Read(temp, 0, n);
buffer.AddRange(temp);
while (buffer.Count > 0)
{
if (buffer[0] == 0xee) //如果看到ee,认为是结束符号,跳过
{
received_data.Add(buffer[0]);
buffer.RemoveAt(0);
}
else if (buffer[0] == 0x01) //如果看到01,认为是数据头
{
if (buffer.Count >= 4)
{
int len = (buffer[1] << 8) + buffer[2]; //获得长度
if (buffer.Count >= len + 4)
{
byte[] print = new byte[len];
for (int j = 0; j < len; j++)
{
print[j] = buffer[3 + j];
}
/*
对数据操作,这边我将他转换成字符然后存到另一个list中
print_info.Add(System.Text.Encoding.Default.GetString(print));
*/
buffer.RemoveRange(0, 4 + len);
}
else
{
break;
}
}
else
{
break;
}
}
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, "连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
//return "";
}
finally
{
//test.close();
}
}
发送部分,这里的strToByte是自己写的,将字符转换成byte然后发送
public string op_port(string send, int received_len)
{
string received = "";
byte[] t = new byte[send.Length / 2];
t = strToByte(send);
if (!test.IsOpen)
{
test.Open();
}
test.Write(t, 0, send.Length / 2);
for (int i = 0; i < received_len; i++)
{
received += Convert.ToString(received_data[0], 16).PadLeft(2, '0');
received_data.RemoveAt(0);
}
return received;
}
相关文章推荐
- C#利用短信猫收发短信息的方法(转)
- C#_串口通信_SerialPort_一个最基础的串口程序
- C#利用短信猫收发短信息的方法
- 黑马程序员 C#学习笔记⑥ 三层架构基础实现员工信息管理
- C#利用短信猫收发短信息的方法
- C#_串口通信_SerialPort_一个最基础的串口程序
- C#基础-033 创建一个学员类,并设计三个字段用于表示学生的成绩(语文、数学、英语);然后定义一个数组表示一个班的学生(10人),依次输入每个学生的信息和成绩,输入的同时将学员的每科成绩划分等级
- C#使用串口SerialPort开发短信猫收发短信系统总结
- C#使用串口SerialPort开发短信猫收发短信系统总结
- C#使用串口SerialPort开发短信猫收发短信系统总结
- C#使用串口SerialPort开发短信猫收发短信系统总结
- .net C# 的基础知识
- 漫谈计算机基础之信息的处理与表示(1)
- C#编程基础
- 信息安全系统设计基础第十周学习总结——实践
- 信息安全系统设计基础第十二周学习总结
- C#控制台基础 List泛型集合与对应的数组相互转换实现代码
- 「基础」C#中的索引器
- 史上最简单将数据信息导入wrod文档方案(C# for word)
- C# 输出信息到页面 MessageBox类