本文是林建原创博文,转载需注明出处!谢谢~
本文里面的程序部分,近期将改为梯形图进行编写,因为在ST有时候会出现程序无法正常执行!
前言
本文是在《台达AS系列PLC通讯台达A2-M伺服<第一波>(全网首发)》的基础上,减少了对Canopen Builder软件上的PDO映射步骤,采用的是AS系列PLC针对A2驱动器所开发的专用指令。
不同点
- 不用借助ASDA Soft V5进行驱动器内部设定PR参数。
- 不对第三方的CanOpen总线的设备提供了控制支持。
- P1-01 操作模式采用回原先的0001或者0101(PR模式)进行控制
- 无需再对Canopen Builder进行SDO或者PDO的映射步骤。
指令
因为AS支持的Canopen指令依旧在不断的补充完善,笔者也依旧会对本博文不定时的更新。指令如下:(E-CAM=电子凸轮)
- INITC(初始化)
- ASDON(使能)
- CASD(加减速设置)
- DDRVIC(相对定位)
- DDRVAC(绝对定位)
- DPLSVC(速度控制)
- ZRNC(回零复归)
- COPRW(参数读写)
- D COPWL(参数多笔读写)
- RSTD(复位重置)
- ZRNM(回零模式)
- EMER(读取急停信息)
- D CSFOC(伺服追随)
- ECAMD(E-CAM表下载至从站)
- DECAMS(E-CAM参数设定与规划)
- ECAMC(E-CAM启动与状态显示)
- ECAMC(变更E-CAM表起始位置与长度)
- DTQC(转矩控制速度限制) 本 ISPsoft3.07版本已有,不过仍无法正常使用
- DTQLC(速度控制转矩限制)本 ISPsoft3.07版本已有,不过仍无法正常使用
AS系列PLC内置的相关SM特殊标志位和SR特殊寄存器

AS变量
Class Identifiers Address Type Initial Value Comment
VAR g_b_InitcEn BOOL
VAR g_b_AsdonEn BOOL
VAR g_b_ZrnmDone BOOL
VAR g_b_ZrnmError BOOL
VAR g_i_AxisAccTime WORD
VAR g_i_AxisDecTime WORD
VAR g_b_CasdEn BOOL
VAR g_i_HomeSpeedFirst WORD
VAR g_i_HomeSpeedSecond WORD
VAR g_b_ZrncEn BOOL
VAR g_b_AxisJogB BOOL
VAR g_b_AxisJogF BOOL
VAR g_b_DplsvcEn BOOL
VAR g_b_DdrvicEn BOOL
VAR g_b_DdrvacEn BOOL
VAR g_Di_AxisJogSpeed DWORD
VAR g_Di_AxisSpeed DWORD
VAR g_Di_RelPos DWORD
VAR g_Di_AbsPos DWORD
VAR g_b_AxisResetCtrl SM1582 BOOL
VAR g_b_PosDone SM1631 BOOL
VAR g_b_AxisSon SM1651 BOOL
VAR g_b_InitcDone SM1681 BOOL
VAR g_b_InitcError SM1682 BOOL
PLC程序
原先的ST的程序下,部分指令是不支持的,所以改为梯形图的程序演示。



(*Initc初始化*)
IF g_b_InitcEn and not g_b_InitcDone THEN
INITC (1);
ELSIF g_b_InitcEn and g_b_InitcDone THEN
g_b_InitcEn := False ;
ELSE
g_b_InitcEn := False ;
END_IF;
(*ASDON使能*)
IF g_b_AsdonEn THEN
ASDON (1,1);
IF g_b_AxisSon THEN
g_b_AxisResetCtrl := TRUE ;
END_IF;
ELSE
ASDON (1,0);
IF NOT g_b_AxisSon THEN
g_b_AxisResetCtrl := TRUE ;
END_IF;
END_IF;
(*ZRNM回零模式*)
ZRNM (1, 16#1028, g_b_ZrnmDone, g_b_ZrnmError);
(*CASD加减速设定*)
IF g_b_CasdEn THEN
CASD (1, g_i_AxisAccTime, g_i_AxisDecTime);
ELSIF g_b_CasdEn and g_b_InitcDone THEN
g_b_CasdEn := FALSE ;
ELSE
g_b_CasdEn := FALSE ;
END_IF;
(*ZRNC回零复归*)
IF g_b_ZrncEn THEN
ZRNC (1, g_i_HomeSpeedFirst, g_i_HomeSpeedSecond);
ELSIF g_b_ZrncEn and g_b_PosDone THEN
g_b_ZrncEn := FALSE ;
ELSE
g_b_ZrncEn := FALSE ;
END_IF;
(*DPLSVC速度控制*)
IF g_b_DplsvcEn THEN
DPLSVC (1, g_Di_AxisSpeed );
ELSE
g_b_DplsvcEn := FALSE ;
END_IF;
(*DPLSVC速度控制*)(*寸动*)
IF g_b_AxisJogB THEN
g_Di_AxisJogSpeed:= g_Di_AxisSpeed ;
DPLSVC (1 , g_Di_AxisJogSpeed );
ELSIF g_b_AxisJogF THEN
g_Di_AxisJogSpeed :=0 - g_Di_AxisSpeed ;
DPLSVC (1, g_Di_AxisJogSpeed );
ELSE
g_b_AxisJogB := FALSE ;
g_b_AxisJogF := FALSE ;
END_IF;
(*DDRVIC相对定位*)
IF g_b_DdrvicEn THEN
DDRVIC (1, g_Di_RelPos, g_Di_AxisSpeed);
IF g_b_PosDone then
g_b_AxisResetCtrl := TRUE ;
g_b_DdrvicEn := FALSE ;
END_IF;
END_IF;
(*DDRVAC绝对定位*)
IF g_b_DdrvacEn THEN
DDRVAC (1, g_Di_AbsPos, g_Di_AxisSpeed);
IF g_b_PosDone then
g_b_AxisResetCtrl := TRUE ;
g_b_DdrvacEn := FALSE ;
END_IF;
END_IF;
参考文献
《AS系列程序手册20190312》
本文是林建原创博文,转载需注明出处!谢谢~
Log:
2019-06-07 发布本文
2019-06-08 确认相关指令是否可用、建议程序改用LD(梯形图)、ST部分程序部分指令能用而已。
网友评论