LabWindows/CVI虚拟仪器开发实战:从工程结构到数据采集避坑指南
简介这份源代码包是《LabWindows/CVI虚拟仪器高级应用》的随书素材目标读者是已经具备C语言基础、希望在虚拟仪器方向进阶的工程师与科研人员。代码围绕高级应用里的常见难点展开包括模拟与数字数据采集、数字滤波器设计、快速傅里叶变换、PID等控制算法、图形界面与控件联动、多线程任务调度和实时系统调用等内容基本覆盖书中各章对应的示例工程、驱动函数库和接口用法。压缩包整体约180.48MB页面未列出文件总数与分类明细但核心价值在于直接提供了从硬件驱动配置到软件界面呈现的完整工程参考读者可复用其中的数据采集循环、回调函数、图表显示和自动测试序列等模块节省从零搭建的时间。目前已有2581人浏览学习适合需要边读代码边验证原理或依据这些示例进行二次开发的进阶学习者。1. 从「搞基应用」说起这份随书代码到底能拿来做什么很多人看到“LabWindows/CVI虚拟仪器搞基应用配套源代码”这个标题都会先愣一下——其实“搞基”是“高级”的谐音笔误不需要过度解读内容本身很正经。这份配套源代码覆盖了 CVI 从面板设计、回调函数到数据采集、串口与 GPIB 通讯的完整链路每个主题都对应一个能直接跑的示例工程。如果你书看了几遍、示例代码也敲过但一到自己写就崩或者正被课设、毕设、小型测控工具卡住这份代码就是现成的脚手架。拿到包后先别急着双击 .prj把工程里每层文件的关系翻清楚后面会省掉很多麻烦。2. LabWindows/CVI 工程结构先搞清文件再动手2.1 一个 CVI 工程由哪些文件组成这是我拆这份随书代码时最先做的事把整个目录摊开看后缀。CVI 的工程和 Visual Studio 很不一样界面不是写在资源脚本里而是由一个独立的 .uir 文件管着.prj 负责把这些零零碎碎串起来。目录里最常见的文件类型如下后缀作用常见位置.prj工程文件记录参与编译的源文件、头文件路径、链接库根目录.uir面板文件保存界面布局、控件属性以及回调绑定关系ui 或根目录.cC 源码业务逻辑全部在这里source 目录.h头文件包含面板枚举常量、控件 ID、函数原型include 目录.fp函数面板文件描述某个函数如何被外部工具识别随功能一起出现.dll / .lib动态库和导入库外部依赖或自己编译的产物根目录或 lib 目录注意 .uir 是二进制资源文件用记事本打开是一堆乱码千万不要手工改里面的文字。修改面板正确的方式是双击 .uir让开发环境的编辑器打开并生成回调代码。.h 文件里的 PANEL、PANEL_STARTBUTTON 这类枚举常量是开发环境扫描 .uir 后自动生成的手动改容易前后不一致。2.2 打开工程前要先核对的三件事第一件是版本兼容性。CVI 的新版本打开老工程一般会提示转换版本跨度太大的时候面板布局可能错乱回调绑定甚至直接丢失。随书代码通常按当时书的版本整理先确认你手上的开发环境版本再决定是直接打开还是先看 README。别一上来就用最新版硬开转换过程不可逆真出问题会把原始布局一并改掉。第二件是路径问题。老版本 CVI 对中文路径的处理不算稳定编译时报“Cannot open file”多半是路径里有中文或空格。把这套代码解压到一个纯英文目录比如 C:\cvi_demo能避开不少奇怪问题。第三件是缺文件自查。有些网盘流传的“随书代码”其实是残缺包只有 .prj 没有 .c 或 .uir。打开 .prj 之前先对照一下文件数量同名 .prj 应该搭配同级的 .uirsource 目录里要有对应 .c。如果缺得明显直接换一个完整来源别浪费时间在空壳工程上。2.3 第一个能跑的完整例子从空白工程到“开始”按钮从零建一个最小工程只需要四步新建 Project新建 UIR在面板上放一个按钮然后在生成的回调函数里填充代码。下面这个 main 函数是所有 CVI 程序的基本骨架随书代码里每个示例的入口都是这个套路#include sample.h #include userint.h static int panelHandle; int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) 0) return -1; /* 运行时环境初始化失败 */ if ((panelHandle LoadPanel (0, sample.uir, PANEL)) 0) return -1; /* 面板加载失败 */ DisplayPanel (panelHandle); RunUserInterface (); /* 进入事件循环直到界面退出 */ DiscardPanel (panelHandle); return 0; }InitCVIRTE 负责初始化 CVI 的运行时环境这套机制把很多底层资源管理包在内部第一个参数通常传 0 表示使用当前进程。LoadPanel 的第二个参数是 .uir 文件名字符串第三个参数是头文件里的枚举常量 PANEL返回值是一个面板句柄后续所有对面板的操作都依赖它。RunUserInterface 是核心程序跑到这里就进入了事件分发循环界面上的按钮、定时器、键盘操作全部由这个循环调度。按钮的回调函数长这样它和 .uir 里按钮的绑定关系是在面板编辑环境里设置的int CVICALLBACK btnStart_Callback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { if (event EVENT_COMMIT) SetCtrlVal (panel, PANEL_LED, 1); /* 点亮一个 LED 控件 */ return 0; }CVICALLBACK 是固定的调用约定六个参数分别是面板句柄、控件 ID、当前事件类型、回调数据指针和两个事件附加参数。EVENT_COMMIT 对应按钮按下LED 控件先要在 .uir 里拖动放置好控件 ID 同样由头文件里的枚举定义。回调里写得越短越好只做必要的事情耗时任务放到后面的线程方案处理否则界面会卡成“未响应”。3. 界面与交互把 UIR 面板变成能用的操作台3.1 控件事件的分发机制与回调绑定CVI 的交互核心不是代码主动去查状态而是“事件驱动”。你在 .uir 里放一个按钮再把这个按钮的 callback 属性填成某个函数名运行时的事件循环就会在指定事件发生时自动调用那个函数。随书代码里大量例子的操作顺序都是设计面板 → 生成回调框架 → 在回调里写逻辑。控件的响应事件有明确分类这决定了你该判断哪个事件常量事件常量触发场景常用控件EVENT_COMMIT按钮按下、单选框切换、文本框回车Button、Ring、CheckboxEVENT_LEFT_CLICK鼠标左键按下任意控件EVENT_TIMER_TICK定时器时间到TimerEVENT_VAL_CHANGED数值型控件被滑杆或旋钮改变Slider、Gauge、Knob有一个很不显眼但容易翻车的点控件事件必须逐个在 .uir 编辑器里设置不是在 .c 文件里随便写个同名函数就自动生效。开发环境提供“Generate All Code”功能能在 .c 和 .h 里自动生成回调原型与空函数体生成后再去填逻辑这是最稳的写法。手动复制粘贴别人的回调函数却忘了检查 .uir 里的绑定关系是新手经常遇到的坑。3.2 定时器与波形刷新仪表盘的常见写法测控面板上最常见的场景是“数据实时刷”。随书代码里大量例子用 Timer 控件驱动界面更新Timer 设计上必须放在面板上Interval 单位是毫秒0 表示禁用。挂在定时器回调里做刷新代码结构非常直接int CVICALLBACK timer_RefreshCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { double newValue; if (event EVENT_TIMER_TICK) { /* 从某个设备读取一个新值这里用随机数代替 */ newValue 5.0 * sin (GetTickCount() / 1000.0); PlotStripChartPoint (panel, PANEL_CHART, newValue); SetCtrlVal (panel, PANEL_CHANNEL_VALUE, newValue); } return 0; }PlotStripChartPoint 是 CVI 提供的图表点绘制函数把数值直接堆到 Strip Chart 控件上。实际项目里 newValue 来自采集卡或者串口读取数据源怎么接在下一章展开。定时器间隔的设置很考验经验间隔太小UI 抢占资源太猛间隔太大波形肉眼可见地卡顿。我一般先设 50 ms看 CPU 占用再往上调不要一开始就设 10 ms。3.3 容易翻车的 Modal 弹窗与界面卡死界面卡死是新手最容易遇到又最莫名其妙的现象——点了按钮整个窗口变灰鼠标转圈仿佛“玄学”。真实原因是回调函数里做了耗时的同步操作比如在 EVENT_COMMIT 回调里直接读串口还设置了两秒超时。事件循环只有一个线程回调不返回后续所有界面事件都得排队。解决思路有两条。简单场合用定时器把耗时操作拆成小块复杂场合把耗时体力活丢给线程池int CVICALLBACK ThreadWork (void *data) { long timeout 0; /* 耗时读取、计算、文件写入都在这里执行 */ return 0; } /* 在回调里启动线程 */ int CVICALLBACK btnRead_Callback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int threadId 0; if (event EVENT_COMMIT) CmtScheduleThreadPoolFunction (gThreadPool, ThreadWork, NULL, threadId); return 0; }CmtScheduleThreadPoolFunction 的前三个参数分别是线程池句柄、函数指针、传给线程函数的参数指针threadId 是返回的线程标识。线程函数里不要去操作界面控件控件访问必须回到主线程否则轻则界面不刷新重则直接崩溃。这是随书代码里常见的一种线程用法。4. 数据采集与仪器控制从面板到真实数据的通路4.1 采集前的初始化顺序与选型理由面板做完了下一步就是把真实数据引进来。CVI 支持的通讯路子很宽串口、GPIB、USB、VISA 都有现成库但初始化顺序基本一致先建立通讯资源再配置参数然后清缓冲最后开始读写。这个顺序不能倒置否则读到的数据像隔夜的剩饭。选择通讯方式时我按设备和场景分类通讯方式适用场景典型速度注意事项串口 RS-232 / USB 转串万用表、传感器、老式仪器慢参数必须和从机严格一致GPIB台式仪表、早期测量设备中地址设置麻烦线路短VISAGPIB、USB、PXI 统一访问中高屏蔽底层细节代码最好复用记得先确认手上连接的是哪种设备再选择对应的调用方式。随书代码里的例子明明用的 VISA结果读者拿串口设备去跑自然报错——这不是代码问题是选型问题。4.2 串口与 VISA 的代码骨架串口通讯在 CVI 里走 OpenCom 函数组。一个可用的初始化与读写骨架如下int comHandle -1; char buffer[256] {0}; int bytesRead 0; OpenCom (comHandle, COM3, 115200, 0, 8, 1); /* 参数顺序句柄、端口、波特率、校验、数据位、停止位 */ if (comHandle 0) return -1; FlushCom (comHandle, 0); /* 清空输入缓冲防止脏数据 */ WriteCom (comHandle, READ?\n, strlen (READ?\n)); SetComTime (comHandle, 2.0); /* 读等待超时设为2秒 */ ReadCom (comHandle, buffer, 255, bytesRead); CloseCom (comHandle);OpenCom 的校验参数 0 表示无校验8 数据位、1 停止位是大多数仪器的默认组合。整套参数必须与对端设备保持一致如果厂家说明书里要求偶校验加 7 数据位这里就必须改成 1 和 7。FlushCom 这一步容易被忽略但设备上电瞬间的乱码、上次通讯的残留字节都会在这里混进下一次读取带上它成本极低不带后期排查极费劲。VISA 的写法更简洁统一了 GPIB、USB 串口和以太网仪器的访问ViSession defaultRM, instr; ViStatus status; viOpenDefaultRM (defaultRM); status viOpen (defaultRM, GPIB0::1::INSTR, VI_NULL, VI_NULL, instr); if (status VI_SUCCESS) return -1; viPrintf (instr, MEAS:VOLT:DC?\n); viScanf (instr, %lf, voltage); viClose (instr);viOpen 第二个参数“GPIB0::1::INSTR”是资源描述符格式是“接口类型索引GPIB地址INSTR”GPIB 设备在面板上把地址拨成 1这里就写 1。如果你接的是 USB 仪器这个字符串换成 USB0::0x1234::0x5678::INSTR 这种格式具体地址可以用随驱动附带的设备枚举工具查。viPrintf 负责发命令viScanf 负责解析返回值和 C 语言的 printf、scanf 用法几乎一样。4.3 连续采集中的缓冲处理与超时细节单次读写好写连续采集才是真正考验代码质量的地方。典型的失败现场是循环里一直读串口读到的数据一段时间正常一段时间全是 0再过一段时间又正常。缓冲区管理没能处理好。我一般会在每次读之前把 buffer 清零然后把 FlushCom 放到循环外面只在开始时执行一次避免把正常数据一起清掉while (keepRunning 1) { memset (buffer, 0, sizeof (buffer)); status ReadCom (comHandle, buffer, 255, bytesRead); if (status 0 || bytesRead 0) { /* 解析 buffer更新到 UI */ SetCtrlVal (panelHandle, PANEL_VALUE, atof (buffer)); } else { /* 读取超时按策略处理不要直接报错 */ } }ReadCom 的返回值需要单独解读status 大于 0 表示成功等于 0 通常意味着超时bytesRead 才是实际读到的字节数。这里最容易踩坑的是把 status 和 bytesRead 混为一谈导致明明读到了数据却走错分支。超时之后要不要重发命令、要不要重新初始化设备取决于对端设备的状态机多数台式仪表恢复一两条查询就能继续而某些传感器必须硬件重置。5. 避坑与排错随书代码复现时的五个现场5.1 编译报错undefined symbol / unresolved external现象打开随书工程点编译满屏 undefined symbol或者链接阶段一堆 unresolved external。解决窗口里明明写着函数却还是报找不到。原因最常见的是源文件根本没加入工程。网盘代码包解压后.c 文件孤零零躺在硬盘上.prj 文件里没登记它编译器自然不认。其次是头文件路径没配include 目录地址不对函数原型根本没被加载。解决在开发环境的项目管理器里右键工程选 Add File to Project把缺失的 .c 加进来再检查 include 路径设置把代码包里的 include 目录填进编译选项。重新编译前记得先选 Rebuild All避免增量编译的旧对象文件干扰。5.2 面板加载失败LoadPanel 返回 -1现象程序启动停在一半弹出错误框LoadPanel 返回值是负数或者界面窗口能出来但所有控件都是默认状态回调完全不触发。原因LoadPanel 的第二个参数写的是 .uir 文件名实际运行时路径和工程目录不一致。随书代码默认从当前工作目录找 .uir如果你换了路径、用调试器启动、又没设置工作目录文件就找不到。控件回调不触发的大部分原因则是 .uir 里控件的回调属性为空根本没和函数绑定。解决把 .uir 路径写成相对路径并从工程目录启动程序同时进入 .uir 编辑器逐个检查控件的事件绑定确认回调函数名和 .c 文件里的函数名字完全一致差一个字母都不行。5.3 串口数据乱码或波形完全不动现象读取窗口里是一排不可读的符号或者数值一直是 0波形图一条直线。原因串口波特率、数据位、校验位和对端设备不一致是最常见的一类第二类是读取时 buffer 里有旧数据没有清第三类是设备刚上电还没稳定命令发早了。这几类原因表现相似容易混在一次性排查。解决先用串口调试工具确认设备正常输出再把 OpenCom 的参数逐一核对。代码里每次读之前对 buffer 做 memset通讯建立后加 FlushCom 清一次缓冲最后在 WriteCom 之后加几十毫秒延时再读给设备留足响应时间。5.4 回调不触发按钮按了没反应现象程序能启动界面能点但按钮按下去像石沉大海回调断点进不去。原因回调函数防御性检查挡住了事件。回调签名里实际收到的事件是 EVENT_LEFT_CLICK而代码里只判断 EVENT_COMMIT或者更隐蔽的原因是有人把回调注册在了面板事件上而不是控件事件上。解决在回调函数入口加一行打印把接收到的 event 值打出来以此确认事件类型。用随书代码时优先使用开发环境自动生成的“Generate All Code”模板这个方法能强制生成和控件 ID 对应的回调框架少很多手打错字的问题。5.5 换电脑后缺 DLL程序启动就弹“找不到 CVI 运行库”现象下载的代码在原有环境能跑换一台电脑复制过去启动直接报缺少某个 DLL比如 cvirt.dll 或者 cvieng.dll甚至打开开发环境都报缺库。原因目标电脑没有安装完整运行时环境或者包里自带的是开发版运行库这种方式只对装过完整开发机的系统有效。很多人图方便从别的机器拷贝 CVI 目录缺少文件很正常。解决换目标机器后先正常安装一次完整开发环境或对应运行时发行包如果是做部署把依赖的 DLL 和 exe 放在同一目录保持相对路径。建议用依赖查看工具扫一下 exe 引用的动态库清单再逐一放进部署目录不要凭感觉复制。6. 进阶一例把采集代码封装成 DLL 供跨工程复用6.1 为什么要多此一举封一层项目做到后来采集逻辑往往要在多个界面和多个软件里重复出现。最直接的做法是复制粘贴串口代码但现实很残酷同一个设备的初始化参数改了你需要在三个工程的五处地方同步修改漏一个就是“黑匣子”。把通讯逻辑封装成 DLL主程序只需要对着接口函数调用设备细节全部收进 DLL 内部。6.2 一个最简 DLL 的导出与调用在 CVI 里新建工程时选择动态库类型写一个最简单的导出函数/* device_lib.h */ #ifdef __cplusplus extern C { #endif int __declspec (dllexport) __stdcall ReadFromDevice (int portNo, double *value); #ifdef __cplusplus } #endif/* device_lib.c */ #include device_lib.h int __stdcall ReadFromDevice (int portNo, double *value) { int comHandle -1; char buffer[32] {0}; OpenCom (comHandle, COM3, 115200, 0, 8, 1); if (comHandle 0) return -1; WriteCom (comHandle, READ?\n, strlen (READ?\n)); ReadCom (comHandle, buffer, 31, NULL); *value atof (buffer); CloseCom (comHandle); return 0; }__declspec (dllexport) 是导出声明__stdcall 是 Windows 标准调用约定CVI 的调用方默认也用这个约定。extern C 是为了让 C 工程和 C 工程都能顺利链接这个 DLL避免名字修饰导致找不到入口。调用方工程里只需要包含这个头文件、链接导入库然后直接调用double voltage 0.0; int error ReadFromDevice (1, voltage); if (error 0) SetCtrlVal (panelHandle, PANEL_VOLTAGE, voltage);6.3 验证方法与我的习惯封装完不要草率收工。我用一个测控面板同时放两个按钮一个直接调 DLL 函数一个先打开设备再读连续跑一百次比对结果是否一致。阻塞式采集这类函数接口里必须把超时机制收进去否则 DLL 会在异常设备上把整个调用方线程卡死。之前接过一个模拟项目 X设备通讯逻辑分散在四个工程里每台设备参数调整一次要改一整轮。后来我把通讯协议封装成动态库界面和采集彻底分开升级设备时只换 DLL主程序一行不动。从那以后我每次拿到一套新的仪器通讯代码都强制先做一层封装再往界面上糊希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SQL Server图书管理系统课程设计实战:事务、并发与约束全解析

SQL Server图书管理系统课程设计实战:事务、并发与约束全解析

简介:本资源是一份面向高校数据库课程设计实践的《SQL数据库图书管理系统》完整课程设计文档,适用于计算机、信息管理等专业本科生开展关系型数据库系统开发实训。文档涵盖系统需求分析、E-R图建模、六张核心数据表(书籍类别、读者、书籍、借…

2026/10/13 23:11:19 阅读更多 →
Win10装不上USBasp驱动?从签名机制到一键安装脚本

Win10装不上USBasp驱动?从签名机制到一键安装脚本

简介:针对Windows 10系统不允许直接安装未签名驱动的限制,这份一键安装包专门面向USBasp和USBisp两款AVR编程器,旨在让开发者在Win10环境下快速完成设备驱动部署。在AVR单片机开发流程中,USBasp是一种低成本的USB转SPI适配器&…

2026/10/13 23:11:19 阅读更多 →
跨境电商怎么做多店铺才安全?别让一家拖垮全部

跨境电商怎么做多店铺才安全?别让一家拖垮全部

跨境电商怎么做多店铺才安全,先分清哪一层出问题最致命:账号环境串了,是灾难;网络出口共用,是隐患;权限没管好,是慢性病。三层里最该先补的是第一层。 下面按账号、网络、权限三层展开&#xff…

2026/10/13 23:10:19 阅读更多 →

最新新闻

SCORM课件演示与测试全解析:从API通信到自动化验证

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

2026/10/14 0:00:41 阅读更多 →
macOS/iOS高精度计时:mach_absolute_time原理与实战

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
微信小程序奶茶店毕设从0到1全流程指南

微信小程序奶茶店毕设从0到1全流程指南

十个计算机毕设选题里,大概有五个是“基于微信的奶茶店小程序”。这个题目乍一看很重复,但它能常年被列入选题清单是有原因的:业务模型清晰,用户能一眼看懂价值;涉及点单、支付、购物车、后台管理、数据统计这些经典模…

2026/10/13 23:59:41 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →