PLC
直播中

李颜

7年用户 1292经验值
私信 关注

在CODESYS中怎样通过EtherCAT总线去驱动单个电机呢

在CODESYS中怎样通过EtherCAT总线去驱动单个电机呢?
如何通过CODESYS添加EtherCAT的主站从站控制电机转动?

回帖(1)

杨娟

2021-9-18 16:29:03
  在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提供的报错消息去寻找解决办法,其中可能会出现一些描述上的欠妥或是错误,希望大家多多指正,谢谢大家!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分