渊源

大一的时候,学校开了门公共选修课,叫LabVIEW编程,当时的我当然还不知道LabVIEW是啥东东,但还是选了。上课的老师是机械学院的一个副教授。他给我们展示了好几个用LabVIEW做的项目。譬如油箱监控上位机等,已经不太记得了。

后来随着学习单片机、ARM等的串口操作。有时候一个美丽的上位机(尤其是能显示波形的上位机)在项目中给用户展示非常的实用。过了这么多年,尽管以前也用LabVIEW写过简单的温度监控上位机。但这次再拿起LabVIEW又好像从头開始一样,语法几已忘记殆尽。

定义通信格式及功能

由于数据不算复杂,所以定义简单下位机帧格式:

帧头(0xAA) 类型字节 数据低8位 数据高8位 保留字节1 保留字节2 校验字节

假设要传送的数据比較多/复杂。则能够參考ModuleBus协议!

主要功能包含:

  • 对帧中的类型字节进行解析,并多通道显示在示波器上
  • 帧偏差校正(这个一般人可能都没有做,造成数据丢失,而我这仅仅要串口传输的数据没错。就能无错漏的解析每一帧)
  • 实时显示读取的每一个字节/双字节/4字节
  • 信号保存,保存文件名称自己主动按时间命名,适合查阅
  • 信号回放
  • 对信号进行解析。用指示灯显示

界面展示

程序关键点展示

上面尽管简单,但却是功能的最主要部分。包含帧头查找和错帧处理的程序。错帧发送的情况是:比方从串口中独到的帧并非从帧头開始而是帧中间開始。如

0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00

其前面一帧可能是这样:

... 0xAA(帧头) 0x01(类型) 0x01(数据)

这样。按查找帧头的方法,数据0x12就会丢失,实际数据按理应该是0x02*256+0x01。错帧处理就是将上一帧尾部不足一帧的部分加到下一帧中,这样下一帧就变成了:

0xAA(帧头) 0x01(类型) 0x01(数据) 0x12(数据) 0x00 0x00 0x00 0xAA(帧头) 0x00

推断类型过程非常easy,使用switch结构即可了(LabVIEW中就是条件结构同一时候实现了if和switch),编程时就是注意必须设置默认分支即可!

文件保存我使用了数据表,由于它确实简单,这里的亮点是添加了按时间保存的功能,相当于将时间字符串添加到文件名称中。这样便于后期对採集的数据进行查找,不至于混乱。

波形回放就是将存储在数据表中的程序又一次显示一遍。比較简单!

到如今为止,完整的程序请到https://github.com/xiahouzuoxin/zxSerial下载!

仅供研究使用,谢谢!

LabVIEW上位机与串口通信的更多相关文章

  1. 10-ESP8266 SDK开发基础入门篇--上位机通过串口控制ESP8266灯亮灭

    https://www.cnblogs.com/yangfengwu/p/11087618.html 其实这一节就是对上三节的综合测试 https://www.cnblogs.com/yangfeng ...

  2. VC++编写简单串口上位机程序

    VC++编写简单串口上位机程序   转载: http://blog.sina.com.cn/s/articlelist_1809084904_0_1.html VC++编写简单串口上位机程序 串口通信 ...

  3. labview与单片机串口通信

    labview与单片机串口通信   VISA是虚拟仪器软件体系结构的缩写(即Virtual Instruments Software Architecture),实质上是一个I/O口软件库及其规范的总 ...

  4. 9-ESP8266 SDK开发基础入门篇--编写串口上位机软件

    https://www.cnblogs.com/yangfengwu/p/11087613.html 页面修改成这样子             现在看串口发送数据 点击点亮 发送0xaa 0x55 0 ...

  5. 嵌入式02 STM32 实验07 串口通信

    STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...

  6. CC2530串口通信

    任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX). RX:接收数据串行输入.通过采样技术来区别数据和噪音,从而恢复数据. TX :发送数据输出.当发送器被禁止时,输出引 ...

  7. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

  8. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  9. C#做一个简单的进行串口通信的上位机

    C#做一个简单的进行串口通信的上位机   1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是 ...

随机推荐

  1. Revit API得到类别Category设置类别可见性

    start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class c ...

  2. .Net Discovery 系列之一--string从入门到精通(上)

    string是一种很特殊的数据类型,它既是基元类型又是引用类型,在编译以及运行时,.Net都对它做了一些优化工作,正式这些优化工作有时会迷惑编程人员,使string看起来难以琢磨,这篇文章分上下两章, ...

  3. XPath and TXmlDocument

    XML example, from the OmniXML XPath demo: <?xml version="1.0" encoding="UTF-8" ...

  4. Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第五篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  5. poi workbook转成流

    try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); workbook.write(bos); byte[] barray = ...

  6. C#编程(七十)----------dynamic类型

    原文链接 : http://blog.csdn.net/shanyongxu/article/details/47296033 dynamic类型 C#新增了dynamic关键字,正是因为这一个小小的 ...

  7. C#编程(六十四)----------并行扩展

    并行的扩展 扩展1. Parallel的使用: 在Parallel下面有三个常用的方法Invoke,For,ForEach Parallel.Invoke()方法是最简单,最简洁的将串行的代码并行化. ...

  8. C#编程(四十六)----------正则表达式

    正则表达式 1.定义一个Regex类的实例 Regex regex=new Regex(“”); 这里初始化参数就是一个正则表达式,”\d”表示配置数字 2.判断是否匹配 判断一个字符串,是否匹配一个 ...

  9. python测试开发django-16.JsonResponse返回中文编码问题

    前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...

  10. svn各种箭头的含义

    黄色感叹号(有冲突):      有冲突了,冲突就是你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许 你提交,防止你的提交覆盖了 ...