回复:请教和探讨一下:自增/自减函数引发的数组越界错误导致的CPU临时停机故障,涉及的知识点排查及学习

AnsenYue

  • 帖子

    74
  • 精华

    4
  • 被关注

    3

论坛等级:侠客

注册时间:2011-05-03

黄金 黄金 如何晋级?

发布于 2026-02-06 12:23:08

23楼

展开查看
以下是引用xinchen在2026-02-06 08:43:11的发言 >17楼

1500 是基于时间片通信

就是说 HMI 可能在你触发翻页后的“任意时刻”向 PLC 写入值

从 PLC 的角度上看,刚检测完 startIndex 范围,并调整在 [0, 390] 后,就有可能被 HMI 改写


因此像外部写入的变量,PLC 中不要多处读写


以本例为例,新建个局部变量 index,在开始时 

index := "Datadedupcontrol".CarLinq.HMI.Program.StartIndex;

if index < 0 then... // 限制 index 范围在 [0, 390]

"Datadedupcontrol".CarLinq.HMI.Program.StartIndex := index; // 调整后回写


// 后续的操作都用 index, 而不是 startIndex

for temp_i := 0 to 9 do

    No[temp_i] := index + temp_i;

end_for

...





嗯,认可你这个思路。

对于这个问题,我采用了在HMI写脚本完成数据检查,以避免异常值写入PLC。当然,也可以采取你这个思路来处理,对输入数据进行合规检查后固定正确数据,后面只使用合规检查过的正确数据进行数据处理。

感谢~

Keep learning and going ~
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10975条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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