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


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

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

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

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

    只需要引入 using System.IO.Ports

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

    全部代码如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. using System.IO.Ports;
    11. namespace WindowsFormsApp1
    12. {
    13. public partial class Form1 : Form
    14. {
    15. //USB继电器端口
    16. public SerialPort wport;
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. private void Form1_Load(object sender, EventArgs e)
    22. {
    23. foreach (string vPortName in SerialPort.GetPortNames())
    24. {
    25. this.comboBox1.Items.Add(vPortName);
    26. }
    27. }
    28. //连接COM
    29. private void button1_Click(object sender, EventArgs e)
    30. {
    31. if (wport == null)
    32. {
    33. try
    34. {
    35. wport = new SerialPort(this.comboBox1.Text, 9600);
    36. wport.DataBits = 8;
    37. wport.Parity = Parity.None;
    38. wport.StopBits = StopBits.One;
    39. wport.Open();
    40. wport.DataReceived += new SerialDataReceivedEventHandler(this.wport_DataReceived);
    41. this.label1.Text = "连接成功";
    42. }
    43. catch (Exception ex)
    44. {
    45. wport = null;
    46. MessageBox.Show(ex.ToString());
    47. }
    48. }
    49. else
    50. {
    51. this.label1.Text = "连接失败";
    52. }
    53. }
    54. private void wport_DataReceived(object sender, SerialDataReceivedEventArgs e)
    55. {
    56. int n = wport.BytesToRead;
    57. byte[] buf = new byte[n];
    58. wport.Read(buf, 0, n);
    59. //因为要访问ui资源,所以需要使用invoke方式同步ui。
    60. this.Invoke((EventHandler)(delegate
    61. {
    62. //追加的形式添加到文本框
    63. for (int index = 0; index < buf.Length; index++)
    64. {
    65. this.label1.Text = (((int)buf[index]).ToString("X2") + " ");
    66. }
    67. }));
    68. }
    69. //开
    70. private void button2_Click(object sender, EventArgs e)
    71. {
    72. try
    73. {
    74. Byte[] cmd = new Byte[4];
    75. cmd[0] = 0xA0;
    76. cmd[1] = 0x01;
    77. cmd[2] = 0x01;
    78. cmd[3] = 0xA2;
    79. wport.Write(cmd, 0, 4);
    80. }
    81. catch (Exception ex)
    82. {
    83. MessageBox.Show(ex.ToString());
    84. }
    85. }
    86. //关闭
    87. private void button3_Click(object sender, EventArgs e)
    88. {
    89. try
    90. {
    91. Byte[] cmd = new Byte[4];
    92. cmd[0] = 0xA0;
    93. cmd[1] = 0x01;
    94. cmd[2] = 0x00;
    95. cmd[3] = 0xA1;
    96. wport.Write(cmd, 0, 4);
    97. }
    98. catch (Exception ex)
    99. {
    100. MessageBox.Show(ex.ToString());
    101. }
    102. }
    103. }
    104. }

  • 相关阅读:
    php数据表操作
    818专业课【考经】—《信号系统》之章节概要:第八章 傅里叶变换的应用
    腾讯云轻量应用服务器ubuntu使用xshell安装宝塔面板
    根目录挂载的/dev/mapper/centos-root分区扩容
    C#调用Windows系统自带虚拟键盘的方法
    解决:华为ensp软件中AR和AC,AP设备无法启动报错“40”的问题
    应用出海新福祉,融云助IM社交迅速对齐海外用户体验
    go语言ast语法解析
    pytorch 数据载入
    JAVA中的锁
  • 原文地址:https://blog.csdn.net/ot512csdn/article/details/134487427