CODESYS EtherCAT通讯状态监测
检查所有从站的链式列表(CODESYS官方资讯)
新建功能块FB_EtherCATCheck(ST语言)
1、功能块声明部分 ;
2、功能块执行部分;
新建程序ScanEtherCAT(ST语言),并调用功能块FB_EtherCATCheck
补充说明1:单纯调用该功能块(FB_EtherCheck)是不需要挂在EtherCAT_Task任务底下运行,但如果程序中有调用重新初始化驱动器的功能块(SMC3_RetainDrive),那么就必须挂在EtherCAT_Task任务底下运行,否则执行时就会报错。
功能测试
1、启动CODESYS,EtherCAT_Master_SoftMotion和连接的两个伺服从站顺利运行(X轴和Y轴);
程序中ETCInitialConfigDone为TRUE
两个从站的句柄
2、测试拔掉第一个从站与控制器主站之间的网线;
1)所有从站掉线,且报错
特别说明:这里EtherCAT_Master_SoftMotion(主站)还保持运行,那是因为勾选设置了“自动重启从站”,主站会不断地扫描恢复从站的通讯,如果没有勾选设置“自动重启从站”,EtherCAT_Master_SoftMotion会直接停止运行。
EtherCAT_Master_SoftMotion掉线停止运行的情况
设置“自动重启从站”
展开“选项”,会显示出隐藏的选项
2)程序中ETCInitialConfigDone为FALSE,ETCInitialConfigFail为TRUE(通讯连接超时,报错)
补充说明2:此时SlaveError和SlaveErrorId并没有记录错误状态和错误站号,那是因为第一个从站与控制器断开,会报主站通讯异常ETCInitialConfigFail,不会再进行从站扫描。
3、测试拔掉第二个从站与第一个从站之间的网线;
1)第一个从站保持运行,第二个从站停止运行,且报错
2)SlaveError记录到第二个从站的报错状态
SlaveErrorId记录到站号1(从0开始计,1就是第二个从站)
3)插回网线,第二个从站恢复连接
SlaveError错误记录解除
SlaveErrorId恢复为0(如前面补充说明2解释,当第一个从站掉线时,是主站通讯报错,并不会记录从站Id的报错,这里SlaveErrorId只对第一个从站以后的从站掉线进行记录,所以SlaveErrorId恢复为0就意味着从站通讯恢复正常)
4)此时第二个从站恢复通讯后,轴仍然报错
此时恢复通讯的轴需要执行SMC3_ReinitDrive,让其重新初始化驱动器,之后才能正常操作轴。