在CODESYS中通过EtherCAT总线驱动单个电机
本文讲述了手上有个支持EtherCAT总线的驱动器和步进电机的情况下,如何通过CODESYS添加EtherCAT的主站从站,控制电机转动。
本文所用设备:普通PC、杰美康驱动器2DM556-EC、电机60J18100-440。
操作步骤:
1. 电机及驱动器接线
2.新建标准工程
打开codesys,新建标准工程,设备选择“CODESYS Control V3 ×64”,切记不要选择“SoftMotion”,编程语言选择结构化文本(ST)。
3.添加EtherCAT Master主站
4.安装驱动器描述文件
先在库管理器中安装驱动器的描述文件,才能添加从站。“工具”-》“设备存储库”-》“安装”,找到设备描述文件所在的位置后点击“打开”,即安装好了。
5.添加从站
6.添加轴
右键从站(驱动器),点击“添加SoftMtion CiA402轴”,结果如下图所示。至此,所有硬件添加完成。
7.下载插件
由于EtherCAT总线对运行环境的网卡有特殊型号要求(如codesysRTE),而我们基于codesys development的EtherCAT实现,对于一般电脑的网卡,下载一个NPCAP插件即可,下载NPCAP。
8.配置设备参数
(1)打开软PLC
将PC与codesys自带的软PLC通过网关连接起来,开启图中右下角的PLC,打开以后成右图所示。
(2)网关连接
双击“设备”,扫描网络,连接软PLC。
连接成功后如图所示。
(3)设置主站
(4)设置从站
方式时钟选择SM-Synchron。
(5)设置轴
这里increments可以理解为编码器的分辨率,也代表步进电机的脉冲数,我们使用的电机是4000个脉冲,电机转动一圈,不同的电机参数不一,需要根据自己电机的参数来设置,最后一个应用单元表示我们程序里定义的增量,也就是说程序里的输入变量值为4000时,转换为电机脉冲就是4000,电机转动一圈。
9.程序编写
配置完成之后,需要编写电机的运动程序,电机运行所使用的函数为codesys中有关电机驱动的一些功能块,我们通过case语句来编写电机的不容运行情况,再通过修改变量值来控制电机进行简单的运行,这里参考了该链接的程序。
(1)程序编写
变量声明:
PROGRAM PLC_PRG VAR mcp: MC_Power; //使能函数 mcmv: MC_Jog; //点动函数 mcmabs: MC_MoveAbsolute; // 绝对值定位运动 mcminc: MC_MoveRelative; // 增量式运动 MVStop: MC_Stop; // 电机停止 Axis1Home: MC_Home; // 电机回零 Axis1Reset: MC_Reset; // 电机故障复位 Motionstate: INT; // 测试用,控制测试功能 Cnt:INT; // 仅仅用于测试 Jog_Pos: BOOL ; // 点动正 使能 Jog_Neg: BOOL; // 点动负 使能 MovEnable: BOOL; // 定位运行、回零及停止时的函数模块使能 MovIncDistance: LREAL; // 增量运动距离设定 MV_Speed: LREAL; // 运行速度设定 MV_Acc: LREAL; // 运行加速度设定 MV_Dec: LREAL; // 运行减速度设定 MV_Jerk: LREAL; // 运行加加速度设定 MovAbsDistance: LREAL; // 绝对定位时的目标位置 END_VAR 主程序:
CASE Motionstate OF 0: Cnt := Cnt+1; MV_Speed:= 10000; MV_Acc:= 1000000; MV_Dec:= 1000000; MV_Jerk:= 100000000; Jog_Pos:= TRUE; 1: //Enable motor,Power on mcp( Axis:= Axis1 , Enable:= TRUE , bRegulatorOn:= TRUE, bDriveStart:= TRUE, Status=》 , Busy=》 , Error=》 , ErrorID=》 ); 2:// Disable motor,Power off mcp( Axis:=Axis1 , Enable:= TRUE , bRegulatorOn:= FALSE, bDriveStart:= TRUE, Status=》 , Busy=》 , Error=》 , ErrorID=》 ); 3: // JOG+ and JOG- mcmv( Axis:=Axis1 , JogForward:=Jog_Pos , JogBackward:=Jog_Neg , Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 4: // Move relative POS and Neg mcminc( Axis:=Axis1 , Execute:= MovEnable, Distance:= MovIncDistance, Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 5: // Move Abs mcmabs( Axis:=Axis1 , Execute:= MovEnable, Position:= MovAbsDistance, Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 6: // Stop motor MVStop( Axis:=Axis1 , Execute:= MovEnable, Jerk:= MV_Jerk, Done=》 , Busy=》 , Error=》 , ErrorID=》 ); 7: // Home Axis1Home( Axis:=Axis1 , Execute:= MovEnable, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 8: Axis1Reset( Axis:=Axis1 , Execute:= TRUE, ); END_CASE;
(2)修改变量
将轴的变量名修改为“Axis1”。
(3)添加程序调用
将PLC_PRG添加到EtherCAT_Task的程序调用中。
10.登录运行
(1)点击“在线”-》“登录”。
(2)点击“调试”-》“启动”。
(3)将Motionstate处的“准备值”输入1,再点击“调试”-》“写入值”,使电机使能打开,同样的操作,再将Motionstate的值改为3,电机则以一定的角速度旋转,再将Motionstate的值改为2,电机停止,且轴报错,如下图所示,此时只需将Motionstate改为8,使轴复位,即可重新操作。
11.总结
至此,整个电机驱动的流程完成,在第一次调试中会出现许多意想不到的问题,这篇文章已经把可能出现的问题的解决方法都包含进去了,如果还出现问题,大家可以尝试着根据codesys提供的报错消息去寻找解决办法,其中可能会出现一些描述上的欠妥或是错误,希望大家多多指正,谢谢大家!
在CODESYS中通过EtherCAT总线驱动单个电机
本文讲述了手上有个支持EtherCAT总线的驱动器和步进电机的情况下,如何通过CODESYS添加EtherCAT的主站从站,控制电机转动。
本文所用设备:普通PC、杰美康驱动器2DM556-EC、电机60J18100-440。
操作步骤:
1. 电机及驱动器接线
2.新建标准工程
打开codesys,新建标准工程,设备选择“CODESYS Control V3 ×64”,切记不要选择“SoftMotion”,编程语言选择结构化文本(ST)。
3.添加EtherCAT Master主站
4.安装驱动器描述文件
先在库管理器中安装驱动器的描述文件,才能添加从站。“工具”-》“设备存储库”-》“安装”,找到设备描述文件所在的位置后点击“打开”,即安装好了。
5.添加从站
6.添加轴
右键从站(驱动器),点击“添加SoftMtion CiA402轴”,结果如下图所示。至此,所有硬件添加完成。
7.下载插件
由于EtherCAT总线对运行环境的网卡有特殊型号要求(如codesysRTE),而我们基于codesys development的EtherCAT实现,对于一般电脑的网卡,下载一个NPCAP插件即可,下载NPCAP。
8.配置设备参数
(1)打开软PLC
将PC与codesys自带的软PLC通过网关连接起来,开启图中右下角的PLC,打开以后成右图所示。
(2)网关连接
双击“设备”,扫描网络,连接软PLC。
连接成功后如图所示。
(3)设置主站
(4)设置从站
方式时钟选择SM-Synchron。
(5)设置轴
这里increments可以理解为编码器的分辨率,也代表步进电机的脉冲数,我们使用的电机是4000个脉冲,电机转动一圈,不同的电机参数不一,需要根据自己电机的参数来设置,最后一个应用单元表示我们程序里定义的增量,也就是说程序里的输入变量值为4000时,转换为电机脉冲就是4000,电机转动一圈。
9.程序编写
配置完成之后,需要编写电机的运动程序,电机运行所使用的函数为codesys中有关电机驱动的一些功能块,我们通过case语句来编写电机的不容运行情况,再通过修改变量值来控制电机进行简单的运行,这里参考了该链接的程序。
(1)程序编写
变量声明:
PROGRAM PLC_PRG VAR mcp: MC_Power; //使能函数 mcmv: MC_Jog; //点动函数 mcmabs: MC_MoveAbsolute; // 绝对值定位运动 mcminc: MC_MoveRelative; // 增量式运动 MVStop: MC_Stop; // 电机停止 Axis1Home: MC_Home; // 电机回零 Axis1Reset: MC_Reset; // 电机故障复位 Motionstate: INT; // 测试用,控制测试功能 Cnt:INT; // 仅仅用于测试 Jog_Pos: BOOL ; // 点动正 使能 Jog_Neg: BOOL; // 点动负 使能 MovEnable: BOOL; // 定位运行、回零及停止时的函数模块使能 MovIncDistance: LREAL; // 增量运动距离设定 MV_Speed: LREAL; // 运行速度设定 MV_Acc: LREAL; // 运行加速度设定 MV_Dec: LREAL; // 运行减速度设定 MV_Jerk: LREAL; // 运行加加速度设定 MovAbsDistance: LREAL; // 绝对定位时的目标位置 END_VAR 主程序:
CASE Motionstate OF 0: Cnt := Cnt+1; MV_Speed:= 10000; MV_Acc:= 1000000; MV_Dec:= 1000000; MV_Jerk:= 100000000; Jog_Pos:= TRUE; 1: //Enable motor,Power on mcp( Axis:= Axis1 , Enable:= TRUE , bRegulatorOn:= TRUE, bDriveStart:= TRUE, Status=》 , Busy=》 , Error=》 , ErrorID=》 ); 2:// Disable motor,Power off mcp( Axis:=Axis1 , Enable:= TRUE , bRegulatorOn:= FALSE, bDriveStart:= TRUE, Status=》 , Busy=》 , Error=》 , ErrorID=》 ); 3: // JOG+ and JOG- mcmv( Axis:=Axis1 , JogForward:=Jog_Pos , JogBackward:=Jog_Neg , Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 4: // Move relative POS and Neg mcminc( Axis:=Axis1 , Execute:= MovEnable, Distance:= MovIncDistance, Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 5: // Move Abs mcmabs( Axis:=Axis1 , Execute:= MovEnable, Position:= MovAbsDistance, Velocity:= MV_Speed, Acceleration:= MV_Acc, Deceleration:= MV_Dec, Jerk:= MV_Jerk, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 6: // Stop motor MVStop( Axis:=Axis1 , Execute:= MovEnable, Jerk:= MV_Jerk, Done=》 , Busy=》 , Error=》 , ErrorID=》 ); 7: // Home Axis1Home( Axis:=Axis1 , Execute:= MovEnable, Done=》 , Busy=》 , CommandAborted=》 , Error=》 , ErrorID=》 ); 8: Axis1Reset( Axis:=Axis1 , Execute:= TRUE, ); END_CASE;
(2)修改变量
将轴的变量名修改为“Axis1”。
(3)添加程序调用
将PLC_PRG添加到EtherCAT_Task的程序调用中。
10.登录运行
(1)点击“在线”-》“登录”。
(2)点击“调试”-》“启动”。
(3)将Motionstate处的“准备值”输入1,再点击“调试”-》“写入值”,使电机使能打开,同样的操作,再将Motionstate的值改为3,电机则以一定的角速度旋转,再将Motionstate的值改为2,电机停止,且轴报错,如下图所示,此时只需将Motionstate改为8,使轴复位,即可重新操作。
11.总结
至此,整个电机驱动的流程完成,在第一次调试中会出现许多意想不到的问题,这篇文章已经把可能出现的问题的解决方法都包含进去了,如果还出现问题,大家可以尝试着根据codesys提供的报错消息去寻找解决办法,其中可能会出现一些描述上的欠妥或是错误,希望大家多多指正,谢谢大家!
举报