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

news2025/1/19 20:27:15

串口通信

串口通信是一种常见的数据传输方式,通过串行接口(串口)将数据以串行比特流的形式进行传输。在计算机和外部设备之间,串口通信通常是通过串行通信标准(如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);
      }
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HarmonyOS】低代码开发—使用低代码开发服务卡片

DevEco Studio还支持使用低代码开发功能开发服务卡片&#xff0c;目前只支持JS语言&#xff0c;且compileSdkVersion必须为7或以上。 下面以创建一个新的服务卡片为例进行说明。 1.打开一个工程&#xff0c;创建服务卡片&#xff0c;创建方法包括如下两种方式&#xff1a; 选…

vue3前端项目开发,具备纯天然的防止爬虫采集的特征

vue3前端项目开发,具备纯天然的防止爬虫采集的特征&#xff01;众所周知&#xff0c;网络爬虫可以在网上爬取到一些数据&#xff0c;很多公司&#xff0c;为了自己公司的数据安全&#xff0c; 尤其是web端项目&#xff0c;不希望被爬虫采集。那么&#xff0c;您可以使用vue技术…

[c++] char * 和 std::string

1 char * 和 std::string 的区别 char * 字符串是常量字符串&#xff0c;不能修改&#xff1b;std::string 指向的字符串可以修改 实例代码如下图所示&#xff0c;s1 和 s2 均是常量字符串&#xff0c;字符串常量保存在只读数据区&#xff0c;是只读的&#xff0c;不能写&…

【人工智能高频面试题--基础篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;人工智能高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 人工智能高频面试题 1.什么是人工智能&#xff1f;什么是人工智能神经网络&#xff1f;2.解释…

Linux之ACL权限chmod命令

一. chmod命令 chmod命令来自英文词组change mode的缩写&#xff0c;其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限&#xff0c;普通用户只能管理自己文件的权限属性。 设置权限时可以使用数字法&#xff0c;亦可使用字母表达式&#xff0…

C++ //练习 8.8 修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

C Primer&#xff08;第5版&#xff09; 练习 8.8 练习 8.8 修改上一题的程序&#xff0c;将结果追加到给定的文件末尾。对同一个输出文件&#xff0c;运行程序至少两次&#xff0c;检验数据是否得以保留。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工…

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 &#xff08;1&#xff09;在网页页面右键&#xff0c;检查 &#xff08;2&#xff09;找到network&#xff0c;ctrl R刷新 &#xff08;3&#xff09;找 Ajax 数据包 &#xff08;4&#xff09;…

美联储突然降息无望

作者&#xff1a;秦晋 我们知道&#xff0c;影响比特币未来1-2年市场走向的重要三因素是比特币ETF、比特币减半以及美联储降息。 如果说前两者是影响比特币市场比较紧密的微观因素。那么美联储降息就是影响比特币市场的重要宏观因素。如何看懂宏观因素&#xff1f;尽量倾听和观…

从源码学习static的使用

从源码学习static的使用 前言 ​ static意味静态的&#xff0c;在Java中&#xff0c;主要用来修饰类级别的变量或方法等&#xff0c;被修饰的内容&#xff0c;表示随着类的加载而加载&#xff0c;而不是具体的实例级别。 ​ 具体到static的使用场景&#xff0c;主要有以下用…

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue&#xff0c;package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

第2.5章 StarRocks表设计——行列混存表

注&#xff1a;本篇文章阐述的是StarRocks- 3.2.3版本的行列混存表 一、概述 1.1 背景 StarRocks 基于列存格式引擎构建&#xff0c;在高并发场景&#xff0c;用户希望从系统中获取整行数据。当表宽时&#xff0c;列存格式将放大随机IO和读写。自3.2.3开始&#xff0c;StarRo…

让C语言代码变抽象(其三)

目录 前言&#xff1a; 我们直接看代码 前言&#xff1a; 今天我在写判断语句代码的时候&#xff0c;又想到一个更抽象的代码。 今天我将要将我之前写的抽象遍历代码变得更抽象。 我们直接看代码 这里我们用到的是布尔&#xff0c;当条件为假时值为0&#xff1b; 所以我们这…

力扣随笔之移除元素(简单27)

思路&#xff1a;定义一个指针left&#xff0c;使该指针及该指针左边的数全部都不等于val&#xff0c;定义一个遍历指针i&#xff0c;若nums[i] val&#xff0c;则i自加&#xff0c;若nums[i] ! val&#xff0c;则将left&#xff0c;并将nums[i]的值赋给nums[left]&#xff0c…

后端程序员入门react笔记——react的diff算法(三)

diffing算法 虚拟dom 我们知道&#xff0c;react里面操作的都是虚拟dom&#xff0c;最后经过render渲染为真正的dom&#xff0c;那么为什么要提出虚拟dom这个概念呢&#xff1f;其实就是将逻辑和视图区分开&#xff0c;react的虚拟dom&#xff0c;就相当于mvc的c&#xff0c;…

设计推特(Leetcode355)

例题&#xff1a; https://leetcode.cn/problems/design-twitter/ 分析&#xff1a; 推特其实类似于微博&#xff0c;在微博中可以发送文章。 求解这类题目&#xff0c;我们需要根据题目需求&#xff0c;利用面向对象的思想&#xff0c;先对需求做一个抽象&#xff0c;看看能…

自定义 Git Hook

前言 前端同学大概都熟悉 husky 这个工具&#xff0c;他可以直接在项目中添加 git hooks&#xff0c;主要解决了 git hooks 不会同步到 git 仓库的问题&#xff0c;保证了每个开发人员的本地仓库都能执行相同的 git hooks。 但是 husky 毕竟是一个 JS 生态的工具&#xff0c;…

ChatGPT助您提升求职技能

目录 ChatGPT可以作为求职技能的学习和提升平台 ChatGPT可以帮助求职者提升沟通和表达能力 ChatGPT还可以帮助求职者提升问题解决能力和创新能力 ChatGPT还可以帮助求职者建立自信心和自我推销能力 随着科技的迅速发展&#xff0c;人们的生活方式和工作方式也在不断地变革。…

移动端自动化常用的元素定位工具 介绍

在移动端自动化测试和开发中&#xff0c;元素定位是非常关键的一步。以下是一些常用的工具和技术来帮助开发者或测试工程师在移动设备上定位元素&#xff1a; 1. **UiAutomator**: - **UiAutomator** 是 Android 官方提供的自动化测试框架。它可以用来编写测试脚本&…

交易快讯:4拼域名以10,000元被秒

交易新闻 ——30万美元易手&#xff0c;60万美元易手&#xff0c;.au 10万美元易主。 近期&#xff0c;域名交易金额可能达到130万美元&#xff08;逾130万元人民币&#xff09;。 ——双拼在域名交易平台上以2万元的固定价格进行交易。 该域名直接对应了南瓜的含义。 另外&a…