C#与VisionPro联合开发——串口通信

发布于:2024-02-25 ⋅ 阅读:(126) ⋅ 点赞:(0)

串口通信

串口通信是一种常见的数据传输方式,通过串行接口(串口)将数据以串行比特流的形式进行传输。在计算机和外部设备之间,串口通信通常是通过串行通信标准(如RS-232)来实现的。串口通信可以用于连接各种设备,如打印机、传感器、单片机等。

在串口通信中,数据按照位的顺序依次传输,一个字节(8位)的数据通常包括起始位、数据位、校验位和停止位。串口通信的优点包括连接简单、传输距离较远、可靠性高等特点,但传输速率一般较低。

串口调试助手(软件)

在这里插入图片描述
在这里插入图片描述

使用代码编写
在这里插入图片描述

1、使用代码编写串口通信

using System;
//支持串口通信的
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;

namespace _3.串口通信 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }
    //描述一个支持串口通信的对象,SerialPort属于.net里面封装号的一个类
    SerialPort sp;
    //声明一个委托
    public delegate void ShowMSGdele(string str);//2
    //声明委托对象
    ShowMSGdele showMSGdele;
    private void ShowMSG(string msg) {//1
      textBox1.Text += msg;
    }
    //建立串口的链接
    private void Form1_Load(object sender, EventArgs e) {
      //为委托赋值
      showMSGdele = ShowMSG;
      //为串口实例化
      sp = new SerialPort();
      //配置串口信息
      sp.PortName = "COM2";
      //设置波特率
      sp.BaudRate = 9600;
      //校验
      sp.Parity = Parity.None;
      //数据位
      sp.DataBits = 8;
      //停止位
      sp.StopBits = StopBits.One;
      //接收数据的事件,接收的逻辑是系统封装好的
      sp.DataReceived += Sp_DataReceived;
      //打开串口
      sp.Open();
      //plc中会提供串口连接数据
    }
    //接收数据的事件
    private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e) {
      //1.接收对方发送的字节数大小
      int size = sp.BytesToRead;
      //2.准备一个字节数组,用size初始化
      byte[] buffer = new byte[size];
      //3.读取数据
      //参数1:把读取的数放到字节数组中
      //参数2:从第几个字节开始读取
      //参数3:是buffer的长度
      sp.Read(buffer, 0, size);
      //4.把接收到的字节转成string
      string msg = Encoding.Default.GetString(buffer);
      //分线程不能刷新ui
      //textBox1.Text = msg;
      //MessageBox.Show(msg);
      textBox1.BeginInvoke(showMSGdele, msg);
    }

    //发送消息
    private void button1_Click(object sender, EventArgs e) {
      sp.Write(textBox2.Text);
    }
  }
}

2、使用winfrom控件编写串口通信

SerialPort 控件是Windows Forms中提供的串口通信控件,可以用于实现串口通信功能。
该控件有三个事件
1、DataRecived:该事件是每次从SerialPort接收数据时触发的
2、ErrorReceived:该事件是每次从SerialPort接收错误触发的
3、PinChanged:该事件是每次SerialPort的pin更改时触发的

代码展示(注意要修改serialPort控件的PortName属性)

using System;
//引入命名空间
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;

namespace _4.组件串口通信 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
      //打开窗口的时候打开串口
      serialPort1.Open();
    }

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) {
      //获取接收缓冲区中数据的字节数
      int size = serialPort1.BytesToRead;
      byte[] buffer = new byte[size];
      serialPort1.Read(buffer, 0, size);

      string msg = Encoding.Default.GetString(buffer);
      textBox1.BeginInvoke(new Action<string>(str => {
        textBox1.Text += str;
      }), msg);
    }

    private void button1_Click(object sender, EventArgs e) {
      //判断组件是否正常运行
      if (serialPort1.IsOpen) {
        serialPort1.Write(textBox2.Text);
      }
    }
  }
}
本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到