.net6中WPF的串口通信和USB通信

news/2023/11/29 5:34:50

之前写过串口通信,不过是winform的。

c#使用串口进行通信_c# 串口通信_故里2130的博客-CSDN博客

今天说一下,.net6中wpf的串口通信和USB通信,在工控行业中,这2种的方式非常多,还有网口通信,它们都是用来和硬件打交道的,进行交互信息。

一、串口通信

1.安装System.IO.Ports

2.基本上代码都是一样的,xaml界面

<Window x:Class="WPFPortsUSB.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WPFPortsUSB"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><TextBox Name="txtPort"/><Button Name="btnLink" Height="25" Content="连接" Click="btnLink_Click"/><TextBox Name="txtSend"/><Button Name="btnSend" Height="25" Content="发送" Click="btnSend_Click"/><TextBlock Text="接收的数据"/><TextBox Name="txtReceive"/></StackPanel>
</Window>

3.cs代码

using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace WPFPortsUSB
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{SerialPort serialPort = new SerialPort();public MainWindow(){InitializeComponent();}private void btnLink_Click(object sender, RoutedEventArgs e){string[] ports = System.IO.Ports.SerialPort.GetPortNames();if (ports.Length == 0){MessageBox.Show("本机没有串口!");}serialPort.PortName = ports[Convert.ToInt16(txtPort.Text)];//这里的0,就是COM1,1是COM2。因为电脑创建了2个COM串口serialPort.BaudRate = 9600;//波特率serialPort.DataBits = 8;//数据位serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位//serialPort.Encoding = System.Text.Encoding.GetEncoding("GB2312");//此行非常重要,解决接收中文乱码的问题serialPort.DataReceived += SerialPort_DataReceived;// 打开串口try{serialPort.Open();}catch (Exception ex){//捕获到异常信息,创建一个新的comm对象,之前的不能用了。  serialPort = new System.IO.Ports.SerialPort();//将异常信息传递给用户。  MessageBox.Show(ex.Message);return;}}private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){System.Threading.Thread.Sleep(500);string txt = serialPort.ReadExisting();this.Dispatcher.Invoke(new Action(() =>{txtReceive.Text = txt;}));}private void btnSend_Click(object sender, RoutedEventArgs e){serialPort.Write(txtSend.Text);}}
}

4.开启2个COM

 

5.效果

直接运行2个客户端

一个写1端口,一个写2端口,进行通信

可见,2个客户端能进行信息传送

二、USB通信

1.安装Management

2.操作USB有2种方式

一是LibUsbDotNet

二是使用P/Invoke

3.代码

using LibUsbDotNet.Main;
using LibUsbDotNet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using LibUsbDotNet.Info;namespace USB
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{//const int HID_DEVICE_VID = 0x093A;//const int HID_DEVICE_PID = 0x2533;const int HID_DEVICE_VID = 0x0461;const int HID_DEVICE_PID = 0x4E28;public MainWindow(){InitializeComponent();}private void btnQuery_Click(object sender, RoutedEventArgs e){ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\CIMV2");ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_USBHub");using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)){ManagementObjectCollection collection = searcher.Get();string str = string.Empty;foreach (ManagementObject device in collection){str += device["Name"].ToString() + device["DeviceID"] + "\r";//Console.WriteLine("设备名称: " + device["Name"]);//Console.WriteLine("设备ID: " + device["DeviceID"]);//Console.WriteLine();}txtReceive.Text = str;}}public static void GetUSBInfo(){UsbRegDeviceList allDevices = UsbDevice.AllDevices;Console.WriteLine("Found {0} devices", allDevices.Count);foreach (UsbRegistry usb in allDevices){Console.WriteLine("----------------");Console.WriteLine($"Device info: {usb.Device.Info.ProductString}");Console.WriteLine($"Pid: {usb.Pid}, VID: {usb.Vid}");}Console.WriteLine(allDevices.Count);}private void btnOK_Click(object sender, RoutedEventArgs e){//1.使用LibUsbDotNet// 获取所有已连接的USB设备GetUSBInfo();//var usbDevices = UsbDevice.AllDevices;遍历每个USB设备//foreach (UsbDevice usbDevice in usbDevices)//{//    // 打印USB设备的信息//    Console.WriteLine("设备描述: " + usbDevice.Info.DeviceDescription);//    Console.WriteLine("厂商ID: " + usbDevice.Info.UsbVendorId);//    Console.WriteLine("产品ID: " + usbDevice.Info.UsbProductId);//    Console.WriteLine();//    // 检查是否为目标设备(根据VID和PID判断)//    if (usbDevice.Info.UsbVendorId == 0x1234 && usbDevice.Info.UsbProductId == 0x5678)//    {//        try//        {//            // 打开USB设备//            usbDevice.Open();//            // 进行你的USB通信操作(读取或写入数据等)//            // ...//            // 关闭USB设备//            usbDevice.Close();//        }//        catch (Exception ex)//        {//            Console.WriteLine("发生异常: " + ex.Message);//        }//    }//}//2.使用P/InvokeIntPtr deviceHandle = UsbCommunication.OpenHidDevice(HID_DEVICE_VID, HID_DEVICE_PID);if (deviceHandle != IntPtr.Zero){byte[] sendData = { /* 发送的数据 */ };byte[] receiveData = new byte[64];int bytesWritten = UsbCommunication.WriteHid(deviceHandle, sendData, sendData.Length);int bytesRead = UsbCommunication.ReadHid(deviceHandle, receiveData, receiveData.Length);// 处理接收到的数据UsbCommunication.CloseHidDevice(deviceHandle);}else{Console.WriteLine("无法打开HID设备");}Console.WriteLine("按任意键退出...");Console.ReadKey();}class UsbCommunication{// 调用底层库进行USB通信,此处省略具体实现,需要根据实际情况编写相应的P/Invoke声明和方法实现[DllImport("usb_communication.dll", CallingConvention = CallingConvention.Cdecl)]public static extern IntPtr OpenHidDevice(int vid, int pid);[DllImport("usb_communication.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int WriteHid(IntPtr handle, byte[] data, int length);[DllImport("usb_communication.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int ReadHid(IntPtr handle, byte[] data, int length);[DllImport("usb_communication.dll", CallingConvention = CallingConvention.Cdecl)]public static extern void CloseHidDevice(IntPtr handle);}}
}

4.效果

 

目前只是查询出来4个USB设备,但是对USB进行发送和接收信息,还有报错。这个似乎需要和硬件通信协议和数据传输规范有关系,否则好像成功不了,也不清楚可不可以使用虚拟的USB,类似于COM虚拟口一样操作,暂时这么记录吧。 

源码

https://download.csdn.net/download/u012563853/88053882

 


http://www.ppmy.cn/news/908463.html

相关文章

saltstack漏洞

该漏洞具体描述 Salt&#xff08;又称为SaltStack&#xff09;,一种全新的基础设施管理方式&#xff0c;部署轻松&#xff0c;在几分钟内可运行起来&#xff0c;扩展性好&#xff0c;很容易管理上万台服务器&#xff0c;速度够快&#xff0c;服务器之间秒级通讯。 国外某安全团…

E-Mobile 后台管理系统漏洞

转载&#xff1a;https://blog.csdn.net/qq_27446553/article/details/68203308 E-Mobile 后台管理系统漏洞 可以通过火狐hackbar插件进行验证 Poc : message(#_memberAccessognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#w#context.get("com.opensymphony.xwork2.dispatch…

泛微OA e-cology WorkflowCenterTreeData前台接口SQL注入漏洞

漏洞描述 泛微e-cology OA系统的WorkflowCenterTreeData接口在使用oracle数据库时,由于内置sql语句拼接不严,导致其存在sql注入漏洞 影响范围 使用oracle数据库的泛微 e-cology OA 系统 漏洞复现 POST /mobile/browser/WorkflowCenterTreeData.jsp?nodewftype_1&scop…

GlassFish漏洞总结复现

写在前面&#xff1a;本文为漏洞复现系列GlassFish篇&#xff0c;复现的漏洞已vulhub中存在的环境为主。 欢迎大家点赞收藏&#xff0c;点点关注更好了hhhhhh 文章目录 简介GlassFish 任意文件读取&#xff08;CVE-2017-1000028&#xff09;漏洞原理影响范围漏洞复现修复建议…

Shiro框架漏洞

一、Shiro漏洞原理 Apache Shiro框架提供了记住我的功能&#xff08;RemeberMe&#xff09;&#xff0c;用户登录成功后会生成经过加密并编码的cookie。 cookie的key为RemeberMe&#xff0c;cookie的值是经过对相关信息进行序列化&#xff0c;然后使用aes加密&#xff0c;最后…

任意文件下载漏洞

任意文件下载 根据file关键字的值来作为要下载的文件名并判断文件是否存在。存在即会下载。 exp.php与download.php在同一级目录下 因此可以通过修改参数名来下载服务器上的任意文件。 此参数为绝对路径。文件下载漏洞的利用除了给绝对路径外&#xff0c;也可以给相对路径。例…

泛微e-cology8前台sql注入漏洞复现

目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 4.1 FOFA实战复现 4.2 泛微e-cology

常见漏洞发布平台

【常用】http://www.exploit-db.com [比较及时]http://www.securityfocus.com (国际权威漏洞库)http://www.cnvd.org.cn/ (国家信息安全漏洞共享平台)http://www.nsfocus.net (国内安全厂商——绿盟科技)http://en.securitylab.ru (俄罗斯知名安全实验室)Bugtraq (安全焦点)htt…

CmsEasy7.6.3.2逻辑漏洞

文章目录 漏洞概述漏洞复现phpstudy搭建网站源码搭建 Burpsuite抓包开始白嫖 漏洞修复建议 漏洞概述 在CmsEasy7.6.3.2版本中,存在订单金额任意修改逻辑漏洞&#xff0c;攻击者利用业务逻辑层的应用安全问题&#xff0c;在提交订单时抓取数据包并修改&#xff0c;以及对订单的…

Shellshock漏洞复现

Shellshock漏洞复现 bash说明漏洞原理漏洞复现环境说明漏洞条件漏洞复现 bash说明 Bash是Unix shell的一种。1989年发布第一个正式版本&#xff0c;原先是计划用在GNU操作系统上&#xff0c;但能运行于大多数类Unix系统的操作系统之上。 漏洞原理 目前的Bash使用的环境变量是通…

Laravel 漏洞合集

Laravel 漏洞合集 Laravel 存在SQL注入漏洞 poc: /test?email1&id1 union select user()# /test?email1/&id1&column/ union select user()--- 可以看的注入成功 Laravel 反序列化漏洞 一. poc: <?php namespace Illuminate\Broadcasting{ use Illu…

Nginx 解析漏洞复现

1、漏洞原理 (1)由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件。 …

泛微OA漏洞(综合)

小骇客图片在F12sec看月球师傅文章看到的 感觉挺好看&#xff0c;就做封面了 【李淳罡&#xff1a;】借&#x1f5e1;一用&#xff08;我是不会告诉你我刚从东海武帝城过来的哦&#x1f60f;&#xff09; 目录 1. 泛微云桥 e-Bridge 任意文件读取 1.1 漏洞描述 1.3 影响版…

泛微e-Bridge未授权文件读取漏洞复现

简介 泛微云桥 e-Bridge 存在未经授权读取任意文件漏洞&#xff0c;可利用该漏洞&#xff0c;实现任意文件读取&#xff0c;获取敏感信息。 fofa title"泛微云桥e-Bridge" 漏洞复现 因为不是在本地搭建的漏洞复现环境&#xff0c;利用空间搜索引擎只找到很少量存在…

网站安全漏洞--大全

原文网址&#xff1a;网站安全漏洞--大全_IT利刃出鞘的博客-CSDN博客 简介 本文介绍网站常见的一些安全漏洞。 常见的漏洞有&#xff1a;SQL 注入、越权操作、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、DDoS 攻击、JSON 劫持、暴力破解、HTTP 报头追踪漏洞、信息泄露、文件上…

漏洞复现 泛微OA E-Cology V9 browser.jsp SQL注入漏洞

漏洞复现 泛微OA E-Cology V9 browser.jsp SQL注入漏洞 漏洞描述 泛微新一代移动办公平台e-cology不仅组织提供了一体化的协同工作平台,将组织事务逐渐实现全程电子化,改变传统纸质文件、实体签章的方式。泛微OA E-Cology 平台browser.jsp处存在SQL注入漏洞&#xff0c;攻击者…

Dvwa漏洞之代码执行漏洞

目录 代码执行漏洞的危害 code execution 看个例子&#xff1a;security 为low 当security 为medium时 如何规避此类问题 代码执行漏洞的危害 code execution 允许攻击者执行操作系统命令windows or linux可以用来得到一个反向shell或者使用wget上传文件 看个例子&#x…

泛微 漏洞汇总

SQL注入 前台SQL注入 用户名&#xff1a;admin’ or password like ‘c4ca4238a0b923820dcc509a6f75849b’ and ‘a’a 密码: 1 验证页面参数 - loginid &#xff08;1&#xff09;/login/VerifyLogin.jsp?loginfile%2Fwui%2Ftheme%2Fecology7%2Fpage%2Flogin.jsp%3Ftemp…

thinkphp漏洞复现

所有文章&#xff0c;仅供安全研究与学习之用&#xff0c;后果自负! thinkphp漏洞 前言一、thinkphp-2x-rce 代码执行0x01 漏洞描述0x02 影响版本0x03 漏洞利用0x04 漏洞修复 二、thinkphp 代码执行 (CNVD-2018-24942)0x01 漏洞描述0x02 影响范围0x03 漏洞利用这就完成了&#…

致翔OA漏洞复现手册

前言&#xff1a;致翔OA产品漏洞复现笔记&#xff0c;供自己使用&#xff0c;不定期更新 声明&#xff1a;本人所有文章均为技术分享&#xff0c;请勿非法用于其他用途&#xff0c;否则后果自负。 漏洞列表&#xff1a; 致翔OA msglog.aspx SQL注入漏洞 致翔OA msglog.aspx SQL…
最新文章