搜索
bottom↓
回复: 37

labview怎么把接收的字符串转成数据再显示出来?

[复制链接]

出0入0汤圆

发表于 2018-9-14 17:03:03 | 显示全部楼层 |阅读模式
目前串口发出来的数据是这样子的

    20366             12445                77                14
    20359             12441                76                16
    20358             12444                76                15
    20355             12443                78                11
    20357             12443                76                13
    20354             12442                79                17

每一行有四个数据,每个数据后又空格和\t,结尾有\r\n。这些都是串口调试助手接收显示的字符,想用labview接收这些数据再用滤波处理一下。网上说labview很容易,装了一个看了几个例子感觉要完成这个功能也不是一天两天能学会的。看着这一圈一圈的图真的不如c语言好懂。
请labview熟手指点一下。谢谢。

出0入0汤圆

发表于 2018-9-14 17:07:31 来自手机 | 显示全部楼层
读取,提取十进制,波形图表显示

出0入4汤圆

发表于 2018-9-14 17:54:13 | 显示全部楼层
如果只有一行,最简单的方法使用,扫描字符串字符串格式"%f%f%f%f"(如果是整数还可以%d%d%d%d)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2018-9-14 18:14:56 | 显示全部楼层
本帖最后由 sniper.q 于 2018-9-14 18:25 编辑

NI VISA在配置RS232时可以启用结束符, 这样VISA在遇到换行符时自动读取一行(字节总数要大一点, 否则如果在读到换行符前到达了字节总数, VISA就会直接返回了)
如果你的是多行一起处理可以这样:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-9-14 18:39:17 | 显示全部楼层
EZ 有专门的VI做这事。。LV最大的好处是很多VI不需要自己写的。

出0入0汤圆

 楼主| 发表于 2018-9-14 19:54:25 | 显示全部楼层
sniper.q 发表于 2018-9-14 18:14
NI VISA在配置RS232时可以启用结束符, 这样VISA在遇到换行符时自动读取一行(字节总数要大一点, 否则如果在 ...

大神好牛啊
能否把vi传上来
谢谢!!!

出0入0汤圆

 楼主| 发表于 2018-9-14 19:54:48 | 显示全部楼层
bg6agf 发表于 2018-9-14 18:39
EZ 有专门的VI做这事。。LV最大的好处是很多VI不需要自己写的。

大神,EZ是什么?   

出0入0汤圆

 楼主| 发表于 2018-9-14 19:58:37 | 显示全部楼层
阿豪博士 发表于 2018-9-14 17:07
读取,提取十进制,波形图表显示

大神,你这样的回答对于会labview的同学来说可能就知道怎么做了,我是完全不明白您在说什么,不对,是明白,我知道怎么用C语言实现。

出0入4汤圆

发表于 2018-9-14 20:24:26 | 显示全部楼层
本帖最后由 sniper.q 于 2018-9-14 21:12 编辑
huy666 发表于 2018-9-14 19:54
大神好牛啊
能否把vi传上来
谢谢!!!


你的Labview版本是多少, 我怕我的版本比你高打不开,附件是2014版的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2018-9-14 21:23:45 | 显示全部楼层
bg6agf 发表于 2018-9-14 18:39
EZ 有专门的VI做这事。。LV最大的好处是很多VI不需要自己写的。

是的, 用Labview可以避免自己造轮子, 而且自己造的轮子还没别人的圆, 反正工控上比C,C#方便多了

Labview效率低  - 电脑CPU都多核了,慢那是你们该换电脑了
Labview Runtime, VISA Runtime, CVI, IVI导致安装文件大 - DVD盘绝对装得下, 买软件送U盘, 出钱多还可以送固态移动硬盘

出0入0汤圆

 楼主| 发表于 2018-9-15 00:24:47 | 显示全部楼层
sniper.q 发表于 2018-9-14 20:24
你的Labview版本是多少, 我怕我的版本比你高打不开,附件是2014版的

多谢
好好消化一下
我的是2017能打开运行,但是运行后数据到下面一个二维数组里了,没有到数组1~数组4里面。

出0入0汤圆

发表于 2018-9-15 08:56:15 来自手机 | 显示全部楼层
huy666 发表于 2018-9-14 19:54
大神,EZ是什么?

ez 是easy  你说的功能就在labview的自带库里…搜索一下…翻翻帮助就知道怎么用了

出0入0汤圆

发表于 2018-9-15 08:57:10 来自手机 | 显示全部楼层
实际上…用lv最常用的一个操作就是…翻帮助和例程

出0入0汤圆

 楼主| 发表于 2018-9-15 10:29:51 | 显示全部楼层
帮忙看看这个程序,我的为什么只有COM1~COM5,而不是列出可用串口。
https://www.amobbs.com/forum.php ... ;page=1#pid10392780
在框图界面是可以列出的。在面板界面不行,运行也不行。

出0入0汤圆

 楼主| 发表于 2018-9-17 18:49:33 | 显示全部楼层
在上面程序的基础上改了一下数据出来了,但是波形还有问题,请看图片。
因为串口过来的数据是一个一个过来的,所以数组2,数组3里中间会有几个0,造成波形显示中间有零,不连续。怎么解决这个问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-9-17 18:55:03 | 显示全部楼层
改过的程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-9-18 14:44:36 来自手机 | 显示全部楼层
bg6agf 发表于 2018-9-14 18:39
EZ 有专门的VI做这事。。LV最大的好处是很多VI不需要自己写的。

大神,能否帮忙看一下。

出0入0汤圆

 楼主| 发表于 2018-9-18 14:45:08 来自手机 | 显示全部楼层
sniper.q 发表于 2018-9-14 20:24
你的Labview版本是多少, 我怕我的版本比你高打不开,附件是2014版的

大神,能否帮忙看一下。

出0入0汤圆

发表于 2018-9-18 16:49:30 | 显示全部楼层
附件版本是2017的, 打不开. 保存到2015或以下, 我来看看

出0入4汤圆

发表于 2018-9-18 18:22:25 | 显示全部楼层
我目前的电脑无法打开2017的.
只能给你建议:
按你的程序框图理解: 每隔50mS从串口取值,然后直接处理.
但是你无法保证, 这50mS内读取的数据是完整的一行, 直接使用电子表格字符串到整数数组的转换必然会有0的出现.
两个解决方法:
1. 读取的字符串先进缓冲区, 缓冲区的字符串检查到结束符(你1楼说的\r\n)后截取结束符前字符串再加入接收区进行处理.
2. 按我前面说的, 直接使用VISA 串口的结束符功能, VISA可以自动接收一行.

第二种方法更简单

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-9-18 22:50:03 | 显示全部楼层
今天一直在外面。转存了14版本,现在上传,但是一直显示上传中。。。不知是哪儿的问题。

出0入0汤圆

 楼主| 发表于 2018-9-18 22:57:26 | 显示全部楼层
14版本         

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-9-18 23:00:50 | 显示全部楼层
EE_Duan 发表于 2018-9-18 16:49
附件版本是2017的, 打不开. 保存到2015或以下, 我来看看

终于发上来了

出0入0汤圆

 楼主| 发表于 2018-9-18 23:08:52 | 显示全部楼层
sniper.q 发表于 2018-9-18 18:22
我目前的电脑无法打开2017的.
只能给你建议:
按你的程序框图理解: 每隔50mS从串口取值,然后直接处理.

谢谢回复

您说的第一种办法更有用,因为实际应用中会需要解析串口的内容。
怎么做到把数据放到缓冲区,再分析有没有特殊的字符(\d\n)?有时后还要分析帧头,帧尾,再计算校验和。

出0入4汤圆

发表于 2018-9-18 23:23:42 | 显示全部楼层
huy666 发表于 2018-9-18 23:08
谢谢回复

您说的第一种办法更有用,因为实际应用中会需要解析串口的内容。

如果你会正则表达式的话, 匹配模式,匹配正则表达式, 搜索, 搜索/拆分都可以完成字符串的分割

出0入0汤圆

 楼主| 发表于 2018-9-18 23:28:53 | 显示全部楼层

搜到一篇文章,消化中。
https://wenku.baidu.com/view/baad54ada5e9856a57126019.html

出0入4汤圆

发表于 2018-9-18 23:38:36 | 显示全部楼层
学习labview最快的方法是看帮助
帮助自带有范例
如果你要学习Labview, 可以给你介绍几个网站:
NI官方论坛,官方教学视频就不说了
英语好的可以看看: https://lavag.org/
MGI库: mgi.gitlab.io
中文的
电子发烧友的labview论坛: http://bbs.elecfans.com/zhuti_labview_1.html
gsdzone: http://bbs.gsdzone.net
labviewpro(台湾的Labview论坛): https://www.labviewpro.net/
中文的Labview基本没什么人气了, 我刚学Labview那会人气都还挺旺的, 现在这几个论坛的技术贴大多是老帖子

出0入0汤圆

 楼主| 发表于 2018-9-18 23:38:50 | 显示全部楼层
sniper.q 发表于 2018-9-18 23:23
如果你会正则表达式的话, 匹配模式,匹配正则表达式, 搜索, 搜索/拆分都可以完成字符串的分割 ...

多谢!
现在还不会正则表达式。
就目前的问题,我现在是要接收四个数据,每个后面有空格和\t,最后一个后面有\d\n。这四个数据是一个一个发过来的,大概每个数据间隔300毫秒左右时间。我拿到四个数据后,第一个减去第三个,第二个减去第四个这样得到两组数。然后把这两组数画成两条曲线。然后还要对两组数进行FIR滤波和FFT处理后再显示出波形。
这样的问题有什么更好的解决思路吗?
数组怎样限制大小,比如每个数据值存1000个数据,满了之后就把最前面的数据挤出去,这样怎么实现?

出0入0汤圆

 楼主| 发表于 2018-9-18 23:42:30 | 显示全部楼层
sniper.q 发表于 2018-9-18 23:38
学习labview最快的方法是看帮助
帮助自带有范例
如果你要学习Labview, 可以给你介绍几个网站:

看着这一圈一圈的程序框图就晕了。是不是学labwindows/cvi更容易些,据说是用C语言编程。

出0入0汤圆

发表于 2018-9-18 23:59:50 | 显示全部楼层
建议 不要再用这样的语言  包括labwindows/cvi  我labview  labwindows/cvi 都用过,但是现在用C#  感觉方便了好几倍
1.编译器高级,跳转查找 太方便
2.语言高级,不同类型变量自动提示 等等
3.资料丰富,后续可学习性强, lab系列 应用范围太窄,后期不用就放弃了

出0入0汤圆

 楼主| 发表于 2018-9-19 00:08:41 来自手机 | 显示全部楼层
Name_006 发表于 2018-9-18 23:59
建议 不要再用这样的语言  包括labwindows/cvi  我labview  labwindows/cvi 都用过,但是现在用C#  感觉方 ...

这样是好,但没有lab系列上手快啊。比如波形显示、FIR、FFT都有现成模块,拉过来就可以了。C#要复杂不少。

出0入0汤圆

 楼主| 发表于 2018-9-20 13:04:24 | 显示全部楼层
sniper.q 发表于 2018-9-18 18:22
我目前的电脑无法打开2017的.
只能给你建议:
按你的程序框图理解: 每隔50mS从串口取值,然后直接处理.

您好!
1. 读取的字符串先进缓冲区, 缓冲区的字符串检查到结束符(你1楼说的\r\n)后截取结束符前字符串再加入接收区进行处理.
这一步要用什么模块来做?

出0入4汤圆

发表于 2018-9-20 20:49:35 | 显示全部楼层
huy666 发表于 2018-9-20 13:04
您好!
1. 读取的字符串先进缓冲区, 缓冲区的字符串检查到结束符(你1楼说的\r\n)后截取结束符前字符串再 ...

使用匹配模式, 在缓冲区的字符串中搜索结束符, 自动按结束符分割为三部分: 结束符之前, 结束符, 结束符之后
附件为简单使用队列状态机模拟你收数据分割的例子.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2018-9-20 21:01:07 | 显示全部楼层
sniper.q 发表于 2018-9-20 20:49
使用匹配模式, 在缓冲区的字符串中搜索结束符, 自动按结束符分割为三部分: 结束符之前, 结束符, 结束符之 ...

谢谢
我今天用Match Pattern Function ,regular expression 那里写\n,每次只检测出第一行。下班关掉的时候又没有保存....

您给的方案我要消化一下,比我想象的复杂。

出0入0汤圆

发表于 2018-9-20 22:04:12 来自手机 | 显示全部楼层
sniper.q 发表于 2018-9-14 21:23
是的, 用Labview可以避免自己造轮子, 而且自己造的轮子还没别人的圆, 反正工控上比C,C#方便多了

Labview ...

应该送电脑

出0入4汤圆

发表于 2018-9-20 23:25:18 | 显示全部楼层

我们的系统配置里有工业电脑, 只要你出钱, 一样可以"送"

出0入4汤圆

发表于 2018-9-20 23:42:21 | 显示全部楼层
huy666 发表于 2018-9-20 21:01
谢谢
我今天用Match Pattern Function ,regular expression 那里写\n,每次只检测出第一行。下班关掉的 ...

不复杂, 我只是使用消息状态机用按键来模拟你的接收数据和数据处理而且,其实就是使用你说的是一样的.

Labview的特性就是每个并行的一段程序就是一个线程, Labview自动回收.
所以在使用Labview的中初级阶段或制作简单的程序时, 可以很容易使用消息状态机实现MVC之类的架构.(不是很大型的软件使用actor框架很麻烦, 反正这么多年了actor框架也是半桶水不太会用)
为了响应速度快可以: 一个独立的循环专门处理UI事件或进行及时的通讯数据的接收, 将事件和数据通过Labview的消息处理器发送到并行循环中进行相应的处理

出0入0汤圆

 楼主| 发表于 2018-9-21 12:26:29 | 显示全部楼层
sniper.q 发表于 2018-9-20 23:42
不复杂, 我只是使用消息状态机用按键来模拟你的接收数据和数据处理而且,其实就是使用你说的是一样的.

La ...

好高深的样子
其实我是验证一些想法,最后产品没有上位机程序。
估计用matlab来验证更合适,据说滤波器什么的调好后能直接生成c程序,直接在单片机里用。
要学的东西还很多!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 11:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表