国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了.net6中WPF的串口通信和USB通信。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

之前寫過串口通信,不過是winform的。

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

今天說一下,.net6中wpf的串口通信和USB通信,在工控行業(yè)中,這2種的方式非常多,還有網(wǎng)口通信,它們都是用來和硬件打交道的,進行交互信息。

一、串口通信

1.安裝System.IO.Ports

.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

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="發(fā)送" Click="btnSend_Click"/>
        <TextBlock Text="接收的數(shù)據(jù)"/>
        <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。因為電腦創(chuàng)建了2個COM串口
            serialPort.BaudRate = 9600;//波特率
            serialPort.DataBits = 8;//數(shù)據(jù)位
            serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位
            //serialPort.Encoding = System.Text.Encoding.GetEncoding("GB2312");//此行非常重要,解決接收中文亂碼的問題
            serialPort.DataReceived += SerialPort_DataReceived;

            // 打開串口
            try
            {
                serialPort.Open();
            }
            catch (Exception ex)
            {
                //捕獲到異常信息,創(chuàng)建一個新的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

?.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

5.效果

直接運行2個客戶端

一個寫1端口,一個寫2端口,進行通信

可見,2個客戶端能進行信息傳送

.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

二、USB通信

1.安裝Management

.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

2.操作USB有2種方式

一是LibUsbDotNet

.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

二是使用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("設(shè)備名稱: " + device["Name"]);
                    //Console.WriteLine("設(shè)備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設(shè)備
            GetUSBInfo();
            //var usbDevices = UsbDevice.AllDevices;

             遍歷每個USB設(shè)備
            //foreach (UsbDevice usbDevice in usbDevices)
            //{
            //    // 打印USB設(shè)備的信息
            //    Console.WriteLine("設(shè)備描述: " + usbDevice.Info.DeviceDescription);
            //    Console.WriteLine("廠商ID: " + usbDevice.Info.UsbVendorId);
            //    Console.WriteLine("產(chǎn)品ID: " + usbDevice.Info.UsbProductId);
            //    Console.WriteLine();

            //    // 檢查是否為目標(biāo)設(shè)備(根據(jù)VID和PID判斷)
            //    if (usbDevice.Info.UsbVendorId == 0x1234 && usbDevice.Info.UsbProductId == 0x5678)
            //    {
            //        try
            //        {
            //            // 打開USB設(shè)備
            //            usbDevice.Open();

            //            // 進行你的USB通信操作(讀取或?qū)懭霐?shù)據(jù)等)
            //            // ...

            //            // 關(guān)閉USB設(shè)備
            //            usbDevice.Close();
            //        }
            //        catch (Exception ex)
            //        {
            //            Console.WriteLine("發(fā)生異常: " + ex.Message);
            //        }
            //    }
            //}



            //2.使用P/Invoke
            IntPtr deviceHandle = UsbCommunication.OpenHidDevice(HID_DEVICE_VID, HID_DEVICE_PID);

            if (deviceHandle != IntPtr.Zero)
            {
                byte[] sendData = { /* 發(fā)送的數(shù)據(jù) */ };
                byte[] receiveData = new byte[64];

                int bytesWritten = UsbCommunication.WriteHid(deviceHandle, sendData, sendData.Length);
                int bytesRead = UsbCommunication.ReadHid(deviceHandle, receiveData, receiveData.Length);

                // 處理接收到的數(shù)據(jù)

                UsbCommunication.CloseHidDevice(deviceHandle);
            }
            else
            {
                Console.WriteLine("無法打開HID設(shè)備");
            }

            Console.WriteLine("按任意鍵退出...");
            Console.ReadKey();
        }

        class UsbCommunication
        {
            // 調(diào)用底層庫進行USB通信,此處省略具體實現(xiàn),需要根據(jù)實際情況編寫相應(yīng)的P/Invoke聲明和方法實現(xiàn)
            [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.效果

.net6中WPF的串口通信和USB通信,C#,c#,.net,wpf

目前只是查詢出來4個USB設(shè)備,但是對USB進行發(fā)送和接收信息,還有報錯。這個似乎需要和硬件通信協(xié)議和數(shù)據(jù)傳輸規(guī)范有關(guān)系,否則好像成功不了,也不清楚可不可以使用虛擬的USB,類似于COM虛擬口一樣操作,暫時這么記錄吧。?

源碼

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

來源:.net6中WPF的串口通信和USB通信_.net usb通信_故里2130的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-572575.html

到了這里,關(guān)于.net6中WPF的串口通信和USB通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Azure DevOps(一)基于 Net6.0 的 WPF 程序如何進行持續(xù)集成、持續(xù)編譯

    Azure DevOps(一)基于 Net6.0 的 WPF 程序如何進行持續(xù)集成、持續(xù)編譯

    我們是否正在為如何快速的編譯、部署客戶端應(yīng)用程序而煩惱?這也是博主最近遇到的問題。目前博主所在公司主要做項目級的定制化開發(fā),多以 C/S 架構(gòu)的 WPF 程序為主,每次到了協(xié)助開發(fā)團隊給實施團隊編譯好的要測試程序包時,就會出現(xiàn)多人協(xié)助,編譯、打包好的二進制

    2023年04月19日
    瀏覽(32)
  • WPF .Net6框架下, 使用 Microsoft.Xaml.Behaviors.Wpf 的Interaction.Triggers特性,實現(xiàn)ComboBox 在展開時,觸發(fā)刷新列表內(nèi)容的動作

    ComboBox 在WPF中是常見的控件。 一般情況下,在綁定好數(shù)據(jù)源后,其內(nèi)容是固定的。 當(dāng)然,你也可以實時刷新,但這將帶來較高的資源消耗。 因此有個折中的辦法: 只在它在展開時,自動更新列表內(nèi)容。 當(dāng)前文章基于 .Net6框架,其他框架不適用。 這個是用于平替winform某個組

    2024年02月09日
    瀏覽(23)
  • WPF:.Net6框架下,使用Material Design過程中,配色和UI字體模糊的問題

    WPF:.Net6框架下,使用Material Design過程中,配色和UI字體模糊的問題

    有關(guān)Material Design的使用方法,請自行參考這個鏈接 WPF使用Material Design 下面,直接上我碰到的問題及解決方式 默認(rèn)情況下,Material Design是提供了很多主題配色,但難免有些太過“出挑”,不適合工控軟件的風(fēng)格。 所以,下面簡單介紹一下手動配色的基礎(chǔ)方法: 代表采用的是

    2024年02月06日
    瀏覽(35)
  • wpf C# 用USB虛擬串口最高速下載大文件 每包400萬字節(jié) 平均0.7s/M,支持批量多設(shè)備同時下載。自動識別串口。源碼示例可自由定制。

    wpf C# 用USB虛擬串口最高速下載大文件 每包400萬字節(jié) 平均0.7s/M,支持批量多設(shè)備同時下載。自動識別串口。源碼示例可自由定制。

    C# 用USB虛擬串口下載大文件 每包400萬字節(jié) 平均0.7s/M。支持批量多設(shè)備同時下載。自動識別串口。可自由定制。 int 32位有符號整數(shù) -2147483648~2147483647 但500萬字節(jié)時 write時報端口IO異常??赡苁球?qū)動限制的。 之前用這個助手發(fā)文件,連續(xù)發(fā)送,會被分包1024byte/包。速度會慢下來

    2024年02月09日
    瀏覽(23)
  • C# WPF監(jiān)聽USB插入撥出

    C# WPF監(jiān)聽USB插入撥出

    可以全部監(jiān)聽。好用 ? 以下可以部分監(jiān)聽 以下不行?

    2024年02月11日
    瀏覽(17)
  • 【W(wǎng)PF.NET開發(fā)】WPF中的文檔

    文檔類型 文檔控件和文本布局 文檔打包 XPS 文檔 Windows Presentation Foundation (WPF) 提供豐富的文檔功能,可創(chuàng)建旨在比前幾代 Windows 更易于訪問和讀取的高保真內(nèi)容文檔。 除增強功能和質(zhì)量外,WPF 還對文檔顯示、打包和安全性能提供集成服務(wù)。 本主題介紹 WPF 文檔類型和文檔打

    2024年01月17日
    瀏覽(30)
  • 【W(wǎng)PF.NET開發(fā)】WPF中的拖放

    WPF 中的拖放支持 數(shù)據(jù)傳輸 拖放事件 實現(xiàn)拖放 拖放示例 本主題概述 Windows Presentation Foundation (WPF) 應(yīng)用程序中的拖放支持。 拖放通常指一種數(shù)據(jù)傳輸方法:使用鼠標(biāo)(或一些其他指針設(shè)備)選擇一個或多個對象,將其拖至用戶界面 (UI) 中的某些所需拖放目標(biāo)之上并放置。 拖

    2024年01月21日
    瀏覽(28)
  • 【W(wǎng)PF.NET開發(fā)】WPF中的版式

    【W(wǎng)PF.NET開發(fā)】WPF中的版式

    改進的文本質(zhì)量和性能 豐富的版式 增強的國際文本支持 增強的字體支持 新的文本應(yīng)用程序編程接口 (API) 本主題介紹 WPF 的主要版式功能。 這些功能包括改進的文本呈現(xiàn)質(zhì)量和性能、OpenType 版式支持、增強的國際文本、增強的字體支持和新的文本應(yīng)用程序編程接口 (API)。

    2024年02月01日
    瀏覽(52)
  • 【W(wǎng)PF.NET開發(fā)】WPF中的窗口

    【W(wǎng)PF.NET開發(fā)】WPF中的窗口

    目錄 1、窗口類 2、實現(xiàn)窗口 2.1 為 MSBuild 配置窗口 3、窗口生存期 3.1 打開窗口 3.2 窗口激活 3.3 關(guān)閉窗口 3.4 窗口生存期事件 4、窗口位置 4.1 最頂層窗口和 z 順序 5、窗口大小 6、大小調(diào)整屬性的優(yōu)先級順序 7、窗口狀態(tài) 8、窗口外觀 8.1 重設(shè)大小模式 8.2 Window style 8.3 任務(wù)欄顯示

    2024年02月04日
    瀏覽(28)
  • 【W(wǎng)PF.NET開發(fā)】WPF中的XAML資源

    使用 XAML 中的資源 靜態(tài)和動態(tài)資源 靜態(tài)資源 動態(tài)資源 樣式、DataTemplate 和隱式鍵 資源是可以在應(yīng)用中的不同位置重復(fù)使用的對象。 資源的示例包括畫筆和樣式。 本概述介紹如何使用 Extensible Application Markup Language (XAML) 中的資源。 你還可以使用代碼創(chuàng)建和訪問資源。 ?備注

    2024年01月17日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包