在被岛津(SHIMADZU LABNIRS)原来那个折磨人的并口 Trigger 方案折磨的死去活来实在受不了之后(比如你很难找到有并口卡的设备,再比如这玩意对静电极为敏感,内部静电积累起来之后 Trigger 就会打不上之类的),我决定写一个通过牺牲一定时间精度但是能够极大提高可用性的 Trigger 方案:ezNirsTrigger。
概览
在LabNirs的控制程序上有一个可以手动打Trigger的按钮,我们通过TCP协议监听远端服务器发来的信号,如果有信号传入则立刻模拟点击此按钮。这一工作借由一段AHK脚本完成。
ezNirsTrigger工具不仅可以被视作是应对故障的紧急措施,在你的实验机器没有并口卡或并口卡故障的时候、或你擅长的编程语言无法方便的通过并口发送信号的时候,都可以考虑使用这一方案解决问题。
与传统方案的比较
架构设计
LabNirs的解决方案由两台设备组成,其中一台是我们平时在操作的有显示器的设备(在这里我们称作 Panel PC,它由 Windows 7 操作系统驱动),另外一台是藏在机器里面负责调度硬件的(这台设备被称作 Control PC,它由 Windows XP 驱动),这两台设备之间通过Socket协议进行通信,如果你通过并口将Trigger数据发送至设备,实际上这一数据会先被发送到 Control PC 中,之后再传到 Panel PC 上,而 ezNirsLab 的方案直接将实验机器与 Panel PC连接在了一起。
这两种架构并没有孰优孰劣,如果设备品质没有太大问题,传输延迟的差异在 1ms 以下,对于 fNIRS 这种时间分辨率不敏感的设备来讲,这一差异是可以被忽略的。

硬件要求
LabNirs 的解决方案要求你的实验设备必须配备并口卡这一远古级设备,并且,很多软件包是不支持 USB 转 Parallel 这种操作的,所以如果想要保证在大多数情况下你的实验程序可用,则你所在的课题组必须配备一个带有 PCI-Parallel 的计算机。
ezNirsTrigger 对实验设备没有特殊要求,只要能接网线就行,但是你需要在 LabNirs 的 Panel PC 上外挂一个 USB 的网卡,为该网卡安装驱动程序并为此网卡正确配置IP地址,这对技术人员的知识水平有一定要求。另外由于 Panel PC 和 Control PC 之间本身就是通过网卡通信的,因此 Panel PC 上本身就有一个网卡,如果技术人员误操作修改了这一内置网卡的配置,则将会让整个 LabNirs 系统无法正常工作。
操作体验
作为一个外挂程序,ezNirsLab的操作过程和数据处理流程要比一站式的控制面板复杂的多。在调通信号整个设备处于 Stand By 状态后,你需要额外打开 ezNirsLab 将其与实验程序连接。在实验执行完毕后,如果你需要保存 Trigger 所携带的具体信息,那么还需要额外的对数据进行导出工作。
在数据处理时,由于 NirsLab 和 ezNirsTrigger 的数据是分开的两个文件,所以我们需要做一些额外的工作来讲两套数据合并在一起。
我们意识到了这些问题,并且在考虑解决方案以简化操作流程,但是就目前来只能以一种相对麻烦的方法来处理这些问题了。
稳定性
LabNirs 的并口容易连不上,ezNirsTrigger 则会在小概率情况下无法成功触发 Trigger。你可以通过导出数据所携带的时间数据估测 Trigger 触发的时间,但是这一估计准确性并不足够高。
操作
将 ezNirsLab 安装在 LabNirs 设备上,并依照如下说明进行配置。
连接配置
- 点击主界面的「Server Config」打开服务器设置界面,「Server address」为实验设备地址,「Server port」为 Socket 服务器的端口。
- 点击「Test Connection」测试服务器连接可用性,此时 ezNirsLab 会向 Socket 服务端发送一个字符串
TEST
并主动断开连接。
锁定窗口
ezNirsLab 需要首先知道要在哪一个窗口上进行操作,如果 LabNirs 的控制程序在 ezNirsTrigger 打开之前就已经启动,那么 ezNirsTrigger 会自动找到它,否则您需要手动点击 「Find Window」 按钮寻找该窗口。找到 LabNirs 控制程序窗口的标志是 Id 一项右侧会变成一串表示窗口编号的文本而不是一条短横线 -
。
发送信号
在您成功将 ezNirsTrigger 与实验程序连接后,可以通过发送字符串的方式来执行对应的操作。每一条字符串被称作一个命令,每个命令结尾必须包含一个 \r\n
, ezNirsTrigger以此作为分割不同命令的依据。下面是命令表:
命令 | 说明 |
---|---|
ST | 开始采集数据 |
EN | 停止采集数据 |
CL | 清空LabNirs面板上的波形 |
ZR | 将当前时间点的含氧、脱氧与加和数据视作0点 |
DR | Drift Reset |
LK | 将 ezNirsTrigger 置于屏幕顶端并激活 LabNirs 控制面板 |
UL | 解除 ezNirsTrigger 的置顶状态 |
EX | 导出数据 |
RC | 保留 |
ER | 保留 |
LT | 保留 |
PING | 保留 |
---- | 其他任何信号都会被视作一般的标记信号,可用作标记事件 |
注
- CL命令不会删除任何数据;
- 我们建议您在开始实验前发送
LK
信号以提高时间准确性,在实验完成后再发送UL
信号解锁窗口; - 对于
EX
命令,如果在后面接上文件名,如果EX hello
则会在data
文件夹下创建hello.csv
,否则文件名为导出时的时间,如17-11-21 20-03-20
。 Log
选项卡当中Delay
一列代表 ezNirsTrigger 执行该操作所花的时间,单位为毫秒,该时间不包含网络延迟,在锁定窗口的情况下(LK
命令)一般该时间为0
;- 在执行实验时您不应操作鼠标或键盘,否则程序将无法正常运作。

附
链接
Windows的内网配置方法
你需要首先为目标设备准备一枚USB网卡,将该网卡与实验设备连接(可以直接连接,这种连接方式被称作 Cross Cable,或者如果你的局域网中存在多个设备,则可以考虑使用交换机),之后依照如下操作清单配置fNIRS设备与实验机器:
- 按组合键
Win+R
打开「运行」窗口,输入ncpa.cpl
并敲回车进入网络连接设置界面; - 找到你的网卡对应的网络连接,通常是第二个;
- 右键单击该图标,选择「属性」,打开网络属性菜单;
- 找到 TCP/IPv4,选中它,并点击下面的属性按钮;
- 输入你的局域网配置信息,并点击确认;
- 如果任何一方计算机弹出选择网络类型的菜单,请选择工作网络以保证防火墙不会阻止此连接;
- 按组合键
Win+R
打开「运行」窗口,输入powershell
并敲回车进入命令行,输入ping [your IP]
(如ping 192.168.1.2
)检测是否组网成功。

注意事项
将实验用的局域网与机器用的局域网网段分开
- 该局域网内全部设备的IP地址应保证前三段相同,最后一位不同;
- 请将实验机器的网络IP的第三段设置为非
0
数字(如192.168.2.***
),否则可能因为网段冲突无法成功的让 ezNirsLab 与你的实验程序互相通信。
不要修改机器自带网卡的设置
如前文所述,在插上外界USB网卡之后你的设备上将有两个网卡设备,一个是原先的一个是后加上去的,最简单的辨别方法是:机器自带网卡的品牌是 Intel,并且已经设置过IP。在我们实验室的这两台设备IP都是192.168.0.101
。
无法将网络设置为工作网络
- 解决该问题最为粗暴的方法是把实验设备的操作系统重灌一下,并且杜绝安装任何带有系统优化功能的软件,比如「腾讯电脑管家」、「驱动精灵」、「360不安全卫士」等;
- 如果你在使用的操作系统为 Windows 10,则可以打开「设置」→「网络和Internet」→「以太网」→ 找到您的网卡图标并单击 → 「查找设备和内容」切换为开;
- 如果你在使用的操作系统为 Windows 7,则可以打开「网络和共享中心」,点击连接到近红外仪器网卡下方的网络类型连接修改网络类型;
- 如果在网卡设置/网络和共享中心界面没有对应的选项,你也可以通过修改「组策略」将网络连接强制改为工作网络:
- 按组合键
Win+R
打开「运行」窗口,输入gpedit.msc
并敲回车进入组策略; - 找到「本机策略」 → 「安全性策略」 → 「网络清单管理政策」;
- 在右侧找到你的网络连接,如果你的网络现在处于「未识别网络」的状态则选择未识别网络;
- 双击该网络,打开第三个选项卡「网络位置」,选择「公共」网络。
- 按组合键
Loading comments...