本文是林建原創(chuàng)博文,轉(zhuǎn)載需注明出處!謝謝~
本文里面的程序部分,近期將改為梯形圖進行編寫,因為在ST有時候會出現(xiàn)程序無法正常執(zhí)行!
前言
本文是在《臺達AS系列PLC通訊臺達A2-M伺服<第一波>(全網(wǎng)首發(fā))》的基礎上,減少了對Canopen Builder軟件上的PDO映射步驟,采用的是AS系列PLC針對A2驅(qū)動器所開發(fā)的專用指令。
不同點
- 不用借助ASDA Soft V5進行驅(qū)動器內(nèi)部設定PR參數(shù)。
- 不對第三方的CanOpen總線的設備提供了控制支持。
- P1-01 操作模式采用回原先的0001或者0101(PR模式)進行控制
- 無需再對Canopen Builder進行SDO或者PDO的映射步驟。
指令
因為AS支持的Canopen指令依舊在不斷的補充完善,筆者也依舊會對本博文不定時的更新。指令如下:(E-CAM=電子凸輪)
- INITC(初始化)
- ASDON(使能)
- CASD(加減速設置)
- DDRVIC(相對定位)
- DDRVAC(絕對定位)
- DPLSVC(速度控制)
- ZRNC(回零復歸)
- COPRW(參數(shù)讀寫)
- D COPWL(參數(shù)多筆讀寫)
- RSTD(復位重置)
- ZRNM(回零模式)
- EMER(讀取急停信息)
- D CSFOC(伺服追隨)
- ECAMD(E-CAM表下載至從站)
- DECAMS(E-CAM參數(shù)設定與規(guī)劃)
- ECAMC(E-CAM啟動與狀態(tài)顯示)
- ECAMC(變更E-CAM表起始位置與長度)
- DTQC(轉(zhuǎn)矩控制速度限制) 本 ISPsoft3.07版本已有,不過仍無法正常使用
- DTQLC(速度控制轉(zhuǎn)矩限制)本 ISPsoft3.07版本已有,不過仍無法正常使用
AS系列PLC內(nèi)置的相關SM特殊標志位和SR特殊寄存器

臺達專屬驅(qū)動器使用之CAN通訊指令相關特殊標志位(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》
本文是林建原創(chuàng)博文,轉(zhuǎn)載需注明出處!謝謝~
Log:
2019-06-07 發(fā)布本文
2019-06-08 確認相關指令是否可用、建議程序改用LD(梯形圖)、ST部分程序部分指令能用而已。