serialport 开发 rs232脚 COM1 接口程序,发信测试成功,但就是接收不到信息,请前辈出手相救!!万分感谢!!
Form1.cs
public Form1() { InitializeComponent(); } //初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型 public void InitCOM(string PortName) { serialPort1 = new SerialPort(PortName); serialPort1.BaudRate = 9600;//波特率 serialPort1.Parity = Parity.None;//无奇偶校验位 serialPort1.StopBits = StopBits.Two;//两个停止位 serialPort1.Handshake = Handshake.RequestToSend;//控制协议 serialPort1.ReceivedBytesThreshold = 4;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数 } //打开串口的方法 public void OpenPort() { try { serialPort1.Open(); } catch { } if (serialPort1.IsOpen) { Console.WriteLine("the port is opened!"); } else { Console.WriteLine("failure to open the port!"); } } //关闭串口的方法 public void ClosePort() { serialPort1.Close(); if (!serialPort1.IsOpen) { Console.WriteLine("the port is already closed!"); } } //调用实例,发送数据 private void button1_Click(object sender, EventArgs e) { InitCOM("COM3"); OpenPort(); byte[] data = Encoding.Unicode.GetBytes(this.textBox1.Text); string str = Convert.ToBase64String(data); serialPort1.WriteLine(str); ClosePort(); MessageBox.Show(this, "利用串口成功发送数据!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } //接收数据 private void button2_Click(object sender, EventArgs e) { try { byte[] datar = Convert.FromBase64String(serialPort1.ReadLine()); textBox2.Text = Encoding.Unicode.GetString(datar); ClosePort(); MessageBox.Show(this, "利用串口成功接收数据!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { ClosePort(); MessageBox.Show(this, "利用串口接收数据失败!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
serialPort1.WriteLine(str);
ClosePort();
MessageBox.Show(this, "利用串口成功发送数据!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
这句closePort()不能关闭的,
还有接收数据的closePort也是不能关闭的,一般串口通讯有两种方式,一种是中断法,就是事件触发,一种是查询,定时去查
[解决办法]
异步就是这样的
要自己定个协议,比如开头一个字节表示长度等等之类的方法
[解决办法]
这个应该用事件来接收数据,serialPort.DataReceived 事件