文章目录
-
- 每日一句正能量
- 一、引言:1微升的生死线
- 二、系统架构:从剂量指令到微升级输送
-
- [2.1 完整系统架构](#2.1 完整系统架构)
- 三、步进电机精密控制:从步进到微步
-
- [3.1 步进电机驱动原理](#3.1 步进电机驱动原理)
- [3.2 电机控制代码实现](#3.2 电机控制代码实现)
- 四、阻塞检测:输注安全的最后一道防线
-
- [4.1 阻塞检测原理](#4.1 阻塞检测原理)
- [4.2 多维度阻塞检测算法](#4.2 多维度阻塞检测算法)
- 五、安全机制:故障安全设计
-
- [5.1 安全状态机](#5.1 安全状态机)
- [5.2 双MCU冗余架构](#5.2 双MCU冗余架构)
- 六、机械传动与剂量精度
-
- [6.1 精密机械结构](#6.1 精密机械结构)
- 七、总结与展望

每日一句正能量
一个家最好的风水是和气暖心。
真正决定家庭氛围的,是成员之间的态度。"和气" 代表不争吵、不冷战;"暖心" 则是彼此关怀、相互体谅。一个家即使陈设简单,只要充满笑声和温度,就是最好的风水。
一、引言:1微升的生死线
全球约有5.37亿糖尿病患者,其中约1000万依赖胰岛素泵维持生命。胰岛素泵通过持续皮下输注(CSII)模拟人体胰腺功能,其核心挑战在于微升级(μL级)的剂量精度控制 和绝对可靠的安全保障。
剂量精度意味着什么?
- 1单位(U)胰岛素 = 0.01mL = 10μL(U100浓度)
- 典型基础率:0.05U/小时 ~ 2.0U/小时
- 0.05U = 0.5μL = 500纳升------相当于一滴水的1/40
- 剂量误差±5%在10U Bolus时仅为0.5U,但在0.5U时误差可达±0.025U,足以导致血糖波动
安全意味着什么?
- 阻塞(Occlusion)未检测:患者以为在输注,实际未给药→高血糖酮症酸中毒
- 过量输注:软件bug导致剂量计算错误→低血糖昏迷甚至死亡
- 因此胰岛素泵被归类为Class C(安全关键) 医疗器械,需符合IEC 62304和ISO 14971标准
本文将从机械传动、电机控制、阻塞检测、安全机制四个维度,深入讲解胰岛素泵的精密控制实现。
二、系统架构:从剂量指令到微升级输送
2.1 完整系统架构

上图展示了胰岛素泵的机械结构剖面:步进电机通过减速齿轮驱动精密螺杆,推动活塞将储药筒中的胰岛素经输注管路送入皮下组织。

上图展示了FAULHABER电机在胰岛素泵中的实际应用,包括步进电机、减速齿轮组和螺杆传动的完整布局。

上图展示了胰岛素泵的整体结构,包括储药筒、单向阀、输注端口等关键组件。

上图展示了不同驱动方式的胰岛素泵设计,包括SMA(形状记忆合金)驱动和电机驱动方案。

上图展示了开源低成本胰岛素泵的设计,验证了精密控制在低成本方案中的可行性。

上图展示了闭环人工胰腺系统的控制架构,包括胰岛素泵、CGM连续血糖监测和控制器之间的闭环反馈。

上图展示了胰岛素泵的完整控制系统架构,从用户交互到机械执行的五层设计。
关键参数:
- 剂量分辨率:0.05U(0.5μL)
- 精度:±5%(符合ISO 11608-1)
- 最大Bolus:25U
- 日总量上限:100U
- 阻塞压力阈值:2.0bar
三、步进电机精密控制:从步进到微步
3.1 步进电机驱动原理
胰岛素泵采用双极性步进电机(典型1.8°/步,200步/转),通过精密机械传动实现微升级剂量控制。
驱动模式演进:
| 模式 | 步距角 | 步数/转 | 扭矩 | 振动 | 适用场景 |
|---|---|---|---|---|---|
| 全步 | 1.8° | 200 | 100% | 大 | 粗略定位 |
| 半步 | 0.9° | 400 | 70% | 中 | 一般应用 |
| 1/8微步 | 0.225° | 1600 | 20% | 小 | 精密控制 |
| 1/16微步 | 0.1125° | 3200 | 10% | 极小 | 胰岛素泵 |

上图展示了步进电机从全步到1/16微步的电流矢量旋转过程,以及剂量与步数的线性映射关系。
微步细分原理:
通过控制两相线圈的电流比例(如IA:IB = cosθ:sinθ),使磁场矢量在两个整步位置之间平滑旋转。1/16微步意味着将1.8°细分为16份,每步仅0.1125°。
关键公式:
单步位移 = 导程 减速比 × 步数/转 × 微步数 = 0.5 mm 10 × 200 × 16 = 0.0156 μ m \text{单步位移} = \frac{\text{导程}}{\text{减速比} \times \text{步数/转} \times \text{微步数}} = \frac{0.5\text{mm}}{10 \times 200 \times 16} = 0.0156\mu\text{m} 单步位移=减速比×步数/转×微步数导程=10×200×160.5mm=0.0156μm
单步体积 = 单步位移 × 活塞面积 = 0.0156 μ m × 19.6 mm 2 = 0.031 μ L \text{单步体积} = \text{单步位移} \times \text{活塞面积} = 0.0156\mu\text{m} \times 19.6\text{mm}^2 = 0.031\mu\text{L} 单步体积=单步位移×活塞面积=0.0156μm×19.6mm2=0.031μL
0.05U所需步数 = 0.5 μ L 0.031 μ L/步 ≈ 16 步 \text{0.05U所需步数} = \frac{0.5\mu\text{L}}{0.031\mu\text{L/步}} \approx 16\text{步} 0.05U所需步数=0.031μL/步0.5μL≈16步
3.2 电机控制代码实现
c
/**
* @file stepper_motor_control.c
* @brief 胰岛素泵步进电机精密控制(1/16微步,双极性驱动)
* @note 符合IEC 62304 Class C安全要求
*/
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
/* ==================== 硬件配置 ==================== */
#define MOTOR_STEP_ANGLE 1.8f // 度/步
#define MICROSTEP_DIVIDER 16 // 1/16微步
#define GEAR_RATIO 10.0f // 减速比
#define SCREW_LEAD 0.5f // mm/rev
#define PISTON_AREA 19.635f // mm² (直径5mm)
#define INSULIN_CONCENTRATION 100.0f // U/mL (U100)
// 计算常量
#define STEPS_PER_REV (200 * MICROSTEP_DIVIDER) // 3200 steps/rev
#define STEPS_PER_REV_OUTPUT (STEPS_PER_REV * GEAR_RATIO) // 32000 steps/rev
#define MM_PER_STEP (SCREW_LEAD / STEPS_PER_REV_OUTPUT) // 0.0156μm/step
#define UL_PER_STEP (MM_PER_STEP * PISTON_AREA / 1000.0f) // 0.031μL/step
#define STEPS_PER_UNIT (10.0f / UL_PER_STEP) // 322.58 steps/U
/* ==================== 电机驱动器接口 ==================== */
typedef struct {
uint16_t currentA; // 线圈A电流 (DAC值 0~4095)
uint16_t currentB; // 线圈B电流 (DAC值 0~4095)
uint8_t direction; // 方向 0=正向 1=反向
uint32_t stepCount; // 累计步数
uint32_t targetSteps; // 目标步数
bool isMoving; // 运动状态
} StepperMotor_t;
StepperMotor_t g_motor = {0};
/* ==================== 正弦微步电流表(1/16微步)==================== */
// 电流比例:I = I_max * sin(θ), 其中 θ = step * 2π / 16
static const uint16_t sinTable[17] = {
2048, 2832, 3547, 4096, 4434, 4540, 4400, 4016,
3416, 2624, 1704, 704, 96, 288, 800, 1536,
2048 // 重复第0点便于循环
};
/**
* @brief 设置电机线圈电流(微步驱动)
* @param stepIndex 微步索引 0~15
* @param direction 方向 0=正向 1=反向
*/
void motorSetMicrostep(uint8_t stepIndex, uint8_t direction)
{
uint8_t idx = stepIndex % 16;
uint16_t ia, ib;
if (direction == 0) {
// 正向:IA = sin(θ), IB = cos(θ) = sin(θ + π/2)
ia = sinTable[idx];
ib = sinTable[(idx + 4) % 16]; // +4 = +90° = π/2
} else {
// 反向:电流反向
ia = 4096 - sinTable[idx];
ib = 4096 - sinTable[(idx + 4) % 16];
}
// 输出到DAC(假设12bit DAC,满量程对应最大电流)
DAC_SetChannel1Data(DAC_ALIGN_12B_R, ia);
DAC_SetChannel2Data(DAC_ALIGN_12B_R, ib);
g_motor.currentA = ia;
g_motor.currentB = ib;
}
/**
* @brief 单步运动(带电流斜坡和反电动势补偿)
* @note 每步包含:电流更新→延时→电流采样→反电动势补偿
*/
void motorStepSingle(void)
{
static uint8_t microstepIndex = 0;
// 更新微步电流
motorSetMicrostep(microstepIndex, g_motor.direction);
// 微步进
if (g_motor.direction == 0) {
microstepIndex = (microstepIndex + 1) % 16;
} else {
microstepIndex = (microstepIndex + 15) % 16; // -1 mod 16
}
// 精确步进延时(控制速度)
// 基础率:0.05U/h = 0.5μL/h = 16steps/h = 1step/225s
// Bolus:1U/s = 323steps/s = 1step/3.1ms
uint32_t stepDelayUs = calculateStepDelay();
delayMicroseconds(stepDelayUs);
// 电流采样(用于堵转检测)
float currentA = ADC_GetCurrentA();
float currentB = ADC_GetCurrentB();
float currentRMS = sqrtf(currentA*currentA + currentB*currentB) / 1.414f;
// 反电动势补偿(高速时提升电流)
float backEMF = currentRMS * MOTOR_RESISTANCE; // 简化模型
float compensation = 1.0f + backEMF / MOTOR_VOLTAGE;
if (compensation > 1.3f) compensation = 1.3f; // 限制补偿量
// 更新电流(带补偿)
uint16_t compensatedA = (uint16_t)(g_motor.currentA * compensation);
uint16_t compensatedB = (uint16_t)(g_motor.currentB * compensation);
DAC_SetChannel1Data(DAC_ALIGN_12B_R, compensatedA);
DAC_SetChannel2Data(DAC_ALIGN_12B_R, compensatedB);
g_motor.stepCount++;
}
/**
* @brief 剂量到步数的精确转换
* @param units 胰岛素剂量(U)
* @return 所需步数
*/
uint32_t doseToSteps(float units)
{
// 安全校验
if (units < 0.0f || units > 25.0f) {
return 0; // 非法剂量
}
// 四舍五入到最小分辨率(0.05U = 16steps)
float steps = units * STEPS_PER_UNIT;
uint32_t roundedSteps = (uint32_t)(steps + 0.5f);
// 对齐到最小步数(16步的整数倍)
roundedSteps = ((roundedSteps + 8) / 16) * 16;
return roundedSteps;
}
/**
* @brief 执行指定剂量的输注
* @param units 目标剂量(U)
* @return true if success
*/
bool motorDeliverDose(float units)
{
// 1. 安全校验
if (units < 0.05f || units > 25.0f) {
return false;
}
// 2. 检查日总量上限
if (getDailyTotal() + units > 100.0f) {
triggerAlarm(ALARM_DAILY_LIMIT);
return false;
}
// 3. 检查IOB(活性胰岛素)
float iob = calculateIOB();
if (units + iob > MAX_IOB) {
triggerAlarm(ALARM_IOB_EXCEEDED);
return false;
}
// 4. 转换为步数
uint32_t targetSteps = doseToSteps(units);
g_motor.targetSteps = targetSteps;
g_motor.stepCount = 0;
g_motor.isMoving = true;
// 5. 执行输注
for (uint32_t i = 0; i < targetSteps; i++) {
motorStepSingle();
// 每100步检查阻塞
if (i % 100 == 0) {
if (checkOcclusion()) {
motorEmergencyStop();
triggerAlarm(ALARM_OCCLUSION);
return false;
}
}
// 每1000步检查编码器反馈
if (i % 1000 == 0) {
if (!checkEncoderFeedback()) {
motorEmergencyStop();
triggerAlarm(ALARM_ENCODER_FAULT);
return false;
}
}
}
// 6. 输注完成
g_motor.isMoving = false;
addToDailyTotal(units);
logDeliveryEvent(units, getTimestamp());
return true;
}
四、阻塞检测:输注安全的最后一道防线
4.1 阻塞检测原理
阻塞(Occlusion)是胰岛素泵最常见的故障之一,可能由以下原因导致:
- 输注管路折叠或扭曲
- 针头堵塞(纤维蛋白凝块)
- 胰岛素结晶
- 输注部位皮下组织硬结

上图展示了三种阻塞检测场景:正常输注压力稳定、渐进阻塞压力缓慢上升、电机堵转电流飙升。
检测方法:
| 方法 | 原理 | 灵敏度 | 响应时间 | 成本 |
|---|---|---|---|---|
| 压力传感器 | 检测输注管路压力 | 高 | <1s | 中 |
| 电机电流检测 | 堵转时电流上升 | 中 | <2s | 低 |
| 编码器反馈 | 电机转动但活塞未动 | 高 | <0.5s | 高 |
| 超声波气泡检测 | 检测管路中的气泡 | 高 | 实时 | 高 |
4.2 多维度阻塞检测算法
c
/**
* @file occlusion_detection.c
* @brief 多维度阻塞检测算法(压力 + 电流 + 编码器)
*/
#include <stdint.h>
#include <stdbool.h>
/* ==================== 检测阈值配置 ==================== */
#define OCCLUSION_PRESSURE_THRESHOLD 2.0f // bar
#define OCCLUSION_PRESSURE_SLOPE_THRESHOLD 0.5f // bar/s
#define OCCLUSION_CURRENT_THRESHOLD 0.6f // A
#define OCCLUSION_CURRENT_SLOPE_THRESHOLD 0.2f // A/s
#define OCCLUSION_ENCODER_MAX_ERROR 5 // steps
/* ==================== 压力检测 ==================== */
typedef struct {
float pressureBuffer[10]; // 压力历史(100ms采样)
uint8_t index;
float baselinePressure; // 基线压力
bool isCalibrated;
} PressureMonitor_t;
PressureMonitor_t g_pressureMon = {0};
bool checkPressureOcclusion(void)
{
// 读取当前压力
float currentPressure = ADC_GetPressureSensor();
// 更新滑动窗口
g_pressureMon.pressureBuffer[g_pressureMon.index] = currentPressure;
g_pressureMon.index = (g_pressureMon.index + 1) % 10;
// 计算压力斜率(1秒内的变化)
float pressureSlope = (currentPressure - g_pressureMon.pressureBuffer[g_pressureMon.index]) * 10.0f;
// 阈值判断
if (currentPressure > OCCLUSION_PRESSURE_THRESHOLD) {
return true; // 绝对压力超限
}
if (pressureSlope > OCCLUSION_PRESSURE_SLOPE_THRESHOLD && currentPressure > g_pressureMon.baselinePressure * 2) {
return true; // 压力快速上升(渐进阻塞)
}
return false;
}
/* ==================== 电流检测 ==================== */
typedef struct {
float currentBuffer[50]; // 电流历史(10ms采样,500ms窗口)
uint8_t index;
float baselineCurrent; // 基线电流
} CurrentMonitor_t;
CurrentMonitor_t g_currentMon = {0};
bool checkCurrentStall(void)
{
float currentRMS = getMotorCurrentRMS();
// 更新滑动窗口
g_currentMon.currentBuffer[g_currentMon.index] = currentRMS;
g_currentMon.index = (g_currentMon.index + 1) % 50;
// 计算电流斜率
float currentSlope = (currentRMS - g_currentMon.currentBuffer[g_currentMon.index]) * 50.0f;
// 阈值判断
if (currentRMS > OCCLUSION_CURRENT_THRESHOLD) {
return true; // 电流超限(堵转)
}
if (currentSlope > OCCLUSION_CURRENT_SLOPE_THRESHOLD && currentRMS > g_currentMon.baselineCurrent * 2) {
return true; // 电流快速上升(渐进堵转)
}
return false;
}
/* ==================== 编码器反馈检测 ==================== */
typedef struct {
uint32_t encoderPosition; // 编码器读数
uint32_t motorStepCount; // 电机步数
uint32_t lastCheckStep; // 上次检查时的步数
} EncoderMonitor_t;
EncoderMonitor_t g_encoderMon = {0};
bool checkEncoderSlip(void)
{
uint32_t currentStep = g_motor.stepCount;
uint32_t stepDelta = currentStep - g_encoderMon.lastCheckStep;
if (stepDelta >= 1000) { // 每1000步检查一次
uint32_t currentEncoder = getEncoderPosition();
uint32_t encoderDelta = currentEncoder - g_encoderMon.encoderPosition;
// 编码器增量应与步数增量匹配(考虑减速比)
uint32_t expectedEncoderDelta = stepDelta / GEAR_RATIO;
int32_t error = (int32_t)encoderDelta - (int32_t)expectedEncoderDelta;
g_encoderMon.lastCheckStep = currentStep;\n g_encoderMon.encoderPosition = currentEncoder;
if (abs(error) > OCCLUSION_ENCODER_MAX_ERROR) {
return true; // 编码器与电机步数不匹配(打滑/空转)
}
}
return false;
}
/* ==================== 综合阻塞检测 ==================== */
typedef enum {
OCCLUSION_NONE = 0, // 无阻塞
OCCLUSION_WARNING, // 警告(压力上升但未超限)
OCCLUSION_DETECTED, // 确认阻塞
OCCLUSION_SEVERE // 严重阻塞(多指标同时异常)
} OcclusionLevel_t;
OcclusionLevel_t checkOcclusion(void)
{
bool pressureAlarm = checkPressureOcclusion();
bool currentAlarm = checkCurrentStall();
bool encoderAlarm = checkEncoderSlip();
uint8_t alarmCount = (uint8_t)pressureAlarm + (uint8_t)currentAlarm + (uint8_t)encoderAlarm;
switch (alarmCount) {
case 0:
return OCCLUSION_NONE;
case 1:
// 单一指标异常→警告,继续观察
return OCCLUSION_WARNING;
case 2:
// 两个指标异常→确认阻塞
return OCCLUSION_DETECTED;
case 3:
// 三个指标同时异常→严重阻塞
return OCCLUSION_SEVERE;
default:
return OCCLUSION_NONE;
}
}
五、安全机制:故障安全设计
5.1 安全状态机

上图展示了胰岛素泵的安全机制状态机,从正常输注到故障安全模式的完整转移路径。
核心原则:任何故障必须导致安全状态(Fail-Safe),禁止自动恢复输注。
状态定义:
| 状态 | 说明 | 电机 | 报警 | 恢复方式 |
|---|---|---|---|---|
| IDLE | 待机 | 断电 | 无 | 用户操作 |
| PRIMING | 充注 | 低速运行 | 无 | 自动完成 |
| BASAL | 基础率 | 微步运行 | 无 | 定时触发 |
| BOLUS | 大剂量 | 高速运行 | 无 | 自动完成 |
| WARNING | 警告 | 限速运行 | 黄色 | 自动/人工 |
| EMERGENCY | 紧急停止 | 锁定 | 红色 | 人工复位 |
| FAIL-SAFE | 故障安全 | 物理隔离 | 红色 | 返厂维修 |
5.2 双MCU冗余架构
c
/**
* @file dual_mcu_safety.c
* @brief 双MCU冗余安全架构(主MCU + 安全MCU)
*/
#include <stdint.h>
/* ==================== 主从MCU通信协议 ==================== */
typedef struct {
uint32_t sequence; // 序列号(防止重放攻击)
uint32_t timestamp; // 时间戳(检测延迟)
float requestedDose; // 请求剂量
float deliveredDose; // 已交付剂量
uint32_t motorSteps; // 电机步数
float pressure; // 压力读数
float current; // 电流读数
uint16_t crc16; // CRC校验
} SafetyPacket_t;
/* ==================== 安全MCU独立监控 ==================== */
void safetyMCUMonitorTask(void)
{
SafetyPacket_t packet;
uint32_t lastSequence = 0;
uint32_t watchdogCount = 0;
for (;;) {
// 1. 接收主MCU数据(通过SPI/UART)
if (receiveSafetyPacket(&packet)) {
// 2. 序列号检查(防止数据重复/丢失)
if (packet.sequence != lastSequence + 1) {
triggerEmergencyStop();
continue;
}
lastSequence = packet.sequence;
// 3. 时间戳检查(检测主MCU卡顿)
uint32_t currentTime = getTickMs();
if (currentTime - packet.timestamp > 100) { // 100ms超时
triggerEmergencyStop();
continue;
}
// 4. CRC校验
if (!verifyCRC(&packet)) {
triggerEmergencyStop();
continue;
}
// 5. 剂量一致性检查(独立计算验证)
float expectedSteps = packet.requestedDose * STEPS_PER_UNIT;
if (fabsf(packet.motorSteps - expectedSteps) > 16) { // 允许1个最小剂量误差
triggerEmergencyStop();
continue;
}
// 6. 压力合理性检查
if (packet.pressure > 2.5f || packet.pressure < -0.1f) {
triggerEmergencyStop();
continue;
}
// 7. 电流合理性检查
if (packet.current > 0.8f || packet.current < 0.0f) {
triggerEmergencyStop();
continue;
}
// 8. 喂狗
watchdogCount = 0;
feedWatchdog();
} else {
// 通信超时
watchdogCount++;
if (watchdogCount > 10) { // 10次超时=1秒
triggerEmergencyStop();
}
}
delayMs(100);
}
}
/**
* @brief 触发紧急停止(硬件级)
* @note 直接切断电机驱动电源,不依赖软件
*/
void triggerEmergencyStop(void)
{
// 1. 立即切断电机驱动(硬件继电器)
MOTOR_ENABLE_GPIO->BSRR = MOTOR_ENABLE_PIN << 16; // 拉低
// 2. 锁定电机(短路制动)
DAC_SetChannel1Data(DAC_ALIGN_12B_R, 2048); // 中性电流
DAC_SetChannel2Data(DAC_ALIGN_12B_R, 2048);
// 3. 触发声光报警
enableAlarm(ALARM_TYPE_CRITICAL);
// 4. 记录故障日志
logFaultEvent(FAULT_EMERGENCY_STOP, getTimestamp(), getFaultFlags());
// 5. 进入故障安全状态(需人工复位)
enterFailSafeState();
}
六、机械传动与剂量精度
6.1 精密机械结构

上图展示了胰岛素泵的机械传动链:步进电机→减速齿轮→精密螺杆→活塞,以及各环节的误差来源分析。
传动链参数:
| 环节 | 参数 | 误差来源 | 误差贡献 |
|---|---|---|---|
| 步进电机 | 1.8°/步,±5%步距角 | 制造公差、温度 | 5% |
| 减速齿轮 | 10:1,±0.1°背隙 | 齿轮间隙、磨损 | 3% |
| 精密螺杆 | 导程0.5mm,±0.01mm | 螺距误差、热膨胀 | 2% |
| 活塞密封 | 面积19.6mm² | 摩擦、密封变形 | 2% |
| 温度漂移 | -20~50°C | 材料热膨胀 | 1% |
| 胰岛素粘度 | 温度相关 | 非牛顿流体特性 | 1.5% |
| RSS总误差 | --- | --- | ±6.2% |
精度提升措施:
- 闭环编码器反馈:光电编码器实时检测电机位置,消除累积误差
- 温度补偿:NTC热敏电阻监测电机温度,补偿热膨胀
- 定期校准:用户每3天执行一次零点校准
- 自适应电流控制:根据负载动态调整驱动电流,减少失步
七、总结与展望
胰岛素泵的精密控制是机械工程、电机控制、信号处理、安全设计的多学科交叉典范。本文从五个维度完整呈现了其技术实现:
- 系统架构:五层设计(用户交互→剂量计算→电机控制→机械执行→安全监控)
- 步进电机控制:1/16微步细分实现0.0156μm/步的位移精度
- 阻塞检测:压力+电流+编码器三维度综合检测,响应时间<1秒
- 安全机制:双MCU冗余、故障安全状态机、硬件级紧急停止
- 机械精度:传动链误差分析+闭环补偿,实现±5%剂量精度
未来发展方向:
- 闭环人工胰腺:结合CGM实现血糖自动闭环控制(已有产品如Medtronic 780G)
- 无管路贴片泵:直接贴敷皮肤,消除管路阻塞风险
- 智能算法:AI预测血糖趋势,提前调整基础率
- 超高精度:压电陶瓷驱动替代步进电机,实现纳升级精度
对于嵌入式开发者而言,胰岛素泵的开发经验可迁移至所有精密流体控制+安全关键场景,如注射泵、输液泵、微量注射泵等。
转载自:https://blog.csdn.net/u014727709/article/details/162706758
欢迎 👍点赞✍评论⭐收藏,欢迎指正