C#上位机的USB通信与串口通信接口区别
USB通信与串口通信接口的代码区别有以下几个方面:
- 通信方式不同:串口通信采用全双工或半双工通信方式,而USB通信采用异步、同步和批量传输等多种传输方式。
- 端口号设置不同:串口通信设置端口号,如"COM1"、"COM2"等,而USB通信通过设备描述符和VID/PID等参数进行识别和匹配。
- 数据读取方式不同:串口通信中常使用
_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.DeviceArrived
和SystemEvents.DeviceRemoved
事件监视USB设备的连接状态。在CheckUSBDevice
方法中,通过设备的VID/PID和名称来进行设备的匹配。在实际开发中,也可以使用更加可靠的USB通信库,如libusb或USB4NET等,以便更好地控制USB设备和进行USB通信。
在btnOpen_Click
和btnClose_Click
事件中,需要根据实际需求进行USB设备的打开或关闭,以便进行数据通信。
在btnSend_Click
和btnReceive_Click
事件中,需要根据实际需求进行数据的读取和发送。由于USB传输数据时需要进行分包,因此在USB通信中常采用数据报文的方式进行数据的传输。例如,可以在数据包的首部添加数据长度信息,以便在接收端进行正确的数据组装和解析。
总的来说,USB通信与串口通信的代码区别不仅体现在通信方式、端口号设置和数据读取方式等方面,还需要考虑USB设备的连接状态监测、设备的匹配和连接、数据包的大小和报文格式等问题。因此,在进行USB通信时,需要更加严谨和专业的设计和开发。
C#上位机的USB通信与串口通信接口区别相关推荐
- 上位机与fx3u通讯串口_c#上位机与三菱PLC(FX3U)串口通讯
项目中会经常用到上位机与PLC之间的串口通信,本文介绍一下C#如何编写上位机代码 与三菱FX3U进行通讯 1. 第一种方法是自己写代码实现,主要代码如下: //对PLC的Y7进行置1 byte[] Y ...
- C#上位机 西门子PLC通信 S7NET协议
C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...
- python做上位机读usb数据_使用python实现win10系统和arduino usb串口通信
前言 arduino有很多可以直接使用的传感器,可以很方便的获取大量的环境数据. 常见的有:温度(室温,冰箱,水箱等场景) 湿度(房间空气湿度,花盆土壤湿度等场景) 声(声控灯,噪音检测,深海测量,医 ...
- c#上位机开发(三)——串口通信上位机开发1
今天主要做一个跟市面上差不多的稍微简单点的上位机软件,效果如下图所示 1.功能概述 (1)端口扫描,主要是扫描出可用的端口用来连接 (2)波特率的选择,使用一个下拉框进行选择相应的波特率数值 (3)发 ...
- android串口上位机,匿名上位机(V7)基于串口的简单使用
匿名上位机(V7)简单使用 本文简介:本文主要介绍匿名上位机V7版本的一些基本的功能使用,以及基于匿名上位机协议写下位机代码.使用的下位机为STM32F103C8T6 匿名上位机 V7版本的选项简介, ...
- python串口上位机画图_温度传感器+I2C+串口+PC上位机(pyserial)例子
温度传感器+I2C+串口+PC上位机(pyserial)例子 例子写的有点乱,主要是学习: 温度传感器DS18b20,E2PROM,I2C, 串口读写,PC上位机(pyserial)数据显示 Seri ...
- qt之上位机与激光雷达通信
qt系列文章之上位机通信 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 qt系列文章之上位机通信 前言 ...
- 2021-11-18 WPF上位机 87-串口通信和网口通讯
串口通信和网口通讯 通信双方(应用) ->设备):利用什么进行通信(硬件) ->RS485(对绞线 两根线)串口通信 ->RJ45(网线)网口通讯 C#提供的两个对象: RS485- ...
- C# 开发USB通信、串口通信、Socket通信(适用于打印机的指令操作等)
背景:公司最近需要用到外接打印机(型号:东芝标签打印机B-FV4T,采用东芝自定义的TPCL指令格式),现在市场上可以购买到的主流打印机一般都是支持一下通信模式的. 1:USB通信 2:网络通信 3: ...
最新文章
- 力扣(LeetCode)刷题,简单+中等题(第35期)
- ASP.NET的SEO:HTTP报头状态码---内容重定向
- 前端性能优化-DNS解析优化
- Linux根文件系统结构再认识
- ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便
- Linux的实际操作:文件目录类的实用指令(创建目录mkdir 删除目录rmdir 递归删除目录rm -rf)
- mysql信息函数和加密函数_MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)...
- 计算两个日期相差天数的最简洁的代码
- 车牌识别算法库EasyPR的编译实战
- python爬虫案例——csdn数据采集
- django新闻页面编写
- 浅谈数学在c语言编程中的,试论C语言程序设计中算法设计的作用
- FFT算法【初识】(一)
- matlab命令打开Word文档
- java铁三公路自行车_公路车、计时车、铁三车,到底都是什么鬼?
- matlab 定义自然数变量,matlab数值数据和变量名
- vuepress-theme-reco的安装与使用
- A survey on challenges and progresses in blockchain technologies区块链综述
- oracle 11g Data Guard物理备份库
- 标准正态分布函数数值表