『7x24小时有问必答』
内容简介:
        在使用codesys过程中,伺服掉线是经常发生的,需要对伺服轴进行初始复位才能恢复正常的使用。本文主要利用相关指令及状态位进行复位。

调试步骤:
        1、需要用到的实例名称:
                1.1主站EtherCAT_Master,当创建专案的时候,系统默认产生一个
IODrvEtherCAT的实例,无需在程序中进行实例化。     
需要用到的针脚为:
        (1)EtherCAT_Master.xConfigFinished//   主站PLC初始代完成

      (2)EtherCAT_Master.xDistributedClockInSync//主站PLC网络正常

      (3)EtherCAT_Master.xError//主站PLC没有报警        
  
     1.2伺服驱动器ASDA_B3_E,当添加B3_E伺服时,系统默认产生一个ETCSlave的实例,无需在程序中进行实例化。
需要用到的针脚为
        (1) ETCSlave.wState//当掉线后重连正常后时,该状态为       IoDrvEthercatLib.ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONAL
  
1.3伺服电机Axis_1,系统默认产生一个AXIS_REF_SM3
需要用到的针脚为
         (1)Axis.bCommunication//该轴没有断线
2、需要用到的功能块:
        2.1轴初始化复位功能块
                  SMC3_ReinitDrive

               
3、复位原理流程:
           主站(PLC)复位成功后,EtherCAT_Master.xConfigFinished和EtherCAT_Master.xDistributedClockInSync就会变成TRUE,   EtherCAT_Master.xError就会变成FALSE,伺服站由Axis.bCommunication进行判断是否已经掉线。
        当Axis.bCommunication为FALSE时,这时证明伺服处理掉线状态中,等待ETCSlave.wState=IoDrvEthercatLib.ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONAL后,触发SMC3_ReinitDrive.bExecute后方可复位成功。
4、程序的写法如下 :
变量声明

        ——————————————————————————————
        
FUNCTION_BLOCK Drivereset

VAR_IN_OUT

  Axis: AXIS_REF_SM3;

  ETCSlave : ETCSlave;

END_VAR
VAR

  TONRE: TON;

  StepRe:INT;

  SMC3_ReinitDrive1: SMC3_ReinitDrive;

  MC_Reset :  MC_Reset;

  

END_VAR

VAR_OUTPUT

  CoumErr: BOOL;

END_VAR
———————————————————————————————
程序如下:
   
(****************************************轴掉线重连动作***********************************)

TONRE(IN:= , PT:= T#3S);

CASE StepRe  OF

      0://如果发生断线时会使程序进行断线bCommunication进行判断

         IF NOT Axis.bCommunication//该轴没有断线

         AND NOT CoumErr//没有报断线

         AND EtherCAT_Master.xConfigFinished//   主站PLC初始代完成

         AND EtherCAT_Master.xDistributedClockInSync//主站PLC网络正常

         AND NOT EtherCAT_Master.xError//主站PLC没有报警  

         AND NOT SMC3_ReinitDrive1.bExecute//复位轴功能块没启用

      THEN

         CoumErr              :=TRUE              ;//轴断线异常

         TONRE.IN            :=  FALSE                ;

         StepRe              :=  10                  ;

        END_IF;  

  10://计时

         TONRE.IN              :=  TRUE                ;//触发计时,

   

         IF TONRE.Q//时间到后进行触发初始化

      AND                               ETCSlave.wState=IoDrvEthercatLib.ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONAL

      THEN

           TONRE.IN            :=  FALSE                ;

           StepRe              :=  20                  ;  

      END_IF

  20://进行触发复位

         SMC3_ReinitDrive1.bExecute      :=  TRUE                ;//初始化伺服从站

         IF SMC3_ReinitDrive1.bDone//复位完成

        THEN

         SMC3_ReinitDrive1.bExecute    :=  FALSE                ;

         CoumErr              :=FALSE              ;//把断线报警关闭

        TONRE.IN            :=  FALSE                ;

        MC_Reset.Execute        :=  FALSE                ;  

         StepRe              :=  0                  ;

         ELSIF (SMC3_ReinitDrive1.bBusy//忙碌中

         OR SMC3_ReinitDrive1.bError)

         AND NOT SMC3_ReinitDrive1.bDone//复位完成

    THEN

         TONRE.IN            :=  TRUE                ;

         IF TONRE.Q//复位不成功重新进行处理

         THEN

         TONRE.IN          :=  FALSE                ;

         SMC3_ReinitDrive1.bExecute  :=  FALSE                ;

        CoumErr            :=  FALSE                ;

        StepRe            :=  0                  ;

      END_IF

    END_IF  

END_CASE

SMC3_ReinitDrive1(

  Axis:= Axis,

  bExecute:= ,

  bVirtual:= ,

  bDone=> ,

  bBusy=> ,

  bError=> ,

  nErrorID=> );

5、注意
                很多工控朋友在复位伺服掉线的问题上,喜欢使用时间计时器进行复位,这样是不对的,建议必须等待ETCSlave.wState=IoDrvEthercatLib.ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONAL时触发功能块复位即可。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码