两个串口
串口1 :接收数据
串口2 :转发接收的数据
每次从串口1 接收1个字节数据,就存入buffer中,达到12个字节后,转发至串口2 数据是循环不停接收并转发的 。
波特率是2400目前遇到的问题是 开始几秒的时间 数据接收转发都正常 ,但是运行一段时间后(大概20秒左右),接收和发送的数据就会出错
目前串口操作是在c#里调用c++的dll实现的请教:串口出现的错误可能是由什么造成的呢?
串口1 :接收数据
串口2 :转发接收的数据
每次从串口1 接收1个字节数据,就存入buffer中,达到12个字节后,转发至串口2 数据是循环不停接收并转发的 。
波特率是2400目前遇到的问题是 开始几秒的时间 数据接收转发都正常 ,但是运行一段时间后(大概20秒左右),接收和发送的数据就会出错
目前串口操作是在c#里调用c++的dll实现的请教:串口出现的错误可能是由什么造成的呢?
你为什么不用.net提供的System.IO.Ports.SerialPort类呢?
{
private System.IO.Ports.SerialPort serialIn = new System.IO.Ports.SerialPort();
private System.IO.Ports.SerialPort serialOut = new System.IO.Ports.SerialPort();
int bufMax = 12;//default is 12
/// <summary>
/// 构造函数
/// </summary>
/// <param name="inport">读数据端口号</param>
/// <param name="outport">转发数据端口号</param>
/// <param name="inbaudrate">读入数据波特率</param>
/// <param name="outbaudrate">转发数据波特率</param>
/// <param name="buffersize">缓存长度</param>
public SerialPortTransfer(int inport, int outport, int inbaudrate, int outbaudrate, int buffersize)
{
serialIn.PortName = "COM" + inport.ToString();
serialIn.BaudRate = inbaudrate;
serialOut.PortName = "COM" + outport.ToString();
serialOut.BaudRate = outbaudrate;
bufMax = buffersize;
send = new byte[bufMax];
}
List<byte> buffer = new List<byte>();
byte[] send = new byte[0];
public void Start()
{
buffer.Clear();//清除缓存
serialIn.DataReceived += DataReceived;
}
public void Stop()
{
serialIn.DataReceived -= DataReceived;
} void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int n = serialIn.BytesToRead;//获取有效长度
byte[] temp = new byte[n];//分配空间
serialIn.Read(temp, 0, n);//读取
buffer.AddRange(temp);//追加缓存
if (buffer.Count >= bufMax)//判断长度
{
buffer.CopyTo(0, send, 0, bufMax);//复制
serialOut.Write(send, 0, bufMax);//发送
buffer.RemoveRange(0, bufMax);//移除
}
}
}
调用更简单
SerialPortTransfer spt = new SerialPortTransfer(1, 2, 2400, 2400, 12);
spt.Start();
{
private System.IO.Ports.SerialPort serialIn = new System.IO.Ports.SerialPort();
private System.IO.Ports.SerialPort serialOut = new System.IO.Ports.SerialPort();
int bufMax = 12;//default is 12
/// <summary>
/// 构造函数
/// </summary>
/// <param name="inport">读数据端口号</param>
/// <param name="outport">转发数据端口号</param>
/// <param name="inbaudrate">读入数据波特率</param>
/// <param name="outbaudrate">转发数据波特率</param>
/// <param name="buffersize">缓存长度</param>
public SerialPortTransfer(int inport, int outport, int inbaudrate, int outbaudrate, int buffersize)
{
serialIn.PortName = "COM" + inport.ToString();
serialIn.BaudRate = inbaudrate;
serialOut.PortName = "COM" + outport.ToString();
serialOut.BaudRate = outbaudrate;
bufMax = buffersize;
send = new byte[bufMax];
}
~SerialPortTransfer()
{
Stop();
}
List<byte> buffer = new List<byte>();
byte[] send = new byte[0];
public void Start()
{
buffer.Clear();//清除缓存
serialIn.DataReceived += DataReceived;
serialIn.Open();
serialOut.Open();
}
public void Stop()
{
serialIn.DataReceived -= DataReceived;
serialIn.Close();
serialOut.Close();
} void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int n = serialIn.BytesToRead;//获取有效长度
byte[] temp = new byte[n];//分配空间
serialIn.Read(temp, 0, n);//读取
buffer.AddRange(temp);//追加缓存
if (buffer.Count >= bufMax)//判断长度
{
buffer.CopyTo(0, send, 0, bufMax);//复制
serialOut.Write(send, 0, bufMax);//发送
buffer.RemoveRange(0, bufMax);//移除
}
}
}