codesys通过程序指令实现从站自动复位功能块

sunnyroc  2024-07-31 16:30  阅读 647 次 评论 0 条
EtherCAT通讯可以通过编程控制,所有EtherCAT通讯配置参数都可以用变量获取和设置。
通过以下功能块代码实现对从站自动重新连线。
//////局部变量声明

FUNCTION_BLOCK EcatBusResetVAR_IN_OUTAxis: AXIS_REF_ETC_DS402_CS;ETCSlave : ETCSlave;END_VARVARTONRE: TON;StepRe:INT;SMC3_ReinitDrive1: SMC3_ReinitDrive;MC_Reset : MC_Reset;END_VAR
VAR_OUTPUT
CoumErr: BOOL;
END_VAR

//////以下为FB主程序
EtherCAT_Master.AutoSetOperational:=true;//设置自动重启从站,与打钩效果一样
(****************************************轴掉线重连动作***********************************)
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        ;
// MC_Reset.Execute    := FALSE;
    CoumErr      := FALSE        ;
    StepRe      := 0         ;
   END_IF
  END_IF
END_CASE
SMC3_ReinitDrive1(
 Axis:= Axis,
 bExecute:= ,
 bVirtual:= ,
 bDone=> ,
 bBusy=> ,
 bError=> ,
 nErrorID=> );
本文地址:https://www.roc666.com/2024/07/industry/plc/codesys/pou_reset.html
版权声明:欢迎分享本文,转载请保留出处!

发表评论


表情