C# 电脑程序控制电路开关

最近在做系统的监控,想到能不能做一个酷点的功能,当收到异常消息时桌面上的红色小灯(或报警灯)会亮起来。于是在淘宝上找了一下,有这种小设备,插入USB设备,通过串口控制这个设备的继电器来实现,成本也很低,只需要20元人民币。

C# 电脑程序控制电路开关_第1张图片

找了几个卖家,都只能提供C++的程序,现在都什么年代了,C#早已经大行其道。终于博主找一个卖家,他提供了这个设备的C#源程序代码。今天小开关到货了,博主试了一下,用程序简单的控制一路电源开关是可行的,而且很方便和简单。

C# 电脑程序控制电路开关_第2张图片

一、小开关是USB方式接入电脑,接入后,WIN10会自动识别成一个带串口的设备CH341A,并且自动分配一个串口

C# 电脑程序控制电路开关_第3张图片

二、C#程序VS2022安装后,自带窗口控制类,无需其他类库,全部是系统原生的。

只需要引入 using System.IO.Ports

三、开关的实现就是向设备的串口写一串编码,设备就可以自动控制继电器完成电源的开关。

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.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        //USB继电器端口
        public SerialPort wport;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (string vPortName in SerialPort.GetPortNames())
            {
                this.comboBox1.Items.Add(vPortName);
            }
        }

        //连接COM
        private void button1_Click(object sender, EventArgs e)
        {
            if (wport == null)
            {
                try
                {
                    wport = new SerialPort(this.comboBox1.Text, 9600);
                    wport.DataBits = 8;
                    wport.Parity = Parity.None;
                    wport.StopBits = StopBits.One;
                    wport.Open();
                    wport.DataReceived += new SerialDataReceivedEventHandler(this.wport_DataReceived);
                    this.label1.Text = "连接成功";

                }
                catch (Exception ex)
                {
                    wport = null;
                    MessageBox.Show(ex.ToString());
                }
            }
            else 
            {
                this.label1.Text = "连接失败";
            }
        }

        private void wport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int n = wport.BytesToRead;
            byte[] buf = new byte[n];
            wport.Read(buf, 0, n);

            //因为要访问ui资源,所以需要使用invoke方式同步ui。  
            this.Invoke((EventHandler)(delegate
            {

                //追加的形式添加到文本框
                for (int index = 0; index < buf.Length; index++)
                {
                    this.label1.Text = (((int)buf[index]).ToString("X2") + " ");
                }
            }));
        }
        //开
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Byte[] cmd = new Byte[4];
                cmd[0] = 0xA0;
                cmd[1] = 0x01;
                cmd[2] = 0x01;
                cmd[3] = 0xA2;
                wport.Write(cmd, 0, 4);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());

            }
        }
        //关闭
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                Byte[] cmd = new Byte[4];
                cmd[0] = 0xA0;
                cmd[1] = 0x01;
                cmd[2] = 0x00;
                cmd[3] = 0xA1;
                wport.Write(cmd, 0, 4);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

你可能感兴趣的:(.NET,c#,电脑程序控制电路开关)