vs2005serialPort类使用,下位机发数据,电脑接受,如何实现 C#串口调试助手_VS2010(附源码) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不过还是用C++写串口上位机程序比较好,上面这个资源是以前写的,效果虽然都有了,但是总觉得功能上差了点什么,比如\r\n在串口接收到或者发送前都会无形被替换(好像都变成\r了),数据会发生改变,不过这个源码你可以参考看看 C#串口调试助手_VS2010(附源码)这个项目,运行报错,打不带 你吧代码复制到VS2005中再编译吧,那是我再VS2010下编译的,.net4.0环境 C#串口调试助手_VS2005(附源码)----------------------------------我在VS2005 .net2.0重新编译了一下,你自己试试吧 感谢海风,程序的基本功能能够实现,能力有限,里面的一些程序还有一些看不懂。想问一些,假如我收到下位机(单片机)发来的数据例如“ff”我就可以在后台调用以ff为名字的这个人信息...也就是我接到一个数据,我就对这个数据进行一些操作,问下这个程序怎么写啊,,,,, 现在不知怎么的,调试那个程序时总是说: string[] strnames = subkey.GetValueNames();这句代码,未处理NullReferenceException,未处理对象引用设置到对象的实例。后来又重新把你那下了一遍,还是运行出现这种情况,这是怎么回事啊,希望你能帮帮忙.... 这里天刚好写了一个和二次表串口通信的程序,希望能对楼主有帮助首先定义一些全局变量SerialPort spReceive = new SerialPort(); //定义一个串口string strRecieveSerialPortData = string.Empty; //用于保存接收到的串口数据delegate void HandleInterfaceUpdateDelegate(string text);HandleInterfaceUpdateDelegate interfaceUpdateHandle; //用于更新label上的重量数据然后初始化串口,可以在窗体加载时调用,也可以在点击按钮时调用,具体配置应该参照实际配置 private void InitClient() { interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateLabel); //委托方法UpdateLabel显示更新过重数据 spReceive.DataReceived += new SerialDataReceivedEventHandler(spReceive_DataReceived); //当接收到串口数据时触发DataRecieve事件 spReceive.ReceivedBytesThreshold = 8; //缓冲区为8位 spReceive.DataBits = 8; //数据位 spReceive.StopBits = StopBits.One; spReceive.PortName = "COM1"; //串口名 spReceive.ReadTimeout = 2000; //超时时间 spReceive.BaudRate = 9600; //波特率 spReceive.Parity = Parity.None; //校验位 }然后是判断串口是否打开 private void ReadData() { if (spReceive.IsOpen) //如果串口已打开则关闭重新打开 { spReceive.Close(); spReceive.Open(); } else //如果串口没有打开则打开串口 { spReceive.Open(); } }DataReceived事件,从串口读取到数据后触发 void spReceive_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { string strRecieve = spReceive.ReadExisting(); //获取缓冲区中的数据 this.Invoke(interfaceUpdateHandle, new string[] { strRecieve }); //指定interfaceUpdateHandle委托更新并处理数据 } catch (Exception expt) { MessageBox.Show(expt.Message); } }最后是将串口接收到的数据显示到Label上,当然你也可以显示到文本框或其他地方。数据格式处理很麻烦,费了我不少功夫由于每个仪表数据通信协议不同,这里我就不写了。。 private void UpdateLabel(string text) {//格式处理省略if (!string.IsNullOrEmpty(text)){ lbl.Text = text;}} 一个简单的关于属性的问题 请教,怎么让电脑斗地主的水平提高,标题长长长!!!!!!!!! c#求和问题 placeholder和panel的区别? DataGridView 临时删除 和恢复 c#如何实现点击FORM1上的BUTTON1弹出FORM2来而且同时隐藏FORM2上的PANEL1 初学者提问,谁能给出GridView控件里批量操作的代码吗?没分,希望有人能解答,网上找的代码都不对 在C#里如何使用USB2。0 web camera .net连接oracle数据库的高手请进!!!! 如何用C#访问informix数据库 懂VB的进来看看,解释下这些符号的意义. C#问题
这个项目,运行报错,打不带
你吧代码复制到VS2005中再编译吧,那是我再VS2010下编译的,.net4.0环境
----------------------------------我在VS2005 .net2.0重新编译了一下,你自己试试吧
SerialPort spReceive = new SerialPort(); //定义一个串口
string strRecieveSerialPortData = string.Empty; //用于保存接收到的串口数据
delegate void HandleInterfaceUpdateDelegate(string text);
HandleInterfaceUpdateDelegate interfaceUpdateHandle; //用于更新label上的重量数据
然后初始化串口,可以在窗体加载时调用,也可以在点击按钮时调用,具体配置应该参照实际配置 private void InitClient()
{
interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateLabel); //委托方法UpdateLabel显示更新过重数据
spReceive.DataReceived += new SerialDataReceivedEventHandler(spReceive_DataReceived); //当接收到串口数据时触发DataRecieve事件 spReceive.ReceivedBytesThreshold = 8; //缓冲区为8位
spReceive.DataBits = 8; //数据位
spReceive.StopBits = StopBits.One;
spReceive.PortName = "COM1"; //串口名
spReceive.ReadTimeout = 2000; //超时时间
spReceive.BaudRate = 9600; //波特率
spReceive.Parity = Parity.None; //校验位
}
然后是判断串口是否打开 private void ReadData()
{
if (spReceive.IsOpen) //如果串口已打开则关闭重新打开
{
spReceive.Close();
spReceive.Open();
}
else //如果串口没有打开则打开串口
{
spReceive.Open();
}
}
DataReceived事件,从串口读取到数据后触发 void spReceive_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string strRecieve = spReceive.ReadExisting(); //获取缓冲区中的数据
this.Invoke(interfaceUpdateHandle, new string[] { strRecieve }); //指定interfaceUpdateHandle委托更新并处理数据
}
catch (Exception expt)
{
MessageBox.Show(expt.Message);
}
}
最后是将串口接收到的数据显示到Label上,当然你也可以显示到文本框或其他地方。数据格式处理很麻烦,费了我不少功夫由于每个仪表数据通信协议不同,这里我就不写了。。 private void UpdateLabel(string text)
{
//格式处理省略
if (!string.IsNullOrEmpty(text))
{
lbl.Text = text;
}
}