回复:被G120的EPOS定位功能搞得焦头烂额,疑似西门子SINAPOS块有BUG,有没有朋友遇到过?

hhyx9

  • 帖子

    852
  • 精华

    20
  • 被关注

    41

论坛等级:奇侠

注册时间:2015-04-11

钻石 钻石 如何晋级?

发布于 2025-11-08 23:24:21

10楼

刚才做了下测试,此现象的原因找到了,其实很简单,就是SINA_POS内写了在ZSW1.%X11=TRUE(状态字已回参标志位)时,程序内复位ExecuteMode,导致STW2.%X11无法被触发(控制字回参启动命令),以至于无法执行回参动作。

将原程序内的

IF #sxRecvBuf.ZSW1.%X11 OR NOT #ExecuteMode THEN

   #sbExecute := FALSE;

END_IF;

改为

IF NOT #ExecuteMode THEN

   #sbExecute := FALSE;

END_IF;

即可进行多次回参

这个问题很难被定义为“故障”、“缺陷”或BUG,我测试了FB284、FB300、BPOS,都是这个情况,更多感觉是编程人员有意为之,不允许二次回参,只有当原参考点丢失后才能再次执行


原触发逻辑


现逻辑


回参控制字


测试程序


另将SINA_POS中ExecuteMode触发相关原程序段及注释贴在这里

// Betriebsart aktivieren erkennen (RQ 3901129, RQ 4094299)

IF #ExecuteMode AND NOT #sbExecuteEdge THEN(ExecuteMode上升沿时可触发静态变量#sbExecute置位,#sbExecute为后续程序内实际使用的触发命令)

    #sbExecute := True;

    #siExecuteCyc := 0;(复位触发时间计时器)

ELSIF #ActMode <> #ModePos THEN(如果当前实际激活的控制模式不等于输入的实参控制模式,则取消触发激活)

    #sbExecute := FALSE;

ELSIF #siExecuteCyc > (2 * #siCycWait) THEN(当触发命令持续时间大于2*#siCycWait时根据不同的控制模式对ExecuteMode做对应处理,#siCycWait缺省值5)

    IF #ModePos <> 4 THEN(如果控制模式不为4主动回参,则复位#sbExecute触发指令,因为除了Mode=4外,其它Mode的#ExecuteMode都是给定脉冲指令即可)

        #sbExecute := FALSE;

          ELSE(如果控制模式为4,则在已回参和外部输入实参被复位的情况下,复位#sbExecute)

              IF #sxRecvBuf.ZSW1.%X11 OR NOT #ExecuteMode THEN

              #sbExecute := FALSE;

            END_IF;

          END_IF;

        ELSE

        ; // not used

END_IF;

 

IF #siExecuteCyc > 100 THEN

  #siExecuteCyc := 0;

ELSE

  #siExecuteCyc := #siExecuteCyc + 1;(复位触发时间计时器循环累加)

END_IF;

 

// Verfahrauftrag aktivieren Flanke merken

#sbExecuteEdge := #ExecuteMode;(#ExecuteMode,边沿触发状态记录)


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SINAMICS

共有8098条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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