C# WPF上位機開發(串口界面設計)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? 如果只是把上位機看成是純軟件開發,本身不和硬件打交道的話,那么這就把上位機的操作范圍給限定死了。事實上,上位機只要能和其他設備通信,就可以處理多方面的數據,也只有這樣才能發揮上位機算力強的優勢。目前來說,常用的上位機硬件接口很多,232、usb、can這些都算。而這些接口當中,尤其以串口232最為簡單和便捷。

? ? ? ? 很多的設備或者開發板,不僅自身可以提供232串口,還可以把232轉成其他的接口,比如說232轉485、232轉can、232轉網絡等等,總之就是用起來非常方便。

1、串口的物理構成

? ? ? ? 232一般就三條線,收、發、地。所謂的收就是接收,本身從外部設備接收數據;而發就是發送,數據從上位機發送出去;地就是共地,本身當成一個基準信號。

2、串口之上的協議更為重要

? ? ? ? 232本身只是一個物理承載的接口,我們需要的其實是上面的數據內容。不同的數據內容,這就決定不同的設備用途。它可以是簡單的IO設備,可以是充電設備,可以是工業PLC設備,這里面存在著各種各樣的選擇。所以232也好,485也好,can也好,這些都是數據通訊的運輸方式,數據本身才是最最重要的內容。

3、串口界面的編寫

? ? ? ? 目前來說,市面上有很多的串口收發工具,大部分拿過來就可以用。不過還是建議大家可以把這部分工具拿過來模仿一下,模仿它的界面,模仿它們的功能。只有親自去做,去測試,并且在這過程中犯了錯,才能得到更好地體會和認識串口的用途。

? ? ? ? 目前的界面一般都會分成左右兩個部分,一部分是屬性配置,一部分是收發數據顯示。

4、界面布局和xaml編寫

? ? ? ? 用c# wpf編寫串口的界面還是非常容易的。常用的控件基本上就是label、textbox、button、combobox、radio button、checkbox這些就夠了。剩下來的工作就是如何去布局和設計。學習之初,建議大家還是以模仿為主,等學習的內容比較多了,可以自己去獨立設計的時候,再來自己做比較合適。

? ? ? ? 界面上還是按照先grid分區,后stack布局的方式進行。當然利用grid里面嵌套grid,這本身也是可以的。等grid完成之后,在每一個space里面,就接著在vertical方向,或者在horizontal方向開始添加控件。放置的時候需要注意下上下的間隔,或者是左右的間隔。部分需要內容高亮的部分,最好也要高亮起來,這樣會顯得比較美觀一些。

? ? ? ? 最后為了方便大家學習和參考,這里給出完整代碼,權且是拋磚引玉,希望大家設計出更好的界面內容。當然如果需要實際編程的話,直接引入using System.IO.Ports即可。

<Window x:Class="WpfApp.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:WpfApp"mc:Ignorable="d"Title="串口處理工具(V1.0)" Height="500" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height=" 330"/><RowDefinition/><RowDefinition Height="40"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="150"/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Row="0" Grid.Column="0" Margin="10,10,10,10"><StackPanel Orientation="Horizontal" Margin="0,0,0,0"><Label  Content="串   口:"/><ComboBox Width="80"><ComboBoxItem IsSelected="True">COM1</ComboBoxItem><ComboBoxItem>COM2</ComboBoxItem><ComboBoxItem>COM3</ComboBoxItem><ComboBoxItem>COM4</ComboBoxItem><ComboBoxItem>COM5</ComboBoxItem><ComboBoxItem>COM6</ComboBoxItem><ComboBoxItem>COM7</ComboBoxItem><ComboBoxItem>COM8</ComboBoxItem><ComboBoxItem>COM9</ComboBoxItem></ComboBox></StackPanel><StackPanel Orientation="Horizontal" Margin="0,10,0,0"><Label  Content="波特率:"/><ComboBox Width="80"><ComboBoxItem IsSelected="True">4800</ComboBoxItem><ComboBoxItem>9600</ComboBoxItem><ComboBoxItem>19200</ComboBoxItem><ComboBoxItem>38400</ComboBoxItem><ComboBoxItem>57600</ComboBoxItem><ComboBoxItem>115200</ComboBoxItem></ComboBox></StackPanel><StackPanel Orientation="Horizontal" Margin="0,10,0,0"><Label  Content="數據位:"/><ComboBox Width="80"><ComboBoxItem IsSelected="True">8</ComboBoxItem><ComboBoxItem>9</ComboBoxItem><ComboBoxItem>10</ComboBoxItem></ComboBox></StackPanel><StackPanel Orientation="Horizontal" Margin="0,10,0,0"><Label  Content="校驗位:"/><ComboBox Width="80"><ComboBoxItem IsSelected="True">None</ComboBoxItem><ComboBoxItem>1</ComboBoxItem></ComboBox></StackPanel><StackPanel Orientation="Horizontal" Margin="0,10,0,0"><Label  Content="停止位:"/><ComboBox Width="80"><ComboBoxItem IsSelected="True">None</ComboBoxItem><ComboBoxItem>1</ComboBoxItem></ComboBox></StackPanel><Button Content="打開串口" Margin="0,10,0,0" Height="35" VerticalContentAlignment="Center" /><StackPanel  Margin="0,10,0,0"><StackPanel Orientation="Horizontal"   ><RadioButton Content="ASCII" IsChecked="True" Margin="0,0,0,0"/><RadioButton Content="HEX" Margin="15,0,0,0"/></StackPanel><CheckBox Content="顯示接收數據時間" Margin="0,10,0,0" IsChecked="True" /><Button Content="清空接收" Height="35" Margin="0,10,0,0"/></StackPanel></StackPanel><StackPanel Grid.Row="1" Grid.Column="0" Margin="10,0,0,0"><StackPanel Orientation="Horizontal"   Margin="0,10,0,0" ><RadioButton Content="ASCII" IsChecked="True" Margin="0,0,0,0"/><RadioButton Content="HEX" Margin="15,0,0,0"/></StackPanel><CheckBox Content="發送新行" IsChecked="False" Margin="0,10,0,0" /><StackPanel Orientation="Horizontal"   ><CheckBox Content="自動發送" Margin="0,10,0,0" IsChecked="True"  IsEnabled="True"/><TextBox Width="30" Text="1" FontSize="16" Margin="20,0,0,0" IsEnabled="True"/><Label Content="s"/></StackPanel></StackPanel><StackPanel Grid.Row="0" Grid.Column="1" Margin="0,10,0,0"><TextBox Width="618" Height="304"></TextBox></StackPanel><StackPanel Grid.Row="1" Grid.Column="1" Margin="0,0,0,0" Orientation="Horizontal"><TextBox Width="490" Height="80" FontSize="20" Margin="10,0,0,0"/><Button Content="發送" Margin="10,10,0,10" Width="102" Height="45"/></StackPanel><StackPanel Grid.Row="2" Grid.ColumnSpan="2" Margin="10,10,0,5" Orientation="Horizontal"><Label Content="串口已經關閉" Foreground="Red"/><Label Content="Tx:0 Bytes     Rx:0 Bytes"  Margin="200,0,0,0"/><Label Content="@V1.0"  Foreground="Green" Margin="280,0,0,0"/></StackPanel></Grid>
</Window>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209682.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多線程的使用

進程與線程 進程&#xff1a; 1、進程是指運行中的程序&#xff0c;比如我們使用QQ&#xff0c;就啟動了一個進程&#xff0c;操作系統就會為該進程分配內存空間。當我們使用微信&#xff0c;又啟動了一個進程,操作系統將為其分配新的內存空間。 2、進程是程序的一次執行過程…

數據庫系統概論期末經典大題講解(范式提升、求閉包、求主碼)

上一次我們介紹了數據庫中關系代數查詢&#xff0c;從選擇、投影到連接等操作符&#xff0c;探索了數據庫查詢 大家可以移步我的文章&#xff1a;數據庫系統概論期末經典大題講解&#xff08;用關系代數進行查詢&#xff09;-CSDN博客 今天&#xff0c;我們將繼續沿著數據庫系統…

《python每天一小段》--12 數據可視化《1》

歡迎閱讀《Python每天一小段》系列&#xff01;在本篇中&#xff0c;將使用Python Matplotlib實現數據可視化的簡單圖形。 一、概念 Matplotlib是一個流行的Python數據可視化庫&#xff0c;它提供了豐富的繪圖功能&#xff0c;可以創建各種類型的圖表&#xff0c;包括折線圖、…

Spring框架學習:Bean生命周期

目錄 SpringBean的生命周期 Bean實例屬性填充 三級緩存 常用的Aware接口 Spring IoC容器實例化Bean總結 SpringBean的生命周期 Spring Bean的生命周期是從 Bean 實例化之后&#xff0c;即通過反射創建出對象之后&#xff0c;到Bean成為一個完整對象&#xff0c;最終存儲到…

【MyBatis系列】MyBatis字符串問題

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

SpringBoot + Spring Cloud Alibaba + Nacos實現服務管理

1、參考文檔 Spring Cloud Alibaba參考文檔 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html Spring Cloud Alibaba官方文檔 https://github.com/alibaba/spring-cloud-alibaba/wiki/ 2、引入 Alibaba 依賴 每個 SpringBoot 都有對應的…

css中2D和3D的區別

CSS中2D和3D的主要區別在于&#xff1a; 維度不同&#xff1a;2D是二維平面&#xff0c;3D是三維空間。可視角度不同&#xff1a;2D只能從一個平面角度看&#xff0c;而3D可以在多個角度上觀察。技術難度不同&#xff1a;3D效果需要更復雜的技術支持&#xff0c;如矩陣變換&am…

javascript實現Stack(棧)數據結構

上一篇文章我們理解了List這種數據結構&#xff0c;知道了它的特點和一些使用場景&#xff0c;這篇文章我們就來看一下棧這種數據結構&#xff0c;這里的棧可不是客棧哦&#xff0c;哈哈 棧其實和List非常像&#xff0c;使用javascript實現都是基于數組來實現 嘗試理解Stack …

6種常見的JS模塊打包器

前言 JS模塊打包器是一種工具&#xff0c;它可以將多個JS文件或模塊合并成一個或多個輸出文件&#xff0c;以便在瀏覽器或其他環境中使用。 JS模塊打包器的作用有&#xff1a; 優化代碼&#xff1a;通過壓縮、混淆、刪除無用代碼等方式&#xff0c;減少代碼的體積和復雜度&…

windows系統和虛擬機上ubuntu系統通過虛擬串口進行通信

本文的目的是實現windows系統和虛擬機上安裝的ubuntu通過串口進行通信。為了直觀觀測串口收發數據的內容&#xff0c;需要在windows系統和ubuntu系統使用串口助手來進行監聽。windows系統端用的監聽工具是串口助手SSCOM&#xff0c;ubuntu系統端使用的串口助手是CuteCom。 ubu…

OpenCL學習筆記(一)開發環境搭建(win10+vs2019)

前言 異構編程開發&#xff0c;在高性能編程中有重要的&#xff0c;筆者本次只簡單介紹下&#xff0c;如何搭建簡單的開發環境&#xff0c;可以供有需要的小伙伴們開發測試使用 一、獲取opencl的sdk庫 1.使用cuda庫 若本機有Nvidia的顯卡&#xff0c;在安裝cuda庫后&#x…

如何提高大模型在超長上下文的表現?Claude實驗表明加一句prompt立即提升效果~

本文來自DataLearnerAI官方網站&#xff1a;如何提高大模型在超長上下文的表現&#xff1f;Claude實驗表明加一句prompt立即提升效果~ | 數據學習者官方網站(Datalearner)https://www.datalearner.com/blog/1051701947131881 Claude 2.1版本的模型上下文長度最高拓展到200K&am…

【Flink系列四】Window及Watermark

3.1、window 在 Flink 中 Window 可以將無限流切分成有限流&#xff0c;是處理有限流的核心組件&#xff0c;現在 Flink 中 Window 可以是時間驅動的&#xff08;Time Window&#xff09;&#xff0c;也可以是數據驅動的&#xff08;Count Window&#xff09;。 Flink中的窗口…

c jpeg YUV圖片幀分割成 8*8 塊 ,與逆向把8*8還原為幀

1. 正向分割為若干8*8 塊 下面的程序為通用程序&#xff0c;可以分割任意塊 #include <stdlib.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h>…

如果微軟20年前開發.net core,JAVA會不會和IE一樣倒下了

可以跨平臺&#xff0c;大量類庫&#xff0c;微軟親自操刀&#xff0c;性能一流&#xff0c;因為沒有做跨平臺&#xff0c;.NET被 python,javascript等搶了一半以上市場。 如果微軟早早的推出類似.net core這樣的跨平臺語言&#xff0c;.net程序猿還會出在這樣的尷尬局面嗎眾所…

Java基礎-開發流程以及HelloWorld程序

目錄 1. Java的開發流程2. HelloWorld 1. Java的開發流程 開發Java程序&#xff0c;需要三個步驟&#xff1a;編寫代碼&#xff0c;編譯代碼&#xff0c;運行代碼 2. HelloWorld 編寫代碼 public class HelloWorld {public static void main(String[] args) {System.out.pri…

Ribbon 饑餓加載

Ribbon默認是采用懶加載&#xff0c;即第一次訪問時才會去創建LoadBalanceClient&#xff0c;請求時間會很長而饑餓加載則會在項目啟動時創建&#xff0c;降低第一次訪問的耗時&#xff0c;通過下面配置開啟饑餓加載: 一、懶加載 Ribbon 默認為懶加載即在首次啟動Application…

代碼隨想錄二刷 |二叉樹 | 二叉樹的層序遍歷

代碼隨想錄二刷 &#xff5c;二叉樹 &#xff5c; 二叉樹的層序遍歷 題目描述解題思路代碼實現 題目描述 102.二叉樹的層序遍歷 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 示例…

Flask 最佳實踐(一)

Flask是一個輕量級而強大的Python Web框架&#xff0c;它的簡潔性和靈活性使其成為許多開發者的首選。然而&#xff0c;為了確保項目的可維護性和可擴展性&#xff0c;我們需要遵循一些最佳實踐。本文將探討Flask中一些關鍵的最佳實踐。 1. 項目結構 構建一個清晰的項目結構是…

Java實現Socket聊天室

一、網絡編程是什么&#xff1f; 在網絡通信協議下&#xff0c;不同計算機上運行的程序&#xff0c;進行數據傳輸。 應用場景&#xff1a;即時通訊、網游對戰、金融證券、國際貿易、郵件、等等。 不管是什么場景&#xff0c;都是計算機與計算機之間通過網絡進行數據傳輸。 …