c#串口接收数据问题

jiayidan6 2012-06-29 09:42:31
private void buttonVoltage_Click(object sender, EventArgs e)
{
byte addr=0;
string textstr;
textstr = textBoxAddress.Text;
addr = StringToHex(textstr);
byte[] bytes=new byte[3];
bytes[0]=addr;
bytes[1]=0x60;
bytes[2]=TwoNumXor(bytes[0],bytes[1]);
try
{
SP.Write(bytes, 0, 3);
MessageBox.Show("数据发送成功");
}
catch
{
MessageBox.Show("数据发送失败");
}
}
上面是串口发送数据的代码,下面是串口接收数据的代码:
private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string lStrRecv = "";
int bytesToRead = SP.BytesToRead;
if (SP.IsOpen )
{
byte[] lAryBytes = new byte[bytesToRead];
int lIntLen = SP.Read(lAryBytes, 0, lAryBytes.Length);
if (lIntLen > 0)
{
byte[] lAryData = new byte[lIntLen];
for (int i = 0; i < lIntLen; i++)
{
lAryData[i] = lAryBytes[i];
}
lStrRecv = System.Text.Encoding.Default.GetString(lAryData);
}
this.textBoxVtest.Invoke(
new MethodInvoker(
delegate
{
this.textBoxVtest.AppendText(lStrRecv.ToUpper());
//this.textBoxVtest += "";
this.textBoxVtest.Text+= lStrRecv;
}));

}
}
发送数据后应该就会触发串口接收数据private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e),可是我发送数据后,单步调试都没有跑到private void SP_DataReceived函数里,好像是根本没有触发串口的数据接收。
请高手赐教我怎么才能收到我发的数据呢?谢谢!
...全文
332 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
LAN_YT 2012-08-17
  • 打赏
  • 举报
回复
楼主好歹把解决方案贴出出来啊,不厚道,祝楼主不性福。。。
jiayidan6 2012-07-12
  • 打赏
  • 举报
回复
mervyn807帮我解决了问题,谢谢各位的积极帮助!
缭绕飘渺 2012-06-29
  • 打赏
  • 举报
回复
你要是直接在界面上托的控件的话
直接在serialport控件的接收事件中读串口数据即可
jiayidan6 2012-06-29
  • 打赏
  • 举报
回复
谢谢各位的建议!
把MessageBox这行注销了也不行。
这是串口的设置:
SP.Close();
SP.PortName = "COM1";
SP.ReadTimeout = -1;
SP.WriteTimeout = -1;
SP.BaudRate = 9600;
//SP.Parity = Parity.None;
// SP.StopBits = StopBits.None;
//SP.ReceivedBytesThreshold = 3;
SP.Open();
串口打开成功了
我应该这样循环监听串口呢?
或者确定事件是否绑定?
jiayidan6 2012-06-29
  • 打赏
  • 举报
回复
请大家帮帮忙。
bdmh 2012-06-29
  • 打赏
  • 举报
回复
先确定事件是否绑定,然后看看串口设置是否正确,可以用网上的小工具测试一下
youqi1984 2012-06-29
  • 打赏
  • 举报
回复
循环监听串口。当数据发来时处理。
你都没有监听,
fsstolw 2012-06-29
  • 打赏
  • 举报
回复
把下面MessageBox这行注销一下试试呢?
try
{
SP.Write(bytes, 0, 3);
MessageBox.Show("数据发送成功");
}
hjfgood 2012-06-29
  • 打赏
  • 举报
回复
你发送的数据不会 从原来的串口接受的,除非你吧串口的2,3端口短路了,或者另外一端发送数据到你的电脑,虚拟串口软件 把两个串口连通试一下
缭绕飘渺 2012-06-29
  • 打赏
  • 举报
回复
我加你QQ了
jiayidan6 2012-06-29
  • 打赏
  • 举报
回复
是自发自收,在网上下了几个串口监视的工具,不过都不好用。不知道mervyn807你那有没有这样的工具?能否给我发一个?QQ1105871845
谢谢!
我试着设置下RTSEnabled=true,看好不好用
兔子-顾问 2012-06-29
  • 打赏
  • 举报
回复
不触发,你看看是否需要设置RTSEnabled=true
缭绕飘渺 2012-06-29
  • 打赏
  • 举报
回复
给你个建议
使用一个串口监视工具
比如串口监视精灵等
然后你就能看到你是否发送到串口了
还是没读取到数据
缭绕飘渺 2012-06-29
  • 打赏
  • 举报
回复
不清楚你是怎么测试的
打开同一个端口
自发自收
还是两个串口连接起来,一发一收
不过串口这东西只要波特率等设置正确
发送和接受数据是没问题的
jiayidan6 2012-06-29
  • 打赏
  • 举报
回复
是直接在界面上托的控件,但是发出数据后,程序都没有进入private void SP_DataReceived函数里,这个private void SP_DataReceived应该就是接收事件了吧。
川遇流水 2012-06-29
  • 打赏
  • 举报
回复
看不明白,努力学习中。。。。。。。。。。。

110,566

社区成员

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

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

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