日期:2014-05-18  浏览次数:20874 次

急急急....RS-485串口为什么接收不到数据?懂串口的进来看看啊..
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显示返回的数据.但是现在好像收不到数据.上面的代码是哪里出了问题?

------解决方案--------------------
你在button1_Click中打开串口后,又关闭了串口。
串口关闭了,spReceive_DataReceived怎么接收?
------解决方案--------------------
探讨
spReceive.Read(readBuffer,0,readBuffer.Length);
this.Invoke(updateText ,new str