1. 引言
现代园艺和农业越来越依赖自动化来优化资源使用,尤其是水资源——在许多地区这是一种稀缺资源。一个智能灌溉控制器根据实时土壤状况而非固定定时器自动浇水,减少浪费,防止过度或不足灌溉,并支持植物更健康地生长。
本案例研究聚焦于使用UML状态机图 (也称为状态图)。该图捕捉了系统的生命周期、决策点以及对湿度读数、超时和用户干预等事件的响应。
该设计使用PlantUML语法,类似于提供的咖啡店示例,能够优雅地建模复合状态、守卫条件、动作以及错误/恢复路径。
2. 问题陈述与需求
一个用于家庭花园或小型温室的自动化灌溉控制器必须:

- 大部分时间处于低功耗待机模式。
- 根据计划(定时器触发)周期性唤醒以检查条件。
- 进入检测状态,通过电容式或电阻式传感器读取土壤湿度。
- 如果湿度 < 30%(可配置的干燥阈值),开始灌溉通过打开电磁阀或启动水泵来实现。
- 如果湿度 ≥ 30%,返回到待机(无需浇水)。
- 当灌溉时,持续(或定期)监测湿度。
- 当满足以下条件时,停止灌溉并关闭阀门:
- 湿度达到80%(可配置的湿润阈值)→ 目标达成。
- 一个安全超时超时(例如30分钟)→ 若传感器故障,可防止溢水、管道破裂或电气问题。
- 停止灌溉后,进入关机状态。
- 在关机状态下,等待手动确认(按钮按下或应用程序命令)后,再返回到待机——这允许用户检查系统或在需要时进行手动干预。
- 通过转入错误状态并提供恢复选项,以优雅地处理故障(例如传感器故障、阀门卡住)。
其他期望行为(此处保持简单):
- 在特定时间段内不进行灌溉(由计划/定时器处理)。
- 日志记录或通知超出了此核心状态机的范围。
3. 使用的关键状态机概念
- 状态: 空闲/待机,检测,灌溉,关机,错误。
- 复合状态: 灌溉包含内部监控逻辑(尽管此处为简化起见保持扁平化)。
- 转换:
- 由事件触发(定时器、湿度读数、超时)。
- 由条件保护 [湿度 < 30%],[湿度 >= 80%]。
- 动作: /open_valve(),/close_valve(),/notify_user(),等。
- 初始/最终伪状态: [*] 表示开始/结束。
- 自转换 以及恢复循环。
4. PlantUML 中的状态图
以下是实现所述行为的完整 PlantUML 代码。它遵循咖啡店示例的规范(skinparam 样式,适当使用复合状态,条件用 [] 表示,动作用 / 表示)。
plantuml
PlantUML
Edit PlantUML in VPasCode
@startuml
skinparam {
' 整体样式
' 颜色
ArrowColor #333333
ArrowFontColor #333333
BackgroundColor #FFFFFF
BorderColor #333333
' 状态样式
State {
BorderColor #005073
BackgroundColor #E6F5FF
FontColor #005073
}
}
[*] --> Standby
Standby --> Sensing : timer_triggers()
Sensing --> Irrigating : soil_moisture < 30%
Sensing --> Standby : soil_moisture >= 30%
Irigating --> Shutdown : soil_moisture >= 80% 或 safety_timeout()
Irigating --> Shutdown : safety_timeout() // 备用超时保护
Shutdown --> Standby : user_confirms_reset()
Standby --> [*]
@enduml 
图示说明
- 待机 — 默认低功耗/空闲状态。
- 检测 — 由定时器触发的快速检查;避免不必要的灌溉。
- 灌溉(复合)— 具有内部的活跃灌溉阶段灌溉 子活动。
- 在达到目标湿度或安全超时时退出。
- 关机 — 灌溉后暂停状态,需确认后才能恢复自动化(安全功能)。
- 错误 — 故障隔离状态,需手动恢复切换。
5. 设计原理与优势
- 节水 — 仅在真正需要时才进行灌溉(基于土壤湿度而非时间)。
- 防洪 — 灌溉状态有两个退出条件(湿度目标 + 超时)。
- 用户安全与控制 — 异常停止后需手动确认,防止潜在问题后自动重启。
- 可扩展性 — 易于添加状态(例如,检测到降雨, 电量低, 冬季模式)或调整阈值。
- 低复杂度 — 尽可能扁平化,仅在逻辑分组能提升清晰度时才使用复合结构(如灌溉状态)。
该设计在鲁棒性、安全性和简洁性之间取得平衡,适用于嵌入式微控制器实现(如Arduino、ESP32等)。
6. 结论
状态机状态机为建模反应式控制系统(如智能灌溉控制器)提供了极佳的形式化方法。通过明确定义状态、事件、守卫和动作,工程师可在编写代码前分析系统行为、边缘情况和错误恢复。
上述PlantUML表示既可作为文档,也可作为实现蓝图。通过PlantUML工具或在线服务器渲染,可生成清晰专业的图表,适用于需求评审、代码生成或教授UML概念。
未来可扩展功能包括:
- 天气API集成(若预报有雨则跳过感应)。
- 多个区域,每个区域具有独立的湿度阈值。
- 超时或错误时通过手机应用发送通知。
本案例研究展示了看似简单的自动化问题如何从结构化的基于状态的建模中获得巨大收益。
- 3D打印机状态机的全面逐步指南:本指南应用状态机概念于3D打印系统,详细说明其操作逻辑和自动化路径。
- 交互式状态机图工具:一种专门的基于网络的工具,用于创建和编辑状态机图,利用生成式人工智能功能进行实时行为建模。
- 理解UML中的状态机图:本教程提供全面概述,介绍如何使用UML中的状态机图对系统行为进行建模。
- 结合人工智能的UML状态机图权威指南:本资源详细介绍了如何使用人工智能驱动的工具通过UML状态机图准确建模对象行为。
- 如何在UML中绘制状态机图?:本教程提供详细的创建图示和命名转换的说明,以建模实体历史和事件.
- 使用Visual Paradigm AI掌握状态图:自动化收费系统指南:本指南提供使用人工智能增强的状态图对收费系统软件所需的复杂逻辑进行建模和自动化。
- 状态机图教程:本教程解释了符号和语法用于建模单个类对象、用例和整个系统动态行为的符号和语法。
- Visual Paradigm AI套件:智能建模工具全面指南: 本概述详细介绍了该平台的AI聊天机器人支持技术建模,包括状态机和其他行为图。
- Visual Paradigm – UML状态机图工具: 一款功能丰富的在线工具概述,专为架构师设计,用于构建、编辑和导出精确的状态机模型通过基于云的界面使用。
- 状态图快速教程:几分钟内掌握UML状态机: 一份面向初学者的教程,用于创建和理解状态图,重点在于核心概念和实用的建模技术.











