c# serialPort串口读取

tt1990 2011-03-30 09:01:08
在网上搜的代码,我读取串口数据,我用模拟的传感器,传出数据为960,读取的是00096.0,怎么样才能读取为960.

代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace WMS.SD.DeliveryGoods
{
public partial class frmUpLoad : Form
{
private delegate void HandleInterfaceUpdateDelegate(string aString);
HandleInterfaceUpdateDelegate interfaceUpdateHandle;

static string strReceive; // 接收到数据的缓冲区

public frmUpLoad()
{
InitializeComponent();
}

private void frmUpLoad_Load(object sender, EventArgs e)
{
//是否允许跨线程访问
// CheckForIllegalCrossThreadCalls = false;

interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(ShowText);

try
{
if (!sp.IsOpen)
{
sp.Open();//打开串口方法
}

btnGetWeight.Enabled = false;

}//抛出异常
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}


private void ShowText(string aString)
{
//根据通信数据规格显示数据
this.lblData.Text = aString.Substring(1, 5) + "." + aString.Substring(5, 1);

}

private void btnGetWeight_Click(object sender, EventArgs e)
{
try
{
btnGetWeight.Enabled = false;

if (!sp.IsOpen)
{
Thread.Sleep(5000);
sp.Open();//打开串口方法
}

}//抛出异常
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}

}

private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
//取得第一个字节
if (sp.IsOpen)
{
byte firstbyte = Convert.ToByte(sp.ReadByte());

//判断第一个字节是否是起始位:16进制的0x02
if (firstbyte == 0x02)
{
//定义接收数据长度
int bytesRead = sp.ReadBufferSize;
//数据接收字节数组
byte[] bytesData = new byte[bytesRead];
//接收字节
byte byteData;
for (int i = 0; i <= bytesRead - 1; i++)
{
try
{
if (sp.IsOpen)
{
byteData = Convert.ToByte(sp.ReadByte());
//判断数据结束字节
if (byteData == 0x03)
{
break;
}
bytesData[i] = byteData;
}
}
catch (Exception ex)
{
// MessageBox.Show( ex.Message + ex.GetType().FullName);

}
}
//将字节数组转换成字符串
strReceive = System.Text.Encoding.Default.GetString(bytesData);

//this.lblData.Text = strReceive.Substring(1, 5) + "." + strReceive.Substring(5, 1);

// Invoke(interfaceUpdateHandle, strczData);

BeginInvoke(interfaceUpdateHandle, strReceive);

}
}
}
catch (Exception ex)
{
// MessageBox.Show(ex.Message + ex.GetType().FullName);
}
}

private void btnexit_Click(object sender, EventArgs e)
{
if (sp.IsOpen)
{
sp.DiscardInBuffer();
sp.Close();
}
this.Close();
}

private void btnreset_Click(object sender, EventArgs e)
{
try
{
if (sp.IsOpen)
{
sp.DiscardInBuffer();
sp.Close();
}

this.lblData.Text = "";

btnGetWeight.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void frmUpLoad_FormClosing(object sender, FormClosingEventArgs e)
{
if (sp.IsOpen)
{
sp.DiscardInBuffer();
sp.Close();
}
}
}
}
...全文
324 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vvlovevv 2011-04-01
  • 打赏
  • 举报
回复
原样显示出来的代码:
this.lblData.Text =sp.Readline();
tt1990 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qldsrx 的回复:]
你搜到代码不适合你使用,你之所以出现问题,是这句捣鬼:
private void ShowText(string aString)
{
//根据通信数据规格显示数据
this.lblData.Text = aString.Substring(1, 5) + "." + aString.Substring(5, 1);

}

假设你收到的是960,那么这句运行必……
[/Quote]我想接受到的,原样显示出来
doubleu2005 2011-03-30
  • 打赏
  • 举报
回复
同意LS,是你的数据取值有问题,而不是串口得到的数据有问题。
qldsrx 2011-03-30
  • 打赏
  • 举报
回复
你搜到代码不适合你使用,你之所以出现问题,是这句捣鬼:
private void ShowText(string aString)
{
//根据通信数据规格显示数据
this.lblData.Text = aString.Substring(1, 5) + "." + aString.Substring(5, 1);

}

假设你收到的是960,那么这句运行必然报错,因为960的长度是3,Substring会提示溢出,如果你收到的是000960,那么这句执行正好是你要的结果。总之你的代码问题很多,你必须先理清思路,发送到是什么,接收时原样显示还是要处理啥的。
tt1990 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hui_play 的回复:]
????????????????????????????????????????????????????
一脑袋问号,你先说明你想要达到什么目的,贴太多代码,等把代码看完,都乱了。
[/Quote]


就是就是用c# serialPort读取串口,得到稳定的值!
tt1990 2011-03-30
  • 打赏
  • 举报
回复
就是用c# serialPort读取串口,得到稳定的值!
hui_play 2011-03-30
  • 打赏
  • 举报
回复
????????????????????????????????????????????????????
一脑袋问号,你先说明你想要达到什么目的,贴太多代码,等把代码看完,都乱了。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧