goole一下C# 串口,什么都有了,串口操作也不是很难,多试几下就行了
解决方案 »
- 求一正则,来者有分
- 举手之劳,麻烦会正则的同学,给个表达式
- DataGridView单元格放多个图片
- 如何对窗口中的绑定字段进行多条件识别,生成SQL查询语句?
- 关于多线程Monitor同步的疑问
- 如何通过代理服务器访问Internet上的Sql server
- 请问:C# windows应用程序怎样才能开发出具有(网络版)
- 怎样将一个字符串转换成unicode,并计算长度,谢谢!
- 有哪位大侠知道DESCryptServiceProvider类的CreateEncryptor方法的大概的实现?急啊!!
- 求前辈指教两个函数的调用关系
- 如何在程序中得到"DOS"或"CMD.exe"中的执行结果
- 数据库群集
using System.IO.Ports;
public System.IO.Ports.SerialPort spComPort;
1).首先,SerialPort的ReceivedBytesThreshold先设置成1,表示只要有1个字符送达端口时便触发DataReceived事件
(2).当DataReceived触发时,先把ReceivedBytesThreshold设置成一个比较大的值,达到读取本次端口数据时,不再触发DataReceived.
(3).循环读取端口中的数据,直至读完。
(4).移除读取数据中的非法字符。
(5).触发一个后台线程处理收到的数据。
(6).在finally中把ReceivedBytesThreshold重置回1 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (sender.GetType() != typeof(System.IO.Ports.SerialPort))
{
return;
}
string strReceive = string.Empty;
string strCollect = string.Empty;
System.IO.Ports.SerialPort comPort = (System.IO.Ports.SerialPort)sender; try
{
comPort.ReceivedBytesThreshold = comPort.ReadBufferSize;
while (true)
{
strReceive = comPort.ReadExisting();
if (string.Equals(strReceive, string.Empty))
{
break;
}
else
{
strCollect += strReceive;
Application.DoEvents();
Thread.Sleep(100);
}
}
strCollect = strCollect.Replace("\0", string.Empty);
strCollect = strCollect.Replace("\r\n", string.Empty);
strCollect = strCollect.Replace("\r", string.Empty);
strCollect = strCollect.Replace("\n", string.Empty); if (!this.bIsHandleCom)
{
this.bIsHandleCom = true;
mReceiveData = strCollect;
if (ThreadReceiveParser != null && !ThreadReceiveParser.IsAlive) //处理收到数据的线程
{
ThreadReceiveParser.Start();
}
} }
catch (Exception ex)
{
MessageBox.Show(this, ex.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
comPort.ReceivedBytesThreshold = 1;
}
}
新手的话serialPort这个控件可以基本帮你解决问题,如果想了解深层次的话这个可以看下C++/C#封装的类,第三方控件MSCOMM也不错。网上有最简单的例子:
(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。
(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。
(3)主要程序代码。
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
MessageBox.Show("数据发送成功!","系统提示");
} private void button2_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();
MessageBox.Show("数据接收成功!","系统提示");
}
//*********************************************************************
以后精通后了解串口通讯就了解主要有分为应答模式,响应模式。应带模式:就是发送后等待一定时间后接收,根据需要判断接收数据是否有效。(上下位机控制使用比较多)响应模式:就是缓冲区内有数据就响应datarecivice事件,接收处理。另外建议连接下硬件上串口的分布,基本就三根线有用,2-3短接就是自收自发......