8.4 KiB
猪舍主控
简介
猪舍主控系统根据上位机的指令控制当前猪舍内所有设备(传感器,阀门,电机等),并汇聚当前猪舍传感器数据统一上报。本系统作为猪场智能化管理的重要组成部分,实现了猪舍环境的自动化监控与调节。
功能概述
与上位机交互
- 根据上位机指令定期采集栏内所有传感器的数据,并统一上报
- 根据上位机指令启动或关闭栏内设备,上位机发送的启动指令分两种:
- 常开指令:收到后启动设备,直到收到关闭指令后关闭设备
- 短暂开启指令:收到后启动设备,但需要上位机每过两秒发送一次指令,超过五秒没收到下一个开启指令或受到关闭指令将会关闭设备
- 定期检查栏内设备状态,发现异常立即上报上位机
- 定期向上位机发送心跳包
- 接收上位机发送的总线上各机器的位置和类型
- 根据上位机指令调整设备功率大小
- 接收上位机批量控制指令并执行
- 接收上位机发送的配置信息
与设备交互
- 控制栏内设备启停
- 调整风机等功率可调设备的功率
- 定时检查栏内设备状态
- 定时采集栏内数据
数据管理
- 保存总线上各机器的位置和类型
- 临时保存上位机发送的指令
- 保存上位机发送的配置信息
- 汇总栏内所有传感器数据
- 临时保存栏内设备故障信息,直到上报成功后清除
- 根据批量指令控制对应设备工作
猪舍控制器
猪舍控制器是一个用于监控和控制猪舍环境的系统。它可以通过LoRa与上位机通信,并通过RS485总线控制传感器和执行器设备。
协议栈和技术选型
本系统采用以下物联网标准协议栈:
物理层
- LoRa:低功耗广域网物理层技术,提供远距离无线传输能力
数据链路层和网络层
- LoRaWAN:基于LoRa物理层的广域网协议,提供设备认证、加密和网络管理
传输层
- CoAP:受限应用协议,轻量级的RESTful协议,适用于资源受限设备
应用层
- LwM2M:轻量级机器到机器协议,提供设备管理、固件更新等功能
数据格式
- SenML:传感器标记语言,标准化的传感器数据表示格式
这种协议栈选择具有以下优势:
- 低功耗:适合电池供电或节能要求高的场景
- 远距离传输:LoRa技术可实现数公里覆盖
- 标准化:采用业界标准协议,便于系统集成和扩展
- 安全性:LoRaWAN和CoAP均提供安全机制
- 互操作性:基于标准协议,便于与不同厂商设备集成
系统架构
猪舍控制器
├── 通信层 (LoRa)
├── 控制层 (核心逻辑)
├── 设备层 (传感器和执行器)
└── 存储层 (数据存储)
抽象接口设计
为了提高系统的可扩展性和可维护性,我们定义了以下抽象接口:
通信接口 (BaseComm)
定义了通信模块的基本操作,包括连接、断开连接、发送和接收数据等方法。
设备接口 (BaseDevice)
定义了设备的基本操作,包括连接、断开连接、读取数据、写入数据和获取状态等方法。
存储接口 (BaseStorage)
定义了存储模块的基本操作,包括保存、加载、删除数据等方法。
命令处理器接口 (BaseHandler)
定义了命令处理的基本操作,包括处理命令、注册和注销命令处理函数等方法。
设计理念
按照功能区分将传感器和执行器分别连接到不同的RS485总线上,可以带来以下优势:
- 减少总线负载:传感器通常需要频繁读取数据,而执行器可能需要较大的电流,分离可以避免相互干扰。
- 提高响应速度:控制命令可以直接发送到执行器总线,无需等待传感器数据采集完成。
- 增强系统稳定性:一条总线故障不会影响另一条总线上的设备。
- 便于维护:可以根据需要单独重启或维护某一总线。
配置说明
系统配置文件为 config.json,如果不存在,系统会根据默认配置创建。配置项包括:
LoRa通信配置
lora.address: 本机LoRa地址lora.frequency: 工作频率(MHz)lora.bandwidth: 带宽(kHz)lora.spreading_factor: 扩频因子lora.coding_rate: 编码率lora.encryption_key: 加密密钥
上位机配置
master.lora_address: 上位机LoRa地址master.protocol: 与上位机通信协议
总线配置
bus.sensor.port: 传感器总线串口bus.sensor.baudrate: 传感器总线波特率bus.actuator.port: 执行器总线串口bus.actuator.baudrate: 执行器总线波特率
日志配置
log.level: 日志级别 (DEBUG, INFO, WARNING, ERROR)log.file_path: 日志文件路径log.max_size: 日志文件最大大小log.backup_count: 保留的日志文件数量log.report_errors: 是否上报错误信息log.terminate_on_report_failure: 错误上报失败时是否终止程序
系统参数
system.heartbeat_interval: 心跳包发送间隔(秒)system.data_collection_interval: 数据采集间隔(秒)system.command_timeout: 命令超时时间(秒)system.retry_count: 命令重试次数system.error_handling: 错误处理策略
设备配置
devices: 设备列表(包括传感器和执行器)
每个设备包含以下属性:
id: 设备唯一标识type: 设备类型address: 设备地址bus: 所在总线(sensor/actuator)location: 设备位置(可选)unit: 单位(仅传感器需要,如温度单位、湿度单位等)
参考示例配置文件 config.json.example 创建您的配置文件。
枚举类型定义
为了提高代码的可读性和维护性,系统定义了以下枚举类型:
LogLevel: 日志等级枚举 (DEBUG, INFO, WARNING, ERROR, CRITICAL)DeviceType: 设备类型枚举 (包括温度、湿度等传感器类型和喂料口、阀门等执行器类型)BusType: 总线类型枚举 (SENSOR, ACTUATOR)ErrorHandlingStrategy: 错误处理策略枚举 (RETRY, SKIP, ALERT)
日志和错误处理机制
考虑到树莓派等嵌入式设备的存储空间限制,系统采用以下策略:
- 限制日志文件大小:默认将日志文件大小限制为1MB,仅保留一个备份文件
- 错误上报机制:当发生错误时,系统会尝试通过LoRa将错误信息上报给上位机
- 上报成功处理:错误信息上报成功后,系统会删除本地日志中的该条目
- 上报失败处理:如果错误信息上报失败,说明与上位机之间的通信不稳定,系统将根据配置决定是否终止程序运行
这种机制既节省了本地存储空间,又能确保关键错误信息能够及时传递给上位机。
开发顺序建议
当然,从对其他模块依赖最小的模块开始开发是一个明智的策略,以便逐步构建项目的基础。以下是建议的开发顺序:
-
配置模块(config.py):首先实现配置模块,以定义应用程序所需的基本配置。这将为其他模块提供必要的设置。
-
实用程序模块(utils/):开发实用程序函数,这些函数可以在整个项目中被重复使用。这样可以为其他模块提供基本的辅助功能。
-
数据存储模块(storage/):实现数据存储逻辑,包括存储传感器数据、设备状态和配置信息。这一模块可以在独立于其他模块的情况下开发。
-
设备交互模块(devices/):实现与设备交互的模块,包括传感器和执行器。这将为之后的通信和核心逻辑提供基础。
-
通信模块(comms/):开发通信模块,以处理与上位机和设备的通信协议。此模块可能需要依赖设备交互模块。
-
核心逻辑模块(core/):实现核心逻辑,包括处理命令、控制设备和管理传感器数据。这一模块将利用之前开发的模块。
-
测试模块(tests/):在开发过程中,逐步添加测试用例以验证每个模块的功能。
-
主程序(main.py):最后实现主程序,作为应用程序的入口点,将所有模块整合在一起。
这种顺序将帮助你逐步构建项目,并确保每个模块在开发过程中得到充分的测试和验证。
许可证
禁止未经授权使用本项目代码,否则后果自负。