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设备的VIDprivate const string PID = "XXXX";    // USB设备的PIDprivate 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通信时,需要更加严谨和专业的设计和开发。

C#上位机的USB通信与串口通信接口区别相关推荐

  1. 上位机与fx3u通讯串口_c#上位机与三菱PLC(FX3U)串口通讯

    项目中会经常用到上位机与PLC之间的串口通信,本文介绍一下C#如何编写上位机代码 与三菱FX3U进行通讯 1. 第一种方法是自己写代码实现,主要代码如下: //对PLC的Y7进行置1 byte[] Y ...

  2. C#上位机 西门子PLC通信 S7NET协议

    C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...

  3. python做上位机读usb数据_使用python实现win10系统和arduino usb串口通信

    前言 arduino有很多可以直接使用的传感器,可以很方便的获取大量的环境数据. 常见的有:温度(室温,冰箱,水箱等场景) 湿度(房间空气湿度,花盆土壤湿度等场景) 声(声控灯,噪音检测,深海测量,医 ...

  4. c#上位机开发(三)——串口通信上位机开发1

    今天主要做一个跟市面上差不多的稍微简单点的上位机软件,效果如下图所示 1.功能概述 (1)端口扫描,主要是扫描出可用的端口用来连接 (2)波特率的选择,使用一个下拉框进行选择相应的波特率数值 (3)发 ...

  5. android串口上位机,匿名上位机(V7)基于串口的简单使用

    匿名上位机(V7)简单使用 本文简介:本文主要介绍匿名上位机V7版本的一些基本的功能使用,以及基于匿名上位机协议写下位机代码.使用的下位机为STM32F103C8T6 匿名上位机 V7版本的选项简介, ...

  6. python串口上位机画图_温度传感器+I2C+串口+PC上位机(pyserial)例子

    温度传感器+I2C+串口+PC上位机(pyserial)例子 例子写的有点乱,主要是学习: 温度传感器DS18b20,E2PROM,I2C, 串口读写,PC上位机(pyserial)数据显示 Seri ...

  7. qt之上位机与激光雷达通信

    qt系列文章之上位机通信 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 qt系列文章之上位机通信 前言 ...

  8. 2021-11-18 WPF上位机 87-串口通信和网口通讯

    串口通信和网口通讯 通信双方(应用) ->设备):利用什么进行通信(硬件) ->RS485(对绞线 两根线)串口通信 ->RJ45(网线)网口通讯 C#提供的两个对象: RS485- ...

  9. C# 开发USB通信、串口通信、Socket通信(适用于打印机的指令操作等)

    背景:公司最近需要用到外接打印机(型号:东芝标签打印机B-FV4T,采用东芝自定义的TPCL指令格式),现在市场上可以购买到的主流打印机一般都是支持一下通信模式的. 1:USB通信 2:网络通信 3: ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第35期)
  2. ASP.NET的SEO:HTTP报头状态码---内容重定向
  3. 前端性能优化-DNS解析优化
  4. Linux根文件系统结构再认识
  5. ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
  6. Linux的实际操作:文件目录类的实用指令(创建目录mkdir 删除目录rmdir 递归删除目录rm -rf)
  7. mysql信息函数和加密函数_MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)...
  8. 计算两个日期相差天数的最简洁的代码
  9. 车牌识别算法库EasyPR的编译实战
  10. python爬虫案例——csdn数据采集
  11. django新闻页面编写
  12. 浅谈数学在c语言编程中的,试论C语言程序设计中算法设计的作用
  13. FFT算法【初识】(一)
  14. matlab命令打开Word文档
  15. java铁三公路自行车_公路车、计时车、铁三车,到底都是什么鬼?
  16. matlab 定义自然数变量,matlab数值数据和变量名
  17. vuepress-theme-reco的安装与使用
  18. A survey on challenges and progresses in blockchain technologies区块链综述
  19. oracle 11g Data Guard物理备份库
  20. 标准正态分布函数数值表

热门文章

  1. Arduino遍历字符串
  2. 亚马逊卖家怎么提升转化率
  3. 魅族16th-指纹不灵敏
  4. 前后端分离和前后端分离的好处
  5. 图片识别技巧,OCR文字识别软件了解下
  6. MySQL去重查询只保留一条最新的记录
  7. windows下fortran编译器选择
  8. IBM展示“世界最小电脑”成本只有10美分
  9. 转 深入探讨SOAP、RPC和RMI
  10. vs2008 破解方法(包括win XP和win7)