C#串口通讯控制4路继电上位机

news2025/1/12 22:02:08

C#串口通讯控制4路继电上位机

界面如下

在这里插入图片描述
源码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;

//引入空间
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace 继电器上位机开发
{
    public partial class frmrelay : Form
    {
        public frmrelay()
        {
            InitializeComponent();
        }

        private void frmrelay_Load(object sender, EventArgs e)
        {
            btn1open.Enabled = false;
            btn1close.Enabled = false;
            btn2close.Enabled = false;
            btn2open.Enabled = false;
            btn3close.Enabled = false;
            btn3open.Enabled = false;
            btn4close.Enabled = false;
            btn4open.Enabled = false;
            string[] PortNames = SerialPort.GetPortNames();    //获取本机串口名称,存入PortNames数组中

            for (int i = 0; i < PortNames.Count(); i++)

            {

                comboBox1.Items.Add(PortNames[i]);   //将数组内容加载到comboBox控件中

            }
        }
        public byte[] CmdopenA = { 0x01, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x8C, 0x3A };//1开
        public byte[] CmdcloseA = { 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xCA };//1关

        public byte[] CmdopenB = { 0x01, 0x05, 0x00, 0x01, 0xFF, 0x00, 0xDD, 0xFA };//2开
        public byte[] CmdcloseB = { 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x9C, 0x0A };//2关

        public byte[] CmdopenC = { 0x01, 0x05, 0x00, 0x02, 0xFF, 0x00, 0x2D, 0xFA };//3开
        public byte[] CmdcloseC = { 0x01, 0x05, 0x00, 0x02, 0x00, 0x00, 0x6C, 0x0A };//3关

        public byte[] CmdopenD = { 0x01, 0x05, 0x00, 0x03, 0xFF, 0x00, 0x7C, 0x3A };//4开
        public byte[] CmdcloseD = { 0x01, 0x05, 0x00, 0x03, 0x00, 0x00, 0x3D, 0xCA };//4关

        public byte[] CmdDatacloseAll = { 0x01, 0x0F, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0xFE, 0x95 };//全关
        public byte[] CmdDataopenAll = { 0x01, 0x0F, 0x00, 0x00, 0x00, 0x08, 0x01, 0xFF, 0xBE, 0xD5 };//全开

        private void btn1open_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdopenA, 0, 8);
            Thread.Sleep(100);

        }

        private void btnportopen_Click(object sender, EventArgs e)
        {
            if (btnportopen.Text == "打开串口")
            {
                try
                {
                    if (!sp1.IsOpen)
                    {
                        // 串口参数设置
                        //串口号
                        sp1.PortName = comboBox1.SelectedItem.ToString();
                        //串口设置
                        sp1.BaudRate = 9600;//波特率
                        sp1.DataBits = 8;//数据位
                        sp1.StopBits = StopBits.One;
                        sp1.Parity = Parity.None;
                        sp1.Open();
                        btnportopen.Text = "关闭串口";
                        btn1open.Enabled = true;
                        btn1close.Enabled =true;
                        btn2close.Enabled =true;
                        btn2open.Enabled = true;
                        btn3close.Enabled =true;
                        btn3open.Enabled = true;
                        btn4close.Enabled =true;
                        btn4open.Enabled = true;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                try
                {
                    sp1.Close();
                    btnportopen.Text = "打开串口";
                    btn1open.Enabled = false;
                    btn1close.Enabled = false;
                    btn2close.Enabled = false;
                    btn2open.Enabled = false;
                    btn3close.Enabled = false;
                    btn3open.Enabled = false;
                    btn4close.Enabled = false;
                    btn4open.Enabled = false;
                }
                catch (Exception Err)
                {

                    MessageBox.Show(Err.Message);
                }
            }
           
        }

        private void btn1close_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdcloseA, 0, 8);
            Thread.Sleep(100);
        }

        private void btn2open_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdopenB, 0, 8);
            Thread.Sleep(100);
        }

        private void btn2close_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdcloseB, 0, 8);
            Thread.Sleep(100);
        }

        private void btn3open_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdopenC, 0, 8);
            Thread.Sleep(100);
        }

        private void btn3close_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdcloseC, 0, 8);
            Thread.Sleep(100);
        }

        private void btn4open_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdopenD, 0, 8);
            Thread.Sleep(100);
        }

        private void btn4close_Click(object sender, EventArgs e)
        {
            sp1.Write(CmdcloseD, 0, 8);
            Thread.Sleep(100);
        }
    } }

通讯协议是modbus RTU

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

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

相关文章

PS滤镜插件:Adobe Camera Raw 16 for Mac中文激活版

Adobe Camera Raw是Adobe公司开发的一款用于处理数码相机RAW格式文件的软件插件。它可以在Adobe Photoshop、Adobe Bridge和Adobe Lightroom等软件中使用&#xff0c;用于调整RAW文件的曝光、白平衡、对比度、色彩饱和度、锐化等参数&#xff0c;从而得到更好的图像质量。 软件…

接口测试 04 -- Jsonpath断言、接口关联处理

1. JsonPath基本介绍 1.1 JsonPath简介 JsonPath是一种用于在JSON数据中定位和提取特定数据的表达式语言。它类似于XPath用于XML的定位和提取&#xff0c;可以帮助我们灵活地从复杂的JSON结构中获取所需的数据。 1.2 JsonPath的特点 ● JsonPath可处理的报文类型为字典类型 …

运动的解析:从机械运动到自由落体,探索物体运动的基本规律与数学描述

文章目录 一、机械运动&#xff08;一&#xff09;运动概念&#xff08;二&#xff09;运动形式&#xff08;三&#xff09;参照物 二、质点&#xff08;一&#xff09;理想化模型&#xff08;二&#xff09;质点概念 三、位移和路程&#xff08;一&#xff09;位移&#xff08…

python基础学习-01

Python 是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python提供了高级数据结构&#xff0c;它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。 Python 是解释型语言&#xff1a; 开发过程中没有了编译这个环节。类似于PHP和Perl语言。…

如操作系统的心跳,运行状况无可逃避:Shell脚本揭示系统鲜活秘密!

简介 Ubuntu 系统保姆监控脚本&#xff0c;全自动化解读系统运行状态&#xff01;脚本轻量化、资源节约&#xff0c;并且能够定期检测硬盘容量、内存占用和缓存情况。一旦发现缓存占用过高&#xff0c;即刻自动清理缓存&#xff0c;并将结果写入指定目录的日志文件中。日志文件…

鸿蒙开发-UI-布局-相对布局

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 文章目录 前言 一、基本概念 二、设置依赖 1.锚点设置 2.设置相对于锚点的对齐位置 三、使用场景 总结 前言 上文详细学习常见布局方式-弹性布局&#xff0c;学习弹性布局容…

知识图谱KG+大模型LLM

LLM-based KG KnowLM OpenSPGKG-based RAG 基本原理 从query出发的语义解析 pre-LLM方法 思想&#xff1a;直接将问题解析为对应的逻辑表达式&#xff0c;然后到知识图谱中查询。 方法&#xff1a;通常包含逻辑表达式、语义解析算法、语义解析模型训练三部分。一般步骤是将问句…

NODE介绍和环境安装

浏览器是JS的前端运行环境 Node.js是JS的后端运行环境 Node.js中无法调用DOM和BOM等浏览器内置API 基于Express框架&#xff0c;快速构建web应用 基于Electron框架&#xff0c;构建跨平台桌面应用 基于restify框架快速构建API接口项目 读写数据库 下载Node.js环境 网址&…

linux下的nginx相关配置练习

1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! [rootlocalhost ~]# systemctl stop firewalld.service #关闭防火墙 [rootlocalhost ~]# setenforce 0 #关闭selinux [rootlocalhost www]# vim /etc/nginx/conf.d/test_ope…

python 之 指定小数的输出

文章目录 **使用 round() 函数&#xff1a;****使用字符串格式化&#xff1a;****使用f-字符串&#xff1a;****使用 decimal 模块&#xff1a;** 在Python中&#xff0c;可以使用不同的方法来指定浮点数的小数位数。以下是其中一些常见的方式&#xff1a; 使用 round() 函数&…

mapboxGL中的航线动画

概述 借用上篇文章中二阶贝塞尔曲线的生成&#xff0c;本文实现mapboxGL中的航线动画。 效果 实现 1. 初始化地图 const from [101.797439042302, 36.5937248286007]; const to [106.9733, 35.217]; const points new ArcLine(from, to); const line new Geometry(poin…

【Qt】—— Qt的基本介绍

目录 &#xff08;一&#xff09;什么是Qt &#xff08;二&#xff09; Qt的发展史 &#xff08;三&#xff09;Qt⽀持的平台 &#xff08;四&#xff09; Qt版本 &#xff08;五&#xff09;Qt的优点 &#xff08;六&#xff09;Qt的应⽤场景 &#xff08;七&#xff09…

tag 标签

tag 标签 在使用 Git 版本控制的过程中&#xff0c;会产生大量的版本。如果我们想对某些重要版本进行记录&#xff0c;就可以给仓库历史中的某一个commit 打上标签&#xff0c;用于标识。 在本章中&#xff0c;我们将会学习如何列出已有的标签、如何创建和删除新的标签、以及…

Windows使用wsl2安装docker教程

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十一&#xff09;——Windows安装docker 文章目录 win系统环境搭建&#xff08;十一&#xff09;——Windows安装docker1.搭建WSL2环境1.1 docker官网对环境要求的描述[System requirements](https://do…

JavaScript 学习笔记(WEB APIs Day3)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

云服务器定价_云服务器价格_云主机计费模式_腾讯云

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Mysql运维篇(二) 主从复制

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人&#xff0c;如有侵权请留言&#xff0c;我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作&#xff0c;而从库则生成两个线程&#xff0c;其…

08. 面向对象编程(二)

目录 1、前言 2、多重继承 2.1、潜在的问题 3、Property 4、staticmethod 5、运算符重载 5.1、加法运算符 的重载 5.2、字符串表示运算符 str() 的重载 5.3、索引运算符 [] 的重载 6、小结 1、前言 上一篇文章中&#xff0c;我们介绍了面向对象编程的类和实例&…

安规电容的知识

1、常见安规电容有哪些&#xff1f; 一般我们所说的安规电容也就有两种&#xff0c;一种就是X安规电容&#xff08;X1/X2/X3安规电容&#xff09;&#xff0c;还有一种是Y电容&#xff08;最常见的是Y1和Y2安规电容&#xff09;。 2、x电容的位置 火线零线间的是X电容。x电容用…

保证缓存一致性的常用套路

缓存更新的套路 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作会把数据再装载的缓存中。然而&#xff0c;这个是逻辑是错误的。试想&#xff0c;两个并发操作&#xff0c;一个是更新操作&#xff0c;另一个是查…