急急急....RS-485串口为什么接收不到数据?懂串口的进来看看啊..

bdsutx 2012-05-16 10:27:26
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;

namespace _2
{
public partial class Form1 : Form
{
SerialPort spReceive = new SerialPort ();

delegate void UpdateTextEventHandler(string text);//声明一个委托
UpdateTextEventHandler updateText;//创建一个委托实例
public Form1()
{
InitializeComponent();
updateText = new UpdateTextEventHandler(UpdateTextBox);


spReceive.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(spReceive_DataReceived );

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
spReceive.PortName = "COM5";
spReceive.BaudRate = 2400;
spReceive.DataBits = 8;
spReceive.StopBits = StopBits.One;
spReceive.Parity = Parity.Even;
//string str = "FE FE FE 68 AA AA AA AA AA AA 68 13 00 DF 16";
//byte[] data = System.Text.Encoding.ASCII.GetBytes(str );

byte []data=new byte [15];
data[0]=0xFE;
data[1]=0xFE;
data[2]=0xFE;
data[3]=0x68;
data[4]=0xAA;
data[5]=0xAA;
data[6]=0xAA;
data[7]=0xAA;
data[8]=0xAA;
data[9]=0xAA;
data[10]=0x68;
data[11]=0x13;
data[12]=0x00;
data[13] = 0xDF;
data[14] = 0x16;

//byte[] data = {1,2,3,4,5,6,7,8,9,10,11,12,13};
spReceive.Open();
spReceive.Write(data ,0,15);
//spReceive.Write(data,0,data.Length );
spReceive.Close();
}

public void spReceive_DataReceived(object sender,System .IO .Ports .SerialDataReceivedEventArgs e)
{
byte[]readBuffer = new byte[spReceive .ReadBufferSize];
spReceive.Read(readBuffer,0,readBuffer.Length);
this.Invoke(updateText ,new string []{Encoding .Unicode .GetString (readBuffer )});

string readString = spReceive.ReadExisting();
this.Invoke(updateText ,new string []{readString });
}

private void UpdateTextBox(string text)
{
textBox1.Text =text.ToString();

}
}
}
我向串口发送一串16进制命令,但是接收不到串口的返回数据.我有两个控件,一个Button 一个TextBox 我点击Button然后textbox显示返回的数据.但是现在好像收不到数据.上面的代码是哪里出了问题?
...全文
924 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xky96 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
if(spReceive.IsOpen) spReceive.Open();
[/Quote]

错。
改为
if(!spReceive.IsOpen) spReceive.Open();
xky96 2012-05-16
  • 打赏
  • 举报
回复
把spReceive.Open();
替换成
if(spReceive.IsOpen) spReceive.Open();

把spReceive.Close();移到Form_Closed之类的方法中
xky96 2012-05-16
  • 打赏
  • 举报
回复
你在button1_Click中打开串口后,又关闭了串口。
串口关闭了,spReceive_DataReceived怎么接收?
doubleu2005 2012-05-16
  • 打赏
  • 举报
回复
先用串口工具看一下你发出的信息是否正确,再看反馈信息是否正常,再找程序的毛病
test2050 2012-05-16
  • 打赏
  • 举报
回复
代码要自己看,学会调试代码吧。这样不用一有问题就上来问。你自己可以找出出错的代码是哪一句。
bdsutx 2012-05-16
  • 打赏
  • 举报
回复
我串口调试软件和硬件都有,都是通的(我用别人做的软件是可以正常发送数据和接收数据的).懂串口通信的先看看我的代码有没有问题啊...
mabaolin 2012-05-16
  • 打赏
  • 举报
回复
你是怎么调试的? 串口调试软件还是硬件?网上有串口调试模拟软件,下载下来调试。
xky96 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
spReceive.Read(readBuffer,0,readBuffer.Length);
this.Invoke(updateText ,new string []{Encoding .Unicode .GetString (readBuffer )});

string readString = spReceive.ReadExisting();
this.Invoke(updateText ,new string []{readString });

[/Quote]
串口读两次?这是什么概念?
去掉一个
bdsutx 2012-05-16
  • 打赏
  • 举报
回复
谢谢"xky96"我把spReceive.Close();移到Form_Closed之类的方法中就可以正常的接收到数据了,但是TextBox还是不能显示接收到的数据

110,536

社区成员

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

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

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