Stunner 自动化交付:验证、速查、示例与清单

系列指南 · 第 6 篇

Stunner 自动化交付:验证、速查、示例与清单

脚本写完之后还不算交付。Stunner 进自动化产线之前,需要先用真实样品跑一轮湿跑验证;现场出问题时,要能从一串负数状态码里快速看出原因;机柜布置、工作台开孔、机械臂路径规划,要按官方图纸的精确尺寸来。这三件事在现场最常需要随手查;文末另附端到端 C# 示例、Performance Verification 要点和交付清单。

先认识几个名词

交付前要过的五道关

自动化整合的验收,按下面这个顺序进行最稳。每一步都对应不同的验证目标;前一关通过再进下一关,出了问题就能定位到具体环节。

湿跑验证:由简到繁跑四轮

这四轮覆盖了整条链路里最容易出问题的几个环节。前三轮各跑一块板,第四轮连续跑多块。建议按顺序跑,每轮验证通过之后再进入下一轮。这样一旦出现异常,问题范围比较容易锁定。

板 / 用途 / 关注点

1:用途 空板自检;关注点 不加样品,让机械臂搬一块空 Stunner Plate 进出几次。看机械臂能否每次精准入位、条码能否每次读到、托盘机械动作有无卡顿。

2:用途 已知浓度样品板;关注点 用 BSA、IgG 等标准品配 3 个浓度梯度,每浓度 4 复孔,加 4 个 PBS 空白(共 16 孔)。比对测出来的浓度和标定值的偏差,确认仪器、应用、字符串字段、E1% 都对得上。

3:用途 真实样品单板;关注点 实际项目要测的样品,先单独跑一板。人工对照 Stunner Client 直接测出来的结果,确认 API 和 Client 给的数据一致;不一致时,先查字符串字段是否写错。

4:用途 连续多板;关注点 让机械臂连续搬 5–10 块真实样品板,中间不人工干预。看 Get_Status 轮询是否稳定、Get_Results 一次取走是否成功、.bin 文件是否每块都正确落到共享目录。

几条排查经验:第 2 板浓度偏差,先查实验定义里的 application_name 和样品定义里的 E1% 列。第 3 板和 Client 数据不一致,多数情况是 blanking_information 模式或 column_BSRF 标错。第 4 板偶发失败,通常是轮询频率太快,或网络共享在并发场景下不稳定。

状态码速查表

湿跑过程中要是出现问题,Stunner 不会弹任何对话框,所有信息都通过命令的整数状态码反馈出来。脚本拿到状态码后自己判断怎么处理。约定:0 是成功,正数是状态信息(不是错),负数是错误。下表把全部状态码按数值排好,现场出问题时直接对照查。

代码:含义

正数:状态信息

999:Stunner Client 已接受退出

52:已连接,托盘正在移动

51:已连接,托盘已关闭

50:已连接,托盘已打开

33:已连接,测量已暂停

32:已连接,等待加载下一块 Stunner Plate

31:已连接,测量进行中

30:已连接,测量正在初始化

25:已连接,测量成功

23:已连接,测量已启动

21:已连接,无测量任务

20:访问权空闲

4:托盘本来就是关着的

3:托盘本来就是开着的

1:访问权已经在你手里

0:成功

0:命令执行成功

负数:错误(脚本必须处理)

−1:无访问权

−2:仪器状态不对(常因前一动作未完成)

−3:打不开托盘

−4:关不上托盘

−5:托盘位置不对

−9:解析实验定义出错

−10:解析样品定义出错

−11:找不到 pump profile

−12:pump profile 里没数值

−13:未定义样品

−14:托盘开位超时

−15:条码无效

−16:没有条码扫描器

−17:条码扫描器超时

−22:测量初始化失败

−24:测量失败

−26:测量失败:chip ID 未知

−31:测量进行中,命令无法执行

−52:托盘移动中,命令无法执行

−61:存空白:空白实验来自其他仪器

−62:存空白:空白实验超过 100 天

−63:存空白:仪器在空白测量后做过校准

−64:存空白:找不到可复现的空白

−65:存空白:找不到文件

−66:存空白:按列指定的 sample group 名错误

−67:存空白:按名称指定的 sample group 错误

−68:存空白:存在多个 sample group,需明确指定

−99:超时

−100:访问被本地操作中断

−102:plate ID 无效

−103:plate ID 已经测过

−104:必须等所有板测完才能取结果

−106:仪器里没有板

−111:仪器状态不对(描述与 −2 相同)

−120:自动化 License 未激活

负数:Stunner.dll / 通信内部错(可调 GetLastInternalError)

−200:TCP 连不上

−201:DLL 内部错:无法把返回字符串转成期望参数

−202:DLL 内部错:无法把状态码转成整数

负数:命令 / 参数 / 板型 / 应用层

−300:未知命令

−400:参数不全

−401:作为参数的文件找不到或读不到

−500:未明确错误

−901:仪器上未安装该应用

−902:实验定义里 plate type 不识别

−903:plate type 不能用于该应用

−904:plate type 不能用于该仪器

−905:应用加载失败

−906:该板需要更新光程文件

常见错误码怎么应对

上面的完整表平时作为字典查就够了。日常生产里高频出现的只有下面几个,先把它们的处理逻辑写进脚本。

### 推荐的统一处理方式

生产脚本里比较整齐的做法,是把"看到这个状态码该做什么"集中写在一个地方。不必每条命令调完都各自处理一遍。常见的做法是把应对动作归成四种:

- 能自动重试就重试;

- 不行就降级用备选方案(比如条码读不到就改用明确的 plate_ID);

- 再不行就停产线;

- 最严重就报警让人介入。

绝大多数错误码都能归到这四种之一,极少数需要特殊处理的单独列出来。这样的好处:脚本本身更整齐,出问题时也容易看出是在哪一步触发的。

仪器外形尺寸

下面两张是 Stunner RADLS S/N 903001 及以上、Stunner AF S/N 904001 及以上的官方尺寸图。S/N 902001–903000 这一段的图纸在 Manual Appendix 3 里,数据略有差异。主要差异是 Stunner Plate 中心在工作平面上的 Y 坐标:老批次 428.08 mm,新批次 423.44 mm。机械臂落板位置要按实际序列号调整。

Stunner 仪器底面尺寸图(S/N 903001+ / 904001+)。从仪器后参考边到 Stunner Plate 中心是 423.44 mm,从侧参考边到 Stunner Plate 中心是 338.2 mm;两个 12 mm 定位销孔的间距是 200 mm;托盘伸出方向相对底板的偏移分别是 139.59 mm 和 60.41 mm。所有尺寸单位 mm。

Stunner 仪器顶面投影尺寸(S/N 903001+ / 904001+)。主机箱体 575 × 371.6 mm;托盘从主机伸出 153.12 mm,机械臂搬板时要为这段空间留出余量。

机械臂路径要注意两件事:一是托盘伸出后的 153.12 mm 区域要保持留空。机械臂从板的正上方垂直下放,不能沿托盘伸出方向斜插。二是 Stunner 顶部有进气口,做堆叠或加防尘罩之前要参照说明书,留足散热空间。

Stunner Plate 尺寸

Stunner Plate 的外框尺寸遵循 SBS 96 板标准,机械臂的抓取参数可以直接套用 SBS 设置。但孔位排布和普通 96 板不一样:板上横排 6 条微流控 strip,每条 16 个加样孔,共 96 个。脚本里写孔位时,要按 Stunner 自己的命名规则。

Stunner Plate 工程图。外框 85.48 × 127.76 mm,符合 SBS 96 板标准;Frame 高 10 mm,上面贴 1.54 mm 厚的微流控 Strip,总高约 11.5 mm。三视图含正面孔位、侧面剖视(Section A-A)和背面定位特征,单位 mm。

比色皿适配板:更适合单机使用

除 Stunner Plate 之外,Stunner 还支持一种比色皿适配板(Cuvette Plate)。外框尺寸和 Stunner Plate 一样,也符合 SBS 标准,但高度和重量差别比较大。机械臂的抓取参数和搬运速度都要按 Cuvette Plate 单独配置。在 API 中使用时,实验定义里 dropplate_type 改成 "Cuvette Plate"。

合适

单机使用

手动加样、对样品体积或波长有特殊要求、需要更大光程的场景。一次测 8 个样品,适合手动加样。

不太合适

自动化场景

一次只能测 8 个样品,比色皿的装填和密封需要人工完成。自动化带来的效率提升有限,反而会增加机械臂操作的出错概率。

如果客户场景确实需要用比色皿,通常把比色皿测量留在单机模式下进行。自动化的范围只覆盖 Stunner Plate 上的测量。

端到端示例:一段完整的 C# 脚本

手册 Appendix 1 给了一段完整的 C# 脚本,把整套指南讲过的概念串在一起。这里做了少量注释和缩进调整。它展示一次"两个 sample group、8 个孔的实验"从建立连接到取结果的完整流程。

这段代码里有几处工程细节,写生产脚本时要保留:

这段脚本跑完之后,Get_Results 返回的 results 字符串格式如下(手册 Table 14):

几个读结果的要点:

替换 IP 和三段字符串之后,这段代码可以直接作为第一个 Stunner 自动化脚本的起点。

Performance Verification:仪器准确性验证

Performance Verification(PV,性能验证)是一套独立的仪器准确性检查流程。它用一组 Hellma 认证参考物质(CRM),装在 Cuvette Plate 里。验证项包括吸光度准确性、精密度和线性,以及波长准确性、杂散光和分辨率,看 Stunner 是否仍然符合规范。验收标准跟美国药典 USP <857> 和欧洲药典 Ph. Eur. 2.2.25 对齐,是 GMP 项目里 IQ/OQ/PV 流程的一部分。

跟日常自动化测量不同,PV 的实验定义、样品定义、结果定义都是专门格式:

推荐做法:JSON 字符串手写很容易出错。Stunner Client 软件里有 Edit CRM 和 Edit Criteria 两个工具。用它们在界面上配好每支 Hellma 比色皿的认证数据和需要的验收标准。然后导出成字符串,粘进 API 脚本。手册原文(§6)推荐用这种方式代替手写。详细流程见 Stunner Software User Guide §3.5。

在自动化集成项目里,PV 通常作为独立的合规验证脚本单独维护,不混在日常生产脚本里。一般由 QA 团队按周期(比如每月或每季度)手动触发,或者由调度系统在排程窗口里调用。

手册 §6.1 给出了 PV 的三段字符串示例:

实验定义(PV 专用)

和普通实验比,PV 实验定义短得多,不需要 [Import samples] 段,也不需要 DLS 参数。三行写定:实验名随意,后两行是 PV 的硬约束。

样品定义(JSON,结构示意)

这里有两段独立的 JSON。前一段(以 CRM_ 开头的部分) 装的是每支 Hellma 比色皿的认证数据。内容有名称、型号、序列号、校准证书编号。还有每个特征波长上的认证吸光度和不确定度(MU)。换了不同序列号的比色皿,这一段就要换。建议用 Stunner Client 的 Edit CRM 工具配好后导出,不要手填:序列号和小数位太多,手输容易错。

后一段(以 Criteria_ 开头的部分) 是验收标准:吸光度的最大允差、精密度、线性度;波长准确性、杂散光、分辨率的阈值。这部分对齐 USP <857> / Ph. Eur. 2.2.25,通常一份配好就长期不动。如果实验室有自己的内控标准想拧得更严,也可以在 Client 的 Edit Criteria 里改。

结果定义

PV 的 return text 是按 Test 项分行的 PASS/FAIL 报告(Date / Time / Plate ID / Test / Result),不是一堆数据列。Get_Results 触发后,还会在结果共享目录里另外生成 6 份 PDF 报告 + 1 份原始数据文件。这些文件可以直接进合规归档。

交付清单

验收完成之后,系统通常由客户接手维护。建议在交付时把下面这份清单一并留给客户。半年甚至一年后再去排查问题,要查的资料应该都能在这一份里找到。