110,534
社区成员
发帖
与我相关
我的任务
分享
using System.IO.ports;
SerialPort myPort = new SerialPort();
//初始化端口:
myPort.PortName = "com1"; //端口名
myPort.BaudRate = 115200; //速率
myPort.DataBits = 8; //数据位
myPort.StopBits = StopBits.One; //停止位
myPort.Parity = Parity.None; //奇偶校验
myPort.RtsEnable = true; // 打开RTS ,这步很重要
//下面这个方法将在指定的时间内接收串口数据并写入二进制文件。
public void getRawData(SerialPort port, string fileName, int seconds)
{
FileStream f1;
try
{
port.open(); // 打开端口
}
catch (Exception err)
{
Console.WriteLine(err.ToString()); //端口打开失败,返回
return;
}
try
{
f1 = new FileStream(fileName, FileMode.Append);
}
catch (Exception err)
{
Console.WriteLine(err.ToString()); //文件打开失败,返回
return;
}
Console.WriteLine("Data will be logged from " + port.PortName + " for " + seconds + " seconds...");
BinaryWriter b1 = new BinaryWriter(f1);
DateTime now = DateTime.Now; // 获取当前系统时间
while (((TimeSpan)(DateTime.Now - now)).TotalSeconds < seconds) 检测当前时间是否到了指定结束时间长度
{
b1.Write((byte)port.ReadByte()); //写串口数据到文件
}
b1.Close();
f1.Close();
port.Close();
}
private void Form2_Load(object sender, EventArgs e)
{
try
{
//设置焦点在发送框
this.txtSend.Focus();
//设置发送框的光标位置
txtSend.SelectionStart = txtSend.Text.Length;
txtSend.ScrollToCaret();
//加载端口参数配置
PortConfig.SetPortPara(spComPort);
//打开串口连接
spComPort.Open();
}
catch (Exception ex)
{
ShowMessageBox.Message_Information(ex.Message);
}
}
#region 配置串口参数
/// <summary>
/// 配置串口参数
/// </summary>
/// <param name="spPort"></param>
public static void SetPortPara(SerialPort com)
{
try
{
//串口连接的奇偶校验位
setParity(com);
//串口连接的停止位数
setStopBits(com);
//串口连接的流控制
setHandshake(com);
//数据位
setDataBits(com);
//波特率
setBaudRate(com);
//COM端口
setPortName(com);
//com.ReadTimeout = 1000;
//com.Encoding = Encoding.GetEncoding("gb2312");
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void spComPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
//检查串口是否打开,若未则打开
if (spComPort.IsOpen == false)
{
spComPort.Open();
}
//获取接收数据的字节数组
byte firstByte = Convert.ToByte(spComPort.ReadByte());
int bytesRead = spComPort.BytesToRead;
byte[] byteData = new byte[bytesRead + 1];
byteData[0] = firstByte;
for (int i = 1; i <= bytesRead; i++)
{
byteData[i] = Convert.ToByte(spComPort.ReadByte());
}
//解析接收到得数据码
ResolveAcceptData(byteData);
}
catch (Exception ex)
{
ShowMessageBox.Message_Information(ex.Message);
}
}