Ocean FX 是海洋光学(Ocean Insight,原 Ocean Optics)的高速光纤光谱仪,走 USB 接到电脑,官方标称最快每秒 4500 条谱。控它的关键不是“能不能连上”,而是先想清楚走哪条路——NI 那份免费驱动和厂商自己的 OceanDirect SDK 是两套东西。

Ocean FX 经 USB 取谱,LabVIEW 显示光谱曲线并标出峰值波长
01 这台设备在做什么
Ocean FX 是一台微型光纤光谱仪:光从 SMA 905 或 FC/PC 光纤接口进来,打到一片 2048 像素的 CMOS 线阵传感器上,出来的是一条“强度—像素”的原始谱。波长范围可以在 200 nm 到 1100 nm 之间配置,常见的固定配置有 200–850 nm、350–1000 nm 和 200–1025 nm。分辨率取决于配置,比如 600 线/mm 光栅配 5 µm 狭缝,半高宽大约 0.8 nm。
它的定位是“快”。积分时间可以从 10 µs 调到 10 s,板载平均最多 5000 条,板载缓存最多存 50000 条谱,最高 4500 谱/秒。这个速度在吸收光谱、等离子体发射、在线分拣这类场合才有意义——单次扫描的信噪比只有约 290:1,得靠平均和高速采集把信号堆出来。所以程序控在这里不是锦上添花:几千条谱的采集、平均、存盘,手动根本做不了。
02 怎么让 LabVIEW 认到它
接口:Ocean FX 本体支持 USB、千兆以太网、Wi-Fi、RS-232 和 SPI。用 LabVIEW 控,走 USB 最省事;以太网虽然也能发指令,但得先用 USB 连上去把 IP 读出来配好。
驱动有两条路。
第一条,NI 仪器驱动网络上的 `OceanFX` 驱动。这是 LabVIEW Plug and Play(project 形式)驱动,版本 1.0,2021 年 8 月 11 日发布,接口标的是 USB,最低要求 NI-VISA 18.2,配套 LabVIEW 2018 到 2021。要注意的是,这个驱动没有经过 NI 认证,也不提供支持,下载下来是“as is”的状态。
第二条,厂商自己的 SDK。Ocean Insight 现在主推 OceanDirect,它是老一代 OmniDriver 的升级版,去掉了 Java 层和虚拟机。OceanDirect 提供一组 LabVIEW 的 VI,底层调 `OceanDirect.dll` 和 .NET 版的 `NetOceanDirect.dll`,要求 Windows 上的 LabVIEW 8 或更高。老的 OmniDriver 也能用,它的 LabVIEW 封装在 `Wrapper.lIb` 里。
03 最小可用程序
OceanDirect 在 LabVIEW 里的调用顺序是固定的四步:
- `getInstance` —— 拿到 SDK 的入口对象,引用部分 LabVIEW 会自动处理。
- `findDevices` —— 返回当前连着的设备列表,从里面取 `deviceID`。
- `openDevice(deviceID)` —— 打开设备,返回的 `errorCode` 要判一下是不是 0。
- 之后就能调标准方法:`setIntegrationTimeMicro` 设积分时间,`setScansToAverage` 和 `setBoxcarWidth` 设平均与平滑。
取谱用 `getSpectrum`,返回的是一串双精度浮点,长度等于像素数。注意它给的是像素序号上的强度,横轴波长要另外用 `getWavelength` 取一次存起来,别每次采集都取。
走 OmniDriver 那条路的话,对应的 VI 是 `Wrapper_Create.vi`、`Wrapper_openAllSpectrometers.vi`、`Wrapper_setIntegrationTime.vi`、`Wrapper_getSpectrum.vi`、`Wrapper_getWavelengths.vi`、`Wrapper_closeAllSpectrometers.vi`,名字一一对得上。
04 实际用起来的坑
- NI 那份驱动没人维护。 IDNet 页面上明确写着 Not NI Certified、Not NI Supported,出了问题只能自己看源码。真要做产品化的东西,优先走厂商的 OceanDirect。
- `getSpectrum` 会阻塞。 它返回的是“下一条可用的谱”:仪器正在采集时,调用线程会一直等到这一条采完。积分时间设成 1 s,这个 VI 就老老实实卡 1 s,别以为它在里面做平均。
- 改了参数会多丢一条谱。 一旦动了积分时间、平均次数这类会影响数据的参数,SDK 会自动做一次“稳定扫描”,把正在采的那条扔掉,返回按新参数采的下一条。也就是说改了参数之后,第一条返回的谱不是你要的。
- USB 上跑 4500 谱/秒是有前提的。 这个数字靠板载缓存堆出来,还跟电脑性能、USB 是 2.0 还是 3.0、像素数(256 到 4096 不等)直接相关。老老实实一条一条 `getSpectrum`,是到不了这个速度的。
- LabVIEW 里调 DLL 要改成多线程。 OmniDriver 手册专门讲过:所有 Call Library Function 节点要把线程设成 run in any thread(老版本选 Reentrant),对应的子 VI 也要勾上 Reentrant 并取消允许调试,否则一条谱的等待会把整个程序拖住。
05 一台能干什么,几台搭起来能干什么
单台 Ocean FX 配 LabVIEW,能做透过率或吸光度测量(采参考谱、采暗谱、算吸光度),能按时间连续采谱并存成 TDMS 文件,能对特定波长区间做峰值跟踪和浓度换算。
搭起来就更像一套系统:Ocean FX 负责光谱,一台卤素灯或 LED 光源负责照明,一台步进电机或位移台负责扫描样品,LabVIEW 同时控制光源开关、位移台位置和采谱时刻,做到“每个位置采一条谱”。再往上,Ocean FX 的 8 路可编程 GPIO 和 4 种触发模式可以让它被外部信号硬触发——这比在软件里轮询要准得多。
我们专注 LabVIEW 软件开发与测试测量系统集成,从硬件选型、方案设计到现场交付调试,提供一站式服务。手上有一台设备想接进 LabVIEW,或者几台设备要串成一套系统,欢迎在评论区留言;身边朋友有类似项目,也欢迎帮忙引荐。
转载自 CSDN-专业IT技术社区




