【问题标题】:Visual Studio C# USB 4 Relay board controllerVisual Studio C# USB 4 继电器板控制器
【发布时间】:2014-03-26 21:32:54
【问题描述】:

我想做的是创建一个简单的 Windows 窗体应用程序来控制继电器板打开和关闭一些灯。没什么大不了的,这是个人项目。这是我拥有的中继板的链接:http://www.canakit.com/catalog/product/view/id/627/s/4-port-usb-relay-controller/

现在我的问题是如何向继电器发送命令并通过 USB 从它接收一些命令。继电器板自带驱动器。该板支持以下命令。那么我该如何发送 他们通过我的 Windows 表单提交给董事会。

来自用户手册:它与 Windows 和 Apple OS X 以及各种 Linux 版本兼容,并显示为 USB CDC(通信设备类)设备,它创建了一个虚拟串行 (COM) 端口,可以轻松地与板通过任何支持串行通信的编程语言(VB、VB.NET、C#、C、C++、Perl、Java 等)。一整套易于使用的命令可用于完全控制所有继电器、I/O 通道和传感器。

支持的命令:

RELx.ON
RELx.OFF
RELx.TOGGLE
RELx.GET

RELS.ON
RELS.OFF
RELS.GET

CHx.ON
CHx.OFF
CHx.TOGGLE
CHx.GET
CHx.SETMODE
CHx.GETANALOG
CHx.GETTEMP

CHS.ON
CHS.OFF
CHS.GET
CHS.SETTEMPRES

【问题讨论】:

    标签: c# visual-studio-2012 usb


    【解决方案1】:

    查看说明手册,驱动程序为您提供串行端口访问权限(但没有直接 USB api),因此您必须为继电器板打开一个串行端口。

    首先(如果您还没有),请按照手册中与控制器通信下的说明进行操作,并使用超级终端等工具确保您可以与板“对话”。

    然后看看这些示例,了解来自 C# 的简单串行通信:

    http://csharp.simpleserial.com/

    http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

    【讨论】:

    • 我使用 Putty 与之通信。它确实有效。我缺少的是 System.IO.Ports,以便与端口通信。谢谢。
    【解决方案2】:

    您应该使用System.IO.Ports.SerialPort class

    如果您已经看过该类的文档并且无法使用它,请详细说明您遇到了什么问题。

    【讨论】:

      【解决方案3】:

      安装驱动程序后插入设备。打开设备管理器,您现在应该可以看到主板制造商提供的 COM 端口。您可以拥有文档中提供的 COM 端口、波特率、奇偶校验等。现在您可以使用以下代码创建一个 c# 控制台应用程序,我制作了一个示例来发出 RELx.ON,然后在 3 秒间隙后发出 RELx.OFF:

      using System;
      using System.IO.Ports;
      
      namespace RelayConsole
      {
          class Program
          {
              public static SerialPort port = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
      /* Replace COM5 with your COM port, 9600 with baud rate of your board, parity and bits as well as per your device documentation */
      
              static void Main(string[] args)
              {
                  SerialProgram();
              }
      
              static void SerialProgram()
              {
                  try
                  {
                      port.Open();
                      port.Write("RELx.ON"); /* You can pass any command as per your documentation in port.Write */
                      System.Threading.Thread.Sleep(3000);
                      port.Write("RELx.OFF");
                      Environment.Exit(0);
                  }
                  catch (Exception ex)
                  {
                      if(ex is System.IO.IOException)
                      {
                          Console.WriteLine("Port Exception: " + ex.ToString());
                          Console.ReadLine();
                      }
                      else
                      {
                          Console.WriteLine("General Exception: " + ex.ToString());
                          Console.ReadLine();
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多