C#上位机的USB通信与串口通信接口区别

这篇具有很好参考价值的文章主要介绍了C#上位机的USB通信与串口通信接口区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

USB通信与串口通信接口的代码区别有以下几个方面:

  1. 通信方式不同:串口通信采用全双工或半双工通信方式,而USB通信采用异步、同步和批量传输等多种传输方式。
  2. 端口号设置不同:串口通信设置端口号,如"COM1"、"COM2"等,而USB通信通过设备描述符和VID/PID等参数进行识别和匹配。
  3. 数据读取方式不同:串口通信中常使用_serialPort.ReadLine()方法从接收缓冲区中读取数据,而USB通信则可以通过自定义数据读取方式进行读取。

下面是USB通信的示例代码,与之前给出的串口通信代码相比进行了一些修改:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Management;

namespace USBCommunication
{
    public partial class Form1 : Form
    {
        private const string VID = "XXXX";    // USB设备的VID
        private const string PID = "XXXX";    // USB设备的PID
        private const string DEVICE_NAME = "MyUSBDevice";    // USB设备的名称
        private const int PACKET_SIZE = 64;   // USB传输数据包大小
        private bool _deviceConnected = false;   // 标记USB设备的连接状态
        private byte[] _dataReceiveBuffer = new byte[PACKET_SIZE];  // 接收缓冲区

        public Form1()
        {
            InitializeComponent();

            // 订阅DeviceArrived和DeviceRemoved事件,当USB设备连接或移除时触发
            SystemEvents.Deviceived += new Microsoft.Win32.DeviceEventHandler(SystemEvents_DeviceArrived);
            SystemEvents.DeviceRemoved += new Microsoft.Win32.DeviceEventHandler(SystemEvents_DeviceRemoved);
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (!_deviceConnected)
            {
                MessageBox.Show("请先连接USB设备!");
                return;
            }
            // TODO: 打开USB设备,开始数据通信
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            // TODO: 关闭USB设备,停止数据通信
        }

        private void SystemEvents_DeviceArrived(object sender, Microsoft.Win32.DeviceEventArgs e)
        {
            // 判断连接设备是不是我们需要的USB设备
            if (CheckUSBDevice(VID, PID, DEVICE_NAME))
            {
                _deviceConnected = true;
                // TODO: 连接USB设备
            }
        }

        private void SystemEvents_DeviceRemoved(object sender, Microsoft.Win32.DeviceEventArgs e)
        {
            // 判断断开连接设备是不是我们需要的USB设备
            if (CheckUSBDevice(VID, PID, DEVICE_NAME))
            {
                _deviceConnected = false;
                // TODO: 断开USB设备
            }
        }

        private bool CheckUSBDevice(string vid, string pid, string deviceName)
        {
            boolUSBDevice = false;
            ManagementObjectCollection collection;
            using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
                collection = searcher.Get();
            foreach (var device in collection)
            {
                if ((string)device.GetPropertyValue("DeviceID") == $"USB\\VID_{vid}&PID_{pid}\\{deviceName}")
                {
                    isUSBDevice = true;
                    break;
                }
            }
            collection.Dispose();
            return isUSBDevice;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs)
        {
            // TODO: 窗体关闭时释放USB设备资源
            if (_deviceConnected)
            {
                // TODO: 断开USB设备
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (!_deviceConnected)
            {
                MessageBox.Show("请先连接USB设备!");
                return;
            }
            // TODO: 向USB设备写入数据
        }

        private void btnReceive_Click(object sender, EventArgs e)
        {
            if (!_deviceConnected)
            {
                MessageBox.Show("请先连接USB设备!");
                return;
            }
            // TODO: 从USB设备读取数据
        }
    }
}

在此示例代码中,通过SystemEvents.DeviceArrivedSystemEvents.DeviceRemoved事件监视USB设备的连接状态。在CheckUSBDevice方法中,通过设备的VID/PID和名称来进行设备的匹配。在实际开发中,也可以使用更加可靠的USB通信库,如libusb或USB4NET等,以便更好地控制USB设备和进行USB通信。

btnOpen_ClickbtnClose_Click事件中,需要根据实际需求进行USB设备的打开或关闭,以便进行数据通信。

btnSend_ClickbtnReceive_Click事件中,需要根据实际需求进行数据的读取和发送。由于USB传输数据时需要进行分包,因此在USB通信中常采用数据报文的方式进行数据的传输。例如,可以在数据包的首部添加数据长度信息,以便在接收端进行正确的数据组装和解析。

总的来说,USB通信与串口通信的代码区别不仅体现在通信方式、端口号设置和数据读取方式等方面,还需要考虑USB设备的连接状态监测、设备的匹配和连接、数据包的大小和报文格式等问题。因此,在进行USB通信时,需要更加严谨和专业的设计和开发。文章来源地址https://www.toymoban.com/news/detail-476385.html

到了这里,关于C#上位机的USB通信与串口通信接口区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手一起完成Python上位机与下位机USB通信

    最近在使用Python设计上位机,下位机是ZYNQ7000,两者通过USB进行数据传输。该文章是USB通信过程的踩坑记录 首先,安装pyusb和libusb两个库,命令如下: 如图所示: 输入程序: 报错 usb.core.NoBackendError: No backend available,如图所示: 安装libusb1包,命令如下: 如图所示: 找到 l

    2024年02月07日
    浏览(31)
  • 【Qt上位机与STM32进行串口通信】-2-Qt串口开发

    系列文章目标:Qt上位机与STM32进行串口通信,控制多个LED的状态。 本篇文章的主要目标: 1、设计两个界面,串口连接界面、控制界面。 2、只有在串口连接成功才能打开控制界面。 3、打开控制界面时,串口保持连接。 4、自定义控件,提升开发效率。 以下是我入门Qt的视频

    2024年02月06日
    浏览(43)
  • Proteus基于51单片机利用虚拟串口实现主从机的通信

    最近在学校做单片机课程实验时,需要在Proteus上实现串口的通信,具体要求如下: 在此记录一下本人的解题方案,首先Proteus中的原理图绘制如下 其中虚拟串口可在元件库中搜索COMPIM获得。 将原件按上图连接完毕后,将各个虚拟串口的收发波特率设置为19200,并分别赋予CO

    2024年02月08日
    浏览(26)
  • 使用Microsoft Visual Studio编写C#上位机(串口助手)

    最近跟着刘工写了一套用于单片机与电脑通信的串口助手,此处将自己手敲的代码记录下来,供大家一起学习交流。 一、程序界面   程序界面 程序界面说明    二、代码(Form1.cs)  三、备注 此处在Form1的属性中,将AutoSize设为True,AutoScroll设为True,AutoScaleMode设为Font,以应

    2024年02月11日
    浏览(41)
  • C# | 上位机开发新手指南(二)上位机通信

    在上位机开发中,串口通信和TCP通信是两种常见的通信方式。串口通信是指通过串口将数据发送和接收到控制器或其他外设中,TCP通信则是通过网络将数据传输到远程设备中。下面介绍一下为什么学习串口通信和TCP通信在上位机开发中是很重要的。 在许多工业自动化控制系统

    2024年02月07日
    浏览(30)
  • Android:usb转232串口通信

    准备工作 首先得adb进入盒子root模式,将/dev/ttys1这个文件改为777,使得所有用户可操作 adb root adb remount   adb shell  进入设备的root模式,执行 chmod 777 /dev/ttys1 执行完成后退出 exit 再执行 adb shell  chmod 666 /dev/ttyS1  如果没有报错的话,再执行串口就不会报错了 调试的demo我用的

    2023年04月22日
    浏览(30)
  • 【CH340N USB转串口通信】

    CH340N芯片是一种USB转串口芯片,它可以将USB接口转换为UART串口接口,使计算机可以通过USB接口和单片机等设备进行通信。该芯片具有低功耗、高稳定性等特点,被广泛用于电子设备中。 CH340N是一个 USB 总线的转接芯片,实现 USB 转串口,支持 5V 电源电压和 3.3V 电源电压。 全

    2024年02月01日
    浏览(28)
  • Android USB通信(host转串口)

    前言: 公司属于北斗通信行业,项目大多都需要和各式各样的硬件设备相结合来满足项目需求,因此所涉及到的各种技术也相对比较冷门。前段时间有个项目用到了一款定制 Android 设备,其中有多个接口,包括两个 USB 接口和一个 RS232 串口,需要用到其中一个 USB 连接北斗设

    2024年02月08日
    浏览(31)
  • STM32入门笔记10_USART串口通信+案例:上位机控制LED亮灭(USART串口通信、TIM定时器、EXTI综合案例)

    通信的目的: 将一个设备的数据传送到另一个设备, 扩展硬件系统 通信协议: 制定通信的规则, 通信双方按照协议规则进行数据收发 名称 引脚 双工 时钟 电平 设备 USART TX、RX 全双工 异步 单端 点对点 I2C SCL、SDA 半双工 同步 单端 多设备 SPI SCLK、MOSI、MISO、CS 全双工 同步 单端

    2024年02月09日
    浏览(28)
  • .net6中WPF的串口通信和USB通信

    之前写过串口通信,不过是winform的。 c#使用串口进行通信_c# 串口通信_故里2130的博客-CSDN博客 今天说一下,.net6中wpf的串口通信和USB通信,在工控行业中,这2种的方式非常多,还有网口通信,它们都是用来和硬件打交道的,进行交互信息。 一、串口通信 1.安装System.IO.Ports

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包