Industry Microcontroller

内陆的海鲈鱼:为远离海洋的海水鱼搭建自动投喂系统

尖竹汶府(Chanthaburi)有海岸线,呵叻府(Nakhon Ratchasima)没有——最近的海水也要开车将近五个小时。但如果真想做,完全可以在呵叻附近的厂房里养殖亚洲海鲈(Lates calcarifer,即钢鲈/金目鲈),并把它作为真正的海水鱼卖出去。从来不是生物学层面的障碍。海鲈是广盐性鱼类——从全浓度海水到淡水都能适应自如,这也是泰国河口网箱早已在养殖这个品种的原因。真正的障碍在于,养殖池没有一整片海洋那样庞大的水量,能悄悄稀释掉每一次操作失误。

在开放海域,投喂失误、氨氮飙升或溶解氧下降,会被流经网箱的数百万升海水自然缓冲。但在一个120平方米的循环水养殖系统(RAS)里,情况完全不同——问题会持续恶化,直到"有人发现"为止。而现实中,这个"发现"往往不是仪表盘上的一条报警,而是一次批量死亡。

这是一个控制系统问题,不是一个养殖问题

泰国国家科技发展局(NSTDA)旗下MTEC已经验证了生物学与经济性两个层面:一套自动化RAS系统,以40公斤/立方米的密度运行6个养殖池养殖海鲈,月产量约340公斤,同时相比流水式系统节水94%。东南亚RAS市场规模预计将从2026年的约17亿美元增长到2035年的26亿美元。市场需求和生物学可行性,都已经是确定的答案。

尚未解决的——在大多数内陆RAS项目中悄悄失效的部分——是控制层。有四项参数必须持续维持在一个很窄的区间内,而这里没有大海替你兜底容错:

  • 溶解氧(DO):养殖密度高时会快速下降,并把整池鱼一起拖垮
  • 氨氮/亚硝酸盐:在两次投喂之间悄悄累积,靠人工检测发现时鱼群往往已经处于应激状态
  • 盐度:随补水和蒸发而波动,海鲈能耐受一定范围,但超出范围后并不会"手下留情"
  • 投喂时机与投喂量:喂多了会污染水质,直接冲击上面三项指标;喂少了则只是白白损失饲料成本

这和工厂车间的问题在结构上完全一致:分布式传感器、无论是否有人盯着都必须按计划运行的控制回路,以及一种在代价高昂之前完全不可见的故障模式。这也是我们此前写车间OT协议碎片化、以及真空炉热监测这两篇文章的原因——无论容器里装的是熔融金属还是海水,传感器、控制逻辑和告警机制,本质上是同一套工程纪律。

系统实际需要做到什么

flowchart TD
    SENS["传感器  
DO · pH · 氨氮 · 盐度 · 水温"] --> CTRL["控制回路  
阈值逻辑 · 投喂调度"]
    CTRL --> FEED["自动投喂机  
定时 / 按需投喂"]
    CTRL --> AER["增氧机 / 水泵  
DO校正"]
    CTRL --> ALERT["告警  
短信 / LINE通知运维人员"]
    SENS --> LOG[("时序日志  
只读")]
    CTRL --> LOG
    FEED --> LOG

    classDef sense fill:#0f172a,stroke:#eab308,stroke-width:1px,color:#fde68a;
    classDef core fill:#082f49,stroke:#38bdf8,stroke-width:1px,color:#bae6fd;
    classDef act fill:#052e16,stroke:#22c55e,stroke-width:1px,color:#bbf7d0;
    classDef data fill:#134e4a,stroke:#14b8a6,stroke-width:1px,color:#99f6e4;
    class SENS sense;
    class CTRL core;
    class FEED,AER,ALERT act;
    class LOG data;

这里面没有什么奇特的技术。它就是一组传感器(DO、pH、氨氮、盐度、水温——与水处理和工业过程监测中使用的探头是同一类),一个决定何时投喂、何时校正的控制回路,一层执行机构(投喂电机、增氧机、水泵),以及一条能在死鱼事件发生之前、而不是之后,把告警推送到运维人员手机上的通道。最容易踩的坑,是把投喂机当成一个独立的定时器,而不是持续读取水质数据的控制回路的一个输出——这正是"自动投喂机"和"自动化养殖系统"之间的区别。

具体的软件技术栈

上图中的每一层,都对应一套刻意选得"朴素成熟"的Python工具链——这里不适合追求新奇,因为新奇往往意味着控制回路的漏洞要靠一次死鱼事件才能被发现。

边缘层(每个养殖池一套,运行在现场设备上) 工业级DO、pH、盐度探头大多输出模拟信号(4–20mA)或Modbus RTU,而不是干净的数字总线。因此边缘控制器根据探头等级,要么是运行标准Python的树莓派(Raspberry Pi),要么是运行MicroPython的ESP32:

  • pymodbus —— 轮询Modbus RTU/TCP探头(工业级DO/pH变送器的常见输出方式)
  • smbus2 / adafruit-circuitpython-* 驱动 —— 用于没有Modbus接口的廉价I²C传感器板
  • gpiozeroRPi.GPIO —— 驱动投喂电机、增氧机继电器和加药泵的输出
  • asyncio —— 在单台设备上并发运行传感器轮询、控制回路和执行器写入,互不阻塞

传输层 传感器读数和执行事件通过MQTT发布,而不是点对点轮询——这和车间的做法一致,也是我们此前那篇"五种方言"协议碎片化文章里提到的解法:在边缘层就把所有信号归一化到同一条总线上,不要让后端去讲Modbus这种"方言"。

  • paho-mqtt —— 将各养殖池控制器的读数发布到本地Mosquitto消息代理
  • orjson —— 对传感器数据做高速序列化

控制回路 这一层必须在本地运行,不能等网络往返:

# 运行在每个养殖池的边缘控制器上,每30秒执行一次
async def control_tick(tank: TankState) -> None:
    reading = await read_sensors(tank)          # pymodbus / smbus2
    if reading.do_mg_l < tank.thresholds.do_min:
        await actuate("aerator", tank.id, on=True)
    if reading.salinity_ppt < tank.thresholds.sal_min:
        await actuate("brine_dose", tank.id, ml=tank.dose_step)
    if feed_scheduler.due(tank):                 # 由APScheduler驱动
        await actuate("feeder", tank.id, grams=tank.feed_ration)
    await publish(reading, tank)                 # paho-mqtt → broker
    if reading.breaches_critical(tank.thresholds):
        await alert(tank, reading)                # LINE Notify / Twilio
  • APScheduler —— 控制每个养殖池的投喂时机(既支持按时间点,也支持按需调度,而不只是固定间隔)
  • pydantic —— 在任何数据被允许触发执行器动作之前,校验每一条传感器数据和阈值配置

后端与仪表盘 使用与simpliDepot相同的Django 5技术栈,把高频时序数据与事务性数据分开存储,而不是硬塞进同一套表结构:

  • Django + djangorestframework —— 管理养殖池配置、阈值、投喂计划以及场站管理
  • Django Channels —— 通过WebSocket将实时池况数据推送到运维仪表盘
  • influxdb-client(或通过psycopg2/asyncpg连接的TimescaleDB)—— 存储不该塞进关系型OLTP表结构的高频传感器时序数据
  • celery —— 定时报表、每日饲料转化率(FCR)汇总,以及所有不必在30秒周期内完成的任务

告警 使用requests调用LINE Notify或Twilio API——与simpliDepot通知农户和买家所用的渠道一致,运维人员可以在日常已经打开的应用里直接收到养殖池告警。

在系统真正接触活鱼之前,控制回路会先在模拟养殖池上验证——用simpy对投喂/DO/氨氮的动态做离散事件仿真,或用numpy简单模拟传感器读数,针对相当于一整个养殖季的波动数据验证阈值逻辑,确认无误后才会放心让它在无人值守的夜间独立运行。

为什么这对计划出海布局的中国企业有意义

中国国内的陆基工厂化循环水养殖("智慧渔业")近年发展迅速,相应的传感、控制与数据化经验已经相当成熟。对于计划在东南亚布局产能、寻求水产品新货源,或评估与泰国合作伙伴开展技术输出/联合运营的企业而言,这套内陆RAS控制系统提供的是一套现成的、可复用的工程范式,而不需要从零摸索。另一方面,若目标是把泰国内陆养殖的海鲈产品出口至中国市场,系统自动记录的DO、水温、盐度时序数据,天然对应海关总署(GACC)对进口水产品追溯与质量记录的要求——这是一份可核验的连续记录,而不是每天早上手工填一次、指望夜间数据不出问题的台账。

对于评估该赛道的企业来说,真正要问的不是"要不要买一套养殖平台",而是:生物学已经验证可行,市场需要比沿海网箱养殖成本更低的内陆海鲈供应,唯一还没解决的,是一套不会让人靠早上数死鱼才发现问题的控制系统。

常见问题

只能用来养海鲈吗
不是。海鲈是最直接的首选品种,因为它在泰国已有成熟的商业化养殖先例,且能耐受养殖池系统现实可维持的盐度范围。同样的传感器/控制/投喂架构,也适用于其他有本地市场、能耐受盐度波动的广盐性鱼种。

必须用人工海水盐,还是可以用车运卤水
两种方式在实际操作中都有采用,这是每个场站基于成本和物流做出的选择,而不是控制系统本身的技术限制。无论盐分来自哪种来源,系统都需要把盐度控制在目标区间内——本质上都是传感与加药的问题。

如果乡村场站断网会怎样
控制回路(传感器→阈值→执行)必须在本地独立运行,不依赖网络连接状态——是否启动增氧机的判断,不能等待一次云端往返请求。网络连接是用于日志记录、告警和远程监控的,而不是那条直接关系到安全的核心回路本身。这与我们为网络不稳定的乡村depot场站所做的"离线优先"设计前提是一致的。

这已经是一个真实的产品了吗
这目前是一个正在评估范围的概念,基础是已被验证的RAS经济性数据,以及我们在IMCS/OT监测方面已有的工程经验——还不是已经交付的平台。如果您正在运营或规划内陆RAS项目,想具体聊聊您的场站需要什么样的控制系统,欢迎联系我们


资料来源: NSTDA/MTEC 集约化养殖自动RAS系统; 东南亚RAS市场, GM Insights; 亚洲海鲈/金目鲈养殖, Global Seafood Alliance