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 OF0://如果发生断线时会使程序进行断线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//复位轴功能块没启用THENCoumErr :=TRUE ;//轴断线异常TONRE.IN := FALSE ;StepRe := 10 ;END_IF;10://计时TONRE.IN := TRUE ;//触发计时,IF TONRE.Q//时间到后进行触发初始化AND ETCSlave.wState=IoDrvEthercatLib.ETC_SLAVE_STATE.ETC_SLAVE_OPERATIONALTHENTONRE.IN := FALSE ;StepRe := 20 ;END_IF20://进行触发复位SMC3_ReinitDrive1.bExecute := TRUE ;//初始化伺服从站IF SMC3_ReinitDrive1.bDone//复位完成THENSMC3_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//复位完成THENTONRE.IN := TRUE ;IF TONRE.Q//复位不成功重新进行处理THENTONRE.IN := FALSE ;SMC3_ReinitDrive1.bExecute := FALSE ;// MC_Reset.Execute := FALSE;CoumErr := FALSE ;StepRe := 0 ;END_IFEND_IFEND_CASESMC3_ReinitDrive1(Axis:= Axis,bExecute:= ,bVirtual:= ,bDone=> ,bBusy=> ,bError=> ,nErrorID=> );
本文地址:https://www.roc666.com/2024/07/industry/plc/codesys/pou_reset.html
版权声明:欢迎分享本文,转载请保留出处!
版权声明:欢迎分享本文,转载请保留出处!