c#串口通信有关问题
c#串口通信问题
新手学习用C#实现串口通信,采用李全江 visual C# .NET串口通信及测控应用典型实例,按照实例 做p35 4.利用serialport控件实现PC双串口互通信 开始自己做 程序不能正常显示结果。完全按 书上的例程 改一下变量 也一样不能正确显示,但是运行光盘上的例程 却可以正确显示,不知道原因出在哪儿?对比例程 基本上是一样,只是对应的控件的名称做了改变,请高手赐教,谢谢!
这是我的程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
namespace Pc
{
public partial class Form1 : Form
{
string data;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
serialPort2.PortName = "COM2";
serialPort2.BaudRate = 9600;
serialPort2.Open();
}
private void DisplayText(object sender, EventArgs e)
{
txBxDis.Text= txBxDis.Text + data;
}
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
data = serialPort2.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
Close();
}
private void btSend_Click(object sender, EventArgs e)
{
string outdata = txBxSend.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!", "");
}
serialPort1.Write(outdata);
}
}
}
下面是例程
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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
string outdata = textBox2.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!", "");
}
serialPort1.Write(outdata);
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
Close();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
serialPort2.PortName = "COM2";
serialPort2.BaudRate = 9600;
serialPort2.Open();
}
private void timer1_Tick(object sender, EventArgs e)
{
string data;
data = serialPort2.ReadExisting() ;
textBox1.Text = textBox1.Text + data;
}
}
}
------解决思路----------------------
using System.IO.Ports;是不是得加?
------解决思路----------------------
string data;这个变量应该放到最外层,局部变量
------解决思路----------------------
"程序不能正常显示结果",是怎么个不能正常显示?完全不能显示还是显示的数据与发送的不一致。
LZ你这个是实现的同个计算机上两个串口的通信,“COM1”和“COM2”是虚拟的串口还是物理串口?
如果是物理串口,连线了没?要2、3口交叉线相连。
------解决思路----------------------
我学习串口通信也是从这本书入门的,查看下SerialPort的DataReceived事件是否已绑定
------解决思路----------------------
那你得看下虚拟串口里“COM1”和“COM2”是不是相连的,如果不是相连,二者无法通信的
------解决思路----------------------
在设计窗口里,找到控件的属性窗口,在事件那边看下事件有无绑定
我一开始接触C#的时候也是忘记绑定事件,当时啥都不懂
新手学习用C#实现串口通信,采用李全江 visual C# .NET串口通信及测控应用典型实例,按照实例 做p35 4.利用serialport控件实现PC双串口互通信 开始自己做 程序不能正常显示结果。完全按 书上的例程 改一下变量 也一样不能正确显示,但是运行光盘上的例程 却可以正确显示,不知道原因出在哪儿?对比例程 基本上是一样,只是对应的控件的名称做了改变,请高手赐教,谢谢!
这是我的程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
namespace Pc
{
public partial class Form1 : Form
{
string data;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
serialPort2.PortName = "COM2";
serialPort2.BaudRate = 9600;
serialPort2.Open();
}
private void DisplayText(object sender, EventArgs e)
{
txBxDis.Text= txBxDis.Text + data;
}
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
data = serialPort2.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}
private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
Close();
}
private void btSend_Click(object sender, EventArgs e)
{
string outdata = txBxSend.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!", "");
}
serialPort1.Write(outdata);
}
}
}
下面是例程
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;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
string outdata = textBox2.Text;
if (outdata == "")
{
MessageBox.Show("发送的数据不能为空!", "");
}
serialPort1.Write(outdata);
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Close();
serialPort2.Close();
Close();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
serialPort2.PortName = "COM2";
serialPort2.BaudRate = 9600;
serialPort2.Open();
}
private void timer1_Tick(object sender, EventArgs e)
{
string data;
data = serialPort2.ReadExisting() ;
textBox1.Text = textBox1.Text + data;
}
}
}
------解决思路----------------------
using System.IO.Ports;是不是得加?
------解决思路----------------------
string data;这个变量应该放到最外层,局部变量
------解决思路----------------------
"程序不能正常显示结果",是怎么个不能正常显示?完全不能显示还是显示的数据与发送的不一致。
LZ你这个是实现的同个计算机上两个串口的通信,“COM1”和“COM2”是虚拟的串口还是物理串口?
如果是物理串口,连线了没?要2、3口交叉线相连。
------解决思路----------------------
我学习串口通信也是从这本书入门的,查看下SerialPort的DataReceived事件是否已绑定
------解决思路----------------------
那你得看下虚拟串口里“COM1”和“COM2”是不是相连的,如果不是相连,二者无法通信的
------解决思路----------------------
在设计窗口里,找到控件的属性窗口,在事件那边看下事件有无绑定
我一开始接触C#的时候也是忘记绑定事件,当时啥都不懂