LabVIEW重构其他语言开发的旧系统
在面对一个运行已久、代码不清晰的项目时,如果该项目涉及复杂的通讯协议(如串口和488通讯),重新开发并优化成LabVIEW版本可以极大提升系统的易用性和维护性。为了确保通讯协议的顺利解析和移植,借助专业工具分析现有通讯协议并逐步优化系统架构是关键。本文将从多角度提供具体建议,包括协议分析、代码架构优化、硬件兼容性测试等,帮助顺利完成软件重构。
具体建议:
-
使用协议分析工具
要解析现有软件的通讯协议,可以使用串口监视工具(如Serial Port Monitor、Docklight)或专门的GPIB协议分析工具(如NI Trace Analysis Tool)。这些工具可以捕获和解析通讯数据,帮助理解当前系统中的通讯协议。逐步重构并优化系统架构
在将旧系统迁移至LabVIEW时,建议先从关键通讯部分入手,将现有的串口或488通讯协议用LabVIEW实现。通过LabVIEW内置的串口通信VIs或NI-488.2驱动来替代原系统中的通讯模块,这样可以减少出错风险,同时提高开发效率。GPIB协议分析工具详解
GPIB(通用接口总线,General Purpose Interface Bus)是广泛应用于仪器和设备之间的通讯协议,尤其在测试和测量设备中。为了分析和抓取GPIB通讯协议,使用专业的GPIB协议分析工具是非常关键的一步。以下是对GPIB协议分析工具的详细介绍、如何抓取通讯协议的方法以及实际使用案例。
1. GPIB协议分析工具简介
GPIB协议分析工具可以帮助用户监控、捕捉并分析设备与设备之间通过GPIB总线传输的通讯数据。这类工具通常能够显示发送的命令、接收到的响应数据,以及数据传输中的时序信息,从而帮助用户了解通讯协议并诊断问题。典型的GPIB协议分析工具包括:
-
NI Trace Analysis Tool(由National Instruments提供)
-
Keysight IO Libraries(原Agilent)
-
Prologix GPIB-to-USB接口软件
2. 如何抓取GPIB通讯协议
抓取GPIB通讯协议的过程可以通过以下步骤完成:
(1) 连接设备
首先,需要使用GPIB分析工具来连接目标设备。通常,连接设备的步骤包括以下内容:
-
使用NI GPIB接口卡或USB-GPIB适配器将分析工具与GPIB总线连接。
-
将仪器和设备通过GPIB电缆连接到总线。
(2) 启动协议分析工具
启动GPIB协议分析软件,如NI Trace Analysis Tool。该工具可以设置捕获条件,记录所有通过GPIB总线传输的命令和响应数据。
(3) 配置捕捉参数
在软件中,设置要捕获的通讯类型,可以选择捕获特定的命令、所有数据或错误信息等。一般情况下,默认的设置会捕获所有GPIB活动,但可以根据需求进行过滤。
(4) 开始捕获
启动捕获功能,软件将记录所有的GPIB通讯活动。这时,可以在被监控设备之间进行通讯,比如发送命令、读取响应等。
(5) 分析抓取的数据
在完成数据捕获后,分析工具会生成一个详细的日志,显示所有传输的命令、数据和时间戳。用户可以根据日志信息,了解设备之间的通讯协议和数据结构。
(6) 导出数据
分析完成后,用户可以将抓取的数据导出为报告,以便进一步分析或用于将通讯协议重新开发到LabVIEW等平台上。
3. GPIB协议分析工具的使用方法
以NI Trace Analysis Tool为例,使用步骤如下:
(1)安装NI Trace Analysis Tool
NI Trace Analysis Tool是NI提供的一个协议分析工具,安装在NI开发环境中,如NI MAX(Measurement & Automation Explorer)。
(2)设置捕获条件
打开NI Trace Analysis Tool后,用户可以选择监控的GPIB接口,设置捕获条件,包括要监控的设备、过滤的数据类型(命令或响应)、捕获时间范围等。
(3)监控通讯
启动工具后,它将实时显示设备之间通过GPIB总线传输的所有数据和命令。每条记录包含了时间戳、数据长度、命令和响应内容。
(4)分析通讯日志
工具会生成详细的通讯日志,用户可以查看特定命令的响应时间、数据结构和可能的错误。NI Trace Analysis Tool还提供了过滤和搜索功能,帮助用户快速找到特定的数据或命令。
(5)案例:GPIB通讯分析
假设用户有一个通过GPIB控制的数字示波器,他们可以通过NI Trace Analysis Tool捕捉所有GPIB命令和响应数据。分析数据后,用户可能发现示波器的GPIB通讯协议中每条命令都有固定的结构,例如“:MEASure
?”用于查询峰峰值电压,系统可以根据该命令的响应确定设备的电压读数。通过这种分析,用户可以在LabVIEW中复现该通讯协议,实现对示波器的控制。4. GPIB协议分析工具的使用案例
案例1:故障诊断
在测试和测量领域中,某一台测试设备无法响应控制命令。使用GPIB协议分析工具,工程师可以抓取设备之间的通讯信息,并发现设备返回了错误代码。通过分析错误代码,可以定位到GPIB总线上的通讯超时问题,最终通过修改通讯时序解决了问题。
案例2:通讯协议移植
一个旧系统使用GPIB协议与多个测试设备通讯,现计划迁移到LabVIEW中实现。通过GPIB协议分析工具,开发人员抓取了所有关键通讯数据,并通过分析了解设备的指令集。随后,他们在LabVIEW中实现了相同的通讯逻辑,成功将旧系统移植到新的平台。
GPIB协议分析工具是解析和诊断GPIB通讯问题的有力工具,特别是在项目重构或移植时,能够帮助开发人员抓取现有的通讯协议并分析数据。通过对GPIB命令的深入理解,开发人员可以将现有系统优化并转移到LabVIEW等平台中进行开发。
测试硬件兼容性与性能
重构过程中应注意硬件兼容性问题。确保LabVIEW能够与现有硬件正常通讯,并尽量测试不同条件下的通讯性能,确保数据传输的稳定性和实时性。 -
-
模块化设计,方便后续维护
在LabVIEW中开发时,采用模块化设计思想。将通讯部分、控制逻辑和数据处理部分分开,方便调试和维护。使用状态机或生产者-消费者设计模式可以提高系统的可维护性和灵活性。 -
日志和错误处理机制
对于复杂通讯项目,完善的日志记录与错误处理机制非常重要。LabVIEW中的Error Cluster和简单的文件日志系统可以帮助快速定位问题,避免系统崩溃。 -
充分利用LabVIEW工具包
LabVIEW的丰富工具包,如VISA通讯工具包、NI Modbus库等,可以简化串口和488通讯的实现。同时,LabVIEW具有良好的扩展性,支持多种硬件平台,利于未来的功能扩展和升级。
相关文章:

LabVIEW重构其他语言开发的旧系统
在面对一个运行已久、代码不清晰的项目时,如果该项目涉及复杂的通讯协议(如串口和488通讯),重新开发并优化成LabVIEW版本可以极大提升系统的易用性和维护性。为了确保通讯协议的顺利解析和移植,借助专业工具分析现有通…...
[晕事]今天做了件晕事43 python-byte串长度与转义字符
今天办了一件晕事,导致测试结果与预期不一致。 过程是,组装byte串的时候,整个字符串里有转义字符\x0d。 from scapy.all import IPv6, UDP pkt IPv6(src"2002:db8:a0b:12f0::157", dst"2002:db8:a0b:12f0::13")/UDP(sp…...

初识redis(String,Hash,List,Set,SortedSet)
认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化,Key/Value,Document,Draph 无关联的,非sql,BASE(原子性,持久性,一致性,隔离性) 认识r…...
Ton与ETH的一些独特的区别
文章目录 前言一、智能合约需要收取租金。二、从数据到大数据的转变三、智能合约不能运行其他合约的getter方法四、合约不是无法改变的五、Ton取消了无限制的数据结构六、钱包和地址具有独立性 前言 TON区块链是一个现代化的区块链,它为智能合约开发带来了一些全新…...

C++ | Leetcode C++题解之第396题旋转图像
题目: 题解: class Solution { public:int maxRotateFunction(vector<int>& nums) {int f 0, n nums.size();int numSum accumulate(nums.begin(), nums.end(), 0);for (int i 0; i < n; i) {f i * nums[i];}int res f;for (int i …...

前向渲染路径
1、前向渲染路径处理光照的方式 前向渲染路径中会将光源分为以下3种处理方式: 逐像素处理(需要高等质量处理的光)逐顶点处理(需要中等质量处理的光)球谐函数(SH)处理(需要低等质量…...

Python画笔案例-040 绘制五角星顶圆
1、绘制五角星顶圆 通过 python 的turtle 库绘制五角星顶圆,如下图: 2、实现代码 绘制五角星顶圆,以下为实现代码: """五角星顶圆.py """ import turtledef draw_circle(d):turtle.left(90)for _ …...

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例
伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教…...
期货量化-群体优化算法:混合蛙跳算法(SFL)
1. 概述 混合蛙跳算法(Shuffled Frog Leaping Algorithm, SFL)由 M. Eusuff 等人在2003年提出。这一算法结合了模因算法与粒子群优化算法的原理,灵感来源于一群青蛙在觅食过程中的行为模式。 SFL 最初作为一种求解组合优化问题的元启发式方法…...
tensorflow-线性回归python入门
目录 读入库 构造数据 建立训练和测试数据 创建第一层到最后一层的神经网络 开始测试 sin函数回归 读入库 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import time 构造数据 X np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, …...
VSCode学习笔记
1. 快捷键 KeyDescriptionPlatformF1打开命令面板(Command Palette)Win10Shift Delete剪切当前光标所在的代码行Win10 2. 文件 2.1 在文件列表中定位当前文件 操作路径:右键单击文件名 ⇒ 在右键菜单中点击 【Reveal in Explorer View】...

【Canvas与艺术】菊花孔雀螺旋
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>菊花孔雀螺旋</title><style type"text/css">…...

circuitjs 普通开关和按钮开关
circuitjs 各类开关中最基本的有 (普通)开关 和 按钮开关(瞬时开关). 添加 在菜单 “绘制–无源元件–添加开关” 下可以添加一个普通开关.在菜单 “绘制–无源元件–添加按钮开关” 下可以添加一个按钮开关. 两者在缺省外观上没有什么区别, 如上, 左边是普通开关, 右边是按钮…...

客户端绑定本地端口与服务器建立连接的详细实现
客户端绑定本地端口与服务器建立连接的详细实现 一、网络编程基础1.1 TCP/IP协议1.2 套接字(Socket)1.3 客户端与服务器模型二、客户端程序的设计2.1 需求分析2.2 流程设计三、具体代码实现3.1 伪代码3.2 C代码实现四、代码详解4.1 初始化套接字库4.2 创建套接字4.3 绑定本地…...
C++ std::bind函数用法
看一个例子解释用法: TcpServer类的构造函数中定义: acceptor_->setNewConnectionCallback(std::bind(&TcpServer::newConnection, this,std::placeholders::_1, std::placeholders::_2));// 有一个新的客户端的连接,acceptor会执行这…...

Caffenie配合Redis做两级缓存
一、什么是两级缓存 在项目中。一级缓存用Caffeine,二级缓存用Redis,查询数据时首先查本地的Caffeine缓存,没有命中再通过网络去访问Redis缓存,还是没有命中再查数据库。具体流程如下 二、简单的二级缓存实现-v1 目录结构 2…...

MATLAB实现PID参数自动整定
目录 1、项目说明 2、文件说明 1、项目说明 本项目旨在通过 MATLAB 语言实现 PID 参数的自动整定,并设计了一个直观易用的 GUI 界面。该系统特别适用于实验室环境下的 PID 参数自整定任务。整定的核心原则在于优化系统性能,使系统的衰减比尽可能接近理…...

UE5学习笔记21-武器的射击功能
一、创建C类 创建武器子弹的类,创建生产武器子弹的类,创建弹壳的类,生产武器子弹的类的父类是武器的类 创建后如图,ProjectileMyWeapon类(产生子弹的类)继承自weapon类,Projectile(子弹的类),Casing(弹壳声…...

Mamba模型学习笔记
笔记来源:bilibili Transformer 的死穴 Transformer 结构的核心是自注意力机制层,无论是 encoder 还是 decoder,序列数据都先经过位置编码后喂给这个模块。 但是自注意力机制的计算范围仅限于窗口内,而无法直接处理窗口外的元素…...

android kotlin 基础复习 继承 inherit
1、新建文件kt 2、代码: /**用户基类**/ open class Person1(name:String){/**次级构造函数**/constructor(name:String,age:Int):this(name){//初始化println("-------基类次级构造函数---------")println("name:${name},age:${age}")} }/**子…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...