用途:把 NI-DAQmx 的 C 函数签名翻译成 Data Acquisition Toolbox R2026a+ 中正确的 calldaqlib MATLAB 调用。适用于用户明确提到 calldaqlib 或某个 DAQmx* C 函数、需要 daq 对象未暴露的能力(可重触发、导出信号、参考触发、增强混叠抑制、数字滤波)、在驱动层调试,或把已有 C/LabVIEW 代码迁移到 MATLAB。若能力用 daq 对象即可实现(dq.Rate、addtrigger、addclock、addinput、read、write、start、stop),或涉及基于 Session 的旧接口,则不应使用本技能。
主要能力与用法:calldaqlib 覆盖六类调用形式。配置类(DAQmxCfg*)需先建 dq = daq("ni") 并 addinput,再调用,例如 calldaqlib(dq, "DAQmxCfgSampClkTiming", "/Dev1/PFI0", 5000, "DAQmx_Val_Rising", "DAQmx_Val_FiniteSamps", uint64(1000))。设置类(DAQmxSet*)如 calldaqlib(dq, "DAQmxSetStartTrigRetriggerable", true)。标量获取类返回以 DevN_chanName 为键的字典,如 result = calldaqlib(dq, "DAQmxGetSampClkRate")。字符串获取类需先传 "" 占位再传 bufferSize,如 calldaqlib(dq, "DAQmxGetSampClkSrc", "", 256)。数组获取类需预分配类型化缓冲,如 calldaqlib(dEmpty, "DAQmxGetDevAISupportedMeasTypes", "Dev1", zeros(1,32,"int32"), 32),再用 result(result ~= 0) 过滤。设备级 API(C 签名无 taskHandle)需用未加通道的空 daq 对象并传设备名,如 calldaqlib(dEmpty, "DAQmxGetDevIsSimulated", "Dev1"),返回普通标量而非字典;DAQmxConnectTerms/DAQmxDisconnectTerms 在 X 系列设备上同样用空 daq 对象。
限制与注意事项:taskHandle 由 daq 对象隐式持有,绝不传入;calldaqlib 会遍历所有内部任务,多任务时无关任务会告警,针对单一测量类型的设置需拆分为多个 daq 对象。start() 会用 dq.Rate 覆盖 calldaqlib 设置的速率与时钟源,建议先设 dq.Rate,或改用 DAQmxStartTask/DAQmxStopTask 绕过提交。枚举一律用字符串形式(如 "DAQmx_Val_RisingSlope"),不要用整数。DAQmxCreateTask 与 DAQmxLoadTask 无法通过 calldaqlib 工作。属性值为标量,多通道需循环。通道/设备路径不在客户端校验,错误路径直到 start() 才报错。缓冲区过小返回 NI 错误 -200228,可按提示的字节数重试。触发支持因设备而异,错误 -200077 会列出支持的枚举值。可重触发模式需配合 DAQmx_Val_FiniteSamps,不能与 ContSamps 同用。建议使用具体获取函数名而非通用属性获取函数。参考资料包括 hot-signatures.md、enum-constants.md、common-mistakes.md。