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}")} }/**子…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...
英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...
【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...
