回复:【分享】PLC 自动停机

芳季

西门子1847工业学习平台

  • 帖子

    15771
  • 精华

    102
  • 被关注

    984

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2016-03-22 12:22:48

3楼

已经告诉你比较触点的问题,那么你就往那边去查嘛。跟其他别的有什么关系呢?。问题没有明确指向之前,就从程序开始查起。

用SM0.0,多处传送那个比较导致出错的值出来,直到发生stop一刻,那么这里传送出来的值就临死之前最后的信息了。你分析这个数据为何成为导致出错的非法值,这就有线索了,有指向了。

这事情基本上都是程序里面的一些不经意的漏洞造成的。

特别是通讯程序。通讯线路周期,通讯程序处理周期,程序扫描周期,中断周期,以上,四个周期基本不可能同步。当某个值你现在读一次,等片刻再读一次,两个值已经是不一样的了。你不留意的话,正好那个值正在被扫描改写了高位字节,低位还没来得及写,然后就被中断读去了。就这样错误的数据格式出现了。但是这个瞬间很难才撞在一起。你基本监视不到的。

所以,你必须在一个特定的时间保持一个同步。让各种使用这个地址的请求都能读到一个唯一的值。

说一个可能正是你的问题所在的假设:SLAVE指令的Done位on的时候(我忘了是on还是off),你去读取你缓冲区的数据,呵呵,人家还在工作你就把没完成的数据拿来当啥。而且还是给比较触点做比较,那么死定啦。通讯需要更新18个字节的数据,正好你的数据在第九到第十二个字节,通讯需要一个一个字的去刷新,还好你每次都碰不上那种刷新了一半的“好事”,而那么巧就有一次正刷新了第九第十个字节的时候,你读了。结果九和十是新的,十一十二是旧的,两个字组合起来的浮点数是非法的,终于让你遇上了。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33295条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。