c#数据传输问题

缘意 发布于 2018/04/02 16:10
阅读 61
收藏 0

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, buffer.Length);
                    theout();
                }
                catch
                {

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

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

                }
            }
            if (comboBox3.Text.CompareTo("电阻") == 0)
            {
                try
                {
                    byte[] buffer = new byte[1];
                    buffer[0] = Convert.ToByte(0x04);
                    serialPort1.Write(buffer, 0, buffer.Length);
                    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);
                serialPort1.DiscardInBuffer();
                for (i = 0; i < count; i++)
                {
                    string s = buffer[i].ToString();                  
                    textBox1.AppendText(s + "\n");                  
                }
            }
            catch (Exception)
            {

            }
        }
    }
}
小白写的有点乱  请问我这个和ardinou连接  无法从ardinou出接受到数据  

和单片机连接接受的数据十错的 请问这个怎么解决

加载中
0
艾恩
艾恩
read的时候,为什么一个字节一个字节的tostring?不是用Encoding.ASCII.GetString?
返回顶部
顶部