博文

台达DVP15-50MC之FB_CamReadWrite

约 1 分钟

fb_CamReadWrite

功能块声明

范围名称数据类型注释
VAR_INPUTUsiAxisCamTableUSINT凸轮表号
VAR_INPUTUsiCamPointCountUSINT凸轮点
VAR_INPUTbCamReadExeBOOL读取触发
VAR_INPUTbCamWriteExeBOOL写入触发
VAR_OUTPUTbCamReadDoneBOOL读取完成
VAR_OUTPUTbCamWriteDoneBOOL写入完成
VARUsiAxisNumberUSINT
VARAxisCamReadPointARRAY[1..10] OF DMC_CamReadPoint读取凸轮点功能块
VARAxisCamWritePointARRAY[1..10] OF DMC_CamWritePoint写入凸轮点功能块
VARAxisCamSetDMC_CamSet凸轮表生效功能块
VARUsiCamReadUSINT
VARUsiCamWriteUSINT

功能块程序

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

程序变量

范围名称地址数据类型
VARActAxisCamRWARRAY[1..32] OF fbCamRW
VARUsiAxisNumberUSINT
VAR RETAINg_UiMasterPos%MW2000ARRAY[1..32,1..10] OF UINT
VAR RETAINg_UiSlavePos%MW2500ARRAY[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 发布本文

相关阅读

← 返回博文列表