前面已经搭建了一个可以接受GPS数据的简易接收机,接下来将要编写一个上位机处理接收到的数据,并进行处理显示。

效果示意图

接收文本数据,并进行表格显示

接受文本数据,并进行图表显示

前台代码如下

    <Grid><TextBox x:Name="Tip" HorizontalAlignment="Left" Height="24" Margin="8,176,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="40" BorderBrush="{x:Null}" Background="{x:Null}" FontSize="16" IsReadOnly="True" Foreground="Black" HorizontalContentAlignment="Center" Text="提示"/><ComboBox x:Name="Port_Select" RenderTransformOrigin="1.436,2.058" BorderBrush="Black" Foreground="Black" FontFamily="Microsoft YaHei" Background="{x:Null}" Height="32" VerticalAlignment="Top" HorizontalAlignment="Left" Width="76" MouseEnter="PortSelect_MouseEnter" Margin="75,30,0,0" FontSize="13.333" VerticalContentAlignment="Center"/><Button x:Name="Port_Open" Content="打开串口" Margin="75,170,0,0" RenderTransformOrigin="-0.833,1.211" Click="PortOpen_Click" Background="{x:Null}" BorderBrush="Black" FontFamily="Microsoft YaHei" FontSize="16" HorizontalAlignment="Left" Width="76" Height="32" VerticalAlignment="Top"/><TextBox x:Name="textBox" HorizontalAlignment="Left" Height="300" Margin="186,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="396"/><GroupBox Header="接收数据" Height="326" HorizontalAlignment="Left" Margin="186,10,0,0" x:Name="GroupBox" VerticalAlignment="Top" Width="396"/><ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="75,103,0,0" VerticalAlignment="Top" Width="76" Background="{x:Null}" Height="32" FontSize="13.333" VerticalContentAlignment="Center" ><ComboBoxItem Content="9600"/><ComboBoxItem Content="14400"/><ComboBoxItem Content="19200"/><ComboBoxItem Content="38400"/><ComboBoxItem Content="57600"/><ComboBoxItem Content="115200"/></ComboBox><TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="8,36,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.673,-3.125" Height="24" Width="40" Text="端口" FontSize="16" LineHeight="8" TextWrapping="Wrap" TextAlignment="Center"/><TextBlock x:Name="textBlock1" HorizontalAlignment="Left" Margin="8,108,0,0" TextWrapping="Wrap" Text="波特率" VerticalAlignment="Top" Width="60" Height="28" FontSize="16"/><Button x:Name="clr" Content="clear" HorizontalAlignment="Left" Margin="8,240,0,0" VerticalAlignment="Top" Width="50" Click="Clr_Click" Height="28" FontSize="16" Background="{x:Null}"/><Button x:Name="chart" Content="chart" HorizontalAlignment="Left" Margin="100,240,0,0" VerticalAlignment="Top" Width="50" Click="Chart_Click" Height="28" Background="{x:Null}" FontSize="16"/><Button x:Name="table" Content="table" HorizontalAlignment="Left" Margin="100,300,0,0" VerticalAlignment="Top" Width="50" RenderTransformOrigin="0.037,-0.94" Height="28" Background="{x:Null}" FontSize="16" Click="Table_Click"/><Button x:Name="save" Content="save" HorizontalAlignment="Left" Margin="8,300,0,0" VerticalAlignment="Top" Width="50" Height="28" Background="{x:Null}" FontSize="16" Click="Save_Click"/></Grid>

后台代码如下

public  partial class MainWindow : Window{string getstring = "";string putoutstring = "";//声明串口SerialPort ComPort = new SerialPort();public delegate void Display(byte[] buffer);public Display Dis_UI;public   MainWindow(){     InitializeComponent();ComPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);Dis_UI = new Display(display);}//接收数据事件void sp_DataReceived(object sender, SerialDataReceivedEventArgs e){int count = ComPort.BytesToRead;byte[] buffer = new byte[count];ComPort.Read(buffer, 0, count);//多线程操作UIthis.Dispatcher.Invoke(Dis_UI, buffer);}public  void display(byte[] buf){for (int i = 0; i < buf.Length; i++){getstring += Char.ConvertFromUtf32(buf[i]);}if  (getstring .Contains(@"$GNVTG") ){App.wxid.Clear();App.wxxzb.Clear();string pattern = @"\$BDGSA,(?<GPS>[\s\S]+)\$BDGSV";Match mc = Regex .Match(getstring, pattern);string tempStr = mc.Groups["GPS"].ToString ();string[] Gpsarray = Regex.Split(tempStr, "\r\n", RegexOptions.IgnoreCase);foreach (string istring in Gpsarray){try{if (istring.Contains(@"$GPGSV")){string[] sArray = Regex.Split(istring, ",", RegexOptions.IgnoreCase);try{App.wxid.Add(sArray[4]);App.wxxzb.Add(Convert.ToDouble(sArray[7]));}catch{}}}catch{}}textBox.Text =getstring+ "\n" + System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "\n";putoutstring = getstring + "\n" + System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "\n";getstring = "";}}//串口集public string[] portNames { get; set; }//打开标志bool openFlag = false;//得到当前可用串口private void GetPort(){portNames = SerialPort.GetPortNames();         //得到可用串口if (portNames.Length > 0){Tip.Text = "检测到" + portNames.Length + "个可用串口";}else{Tip.Text = "未检测到串口";Port_Select.ItemsSource = null;return;}Port_Select.ItemsSource = portNames;           //添加可用串口Port_Select.SelectedValue = portNames[0];      //默认选中}//打开事件private void PortOpen_Click(object sender, RoutedEventArgs e){OpenPort();}//鼠标进入事件private void PortSelect_MouseEnter(object sender, MouseEventArgs e){if (openFlag == false){GetPort();}}//打开串口方法private void OpenPort(){if (Port_Select.SelectedValue == null){GetPort();}if (openFlag == false){try{//设置ComPort.PortName = Port_Select.SelectedValue.ToString();ComPort.BaudRate = Convert.ToInt32(comboBox.SelectionBoxItem.ToString ());ComPort.Parity = Parity.None;ComPort.StopBits = StopBits.One;ComPort.DataBits = 8;ComPort.Handshake = Handshake.None;// ComPort.RtsEnable = true;ComPort.Open();Tip.Text = "打开成功";openFlag = true;Port_Open.Content = "关闭串口";}catch{Tip.Text = "打开失败";}}else{try{ComPort.DiscardInBuffer();ComPort.DiscardOutBuffer();ComPort.Close();openFlag = false;Port_Open.Content = "打开串口";Tip.Text = "关闭成功";}catch{Tip.Text = "关闭失败";}}}//清除显示文本private void Clr_Click(object sender, RoutedEventArgs e){this.textBox .Text ="";}//打开图表窗口private void Chart_Click(object sender, RoutedEventArgs e){chartwindow Chartwindow = new chartwindow();Chartwindow.Show();}//打开表格窗口private void Table_Click(object sender, RoutedEventArgs e){table Table = new ck.table();Table.Show();}//保存数据文本private void Save_Click(object sender, RoutedEventArgs e){SaveFileDialog saveDlg = new SaveFileDialog();saveDlg.Filter = "文本(*.txt)|*.txt;|Excle(*.xls)|*.xls";if (saveDlg.ShowDialog() == true){using (FileStream fs = new FileStream(saveDlg.FileName, FileMode.Create)){using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)){sw.WriteLine(putoutstring);}}}}}

GPS接收机(五)基于C#的GPS软件上位机相关推荐

  1. C++ MFC实现基于RFID读写器的上位机软件

    C++ MFC实现基于RFID读写器的上位机软件 该博客涉及的完整工程托管在https://github.com/Wsine/UpperMonitor,觉得好请给个Star (/▽\=) 运行和测试环 ...

  2. 基于C#的工控上位机软件开发从入门到学废,需要几步?

    基于C#的工控上位机软件开发从入门到学废,需要几步? 随着工控产品的应用,开始大幅度渗透进民用领域.涉及的工控产品范围广泛,如PLC.DCS.变频器.仪表.电机.SCADA.低压及配电元器件等. 准备 ...

  3. ftp上位机编程c语言,基于USB芯片CY7C68013A的上位机C++程序

    标签: 基于USB芯片CY7C68013A的上位机C 基于USB芯片CY7C68013A的上位机C程序 在国标<质量管理体系 基础和术语>GB/T19000-2008/ISO9000:20 ...

  4. gps 捕获 matlab,基于FFT的GPS信号快速捕获方法

    基于FFT的GPS信号快速捕获方法 李继忠 李巍 (北京遥感设备研究所,北京100039) 摘要:设计在高动态环境下工作的GPS接收机,其难点之一便在于对卫星伪码的快速捕获. 针对缩短GPS接收机捕获 ...

  5. matlab gps 卫星导航信号,基于MATLAB的GPS信号仿真123.doc

    <基于MATLAB的GPS信号仿真完整源代码123> 摘 要 . 关键词::MATLAB: Abstract As the new generation of the satellite ...

  6. 如何用c语言写上位机软件,上位机的工作原理_上位机编程用什么软件

    描述 上位机的工作原理 通讯过程 两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议,购买下位机时,会带一大堆手册光盘,告诉你如何使用特有协议通讯,里面会 ...

  7. 上位机服务器通讯协议,基于TCP/IP协议实现上位机对UR机器人的远程控制

    1.引言 2010年,德国学术界和产业界提出"工业4.0"的概念,即是以智能制造为主导的第四次工业革命,或革命性的生产方法.该战略旨在通过充分利用信息通讯技术和网络空间虚拟系统-信 ...

  8. GPS接收机(四)--基于STM32和GU620的GPS接收机搭建

    前面几篇介绍了GPS接受的射频前端部分的有源天线部分,接下来将介绍如何用MCU和GPS芯片搭建简易的GPS导航开发板. 模块简介 GU620的资料可以在官网找到,我按照指导手册搭建的电路图. GU62 ...

  9. 基于ZigBee的智能监控系统-上位机代码

    using System; using System.IO.Ports;//串口 using System.Drawing; using System.Collections.Generic; usi ...

最新文章

  1. 用户自定义协议client/server代码示例
  2. thinkphp的伪静态化
  3. 推荐个所见即所得的编辑器
  4. 《系统集成项目管理工程师》必背100个知识点-13项目经理是整合者
  5. java 在界面上画一个时钟_编写程序显示一个时钟 - javaCoder的个人页面 - OSCHINA - 中文开源技术交流社区...
  6. 用SwiftGen管理UIImage等的String-based接口
  7. 设计模式之策略模式和状态模式
  8. 分数小数互换图_五年级数学分数和小数的互换(15悬赏)
  9. java实现rabbitMQ延时队列详解以及spring-rabbit整合教程
  10. jmeter html 乱码,JMeter3.0图形化HTML报告中文乱码问题处理
  11. python 随机请求头_为了爬虫换个头,我用python实现三种随机请求头方式!
  12. 诺顿病毒库手工下载地址及英文补丁下载
  13. CSS中 dispaly属性详解
  14. tftpd linux,用DHCP,NFS,tftpd搭建PXE无人值守安装linux操作系统
  15. Quartz 定时任务
  16. list集合练习----斗地主
  17. Round Roundup
  18. CleanMyMac最新2020注册机
  19. 【编程训练-考研上机模拟】综合模拟1-2019浙大上机模拟(晴神)
  20. item_search - 按关键字搜索京东商品

热门文章

  1. C#语言实例源码系列-实现树形图列表
  2. 全球十大长寿食物排行榜
  3. freeswitch之入口函数
  4. 未来可期!274位博士新生入学西湖大学
  5. 计算机科学与技术新生,计算机科学与技术学院迎来2018级本科新生
  6. 计算机开机后关不了机,电脑关不了机或关机后又重启怎么样解决
  7. 小学生智能计算机怎么玩音乐,如何开发孩子的音乐智能?-520吉他网
  8. 关于Java Advanced Imaging(JAI)的一点积累
  9. 只有微型计算机使用ascii码,[转载]2012年4月网考 计算机应用基础 单选题7
  10. centos7使用Docker的详细教程