急急急啊!c#串口触发接收问题,求大侠帮帮我。。。
privatevoidserialPort1_DataReceived(objectsender,SerialDataReceivedEventArgse){try{Me...
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
MessageBox.Show("触发成功2", "系统提示");
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
tbxInt.Text += Encoding.Unicode.GetString(data);
}
catch (Exception)
{
MessageBox.Show("读取串口数据时发生错误");
}
}
触发后显示:“触发成功2”,接着就是“读取串口数据时发生错误”,又接着是“触发成功1”,这是为什么啊?接受的代码哪里错了啊?大侠们,帮帮我啊。。。 展开
{
try
{
MessageBox.Show("触发成功2", "系统提示");
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
tbxInt.Text += Encoding.Unicode.GetString(data);
}
catch (Exception)
{
MessageBox.Show("读取串口数据时发生错误");
}
}
触发后显示:“触发成功2”,接着就是“读取串口数据时发生错误”,又接着是“触发成功1”,这是为什么啊?接受的代码哪里错了啊?大侠们,帮帮我啊。。。 展开
4个回答
展开全部
你用readline读得到的是字符串。他自己本来就包含了将二进制转化成string的能力;根据不同的编码,显示出不同的内容。你可以设置下serialPort1的编码encoding,得到正确的字符串内容(ascii gb2312 unicode)。
你将readline 之后的string再转化成字节再转化成string。结果肯定是错的。
你可以试试直接readline出来的结果。说必定就是对的,不对的话,serialport有个Encoding属性可以设置发送接受前后文本转换的字节编码;设置成你想要的(按你的代码应该是Encoding.Unicode),然后看readline出来的结果是否你想要的
还一种方法就是直接读取二进制。而不是读取字符串
SerialPort1.BytesToRead;能知道这次传送过来的字节数量。在用SerialPort1.ReadByte()每次读取一个字节。存到字节数组中;外面嵌套一个循环。循环次数就是之前获取的传送字节数。
你将readline 之后的string再转化成字节再转化成string。结果肯定是错的。
你可以试试直接readline出来的结果。说必定就是对的,不对的话,serialport有个Encoding属性可以设置发送接受前后文本转换的字节编码;设置成你想要的(按你的代码应该是Encoding.Unicode),然后看readline出来的结果是否你想要的
还一种方法就是直接读取二进制。而不是读取字符串
SerialPort1.BytesToRead;能知道这次传送过来的字节数量。在用SerialPort1.ReadByte()每次读取一个字节。存到字节数组中;外面嵌套一个循环。循环次数就是之前获取的传送字节数。
展开全部
你这么用串口本来就可能各种问题。
串口的数据一次不一定能发完,和你设计的通信协议、硬件状况都有关系。
你应该自己判断传完了没。
另外串口的数据应该是ASCII纯数据吧,怎么会是Base64?
串口的数据一次不一定能发完,和你设计的通信协议、硬件状况都有关系。
你应该自己判断传完了没。
另外串口的数据应该是ASCII纯数据吧,怎么会是Base64?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
try里就先‘触发成功’,肯定是下面两句发生异常了啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
....
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询