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

如何检测LabVIEW程序停止时myRio向Arduino的SPI传输中断?

解决myRio(LabVIEW)与Arduino SPI通信中,Arduino检测LabVIEW程序停止的问题

咱们先搞清楚为什么你之前的if(rx == null)没用——SPI是同步主从通信,从设备(Arduino)只能被动接收主设备(myRio)发起的传输请求,根本不会收到null这种值。哪怕myRio程序停了,Arduino读到的要么是之前残留的旧数据,要么是SPI总线的默认电平(通常是0xFF),所以这个判断完全不生效。

下面给你两个靠谱的解决方案,结合起来用效果最好:

1. 约定心跳帧格式,识别有效通信

让myRio每次发送的心跳数据带上固定帧头,比如0xAA,后面跟着你要传的状态数值。Arduino收到数据后先校验帧头,只有帧头匹配,才判定是有效心跳。

2. 超时检测机制,判断通信中断

用Arduino的millis()函数记录每次收到有效心跳的时间,一旦当前时间和上次心跳时间的差值超过设定阈值(比如2秒),就判定myRio程序已经停止运行。

修改后的Arduino代码示例

#include <SPI.h>
const int slaveSelectPin = 10;
unsigned long lastValidHeartbeat = 0;
const unsigned long TIMEOUT_THRESHOLD = 2000; // 2秒超时,可根据实际调整
bool isMyRioActive = true;

void setup() {
  // 初始化SPI引脚
  pinMode(SCK, INPUT);
  pinMode(MOSI, INPUT);
  pinMode(MISO, OUTPUT);
  pinMode(slaveSelectPin, INPUT_PULLUP); // 片选引脚设为上拉输入
  
  SPI.begin();
  SPI.setBitOrder(MSBFIRST); // 和myRio的SPI配置保持一致
  SPI.setDataMode(SPI_MODE0); // 同样要匹配myRio的模式
  Serial.begin(9600); // 用于调试输出
}

void loop() {
  // 当myRio拉低片选引脚,发起通信时
  if (digitalRead(slaveSelectPin) == LOW) {
    // 先读取帧头
    byte frameHeader = SPI.transfer(0x00);
    // 再读取心跳数值
    byte heartbeatValue = SPI.transfer(0x00);
    
    // 校验帧头,确认是myRio发来的有效心跳
    if (frameHeader == 0xAA) {
      lastValidHeartbeat = millis();
      isMyRioActive = true;
      Serial.print("收到有效心跳: ");
      Serial.println(heartbeatValue);
    }
  }

  // 检查是否超时
  if (millis() - lastValidHeartbeat > TIMEOUT_THRESHOLD) {
    if (isMyRioActive) {
      Serial.println("⚠️ myRio程序已停止运行!");
      isMyRioActive = false;
      // 这里可以添加停止后的处理逻辑,比如关闭外设、触发警报等
    }
  }
}

LabVIEW端配合调整

在LabVIEW的SPI发送程序里,每次要发送两个字节:第一个是帧头0xAA,第二个是你的状态数值。确保发送频率稳定(比如1次/秒),这样Arduino能稳定收到心跳。

额外注意事项

  • 确保myRio和Arduino的SPI配置完全一致:包括时钟极性、相位、比特序,不然会出现通信乱码。
  • 超时阈值要合理:如果myRio的发送频率是1Hz,阈值设2-3秒就足够,避免因偶尔的通信延迟误判。
  • 片选引脚的状态可以辅助判断:如果LabVIEW程序正常退出时会拉高SS引脚,Arduino也可以通过检测SS引脚的高电平持续时间来辅助判断,但超时机制是最可靠的(毕竟程序崩溃时可能不会正确拉高SS)。

内容的提问来源于stack exchange,提问作者S_Flora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:54:55