c#上位机 数据接受问题

一只大小黑 2018-04-01 11:20:33
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace 上位机之元器件管理项目
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//加载串口,并设置事件处理
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//必须手动添加事件处理程序
//有关于线程问题
CheckForIllegalCrossThreadCalls = false;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{

}

private void textBox2_TextChanged(object sender, EventArgs e)
{

}

private void textBox3_TextChanged(object sender, EventArgs e)
{

}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void button3_Click(object sender, EventArgs e)
{
//显示可用端口
switch (button3.Text)
{
case "搜索端口" :
try
{
button3.Text = "可用端口";
string[] PortSymbol = SerialPort.GetPortNames();
comboBox1.Items.Clear();
for (int i = 0; i < PortSymbol.Length; i++)
{
comboBox1.Items.Add(PortSymbol[i]);
}
comboBox1.SelectedIndex = 0;
}
catch
{
MessageBox.Show("没有可用端口", "提示");
}
break;
case "可用端口" :
{
button3.Text = "搜索端口";
}
break;

}
}

private void button1_Click(object sender, EventArgs e)
{
//打开串口
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
if (serialPort1.IsOpen)
{
MessageBox.Show("成功打开");
}
}
catch(Exception)
{
MessageBox.Show("打开失败");
}
}

private void button2_Click(object sender, EventArgs e)
{
//串口关闭
try
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
}
catch(Exception)
{
MessageBox.Show("关闭失败");
}
}

private void button4_Click(object sender, EventArgs e)
{
//设置波特率
serialPort1.PortName = comboBox2.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem.ToString());
}

private void button5_Click(object sender, EventArgs e)
{
//自动补全
comboBox3.DroppedDown = true;//点击按钮后弹出下拉列表
comboBox3.AutoCompleteMode = AutoCompleteMode.SuggestAppend;//提示并补齐
comboBox3.AutoCompleteSource = AutoCompleteSource.ListItems;//提示的数据来源
}

private void button6_Click(object sender, EventArgs e)
{
//添加确认信息
textBox3.AppendText("取" + comboBox3.Text + textBox2.Text + "个" + "\n");
}

private void button7_Click(object sender, EventArgs e)
{
//发送元件头代码,延迟发送元件个数
if (comboBox3.Text.CompareTo("二极管") == 0)
{
try
{
byte[] buffer = new byte[1];
buffer[0] = Convert.ToByte(0x01);
serialPort1.Write(buffer, 0, 1);
theout();
}
catch
{

}
}
if (comboBox3.Text.CompareTo("三极管") == 0)
{
try
{
byte[] buffer = new byte[1];
buffer[0] = Convert.ToByte(0x02);
serialPort1.Write(buffer, 0, 1);
theout();
}
catch
{

}
}
if (comboBox3.Text.CompareTo("晶闸管") == 0)
{
try
{
byte[] buffer = new byte[1];
buffer[0] = Convert.ToByte(0x03);
serialPort1.Write(buffer, 0, 1);
theout();
}
catch
{

}
}
if (comboBox3.Text.CompareTo("电阻") == 0)
{
try
{
byte[] buffer = new byte[1];
buffer[0] = Convert.ToByte(0x04);
serialPort1.Write(buffer, 0, 1);
theout();
}
catch
{

}
}
}
public void theout()
{
//获取元件个数并发送
Thread.Sleep(100);
byte[] Number = new byte[1];
Number[0] = Convert.ToByte(textBox2.Text);
serialPort1.Write(Number,0,1);
}

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
int i;
int count = serialPort1.BytesToRead;//记录下缓冲去的字节个数
byte[] buffer = new byte[count];
serialPort1.Read(buffer, 0, count);
for (i = 0; i < count; i++)
{
string s = Convert.ToString(buffer[i],10);
textBox1.AppendText(s + "\n");

}
}
catch (Exception)
{

}
}
}
}
小白写的 用ardiour开发版 接收不到数据 什么问题求解
用51开发 接受数据出错
...全文
497 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dai78 2018-04-04
  • 打赏
  • 举报
回复
或者先把串口2跟3针短接一下,看自己给自己收发信息能收到不
dai78 2018-04-04
  • 打赏
  • 举报
回复
先保证通信接线没有问题,用串口调试试一下
求知若愚 2018-04-03
  • 打赏
  • 举报
回复
你可以先尝试一下做一个demo,类似串口助手,与51单片机通讯,发送字符串,然后在单片机那头处理字符串的内容,我不知道你实现的是不是这样
xian_wwq 2018-04-02
  • 打赏
  • 举报
回复
调试串口,少不了第三方工具(如virtualserialportdriver), 先保证硬件没有故障 相关配置正确,可以正确接收到报文 然后再找代码的问题
Bob_huanghe 2018-04-02
  • 打赏
  • 举报
回复
可以先用串口调试助手试一下。确保线路以及下位机是否有问题。 如果可以,建议用NI VISA,简单、粗暴。
threenewbee 2018-04-01
  • 打赏
  • 举报
回复
https://blog.csdn.net/kasama1953/article/details/51434295 https://www.cnblogs.com/tuyile006/archive/2006/09/29/517882.html https://download.csdn.net/download/a379039233/8864605

111,094

社区成员

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

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

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