第一章 一个轴的运动

第一章 第一个轴的运动



前言

当Execute置1、EN置0、Stop置1,自动复位Done,

一、AxisID1功能块(FB)

FUNCTION_BLOCK AxisID
VAR_INPUT
	EN: BOOL := 0; (* 运动确认 *)
	Execute: BOOL := 0; (* 启动信号 *)
	Stop: BOOL := 0; (* 急停:置1 ,使功能块立即停止 *)
	AxisID: INT := 0; (* 轴ID *)

	LSpeed: REAL := 10; (* 回零低速度 *)
	EscapePos: DINT := 5000; (* 初始在限位处,离开的距离 *)
	TrapP: TTrapPrm := (acc:= 3, dec:= 3, velStart:= 0, smoothTime:= 10); (* 用到的点位运动参数 *)
END_VAR
VAR_OUTPUT
	Done: BOOL; (* 运动完成信号 *)
END_VAR
VAR
	EN_R: R_TRIG; (* EN上升沿 *)
	EN_F: F_TRIG; (* EN下降沿 *)
	Exec_R: R_TRIG;

	Timer3: TON;

	psts: DINT := 0;
	count: INT := 1;
	pclock: DWORD := 0;
	HStep: INT := 0;
END_VAR
Exec_R(CLK:=Execute);
EN_F(CLK:=EN);

IF EN THEN(* 运动确认 *)
	GT_GetSts(AxisID,ADR(psts),count,ADR(pclock));(*读取轴状态*)
	IF Stop THEN
		HStep:=0;
		Done:=0;
	END_IF

	IF Exec_R.Q AND NOT(Stop) THEN
		HStep=1;
	ELSE

	END_IF

CASE HStep OF
	0:
		;
	1:
		GT_ClrSts(AxisID,1);
		GT_ZeroPos(AxisID,1);
		GT_PrfTrap(AxisID);
		GT_SetTrapPrm(AxisID,ADR(TrapP));
		GT_SetVel(AxisID, ABS(LSpeed));
		GT_SetPos(AxisID,-ABS(EscapePos));
		GT_Update(SHL(DWORD#1,AxisID-1));
		HStep:=2;
	2:
		Timer3(IN:=1,PT:=T#0.3s);
		IF Timer3.Q THEN
			HStep:=3;
			Timer3(IN:=0,PT:=T#0.3s);
		END_IF
	3:
		IF NOT(psts.10) THEN
			GT_Stop(SHL(DWORD#1,AxisID-1),1);
			HStep:=4;
		END_IF
	4:
		Done:=1;
		HStep:=0;

END_CASE
END_IF

(*EN Fall*)
IF EN_F.Q THEN
	HStep:=0;
	Done:=0;
	GT_Stop(SHL(DWORD#1,AxisID-1),1);
END_IF

二、AxisID1PRG程序(PRG)

1.变量

代码如下(示例):

PROGRAM AXISID1
VAR
	AxisID1PRG:AxisID;
	bGohome: BOOL;
	bstop: BOOL;
END_VAR

2.写入数据

代码如下(示例):

AxisID1PRG(
	EN:= 1,
	Execute:=bGohome ,
	Stop:= bstop,
	AxisID:=1 ,
	LSpeed:=10 ,
	EscapePos:=10000 ,
	Done=> );

IF bGohome THEN
	bGohome :=1;
	GT_AxisOn(1);
END_IF
IF AxisID1PRG.Done THEN
	bGohome :=0;
END_IF

三、手自动切换

1.变量

FUNCTION_BLOCK SZDQH
VAR_INPUT
	shouzi:BOOL;
	zidong:BOOL;
	shoudong:BOOL;
END_VAR
VAR_OUTPUT
	kaiguan:BOOL;
END_VAR
VAR
END_VAR

2.程序

kaiguan:=(shouzi AND zidong)OR (NOT shouzi AND shoudong);

3.调用

TYPE Autonum :
STRUCT
	yijianshoudong:BOOL;
	yijianzidong:BOOL;

	zhiliudianjishouzi:BOOL;
	sanzhouxipanshouzi:BOOL;
	fanzhaunxipanshouzi:BOOL;
	guidaoxianshouzi:BOOL;
	diyigedangweishouzi:BOOL;
	diergedangweishouzi:BOOL;
	tuopandingweishenshushouzi:BOOL;
	quliaowei1tuiliaoshouzi:BOOL;
	quliaowei2tuiliaoshouzi:BOOL;
	quliaowei1xiliaoshouzi10:BOOL;
	quliaowei1xiliaoshouzi11:BOOL;
	dingweijiajinxiliaoshouzi:BOOL;
	yuanzhuquliaoshouzi:BOOL;

	zhiliudianjishoudong:BOOL;
	sanzhouxipanshoudong:BOOL;
	fanzhaunxipanshoudong:BOOL;
	guidaoxianshoudong:BOOL;
	diyigedangweishoudong:BOOL;
	diergedangweishoudong:BOOL;
	tuopandingweishenshushoudong:BOOL;
	quliaowei1tuiliaoshoudong:BOOL;
	quliaowei2tuiliaoshoudong:BOOL;
	quliaowei1xiliaoshoudong10:BOOL;
	quliaowei1xiliaoshoudong11:BOOL;
	dingweijiajinxiliaoshoudong:BOOL;
	yuanzhuquliaoshoudong:BOOL;

	zhiliudianjizidong:BOOL;
	sanzhouxipanzidong:BOOL;
	fanzhaunxipanzidong:BOOL;
	guidaoxianzidong:BOOL;
	diyigedangweizidong:BOOL;
	diergedangweizidong:BOOL;
	tuopandingweishenshuzidong:BOOL;
	quliaowei1tuiliaozidong:BOOL;
	quliaowei2tuiliaozidong:BOOL;
	quliaowei1xiliaozidong10:BOOL;
	quliaowei1xiliaozidong11:BOOL;
	dingweijiajinxiliaozidong:BOOL;
	yuanzhuquliaozidong:BOOL;

	Q0_0: BOOL;
	Q0_1: BOOL;
	Q0_2: BOOL;
	Q0_3: BOOL;
	Q0_4: BOOL;
	Q0_5: BOOL;
	Q0_6: BOOL;
	Q0_7: BOOL;
	Q1_0: BOOL;
	Q1_1: BOOL;
	Q1_2: BOOL;
	Q1_3: BOOL;
	Q1_4: BOOL;
	Q1_5: BOOL;
	Q1_6: BOOL;

	flowStep: INT := 1;
	belt1Flag: INT := 1;
	isDecline: BOOL := TRUE;
END_STRUCT
END_TYPE
IF Autonum_t^.yijianshoudong  THEN
	Autonum_t^.yijianshoudong:=0;

	Autonum_t^.diergedangweishouzi:=0;
	Autonum_t^.diyigedangweishouzi:=0;
	Autonum_t^.dingweijiajinxiliaoshouzi:=0;
	Autonum_t^.fanzhaunxipanshouzi:=0;
	Autonum_t^.guidaoxianshouzi:=0;
	Autonum_t^.quliaowei1tuiliaoshouzi:=0;
	Autonum_t^.quliaowei1xiliaoshouzi10:=0;
	Autonum_t^.quliaowei1xiliaoshouzi11:=0;
	Autonum_t^.quliaowei2tuiliaoshouzi:=0;
	Autonum_t^.sanzhouxipanshouzi:=0;
	Autonum_t^.tuopandingweishenshushouzi:=0;
	Autonum_t^.yuanzhuquliaoshouzi:=0;
	Autonum_t^.zhiliudianjishouzi:=0;
END_IF

IF Autonum_t^.yijianzidong  THEN
	Autonum_t^.yijianzidong:=0;

	Autonum_t^.diergedangweishouzi:=1;
	Autonum_t^.diyigedangweishouzi:=1;
	Autonum_t^.dingweijiajinxiliaoshouzi:=1;
	Autonum_t^.fanzhaunxipanshouzi:=1;
	Autonum_t^.guidaoxianshouzi:=1;
	Autonum_t^.quliaowei1tuiliaoshouzi:=1;
	Autonum_t^.quliaowei1xiliaoshouzi10:=1;
	Autonum_t^.quliaowei1xiliaoshouzi11:=1;
	Autonum_t^.quliaowei2tuiliaoshouzi:=1;
	Autonum_t^.sanzhouxipanshouzi:=1;
	Autonum_t^.tuopandingweishenshushouzi:=1;
	Autonum_t^.yuanzhuquliaoshouzi:=1;
	Autonum_t^.zhiliudianjishouzi:=1;
END_IF
SZDQH1(shouzi:=Autonum_t^.zhiliudianjishouzi ,
		zidong:=Autonum_t^.zhiliudianjizidong ,
		shoudong:=Autonum_t^.zhiliudianjishoudong ,
		kaiguan=>Autonum_t^.Q0_0);
DO1.0:= Autonum_t^.Q0_0;
GT_SetDo(12,DO1);

SZDQH1(shouzi:=Autonum_t^.sanzhouxipanshouzi ,
		zidong:=Autonum_t^.sanzhouxipanzidong ,
		shoudong:=Autonum_t^.sanzhouxipanshoudong ,
		kaiguan=>Autonum_t^.Q0_1);
VAR1.0:=Autonum_t^.Q0_1;

4.声明

PROGRAM PLC_PRG
VAR
	Autonum_t:Autonum;
	IO_input_t:IO_input;
END_VAR
IO_inn(ADR(IO_input_t));
Autoo(ADR(Autonum_t),ADR(IO_input_t));
IO_outt(ADR(Autonum_t));
FUNCTION Autoo : BOOL
VAR_INPUT
	Autonum_t:POINTER TO Autonum;
	IO_input_t:POINTER TO IO_input;
END_VAR
VAR
END_VAR
FUNCTION IO_outt : BOOL
VAR_INPUT
	Autonum_t:POINTER TO Autonum;
END_VAR
VAR
	SZDQH1:SZDQH;
	DO1:DWORD:= 16#FFFFFFFF;
	VAR1 AT %QW0 : WORD;
	VAR2 AT %QW1 : WORD;
END_VAR
FUNCTION IO_inn : BOOL
VAR_INPUT
	IO_input_t:POINTER TO IO_input;
END_VAR
VAR
	Di1:DWORD:= 16#FFFFFFFF;
	VAR1 AT %IW0 : WORD;
	VAR2 AT %IW1 : WORD;
END_VAR

总结

使用说明:
Gohome为FB块,建议使用时一直刷新,
通过控制其输入的EN / Execute 来使轴进行回零
1、EN置1,开启回零功能
2、设置轴号AxisID、回零高速度HSpeed、回零低速度LSpeed、搜索原点方向MoveDir,
按实际设置搜索限位范围和搜索Home范围ScanLmtPos和ScanHomePos,
按需设置离开距离EscapePos和偏移OffSet
3、(可选)设置运动参数TrapP
4、置位启动信号Execute,轴就按照设置的参数进行回原点。Execute为上升沿信号(已经内置上升沿)
6、回零成功后,完成信号Done置1,当Execute置1、EN置0、Stop置1,自动复位Done,
7、在EN为1时,Stop有信号可停止该轴的运动

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

分~耳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值