上位机采用Labwindows/CVI编写,下位机采用RTX64实时系统编写,上位机和下位机通过共享内存通讯,下位机控制周期是1ms,上位机保存的数据为TDMS格式,可以通过NI Diadem软件进行各种分析和处理。

最近在项目中涉及到上位机与下位机的通讯以及数据处理,过程还挺有意思的,来跟大家分享一下。

上位机我们采用Labwindows/CVI编写,这是一款功能强大的开发环境。Labwindows/CVI提供了丰富的函数库和直观的界面设计工具,让我们可以方便地构建出符合需求的上位机应用程序。

下位机则采用RTX64实时系统编写。RTX64实时系统能够确保高精度的实时控制,对于需要严格控制周期的应用场景非常合适。我们设定下位机的控制周期是1ms,这就要求系统具备高效稳定的性能。

上位机采用Labwindows/CVI编写,下位机采用RTX64实时系统编写,上位机和下位机通过共享内存通讯,下位机控制周期是1ms,上位机保存的数据为TDMS格式,可以通过NI Diadem软件进行各种分析和处理。

上位机和下位机通过共享内存通讯,这种方式效率高且速度快。下面简单展示一下在Labwindows/CVI中如何实现共享内存通讯的部分代码示例:

#include <ansi_c.h>
#include <windows.h>

#define SHM_SIZE 1024

// 共享内存句柄
HANDLE hMapFile;
// 指向共享内存的指针
LPVOID lpMapAddress;

// 打开共享内存
void OpenSharedMemory() {
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // 使用系统分页文件
        NULL,                    // 默认安全属性
        PAGE_READWRITE,          // 可读可写
        0,                       // 高位大小
        SHM_SIZE,                // 低位大小
        TEXT("MySharedMemory")   // 共享内存名称
    );
    if (hMapFile == NULL) {
        printf("CreateFileMapping failed: %d\n", GetLastError());
        return;
    }
    lpMapAddress = MapViewOfFile(
        hMapFile,                // 共享内存句柄
        FILE_MAP_ALL_ACCESS,     // 所有访问权限
        0,                       // 偏移量高位
        0,                       // 偏移量低位
        SHM_SIZE                 // 映射大小
    );
    if (lpMapAddress == NULL) {
        printf("MapViewOfFile failed: %d\n", GetLastError());
        CloseHandle(hMapFile);
        return;
    }
}

// 关闭共享内存
void CloseSharedMemory() {
    if (lpMapAddress != NULL) {
        UnmapViewOfFile(lpMapAddress);
    }
    if (hMapFile != NULL) {
        CloseHandle(hMapFile);
    }
}

这段代码主要实现了打开和关闭共享内存的功能。CreateFileMapping函数用于创建共享内存对象,MapViewOfFile函数则将共享内存映射到进程的地址空间中,方便我们进行读写操作。

上位机保存的数据为TDMS格式,这种格式非常适合存储和管理大量的测量数据。NI Diadem软件可以对TDMS格式的数据进行各种分析和处理。通过NI Diadem,我们可以方便地查看数据的波形、进行统计分析、生成报表等等。

在整个系统中,下位机以1ms的周期稳定运行,实时采集和处理数据,并通过共享内存将数据传递给上位机。上位机接收到数据后,以TDMS格式保存下来,方便后续使用NI Diadem软件进行深入分析。这种架构设计使得整个系统既能够满足实时性要求,又具备强大的数据处理和分析能力。

总之,通过Labwindows/CVI编写上位机、RTX64实时系统编写下位机,并结合共享内存通讯和TDMS数据格式,我们成功构建了一个高效稳定的数据采集与处理系统。希望这些经验分享对大家有所帮助呀!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐