分享

C#串口通信(终于可以了)

 家住天地 2012-11-05

C#串口通信(终于可以了)

2011-02-11 15:23:28| 分类: 编程C#.NET | 标签: |字号 订阅

陆陆续续尝试了很多代码,不是接收不到数据就是数据有问题,这次终于可以了。
一般的串口调试工具有两种模式。一种十六进制,一种就是文本,可以按照两种模式进行发送和接收。
//十六进制转换字节数组
private byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i += 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
//字节数组转换十六进制
private string ByteArrayToHexString(byte[] data)
{
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
return sb.ToString().ToUpper();
}

private void getData(string msg)
{
txtReceive.Invoke(new EventHandler(delegate
{
txtReceive.AppendText(msg);
}));
}

private void getByteData(byte[] bb)
{
lboxMsg.Invoke(new EventHandler(delegate
{
string s = "";
for (int i = 0; i < bb.Length; i++)
{
s += bb[i].ToString() + " ";
}
lboxMsg.Items.Add(s);
}));
}

private void btnSend_Click(object sender, EventArgs e)
{
try
{
if (IsHex)
{
//将十六进制数据转换为字节数组
byte[] data = this.HexStringToByteArray(txtSend.Text);
mySerialPort.Write(data, 0, data.Length);
}
else
{
mySerialPort.Write(txtSend.Text.Trim());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (IsHex)
{
System.Threading.Thread.Sleep(300);
// 获取字节长度
int bytes = mySerialPort.BytesToRead;
// 创建字节数组
byte[] buffer = new byte[bytes];
// 读取缓冲区的数据到数组
mySerialPort.Read(buffer, 0, bytes);
this.getData(this.ByteArrayToHexString(buffer) + "\r\n");
this.getByteData(buffer);
}
else
{
System.Threading.Thread.Sleep(300);
string data = mySerialPort.ReadExisting();
this.getData(data + "\r\n");
}
}

private void rbtnHex_CheckedChanged(object sender, EventArgs e)
{
IsHex = rbtnHex.Checked;
}

private void rbtnTxt_CheckedChanged(object sender, EventArgs e)
{
IsHex = !rbtnTxt.Checked;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多