设为首页收藏本站
查看: 550|回复: 1

【米尔瑞萨RZ/G2L开发板-创新应用】+基于以太网的高速数据采集和展示系统

[复制链接]

2

主题

4

回帖

146

积分

注册会员

积分
146
我爱下载 发表于 2023-9-5 08:45:06 | 显示全部楼层 |阅读模式
本帖最后由 我爱下载 于 2023-9-5 11:36 编辑
基于以太网的高速数据采集和展示系统
1.   系统概述
高速数据采集系统由采集单元,交换机,数据核心(MYB-YG2LX评估板)组成,可以通过PC机的浏览器查看数据核心的web数据展示输出。
数据采集系统的基本结果如下图:
1.jpg

采集系统的设计目的是利用MYB-YG2LX评估板作为数据采集核心,并完成数据计算和结果展示。数据采集系统为了提高数据采集的效率,采用linux系统下libpcap技术,利用以太网链路层完成数据侦听和过滤。数据采集系统同时利用redis数据库作为数据结果存储和共享,利用node-red作为数据展示终端构建而成。
         设计采集单元采用单片机为核心,通过电压互感器采集输入的交流电压信号,采样频率为3.2KHz。采集单元每间隔1s采集100ms的数据,并使用单片机集成的以太网接口将采集到的数据发送到数据采集中心。
2.   数据采集系统实现2.1.  数据采核心实现
2.1.1.    libpcap的交叉编译和部署2.1.2.    redis的交叉编译和部署
redis是一个完全开源,遵守BSD协议的key-value数据库存储系统redis具有极高的性能,读的速度是110000/s,写的速度是81000/s 。丰富的数据类型,包括string(字符串)list(链表)set(集合)zset(sorted set --有序集合)hash(哈希类型)。这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。redis支持数据的持久化,可将数据库中的内容写入磁盘,重启后在导入到数据库中。也支持数据备份。
选择它的还有一个重要原因,它提供了JavaC/C++C#PHPJavaScriptPerlObject-CPythonRubyErlang等客户端操作接口,对于应用程序开发也是非常的方便。
交叉编译
源代码下载
官网现已提供redis-7.2.0发布版,可以下载源代码备用。下载地址:http://download.redis.io/releases/
编译
编译过程还是比较顺利的。我是在ubuntu22.0464位系统上完成的。
第一步:解压源码
                   tarxzf redis-7.2.0.tar.gz
第二步:编译准备
                   为了可以正确的编译redis,首先必须先要编译一下目录下的deps文件夹下的几个组件,要不编译的时候可能提示缺少静态库的支持。
                   编译的命令,因为要支持RZG2L,所以需要米尔的SDK中的编译器。具体操作参见文档《MYD-YG2LX_Linux软件开发指南.pdf》中的相关章节。
进入deps目录中,执行
                   makehiredis linenoise lua
编译结束后回到redis-7.2.0的主目录下,执行真正的编译过程
                   makeMALLOC=libc
正常情况下可以编译我们需要的所有文件了。
第三步:导出执行文件
                   make  install PREFIX=~/redis-install
执行完后,在redis-install目录中存储了可以使用的所有可执行文件了。
部署
redis-install目录下的所有文件打包后复制到评估板上。在bin目录下包含了redis的执行文件,将这些文件复制到/usr/local/bin中。
2.jpg
复制源码目录中的redis.conf文件到/usr/local/bin目录中,编辑该文件,调整如下几步:
87行,增加bind 0.0.0.0
113行,将protected-mode 调整为 no
保存。
执行的时候要注意,需要指定redis.conf的路径。
         redis-server/usr/local/bin/redis.conf
执行后redis-server会自动进入守护进程方式。
客户端操作实现
在编译redis时,需要编译deps目录下的hiredis,整个就是基于C操作的客户端库文件。默认为静态库应用方式。
使用的基本方法为:
连接建立
  1. struct timeval timeout = { 1, 500000 }; // 1.5 seconds
  2.     c = redisConnectWithTimeout(hostname, port, timeout);
  3.     if (c == NULL || c->err) {
  4.         if (c) {
  5.             printf("Connection error: %s\n", c->errstr);
  6.             redisFree(c);
  7.         } else {
  8.             printf("Connection error: can'tallocate redis context\n");
  9.         }
  10.         return (-1);
  11.     }
复制代码


执行操作命令
    reply = redisCommand(c,"DELharm");
    freeReplyObject(reply);
redisCommand参数中的字符串即为操作命令,如上命令为删除键值为harm的数据。
2.1.3.    fftw频谱分析库的交叉编译
FFTW 是一个 C 语言的快速傅立叶变换库。它包括复数,实数,对称的,多层面的,和并行转换,并且可以处理任意大小的 efficiently.It 阵列通常比其他免费提供的FFT 实现更快。为了实现这一性能,它使用新的代码生成和运行时的自我优化技术。
FFTW编译出的库可以支持单精度浮点数,双精度浮点数等,所提供的库上会有明显的区别。
         交叉编译:
         源码下载。http://www.fftw.org/
工具链路径。   source  /opt/yg2lx/environment-setup-aarch64-poky-linux
工程配置。
./configure --enable-single --enable-neon--prefix=/home/ubuntu/myprog/yg2lx-sdk/fftw-3.3.10/__install  --host=arm-linux  --target=arm-linux   --disable-fortran  --enable-threads
经过编译和安装后,可以在安装目录下看到所有的库文件及头文件。
3.jpg
基本使用方法:
         将生成的库文件和头文件复制到应用程序工程目录下,将库文件的引用增加到Makefile中。
这是一个1d的fft运算的基本使用方法。
  1. int fft_process(float indata[], float outdata[])
  2. {
  3.     int n = 256;
  4.     fftwf_complex* in;
  5.    fftwf_complex* out;
  6.     in= (fftwf_complex*)fftwf_malloc(n * sizeof(fftwf_complex));
  7.    out = (fftwf_complex*)fftwf_malloc(n * sizeof(fftwf_complex));

  8.     // 数据填充
  9.     for(int i=0; i< n; i++)
  10.     {
  11.        in[0] = indata;
  12.        in[1] = 0;
  13.     }
  14.    fftwf_plan plan = fftwf_plan_dft_1d(n, in, out,FFTW_FORWARD, FFTW_ESTIMATE);
  15.     fftwf_execute(plan);
  16.     fftwf_destroy_plan(plan);
  17.     for(int i=0; i< n/2; i++)
  18.     {
  19.        float val = sqrt(out[0] * out[0] + out[1] * out[1]);
  20.        val = val / (n / 2);      
  21.        outdata = val;
  22.     }
  23.     fftwf_free(in);
  24.     fftwf_free(out);
  25.     return 0;   
  26. }
复制代码


2.1.4.    nodejsnode-red的部署
1、  nodejs的部署
下载nodejs基于arm64的预编译文件就可以。地址为:https://nodejs.org/en/download
4.jpg
将下载的安装文件node-v1.8.17.1-linux-arm64.tar.xz解压到/usr/local中,并建立软件链接到/usr/local/bin中。
  1. ln –s /usr/local/node-v1.8.17.1-linux-arm64/bin/node  /usr/local/bin
  2.          ln –s /usr/local/node-v1.8.17.1-linux-arm64/bin/npm  /usr/local/bin
复制代码

然后分别执行node –v 和npm –v 检查安装情况:
5.jpg
2、  node-red安装
nodejs安装完成后,需要连接网络完成node-red的安装,wifi连接部分可以参考《MYD-YG2LX_Linux软件评估指南.pdf》中的相关章节。
※测试中发现,采用cnpm的方式安装node-red会失败,所以还是采用npm来安装
npm install -g --unsafe-perm node-red

可以正确的安装。
3、  node-red组件的安装
运行node-red 后,我们可以在浏览器打开 //本机IP:1880 启动node-red的编辑环境。需要通过包安装管理工具,安装node-red-contrib-redis和node-red-dashboard这两个包。分别用来访问redis数据库和实现web显示界面。
6.jpg
4、  基于node-red显示内容的开发
1)  数据获取
通过redis cmd组件,从redis数据库中读取由采集核心程序写入的数据。
7.jpg
读取波形数据处理过程:
8.jpg
         读取计算结果数据处理过程:
9.jpg
10.jpg
2)  显示内容
显示界面利用dashboard控件来完成,主要使用两种类型控件,一种为text控件,另一种为template控件。
11.jpg
         波形显示部分利用dashboard中template控件采用echarts的第三方库来实现。具备局部放大,还原,图形导出等功能。
2.2.  采集单元的仿真实现
由于一些原因,采集单元并没有实际的装置可以完成测试。因此这里利用QTwindows上,采用winpcap库实现采集单元的模拟。
12.jpg
软件主要完成端口管理,波形数据文件仿真生成,数据发送等主要功能。
2.3.  结果展示
视频展示
QT实现的仿真数据终端代码和执行文件:
仿真数据终端.rar (1.05 MB, 下载次数: 108)
Linux系统数据收集和处理代码和执行文件: 数据采集程序和执行文件.rar (1.6 MB, 下载次数: 116)

回复

使用道具 举报

2

主题

4

回帖

146

积分

注册会员

积分
146
 楼主| 我爱下载 发表于 2023-9-5 08:49:55 | 显示全部楼层
在redis数据库的调试过程中,还有个不错的软件 treeNMS, 这个软件应该是国内的软件,对于数据库的管理非常方便
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-5-13 13:27 , Processed in 0.057438 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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