
代码如下。
Sport.PortName = ApplicationSettings.PortName ;
Sport.BaudRate = ApplicationSettings .BaudRate ;
Sport.DataBits = 8;
Sport.Parity = ApplicationSettings.InterfaceIp == "NONE" ? Parity.None : (ApplicationSettings.InterfaceIp == "ODD" ? Parity.Odd : Parity.Even);
Sport.StopBits = StopBits.One;
Sport.RtsEnable = true;
try
{
Sport.Open();
if (Sport.IsOpen)
{
Sport.DataReceived += new SerialDataReceivedEventHandler(Sport_DataReceived);
DataProcessing.RunWorkerAsync();
log.Debug("串口打开成功");
}
}
catch (Exception ee)
{
log.Error("串口未能打开" + ee);
}
接收的方法
if (!isExit)
{
lock (readLock)
{
if (myQ.Count > 5000)
{
myQ.Dequeue();
}
int n = Sport.BytesToRead;
if (n > 0)
{
byte[] buf = new byte[n];
Sport.Read(buf, 0, n);
myQ.Enqueue(buf);
string hex = ComLibrary.Coder.TextEncoder.ByteArrayToHexString(buf);
log.Debug("接收:" + hex);
}
}
}
代码接收跟定义如上。拿到项目上测试收到的代码的时候每次都没收全。到底是我代码的问题还是项目设备的问题啊

------解决思路----------------------
串口发送数据还真没研究过,不过数据发送接收基本都是有分段的,拆分为一个个的数据包发送,一次发送太理想,拆分发送才通用嘛!
------解决思路----------------------
所以一般自己会定制通讯协议,然后根据协议的标志位和校验来验证一条数据是否接受完整且有效