You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MARIE.JS实现双传感器数据存储与平均值计算方案咨询

MARIE.JS 传感器数据处理程序实现思路

核心流程概述

程序分为三个核心阶段:数据采集存储 → 平均值计算 → 触发式输出,全程基于MARIE的16位指令集和内存操作实现。


1. 初始化:内存与变量规划

先在MARIE内存中预定义关键变量和存储区,建议分配如下(地址可根据实际调整):

  • Sensor1_Start:传感器1数据存储起始地址(如X100)
  • Sensor2_Start:传感器2数据存储起始地址(如X200)
  • Count1:传感器1的样本计数(初始值0)
  • Count2:传感器2的样本计数(初始值0)
  • Avg1:传感器1的平均值存储地址
  • Avg2:传感器2的平均值存储地址
  • Ptr1:传感器1数据存储指针(初始值等于Sensor1_Start)
  • Ptr2:传感器2数据存储指针(初始值等于Sensor2_Start)

2. 数据采集与存储逻辑

每次读取输入端口数据后,通过位掩码区分传感器并提取有效数据:

  • 执行Input指令,将16位输入数据读入累加器AC
  • 判断传感器类型:用AND 0x8000(位15的掩码)与AC做运算:
    • 若结果为0(SEL=0),跳转到传感器1存储分支
    • 若结果非零(SEL=1),跳转到传感器2存储分支
  • 提取有效数据:执行AND 0x0FFF,保留位0-11的DATA部分,高位清零
  • 存储数据:
    • 传感器1分支:执行Store Ptr1,将有效数据存入当前指针地址;然后Add 1更新Ptr1,Add 1更新Count1
    • 传感器2分支:逻辑同上,操作Ptr2和Count2
  • 跳回Input指令,等待下一组数据输入

3. 平均值计算逻辑

平均值计算需要遍历存储的所有数据累加,再用减法实现除法(MARIE无除法指令):

传感器1平均值计算

  1. 清零累加和:Store Sum1(提前定义Sum1变量,初始0)
  2. 加载Count1到AC,存入临时变量TempCount,加载Sensor1_Start到Ptr1
  3. 循环累加:
    • Load Ptr1 → Add Sum1 → Store Sum1(累加当前数据到总和)
    • Add 1更新Ptr1,Subtract 1更新TempCount
    • JumpIfZero Calc_Avg1(计数为0时跳转到除法步骤)
    • 跳回循环起始
  4. 除法求平均值:
    • 加载Sum1到AC,清零Avg1
    • 循环减法:Subtract Count1 → JumpIfNegative End_Calc1(不够减时退出)
    • Add 1更新Avg1,跳回减法步骤

传感器2平均值计算逻辑完全一致,操作Sum2、TempCount2、Count2、Avg2即可


4. 触发式输出与保持逻辑

需要循环检测输入端口的触发位,满足条件时输出对应平均值:

  • 执行Input读取当前输入状态
  • 检测传感器1触发位(位13):AND 0x2000,若结果非零:
    • Load Avg1 → Output(将平均值输出到端口,值会保持直到下一次Output指令)
  • 检测传感器2触发位(位14):AND 0x4000,若结果非零:
    • Load Avg2 → Output
  • 跳回输入检测步骤,持续监听触发信号

内容的提问来源于stack exchange,提问作者Moisés Abel Díaz Nava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:21