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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过Stable Diffusion生成虚假的遥感影像

简介 这两天玩了一下stable diffusion&#xff0c;是真的好玩&#xff01; 然后我在想遥感有没有相关的生成模型&#xff0c;找了一下&#xff0c;还真找到了&#xff08;https://github.com/xiaoyuan1996/Stable-Diffusion-for-Remote-Sensing-Image-Generation/tree/main&a…

spark 入门教程

一、安装scala环境 官网下载地址 Download | The Scala Programming Language,本次使用版本为sacla2.11.12,将压缩包解压至指定目录&#xff0c;配置好环境变量&#xff0c;控制台验证是否安环境是否可用&#xff1a; 二、添加pom依赖 创建一个maven项目 1、添加scala的sdk依…

详细分析Java中Service报NullPointerException的相关知识(实战Bug)

目录 前言1. 问题所示2. 基本知识3. 原理分析 前言 在Java中&#xff0c;NullPointerException是一种常见的运行时异常&#xff0c;通常发生在尝试访问或操作一个空对象引用&#xff08;null reference&#xff09;时 1. 问题所示 在操作代码的时候&#xff0c;浏览器报服务…

Mysql - 定点型(DECIMAL)的使用详解及练习

目录 &#x1f436;1. 前言&#xff1a; &#x1f436;2. DECIMAL类型简介 &#x1f436;3. Decimal使用实战 &#x1f96a;#结论1&#xff1a;小数位不足会自动补0 &#x1f96a;#结论2&#xff1a;小数位超出会截断 并按四舍五入处理。 &#x1f96a;#结论3&#xff1…

数据结构实验7:查找的应用

目录 一、实验目的 二、实验原理 1. 顺序查找 2. 折半查找 3. 二叉树查找 三、实验内容 实验一 任务 代码 截图 实验2 任务 代码 截图 一、实验目的 1.掌握查找的基本概念&#xff1b; 2.掌握并实现以下查找算法&#xff1a;顺序查找、折半查找、二叉树查找。 …

2.RHCSA启动配置

rht-clearcourse 0 #重置练习环境 rht-setcourse rh134 #切换CSA练习环境 cat /etc/rht #查看当前环境 virt-manager #打开KVM控制台 rht-vmctl start classroom #必做&#xff0c;start all不会包含classroom&#xff0c;需…

【Linux】Ubuntu的gnome切换KDE Plasma

文章目录 安装KDE Plasma桌面环境添加软件源并更新apt安装kubuntu-desktop&#xff08;作者没有成功&#xff09;aptitude安装kubuntu-desktop多次aptitude install&#xff08;特别重要特别重要&#xff09;其他kde软件包 卸载gnome桌面 Ubuntu自带的桌面环境是gnome&#xff…

PSoc62™开发板之rtc时间获取

实验目的 1.使用PSoc62™芯片读取内部rtc时间 2.OLED屏幕显示当前时间戳 实验准备 PSoc62™开发板SSD1306 OLED模块公母头杜邦线 芯片资源 PSoC 6系列MCU时钟系统由以下几部分组成&#xff0c;PSoc62™开发板没有接外部时钟源&#xff0c;所以只能从IMO、ILO、PILO里边配…

EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

这里是CIP资料的协议层级图&#xff0c;讲解协议构造。 ODVA&#xff08;www.ODVA.org&#xff09;成立于1995年&#xff0c;是一个全球性协会&#xff0c;其成员包括世界领先的自动化公司。结合其成员的支持&#xff0c;ODVA的使命是在工业自动化中推进开放、可互操作的信息和…

SQL注入实战:Update注入

一&#xff1a;Update注入原理 有的程序员在写源代码的时候&#xff0c;只是对查询的sql语句的用户输入内容进行了过滤&#xff0c;忽略了update 类型sql语句的用户输入的内容的过滤 二、mysql的Update语句复习 update语句可用来修改表中的数据&#xff0c;简单来说基本的使…

算法每日一题: 分割数组的最大值 | 动归 | 分割数组 | 贪心+二分

Hello&#xff0c;大家好&#xff0c;我是星恒 呜呜呜&#xff0c;今天给大家带来的又是一道经典的动归难题。 题目&#xff1a;leetcode 410给定一个非负整数数组 nums 和一个整数 k &#xff0c;你需要将这个数组分成 k_ 个非空的连续子数组。设计一个算法使得这 k _个子数组…

51单片机电子密码锁Proteus仿真+程序+视频+报告

目录 视频 设计分析 系统结构 仿真图 资料内容 资料下载地址&#xff1a;51单片机电子密码锁Proteus仿真程序视频报告 视频 单片机电子密码锁Proteus仿真程序视频 设计分析 (1)能够从键盘中输入密码&#xff0c;并相应地在显示器上显示‘*’&#xff1b; (2)能够判断密码…

反序列化字符串逃逸(上篇)

首先&#xff0c;必须先明白&#xff0c;这个点并不难&#xff0c;我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符&#xff0c;是不是很简单&#xff0c;哈哈哈&#xff01; 好了&#xff0c;不闹了&#xff0c;其实&#xff1a; 这里你们只要懂…

【C++ | 数据结构】从哈希的概念 到封装C++STL中的unordered系列容器

文章目录 一、unordered系列容器的底层结构 - 哈希1. 哈希概念2. 哈希冲突 二、解决哈希冲突方法一&#xff1a;合理设计哈希函数&#x1f6a9;哈希函数设计原则&#x1f6a9;常见哈希函数 方法二&#xff1a;开闭散列&#x1f6a9;闭散列线性探测法&#xff08;实现&#xff0…

Linux操作系统——理解文件系统

预备知识 到目前为止&#xff0c;我们所学习到的关于文件的操作&#xff0c;全部都是基于文件被打开&#xff0c;被访问&#xff0c;访问期间比较重要的有重定向&#xff0c;缓冲区&#xff0c;一切皆文件&#xff0c;当我们访问完毕的时候需要将文件关闭&#xff0c;关闭时那…

Python 生成 图片网页列表 显示路径和建立时间 笔记

Python 一键 生成 图片网页列表 显示路径和建立时间 &#xff08;方便查看复制路径、重复一键生成&#xff09; 支持格式&#xff1a;jpg \png\ svg\ webp 图片网页列表 图示&#xff1a; 参考代码&#xff1a; # -*- coding: utf-8 -*- import os import datetime# 指定图片…

八股文学习日常第一期(20240121)

零、前言 1、目的 帮助掌握面试题&#xff0c;就八股文相关内容展开进行学习和整理&#xff0c;也方便之后的复习和巩固。 2、八股文内容来源 ①https://blog.csdn.net/w20001118/article/details/125724647 一、具体内容分析 1、类的完整书写方式 1.1、类 [Access Mod…

Stream toList不能滥用以及与collect(Collectors.toList())的区别

Stream toList()返回的是只读List原则上不可修改&#xff0c;collect(Collectors.toList())默认返回的是ArrayList,可以增删改查 1. 背景 在公司看到开发环境突然发现了UnsupportedOperationException 报错&#xff0c;想到了不是自己throw的应该就是操作collection不当。 发…

2.上传图片到Minio服务中

上传图片 界面原型 第一步: 用户在课程信息编辑界面可以上传课程图片或者修改上传的课程图片 第二步: 请求媒资管理服务将课程图片上传至分布式文件系统同时在媒资管理数据库保存文件信息,上传成功后返回图片在MinIO中的地址 第三步: 请求内容管理服务保存课程信息含课程封…

【网站项目】基于SSM的274办公自动化管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…