完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在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提供的报错消息去寻找解决办法,其中可能会出现一些描述上的欠妥或是错误,希望大家多多指正,谢谢大家! |
|
|
|
只有小组成员才能发言,加入小组>>
900浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 04:45 , Processed in 0.722916 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号