C# 完成串口通信RS485

news2024/11/23 15:43:51

C# 完成串口通信RS485|RS232上下位机交互

第零步:
我用的是电脑usb 转串口的所以首先是驱动程序下载,我们用的是CH341
在这里插入图片描述
下载地址:https://www.wch.cn/downloads/CH341SER_EXE.html

第一步:连接机器
RS485 上面有三个端子,A正B负GND地线,我们需要把他们都对应连接(GND看你连不连都可以)
在这里插入图片描述
第二步:
连接好了之后就是C# 控制程序啦,这里没什么特别的,主要是用到一个类 SerialPort

SerialPort类
在C#中,串口通信主要是使用SerialPort类来实现的。SerialPort类提供了串口通信中所有必需的属性和方法。使用SerialPort类,我们可以轻松地连接电脑和外设,进行数据传输。

SerialPort类的属性
SerialPort类中有几个重要的属性值,通过设置这些属性值,我们可以对串口进行配置,从而实现串口通信。以下是SerialPort类中几个重要的属性:

  • PortName:串口端口名称,如COM1、COM2等;
  • BaudRate:波特率,指每秒钟传输的数据位数;
  • Parity:奇偶校验位,用于检验数据传输是否有误;
  • DataBits:数据位,用于设置每次传输多少位数据;
  • StopBits:停止位,用于指定数据传输过程中的间隔时间。

SerialPort类的常用方法
SerialPort类的方法包括打开串口、关闭串口、发送数据等操作。以下是SerialPort类的几个重要的方法:

  • Open():打开串口;
  • Close():关闭串口;
  • Write():发送数据;
  • Read():接收数据。

随便写了一个贴这里了
在这里插入图片描述
一、 首先先赋值,参考

   static SerialPort serialPort = new SerialPort();
   
  private void Send_Load(object sender, EventArgs e)
    {
        // 查询更新已有端口
        IList<string> list = new List<string>();
        // 读取当前有哪些COM口
        foreach (string s in SerialPort.GetPortNames())
        {
            list.Add(s);
        }
        port_m.DataSource = list;

        // 传输速度
        int[] speed_data = new int[] { 128000, 9600, 19200, 38400, 115200 };
        speed.DataSource = speed_data;

        // 传输速度
        int[] times_data = new int[] { 10, 1, 2, 5, 10, 20 };
        times.DataSource = times_data;

        // 奇偶校验
        IList<string> list1 = new List<string>();
        list1.Add("0不发生奇偶校验检查");
        list1.Add("1设置奇偶校验位奇数");
        list1.Add("2设置奇偶校验位偶数");
        list1.Add("3将奇偶校验位保留为1");
        list1.Add("4将奇偶校验位保留为0");
        odd_even.DataSource = list1;

        // 停止位
        string[] stop = { "0", "1", "2" };
        stop_num.DataSource = stop;

        serialPort.DataBits = 8;
    }

二、打开串口,发送数据,接收数据,关闭串口

        private void simOpen_Click(object sender, EventArgs e)
        {
            serialPort.PortName = port_m.Text;
            serialPort.BaudRate = Int32.Parse(speed.Text);
            switch (odd_even.Text) {
                case "0不发生奇偶校验检查":
                    serialPort.Parity = Parity.None;
                    break;
                case "1设置奇偶校验位奇数":
                    serialPort.Parity = Parity.Odd;
                    break;
                case "2设置奇偶校验位偶数":
                    serialPort.Parity = Parity.Even;
                    break;
                case "3将奇偶校验位保留为1":
                    serialPort.Parity = Parity.Mark;
                    break;
                case "4将奇偶校验位保留为0":
                    serialPort.Parity = Parity.Space;
                    break;
                default:
                    serialPort.Parity = Parity.None;
                    break;
            }
            serialPort.DataBits = 8;
            switch (stop_num.Text)
            {
                case "1":
                    serialPort.StopBits = StopBits.One;
                    break;
                case "2":
                    serialPort.StopBits = StopBits.Two;
                    break;
                default:
                    serialPort.StopBits = StopBits.One;
                    break;
            }
            try
            {
                serialPort.Open();
            }
            catch (Exception )
            {
                txtLog.Text += "\n 串口打开失败,请检查是不是这个COM,或者检查参数是否有误";
            }

			serialPort.Write(txtSend.Text);//这个是文本发送数据给对应的串口
			Byte[] TxData = { 0x04, 0x03, 0x00, 0x03, 0x00, 0x01, 0x74, 0x5f }; //定义通讯指令 ,0x04设备地址为4,0x03功能码为3, 0x00, 0x03是通讯地址吗,0x00, 0x01是寄存器数量,0x74, 0x5f是CRC校验
			serialPort.Write(TxData , 0, 8);//或者这样发送
			byte[] recData = new byte[7];
            serialPort.Read(recData, 0, 7);//接收数据
            serialPort.Close();//关闭串口
        }

好了,有兴趣的朋友可以去了解一下SerialPort

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

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

相关文章

LangChain手记 Overview

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Overview 综述&#xff08;Overview&#xff09; LangChain是为大模型应用开发设计的开源框架 LangChain目前提供Python和JavaScript&#xff08;TypeScript&#xff09;两种语言的包 LangChain的主攻方向是聚合和…

若依form中点击重置按钮,select2选中项不会被重置

若依form中点击重置按钮,select2选中项不会被重置问题&#xff0c;下面提供解决办法。 如图所示,点击重置按钮后, 值被重置为初始状态, 而select2仍然选中之前的选项。 解决办法 在 ry-ui.js文件中 625行增加 下边的代码即可 $("#" currentId).find(select).val…

Parquet存储的数据模型以及文件格式

文章目录 数据模型Parquet 的原子类型Parquet 的逻辑类型嵌套编码 Parquet文件格式 本文主要参考文献&#xff1a;Tom White. Hadoop权威指南. 第4版. 清华大学出版社, 2017.pages 363. Aapche Parquet是一种能有效存储嵌套数据的列式存储格式&#xff0c;在Spark中应用较多。 …

【框架篇】MyBatis 介绍及使用(详细教程)

一&#xff0c;MyBatis 介绍 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff…

亚马逊积极布局金融科技业务,将在巴西推出信用卡服务

据外媒报道&#xff0c;近日亚马逊表示&#xff0c;其将与巴西布拉德斯科银行&#xff08;Banco Bradesco&#xff09;合作&#xff0c;在巴西推出信用卡服务。 Banco Bradesco执行长Octavio de Lazari Junior表示&#xff0c;双方合作的信用卡将于8月8日推出&#xff0c;该卡…

pinctrl_desc函数操作集

pinctrl_desc函数操作集 文章目录 pinctrl_desc函数操作集操作集原型struct pinctrl_opsstruct pinctrl_opsstruct pinconf_ops 操作集原型 pinctrl_desc结构体中包含下列函数操作集 /* 引脚控制操作的虚拟函数表&#xff0c;用于支持引脚分组等全局概念&#xff0c;这是可选的…

分布式异步任务组件(八)

分布式异步任务组件网络通信线程模型设计-- 大概说一下功能场景&#xff1a; 从节点和主节点建立连接&#xff0c;负责和主节点的网络IO通信&#xff0c;通信动作包括投票&#xff0c;心跳&#xff0c;举证等&#xff0c;步骤为读取主节点的信息&#xff0c;写入IO队列中&…

Kotlin基础(十一):反射和注解

前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中&#xff0c;反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。Kotlin为反射提供了一…

vue新学习 05vue的创建运行原理

01.vue的创建过程 Vue的生命周期是指Vue实例从创建到销毁的整个过程中经历的一系列阶段。Vue的生命周期分为8个阶段&#xff0c;分别是&#xff1a; beforeCreate&#xff08;创建前&#xff09;&#xff1a;在实例初始化之后&#xff0c;数据观测和事件配置之前被调用。此时…

后台管理系统中----菜单的展开和收起

1.下载vuex npm i vuex3.6.2 2.创建文件夹 src/store/index import Vue from "vue"; import Vuex from "vuex"; Vue.use(Vuex); import tab from "./tab"; export default new Vuex.Store({modules: {tab,}, });注册Vuex并且注册tab模块 来控…

Spring系列三:基于注解配置bean

文章目录 &#x1f497;通过注解配置bean&#x1f35d;基本介绍&#x1f35d;快速入门&#x1f35d;注意事项和细节 &#x1f497;自己实现Spring注解配置Bean机制&#x1f35d;需求说明&#x1f35d;思路分析&#x1f35d;注意事项和细节 &#x1f497;自动装配 Autowired&…

RISC-V基础之内存分布与映射

内存映射是指将地址空间划分为不同的部分或段&#xff0c;每个段有不同的用途和属性。这段话介绍了五个段&#xff1a;文本段、全局数据段、动态数据段、异常处理器段和操作系统&#xff08;OS&#xff09;段。下面是对每个段的简要说明&#xff1a; 文本段&#xff1a;存放程序…

cookie、sessionStorage、localStorage的使用介绍,通过localStorage保存当前菜单、已打开菜单

这篇文章主要介绍前端常用的几种存储技术cookie、storage&#xff08;sessionStorage、localStorage&#xff09;的简单介绍和使用方法。 一、cookie 1、在JavaScript中使用cookie 使用原生的cookie // 设置cookie document.cookie "nameTom;age18;";// 获取coo…

使用Python和wxPython构建中文OCR截图工具

引言&#xff1a; 随着数字化时代的到来&#xff0c;我们经常需要从图像中提取文本信息。而在处理中文文本时&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术发挥着重要作用。本文将介绍如何使用Python编程语言和wxPython图…

powershell几句话设置环境变量

设置环境变量比较繁琐&#xff0c;现在用这段话&#xff0c;在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

ORACLE常用基础

. 1.oracle开机启动流程 su - oracle lsnrctl start lsnrctl status sqlplus / as sysdba startup 2、如何查看数据库版本 select * from v$version; 3.如何查看用户从那个设备连接的数据库 SELECT DISTINCT machine , terminal FROM V$SESSION; 4.如何查看表结构 selec…

【严重】Apache Airflow Run Task 权限绕过漏洞

漏洞描述 Airflow 是一个开源的工作流自动化平台&#xff0c;它允许用户定义、调度和监视工作流任务的执行。Run Task 是通过 Airflow 的 Web 界面或命令行工具。 在 Airflow 受影响版本中&#xff0c;Run Task 功能允许用户手动触发执行特定的任务&#xff0c;而不受正常的任…

CASAIM与迈普医学合作,基于CT数据三维重建和设计,在医疗辅具研究开发中实现高精度三维建模和偏差比对

近期&#xff0c;CASAIM与广州迈普再生医学科技股份有限公司&#xff08;简称&#xff1a;迈普医学&#xff09;合作&#xff0c;基于CT数据三维重建和设计&#xff0c;在医疗辅具研究开发中实现高精度三维建模和偏差比对&#xff0c;实现与缺损区域的精确匹配。 迈普医学&…

全新二开美化版UI好看的社区源码下载/反编译版

2023全新二开美化版UI精美的社区源码下载/反编译版 之前我分享过Rule原版&#xff0c;相信大家已经有很多人搭建好了。这次我要分享的是RuleAPP的二开美化版&#xff08;请尊重每个作者的版权&#xff09;&#xff0c;这个版本没有加密&#xff0c;可以进行反编译&#xff0c;…

C#实现SqlServer数据库同步

实现效果&#xff1a; 设计思路&#xff1a; 1. 开启数据库及表的cdc&#xff0c;定时查询cdc表数据&#xff0c;封装sql语句(通过执行类型&#xff0c;主键;修改类型的cdc数据只取最后更新的记录)&#xff0c;添加到离线数据表&#xff1b; 2. 线程定时查询离线数据表&#xf…