台达DVP15/50MC之FB_CamReadWrite
2019-11-14 本文已影响0人
TomatoTor
fb_CamReadWrite
功能块声明
| 范围 | 名称 | 数据类型 | 注释 |
|---|---|---|---|
| VAR_INPUT | UsiAxisCamTable | USINT | 凸轮表号 |
| VAR_INPUT | UsiCamPointCount | USINT | 凸轮点 |
| VAR_INPUT | bCamReadExe | BOOL | 读取触发 |
| VAR_INPUT | bCamWriteExe | BOOL | 写入触发 |
| VAR_OUTPUT | bCamReadDone | BOOL | 读取完成 |
| VAR_OUTPUT | bCamWriteDone | BOOL | 写入完成 |
| VAR | UsiAxisNumber | USINT | |
| VAR | AxisCamReadPoint | ARRAY[1..10] OF DMC_CamReadPoint | 读取凸轮点功能块 |
| VAR | AxisCamWritePoint | ARRAY[1..10] OF DMC_CamWritePoint | 写入凸轮点功能块 |
| VAR | AxisCamSet | DMC_CamSet | 凸轮表生效功能块 |
| VAR | UsiCamRead | USINT | |
| VAR | UsiCamWrite | USINT |
功能块程序
IF EDGEPOS(bCamReadExe) THEN
UsiCamRead := 1 ;
bCamReadDone := FALSE ;
bCamWriteExe := FALSE ;
END_IF;
IF bCamReadExe THEN
WHILE UsiCamRead < UsiCamPointCount DO
AxisCamReadPoint[UsiCamRead]();
AxisCamReadPoint[UsiCamRead].CamTable := UsiAxisCamTable ;
AxisCamReadPoint[UsiCamRead].CamChangedPoint := TRUE ;
AxisCamReadPoint[UsiCamRead].CamPointNum := UsiCamRead ;
AxisCamReadPoint[UsiCamRead].Execute := TRUE ;
IF AxisCamReadPoint[UsiCamRead].Done THEN
UsiCamRead := UsiCamRead + 1 ;
END_IF;
END_WHILE;
bCamReadDone := TRUE ;
IF bCamReadDone THEN
FOR UsiAxisNumber := 1 TO 10 BY 1 DO
AxisCamReadPoint[UsiAxisNumber].Execute := FALSE ;
END_FOR;
END_IF;
bCamReadExe := FALSE ;
END_IF;
IF EDGEPOS(bCamWriteExe) THEN
UsiCamWrite := 1 ;
bCamWriteDone := FALSE ;
bCamReadExe := FALSE ;
END_IF;
IF bCamWriteExe THEN
WHILE UsiCamWrite < UsiCamPointCount DO
AxisCamWritePoint[UsiCamWrite]();
AxisCamWritePoint[UsiCamWrite].CamTable := UsiAxisCamTable ;
AxisCamWritePoint[UsiCamWrite].CamPointNum := UsiCamWrite ;
AxisCamWritePoint[UsiCamWrite].Execute := TRUE ;
IF AxisCamWritePoint[UsiCamWrite].Done THEN
UsiCamWrite := UsiCamWrite + 1 ;
END_IF;
END_WHILE;
AxisCamSet.CamTable := UsiAxisCamTable ;
AxisCamSet.Execute := TRUE ;
IF AxisCamSet.Done THEN
FOR UsiAxisNumber := 1 TO 10 BY 1 DO
AxisCamWritePoint[UsiCamWrite].Execute := FALSE ;
END_FOR;
bCamWriteDone := TRUE ;
AxisCamSet.Execute := FALSE ;
bCamWriteExe := FALSE;
END_IF;
END_IF;
AxisCamSet();
Pro_CamReadWrite
程序变量
| 范围 | 名称 | 地址 | 数据类型 |
|---|---|---|---|
| VAR | ActAxisCamRW | ARRAY[1..32] OF fbCamRW | |
| VAR | UsiAxisNumber | USINT | |
| VAR RETAIN | g_UiMasterPos | %MW2000 | ARRAY[1..32,1..10] OF UINT |
| VAR RETAIN | g_UiSlavePos | %MW2500 | ARRAY[1..32,1..10] OF UINT |
程序内容
//需要多少轴就调用多少
ActAxisCamRW[1]();
IF g_bFrameCtrl_CamReadExe THEN
ActAxisCamRW[g_UsiCamTableChoice].UsiAxisCamTable := g_UsiCamTableChoice ;
ActAxisCamRW[g_UsiCamTableChoice].UsiCamPointCount := g_UsiCamPoint ;
ActAxisCamRW[g_UsiCamTableChoice].bCamReadExe := TRUE ;
FOR UsiAxisNumber := 1 TO 10 BY 1 DO
g_UiMasterPos[g_UsiCamTableChoice,UsiAxisNumber] := LREAL_TO_UINT(In:= ActAxisCamRW[g_UsiCamTableChoice].AxisCamReadPoint[UsiAxisNumber].MasterPos) ;
g_UiSlavePos[g_UsiCamTableChoice,UsiAxisNumber] := LREAL_TO_UINT(In:= ActAxisCamRW[g_UsiCamTableChoice].AxisCamReadPoint[UsiAxisNumber].SlavePos) ;
END_FOR;
IF ActAxisCamRW[g_UsiCamTableChoice].bCamReadDone THEN
ActAxisCamRW[g_UsiCamTableChoice].bCamReadExe := FALSE ;
g_bFrameCtrl_CamReadExe := FALSE ;
END_IF;
ELSIF g_bFrameCtrl_CamWriteExe THEN
ActAxisCamRW[g_UsiCamTableChoice].UsiAxisCamTable := g_UsiCamTableChoice ;
ActAxisCamRW[g_UsiCamTableChoice].UsiCamPointCount := g_UsiCamPoint ;
FOR UsiAxisNumber := 1 TO 10 BY 1 DO
ActAxisCamRW[g_UsiCamTableChoice].AxisCamWritePoint[UsiAxisNumber].MasterPos := UINT_TO_LREAL(In:= g_UiMasterPos[g_UsiCamTableChoice, UsiAxisNumber]);
ActAxisCamRW[g_UsiCamTableChoice].AxisCamWritePoint[UsiAxisNumber].SlavePos := UINT_TO_LREAL(In:= g_UiSlavePos[g_UsiCamTableChoice, UsiAxisNumber]);
END_FOR;
ActAxisCamRW[g_UsiCamTableChoice].bCamWriteExe := TRUE ;
IF ActAxisCamRW[g_UsiCamTableChoice].bCamWriteDone THEN
ActAxisCamRW[g_UsiCamTableChoice].bCamWriteExe := FALSE ;
g_bFrameCtrl_CamWriteExe := FALSE ;
END_IF;
ELSE
g_bFrameCtrl_CamReadExe := FALSE ;
g_bFrameCtrl_CamWriteExe := FALSE ;
END_IF;
Log:
2019-11-14 发布本文