【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱: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>