监控计划生活的最佳实践
-
30-09-2019 - |
题
我想听听您对计划生活监控的看法。
这是场景。您有一个简单的程序 一般 作品,这意味着它写得很好,处理了例外等。
如果要确保此程序有效,您将如何操作 永远?
没有外部工具等外部工具可用,但是可以添加任何开销。
使用另一个连续“ 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件事出现了。
软件看门狗应该是如此简单,以至于不可能附近崩溃。对于疯子而言,一个有趣的编程挑战可能是写一个 网 用不同语言编写的看门狗必须与另一种语言保持活力,所有这些都应监视主过程。
即使具有挑战性和有趣,这似乎很大 浪费时间, ,这种情况看起来像战争中的士兵。
其次,在我开发的应用程序中 硬件 看门狗,应始终在关键操作中存在。
因此,现在我的应用程序拥有一个软件监管机构,可以刷新硬件,并监视程序寿命。
最后,保罗,我完全同意你的看法。