我想听听您对计划生活监控的看法。

这是场景。您有一个简单的程序 一般 作品,这意味着它写得很好,处理了例外等。

如果要确保此程序有效,您将如何操作 永远?

没有外部工具等外部工具可用,但是可以添加任何开销。

使用另一个连续“ ping”主程序的程序?触摸文件并与另一个程序检查文件修改?

您如何确保第二个程序始终有效?

因此,来吧,告诉我您在这种情况下哪种意见或最佳实践!

作为脚注,我已经在Python中编写了这个程序,但这是一个通用问题!

有帮助吗?

解决方案

在嵌入式系统中,通常要做的是看门狗模块。

看门狗检查某些位置(可能是文件,可能是内存位置,无论如何),如果该位置不符合条件,请重新启动正在检查的系统。

因此,您可能会在调查下完成程序,就是定期编写一些带有Epoch邮票的ProgramName_watchDog文件。这将是常规循环的一部分。

然后,您的看门狗(在完全不同的过程中)将检查文件。如果列出的日期已足够过时,则将杀死和重新启动另一个程序,因为它被视为严重故障(悬挂或坠毁)。请注意,您的看门狗将具有一些简单的逻辑,因此失败的机会要低得多。

我是 积极的 还有其他方法可以实现这一目标。这只是一种方式。

编辑: 您必须考虑您的系统的构建。您拥有的外部依赖性越多,失败的风险就越多。如果您正在寻找完美的操作,则还必须考虑正式的程序正确性证明。

问题 真的 成为您对系统的期望;什么样的失败是不可接受的,期望什么样的失败,因此您可以弥补它们。

这个问题变成了非常快速的验证软件软件共同设计问题(也很昂贵)。我很想知道您在做什么以及您的解决方案是什么。

其他提示

就像保罗·内森(Paul Nathan)所说,使用看门狗。

例如,您可以做一些事情来使事情变得更加健壮:例如:

int lastTick;

int RemoteProcessState()
{
    int tick = GetRemoteTick();

    if (tick == -1)
    {
        // Process recoverable error state.
        return -1;
    }

    if (tick == -2)
    {
        // Process unrecoverable error state.
        return -1;
    }

    if (tick < 0)
    {
        // Detect if the watchdog is overflowed.
                    return -1;
    }

    if (abs(abs(tick) - abs(lastTick)) > ALLOWED_PROCESS_LAG)
    {
        // Resynchronize process
    }
    else
    {
        // Process running normally.
    }

    return 0;
}

这是来自嵌入式RTU中用于过程控制的嵌入式RTU中使用的真实代码的假码样本。

它的原始性,但起作用。这不仅可以确保远程进程还活着,而且如果远程进程在计算速度上漂移(扫描速率受程序大小和复杂性的影响),则将确保两个进程仍然同步。

如果您想要更多数据,请开始研究Modbus使用的返回代码,或者OPC协议如何处理其管理 Quality 字节。

好。我已经考虑了这个问题很长时间了,还有2件事出现了。

软件看门狗应该是如此简单,以至于不可能附近崩溃。对于疯子而言,一个有趣的编程挑战可能是写一个 用不同语言编写的看门狗必须与另一种语言保持活力,所有这些都应监视主过程。

即使具有挑战性和有趣,这似乎很大 浪费时间, ,这种情况看起来像战争中的士兵。

其次,在我开发的应用程序中 硬件 看门狗,应始终在关键操作中存在。

因此,现在我的应用程序拥有一个软件监管机构,可以刷新硬件,并监视程序寿命。

最后,保罗,我完全同意你的看法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top