精华内容
下载资源
问答
  • 采用C#开发,将下位机发送的数据显示并绘制曲线,配套FPGA频率计下位机
  • C#上位机串口接收温度数据
  • C# 解决上位机串口接收数据丢失问题

    C# 解决上位机串口接收数据丢失问题

    参考文章:

    (1)C# 解决上位机串口接收数据丢失问题

    (2)https://www.cnblogs.com/cmblogs/p/11129313.html

    (3)https://www.javazxz.com/thread-2260-1-1.html


    备忘一下。


    展开全文
  • 为什么我用mfc写的上位机串口通讯程序每次打开只能接收一次数据,想要接收下一次的数据只能重新打开串口,小白求问大神们,用的是microsoft communications control 6.0控件。
  • 由于是第一次写上位机程序,接收数据的函数用的是别人的,这个函数public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e),它是被动响应的吗?是不是缓冲区堆不满就不会得到数据?
  • private void button_Refresh_Click(object sender, EventArgs e) { InitializeSerialSet(); // 刷新串口设置 }
  • 微信号 :thinger_swj微博:@新阁程序园扫码关注上位机软件的主要功能是采集各仪器的数据,然后存储起来,传送到环保局平台。刚开始使用的是组态软件(用以显示流程图),然后再开发了报表软件、数据上传软件。因为...
    3561f8fca8335c7902b8b022d68ded8b.gif微信号 :thinger_swj微博:@新阁程序园扫码关注 04e04fbed844351825df40364ebc53d2.png

    上位机软件的主要功能是采集各仪器的数据,然后存储起来,并传送到环保局平台。

    刚开始使用的是组态软件(用以显示流程图),然后再开发了报表软件、数据上传软件。因为组态软件使用的是标准Modbus协议,而很多仪器使用的协议根本就是自定义的,所以还要加一个协议转换软件,把各种各样的协议转换成Modbus协议,让组态软件去读。除此之外,我们还希望软件能够开机启动,就增加了延迟启动的第三方软件。

    这样一来,每个站点要安装和部署的软件非常多和杂乱。加上每个站点都有自己的特点,软件出现了大量的版本。有上位机的版本管理、升级维护时,出现了极大的麻烦,管理成本极高。很多时候会有这样一种情况,前面开发的人走了,后面就没有人能维护他的软件了。

    基于上面的情况,我和团队重新设计和开发了上位机软件,具有以下特点:

    (1)软件集组态、采集、传输、报表、自动启动等功能于一体,一台工控机只有一个上位机软件。

    (2)上位机只有一个版本,所有站点都一样。站点的不同特点通过配置文件来实现,而这个配置文件不随更新而变化。

    (3)仪器五花八门,但我们把它们归于一体,用同一个模型去表现。

    (4)在对仪器的支持和界面功能上,具有强大的扩展特性和灵活性。

    以下是部分软件界面截图:

    843470894b82a8aaca716a8d849e8560.png

    a22cc3a7e44558735957d8abfb4967df.png

    6b74a5409cf47fe50862f9e3b67d96c2.png

    仪器归一化设计

    这是具体内容的第一篇,我们先来讲述仪器的归一化设计。

    仪器是各种功能都有的,我只举我们在环境监测这方面所用到的仪器。我们要测试水是不是有污染物质,污染到什么程度,我们要测试水体的高锰酸盐指数、氨氮、总磷、总氮等值。我们的站房有一个后备电源,我们要知道市电是否断电了,是否在用备用电源。我们的站房是有空调的,我希望知道站房的温度和湿度,于是就有了一个温湿度计。我们可能还会有流量计、DTU、数字仪等仪器。这些仪器跟工控机的连接也不尽相同,有的使用串行线,有的使用网线。用网线的仪器,有的作为客户端,有的作为服务端,有的使用UDP。总之,这些仪器的通讯协议是五花八门的,通信链路也是有区别的。

    但我们需要对仪器做出归一化设计。

    其实无论仪器有什么功能,工控机对仪器的操作无非就两个:读和写。读的话,可能是读到测量的值、仪器的状态等;写的话,就是启动仪器测量、修改仪器的参数等。而读和写的操作,都是通过发送和接收完成的。虽然通信协议各不相同,但我们总是可以把发送和接收的内容转化为最基础的字节流。要发送怎样的字节流,接收到的字节流如何解释,就要根据仪器的特性去定义了。

    根据这样的特点,我们为所有仪器定义了一个基类,它包含了发送字节流和接收字节流两个方法。而所有仪器类,都继承自这个基类。

    2765c110c3cbdecd6ff24e02962fa339.png

    每个仪器特定的类,只需要完成拼装发送的字节流,和解析接收的字节流即可,它不需要理会如何发送和接收。而实际上的发送和接收,我们知道链路是有多种的,如上面提到的串行线和网线。使用哪种方式去传输,我们需要根据仪器的属性去判断。如下图所示的方法,在基类里实现。

    efce2df75086495ed29d57bfbe01968c.png

    解决了上面仪器类的结构设计以后,我们需要考虑仪器的属性如何表示和存储。我们把所有仪器都称为设备,设备包含以下内容:

    (1)名称。

    (2)传输方式,以及传输的参数。例如用串口,那应该有串口号、波特率等。如果用网线,应该有IP、端口等。

    (3)使用的通信协议。选定之后,上位机能够找到相应的通信协议类,对字节流进行操作。顺便一说,我们把通信协议类用反射的方法去做,每个协议是一个dll,选择不同的协议即会执行不同的代码。

    (4)因子列表。

    没错,说到这里,我们就发现,设备里有一个因子的概念。因子是什么?这个比较难解释。从最原始的因子来看,因子就是仪器的测量值。例如我们有一台温湿度计,它的测量值会有两个,分别是温度和湿度。我们就把温度和湿度作为两个因子。我们对因子的概念进行扩展,把状态也作为因子。例如仪器的工作状态、故障状态,都可以看作是一个个的因子。甚至,我们把控制仪器的命令,也看成是因子。例如是启动测量、更换运行模式,每一个动作都看成是一个因子。这样下来之后,仪器的所有功能,都变成了因子的列表。因子有很多属性,但不是所有因子都一样的。名称是我们想到的唯一一个共性属性。我们在实际的开发过程中,定义了几种因子:

    (1)实际因子:就是测量值。它应该有单位、超标限制、因子地址(Modbus协议)等属性。

    (2)计算因子:跟实际因子类似,只是它不是直接读取仪器值得到的,而是根据实际因子计算出来的。这样的话,计算因子就要有一个表达式的属性,例如是:温度*9/5+32

    (3)状态因子:仪器的状态。它的值不一定是数,可能是一个字符串。

    (4)反控因子:对仪器的控制命令。可以用一个数字去表示控制的类型,只需要在协议类里面解释清楚即可。

    通过上面的方法,我们把所有仪器都归一成统一的类了。

    e722ee600560943c5385eb01985a4e25.png

    欢迎关注“新阁上位机编程”抖音号

    不定期发布上位机实用小技巧哦

    快来学习互粉呀~bbcaaa9b97713b9eabae1c5151876373.png

    (长按下方图片?保存到手机相册,打开抖音扫码关注哦!相信你肯定会c045c6e21301577e8b545aa17fffcbf9.png)

    de24c87367490d08f52781848f7846c2.png

    2beb998fdac3ab04fd985f712ccc6878.gif

    展开全文
  • LabVIEW上位机串口数据接受不完整、不正常的解决方法 通常在测试、测量实验中, 使用LabVIEW做上位机的开发,串口通信是一种常用的数据传输方式。 1在传输数据较少、波特率低的情况下,通常的串口接受数据不会存在...

    LabVIEW上位机串口数据接收不完整、不正常的解决方法
    通常在测试、测量实验中, 使用LabVIEW做上位机的开发,串口通信是一种常用的数据传输方式。
    1在传输数据较少、波特率低的情况下,通常的串口接受数据不会存在问题。
    2一次性传输数据多、波特率高情况下,经常出现接受数据不完整、或者只能接受到很少一部分的数据。下面是针对这种情况的几种分析:
    (可能1):数据量太大,缓冲区需要重新设计(不常见)
          在这里插入图片描述
    可能2)接收的数据较长,没有接收完就已经结束。
    可以采用首位相接的方法,当可以达到接受数据次数时再停止。
    在这里插入图片描述
    可能3)引入适量延迟时间,比如上图中,在while循环内部,添加等待几毫秒,这种情况需要看实验情况而定。

    在这里插入图片描述

    可能4)数据还没接收完,就已经开始新一轮的数据接收:

     比如接收1920字节的一组数据,使用9600波特率传输(无校验位)。
    

    波特率9600 = 9600(位/秒)= 960(字节/秒)。
    1920/960=2s。 所以在开始接收第一组数据后,至少2s才能接收第二组数据。

    可能5)“摸索后”的终极法宝,有时候LabVIEW串口接收数据就是不正确,明明都已经检查好多程序还没有发现任何问题,还是接收数据不全。

    这时候可以使用,连续运行法。也就是串口发送与接收程序直接写在程序框图中,不需要加while循环,然后运行的时候直接点击连续运行如下图所示。
    在这里插入图片描述
    目前,笔者只总结了这几种解决方案。最后一种方法虽然无法简单解释其原因,但却是一种很灵性的方法,笔者用此方法通过采集核能谱数据实验,串口要每次有上千的数据传输,结果也十分稳定与高效(虽然代码与上有所不同,但用的是连续运行的方法)。
    在LabVIEW,串口通信如果有传输接收与发送数据不全的问题,可以留言在评论区。学无止境!

    展开全文
  • 串口接收字符串 从中提取固定位置的数据 如一组数据为 AB CD 00 00 0C 02 12 00 00 00 00 00 05 00 00 7D 0B AB 要从中 把0B7D提取出来存为时间差值 其中AB CD是标识符 尾部AB是校验 一大串数据来的话要怎么弄呢 ...
  • qt中使用串口接收数据不完整 (3)Qt5.7串口接收数据不完整因为串口本来就不是一次接收完数据,接受数据时需要判断!(4)qt5信息提示框QMessageBox用法 (5)《用QT做点什么》-3-QT串口开发入门(上) (B站视频...

    a75990eb8cff68b28ed29408e42b7666.png

    1. 相关文章汇总

    (1)QT解决串口数据接收不完整问题 (貌似贴出的代码可以存下串口接受的全部数据)

    (2)<QT障碍之路>qt中使用串口类接收数据不完整

    (3)Qt5.7串口接收数据不完整

    因为串口本来就不是一次接收完数据,接受数据时需要判断!

    (4)qt5信息提示框QMessageBox用法

    (5)《用QT做点什么》-3-QT串口开发入门(上) (B站视频教程)

    (6)QByteArray使用方法举例

    (7)Qt 字符串截取分割

    (8)QT中foreach的使用

    (9)c++: c++ 字符串解析

    (10)【STM32】使用keil提供的JSON库——Jansson

    (11)STM32F103C8T6+cJSON 妈妈再也不用担心我的串口协议了

    (12)QByteArray详解

    (13)Qt串口通信接收数据不完整的解决方法

    (14)王超:Qt小项目之串口助手控制LED

    (15)郭凤贺:Qt 多线程串口调试助手

    尤其是下面这篇文章,建议精读!

    Qt串口通信接收数据不完整的解决方法 (灿哥哥的博文,208万+的访问量)

    2. 最终解决

    在此先要感谢CSDN上认识的湖南大学计算机院的大佬!

    分析:单片机在发送完每条完整的数据后,都会发送一个 "rn",那么"n"可以看作结束标志

    ebe025b026bd9d48afdc0eca2ef89e45.png
    单片机在每条数据的最后发送的&quot;rn&quot;

    单片机上传数据的视频

    7d9a9cef5804b3eb76b0b9b2f0391da3.png
    单片机每条完整的数据包含5个数https://www.zhihu.com/video/1188488474184073216

    思路:将"n"作为结束标志,以判断是否接收到一个完整的数据。

    1af568702097e6126edd48c5bce28003.png

    由上述思路——>具体实现代码:

    //缓冲区
    

    将上面的代码融合到培培哥串口上位机的程序中,得到了全新一代的串口上位机

    a8a0da443ffde4aaeb576362a29d2729.png
    接收到完整的5个数据https://www.zhihu.com/video/1188504947413704704

    未完待续~

    ——20191212

    展开全文
  • 手把手教你做stm32简易串口上位机接收数据用)

    千次阅读 多人点赞 2020-06-21 17:48:21
    单片机相关串口的程序就不讲解,编写上位机程序是使用C++语言,在VS2017里面编写,下面进入正题。 一、相关知识 大家可以先参考一下这篇blog,C++串口通信里面详细讲解了C++串口的相关知识,以及一些函数的讲解。 ...
  • STM8S通过串口接收上位机发送的数据,将数据写入到M25P16中.rar 自己移植到了STM8S007. 参考了https://blog.csdn.net/qq_41906031/article/details/108266629
  • 颜色传感器调试软件使用说明: 1、若不能直接使用,请先自行安装 .net framework...4、软件显示的刷新速率由下位机发送数据速度决定,每收到0x55和RGB值即刷新一次。 5、正确使用的情况下,软件可以实时显示RGB的值,
  • 用c#编写的上位机软件实时接收串口数据,用dataGridView显示所读取的数据写入TXT, 用chart把数据绘制成波形,有放大缩小功能(功能有待完善),chart有两条游标。资源如有不足请留言指教。
  • 由于是与单片机通信,需要以十六进制发送数据,为了验证在接收函数中把接收到的数据转换为十六进制显示接收buf 1 之前定义为char型,比如发送1ABa,接收应该显示0x1a 0xba,但是实际接收显示的是0x1a 0xffffffba。...
  • 关于mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题
  • VC上位机MFC利用串口控件发送接收数据
  • 本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键-》点击插入ACTIVAE控件-》选择MicrosoftCommunications Control, version 6....
  • 过程:c# 上位机发送指令,称重显示控制器(XK3190-A9+)会返回数据,收到数据即可。 问题:上位机发送指令无反应。可能是我发送的数据格式不对。 byte[] cmd = new byte[6] { 0x02,0x41,0x44,0x30,0x35,0x03}...
  • VC上位机MFC利用串口控件发送接收数据

    万次阅读 热门讨论 2016-01-05 10:02:09
    经过这两天的调试,基本上搞定了dsp和机器人上位机界面,先记录下我的上位机。  实验室是做机器人控制的,经常会用到上位机,我只搞过...串口发送和接收数据,2.手柄扫描(因为实验室用手柄来遥控机器人,扫描到手
  • 上位机WIN32平台,开启了一个线程用来读串口数据,又有一个单独的现成用来保存串口数据,可是经测试发现,例如我要保存8k数据也就是1s的数据,那保存数据的时间间隔也应该是1s,可是测试的却不是1s,远远小于1s,...
  • CVI串口通讯上位机(PC)接收数据--下位机(单片机)发送数据。
  • 采用C++ MFC实现基于串口上位机数据采集系统,能采集多路数据并绘制图像,
  • C# 上位机串口调试工具实时显示

    千次阅读 多人点赞 2017-04-27 09:31:20
    最近在忙着做一个上位机PC软件,功能是能够正常接收串口传输来的数据并解析这些数据中对我们有用的数据,另外,为了更加直观的观察这些数据代表的意义,我们还有一个目的就是讲这些数据实时地绘画出来,也就是动态...
  • 首先已经编写完了上位机接收数据的程序也实现了在textbox控件中实时显示但是传上来的数据是一组xy坐标值我想如何可以在两个textbox控件中分别显示xy也就是把一组数据分开。因为后面还要利用xy值作图。目前我只能把xy...
  • 串口发送的数据上位机接收,然奇偶用vc++编程实时显示数据曲线

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,186
精华内容 2,874
关键字:

上位机串口接收数据并显示