搜索
bottom↓
回复: 28

请教:单片机跑飞后,怎样能从开始跑飞前的指令位置执...

[复制链接]

出0入0汤圆

发表于 2016-4-1 16:11:38 | 显示全部楼层 |阅读模式
和别人讨论时,遇到一个问题:
看门狗可以解决单片机跑飞的问题,它是让单片机复位来解决的。但有些特殊的场合,操作过程是不允许重新再来一遍的,只能接着原来的操作往下进行,例如,假设一个机床正在切削加工一个东西,此时单片机跑飞了,如果通过看门狗使其复位,程序又会从开始运行,已经加工过的部分可能会被重复加工,所以单片机应该是能记下程序开始跑飞的位置,接着原来的操作进行。但这怎么实现呢,请高手指点。

出0入0汤圆

发表于 2016-4-1 16:16:02 | 显示全部楼层
每完成一个步骤把指令更新到flash里面,重启后先看flash里面的状态

出0入10汤圆

发表于 2016-4-1 16:19:49 | 显示全部楼层
一般都是可以判断动作到了哪里的,楼主这种是不能判断到

出0入0汤圆

发表于 2016-4-1 16:42:04 | 显示全部楼层
保存在非初始化区域,系统启动的时候判断是上电启动还是看门狗复位。

出0入112汤圆

发表于 2016-4-1 16:46:45 | 显示全部楼层
随机的吧,
即使记下PC的位置,数据储存器内容也有可能改变了。

出0入21汤圆

发表于 2016-4-1 16:49:39 | 显示全部楼层
只有一种可能,楼主你知道你的程序要跑飞了,就记住这个位置

出0入90汤圆

发表于 2016-4-1 16:52:49 | 显示全部楼层
跑飞的话,做不到完美效果的。
就算你保存当前指令执行的条数记录。那么,在某一条指令执行的过程中跑飞的话,机器会停下来。但是你记录的是这条指令已经执行完成或者未完成。
你复位后只能有2种选择,就是要么重新执行这条指令,要么接着执行。总是做不到很完美的。

如果是机床切削这种,记录指令条数可能还不错,因为是做减法。重新切削一次,并不会增加或者减少什么;

出0入0汤圆

发表于 2016-4-1 17:58:43 | 显示全部楼层
思路错了吧,看门狗是一种补救措施,不允许重新来的话,应该是想办法防止复位

出0入0汤圆

发表于 2016-4-1 18:19:21 | 显示全部楼层
防止程序跑飞啊。

出0入0汤圆

发表于 2016-4-1 18:29:19 | 显示全部楼层
那就做稳定,不允许跑飞。
PLC你什么时候见死机重启?

出0入0汤圆

发表于 2016-4-1 20:27:36 | 显示全部楼层
赞同7楼的观点。

出0入0汤圆

发表于 2016-4-1 20:28:51 | 显示全部楼层
yu_studio 发表于 2016-4-1 18:29
那就做稳定,不允许跑飞。
PLC你什么时候见死机重启?

plc也有看门狗,也可以重启,要求高的话可以双机热备份

出10入210汤圆

发表于 2016-4-1 20:49:41 | 显示全部楼层
能回到跑飞的那个那个位置继续往下执行,那就不叫跑飞,那是调用了子程序或执行中断去了。

出0入0汤圆

发表于 2016-4-1 21:10:08 | 显示全部楼层
rainbow 发表于 2016-4-1 20:49
能回到跑飞的那个那个位置继续往下执行,那就不叫跑飞,那是调用了子程序或执行中断去了。 ...

不知道可不可以这样,将当前动作做个反馈与当前指令做对比,

如果反馈结果与指令不符,则停机并记录,退回上一条指令待机~

出0入0汤圆

发表于 2016-4-1 21:17:51 来自手机 | 显示全部楼层
开机判断是否是看门狗复位重启,如果是看门狗复位则不初始化数据,否则初始化数据。

出0入0汤圆

发表于 2016-4-1 21:41:16 | 显示全部楼层
就是是双机备份运行了,上面有人说了

出0入0汤圆

发表于 2016-4-1 21:57:00 | 显示全部楼层
kafeiwutang 发表于 2016-4-1 20:28
plc也有看门狗,也可以重启,要求高的话可以双机热备份

双机冗余主要是为了防止一台出现故障,另一台可以马上启用运行。
总之,成熟的PLC的设计是非常稳定的,我使用PLC十几年了,从未见过PLC死机或重启。
另外,PLC是决不允许自动重启的,如果PLC真的死机或程序跑飞,就停在那儿,等待人是处理。对于有些设备来说,如果突然重启,会造成巨大危险或不可估量的损失。

出0入0汤圆

发表于 2016-4-1 22:04:02 来自手机 | 显示全部楼层
三机并行运算,结果由表决确定

出0入0汤圆

发表于 2016-4-1 22:20:26 | 显示全部楼层
把电源做好,抗干扰做好,程序优化好,选好的工业级的芯片,在恶劣的工况下多测试.....终于你发现不会跑飞

出0入0汤圆

 楼主| 发表于 2016-4-1 22:52:45 | 显示全部楼层
.titrwh 发表于 2016-4-1 16:16
每完成一个步骤把指令更新到flash里面,重启后先看flash里面的状态

但是要是在某个步骤开始过程中间跑飞,即使从FLASH中可以判断出该步骤未完成,但也很难接着继续完成,还有,RAM中有些数据可能已经发生变化了

出0入0汤圆

发表于 2016-4-21 10:27:59 | 显示全部楼层
不讓程式跑飛才是王道!!
雖然有些時候很難做到...

出0入20汤圆

发表于 2016-4-21 11:16:16 | 显示全部楼层
这个问题。95年我们针对80C31+32kEPROM+32kRAM做过设计,每一个功能(入口设置一个ID号,然后保存MCU当前的寄存器值),上电后根据ID号跳转。。。。。。异常复杂。但最终无法做到完美接力运行。

出0入0汤圆

 楼主| 发表于 2016-6-7 21:08:34 | 显示全部楼层
mon51 发表于 2016-4-21 11:16
这个问题。95年我们针对80C31+32kEPROM+32kRAM做过设计,每一个功能(入口设置一个ID号,然后保存MCU当前的 ...

是个解决方案,离目标更近了

出0入20汤圆

发表于 2016-6-7 22:22:28 | 显示全部楼层
hnzbding 发表于 2016-6-7 21:08
是个解决方案,离目标更近了

你无法保证MCU死机时RAM里的数据未被干扰破坏。

出0入0汤圆

发表于 2016-6-13 15:05:25 | 显示全部楼层
RAM的数据不好控制的,如果MCU跑飞的话。

出0入0汤圆

发表于 2016-6-13 15:31:24 | 显示全部楼层
是啊!程序是无法知道自己干的对不对的!就如同小孩子不明白大人为什么要训斥他一样!

出0入0汤圆

发表于 2016-6-13 16:04:21 | 显示全部楼层
单机是没办法做到完美复位运行的,就像楼上说的双机备份或三机表决

出0入0汤圆

发表于 2016-6-13 16:07:50 | 显示全部楼层
内存要搞一片非初始化区,保存各种中间参数,   上电后通过检查,调出这部分参数接着跑。

出0入0汤圆

发表于 2016-6-13 16:14:29 | 显示全部楼层
只能让他不跑飞,看门狗不能保证100%正确继续执行的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 22:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表