Codesys的G代码控制Delta并联机械手

目录

一、概述

二、程序架构

三、关键程序代码

3.1 Prg_Plc

3.2 Prg_Motion

 3.3 Prg_Visu

一、概述

本文分享Codesys利用G代码控制Delta并联机械手的程序。Codesys有专门的功能块将CNC的插补动作转换至Robotics。具体可以查Codesys的帮助网站。

二、程序架构

三、关键程序代码

3.1 Prg_Plc

(*
#@Copyright:
#@License:
#@Birth:            created by AlongWu on 2023-06-17
#@Content:          Prg_Plc-主控制程序
#@Version:          0.0.1
#@Revision:         last revised by AlongWu on 2023-06-17
#@brief             
*)

PROGRAM Prg_Plc
VAR
	


arr_visu_3dpath_pointbuffer_bottom			:ARRAY[0..glvars.const_udi_size_points_in_array] OF VisuStruct3DPathPoint ;		//Visu的3D路径点位底画结构体数组


bw_start									:BOOL;								//程序启动位
bw_abort									:BOOL;								//程序终止
bs_running									:BOOL;								//程序运行中 状态
r_trig_start								:R_TRIG;							//程序启动上升沿
r_trig_abort								:R_TRIG;							//程序终止上升沿


arr_ncinterpreter_buf						:ARRAY[0..99] OF SMC_GEOINFO;		//SMC_NCInterpreter缓存空间

fb_readncfile2								:SMC_ReadNCFile2;					//G代码文件读取功能块 实例
fb_pathcopierfile							:SMC_PathCopierFile;				//G代码文件绑定Path3D控件的底画功能块  实例
fb_ncinterpreter							:SMC_NCInterpreter;					//G代码文件解析功能块  实例

i_step										:INT;								//步骤
i_counter									:INT;								//内部计时器



END_VAR


//程序启动上升沿	
r_trig_start(CLK:= NOT(bs_running) AND  bw_start, Q=> );

//程序终止上升沿
r_trig_abort(CLK:= bs_running AND  bw_abort, Q=> );

//程序启动上升沿触发后
IF r_trig_start.Q THEN
	
	//程序步跳至步骤1
	i_step := 1;
	
END_IF

//自复位
IF bw_start THEN
	
	//复位启动位
	bw_start := FALSE;
END_IF



//程序终止o上升沿触发后
IF r_trig_abort.Q THEN
	
	//程序步跳至步骤0
	i_step := 0;
	
	//复位运行状态位
	bs_running := FALSE;
	
	//功能块实例 复位
	fb_readncfile2.bExecute := FALSE;
	fb_pathcopierfile.bExecute := FALSE;
		
	
END_IF


//自复位
IF bw_abort THEN
	
	//复位启动位
	bw_abort := FALSE;
	
END_IF


//程序步骤
CASE i_step OF
	1:
		//功能块实例 复位
		fb_readncfile2.bExecute := FALSE;
		fb_pathcopierfile.bExecute := FALSE;
		
		//步骤+1
		i_step := i_step +1 ;
		
		//计时器复位
		i_counter := 0;
		
	2:
		//计数3个周期
		IF i_counter < 3 THEN
			i_counter := i_counter + 1 ;
		ELSE
			i_step := i_step +1 ;
		END_IF
	3:
		//功能块实例置位
		fb_readncfile2.bExecute := TRUE;
		fb_pathcopierfile.bExecute := TRUE;
		bs_running := TRUE;
		i_step := i_step +1 ;
	
ELSE
	//无操作
END_CASE


//调用子程序 Act_PathInit
Act_PathInit();
	


	

(*
#@Copyright:
#@License:
#@Birth:            created by Along on 2023-06-17
#@Content:          Act_PathInit-读取G代码的子程序
#@Version:          0.0.1
#@Revision:         last revised by Along on 2023-06-17
#@brief             
					功能块
					fb_readncfile2
					fb_ncinterpreter
					fb_checkvelocities
					fb_pathcopierfile
*)


//G代码文件读取功能块
fb_readncfile2(
	bExecute:= , 
	sFileName:= glvars.str_filepath, 
	pvl:= , 
	fDefaultVel:= 20, 
	fDefaultAccel:= 20, 
	fDefaultDecel:= 20, 
	fDefaultVelFF:= 20, 
	fDefaultAccelFF:= 20, 
	fDefaultDecelFF:= 20, 
	b3DMode:= TRUE , 
	bStepSuppress:= , 
	aSubProgramDirs:= , 
	bParenthesesAsComments:= , 
	bDisableJumpBuffer:= , 
	bBusy=> , 
	bError=> , 
	ErrorID=> , 
	errorPos=> , 
	ErrorProgramName=> , 
	sentences=> , 
	adwFileSize=> , 
	adwPos=> );

//G代码文件解析功能块  实例
fb_ncinterpreter(
	sentences:= fb_readncfile2.sentences, 
	bExecute:= fb_readncfile2.bExecute, 
	bAbort:= , 
	bAppend:= , 
	piStartPosition:= , 
	vStartToolLength:= , 
	nSizeOutQueue:= SIZEOF(arr_ncinterpreter_buf), 
	pbyBufferOutQueue:= ADR(arr_ncinterpreter_buf), 
	bEnableSyntaxChecks:= , 
	eOriConv:= , 
	dCircleTolerance:= , 
	pInterpreterStack:= , 
	nInterpreterStackSizeBytes:= , 
	bDone=> , 
	bBusy=> , 
	bError=> , 
	wErrorID=> , 
	errorPos=> , 
	poqDataOut=> , 
	iStatus=> , 
	iLineNumberDecoded=> , 
	GCodeText=> , 
	CallstackInfo=> , 
	aActivePrograms=> );
	
	
//G代码动作速度检查功能块  实例
glvars.fb_checkvelocities(
	bExecute:= fb_ncinterpreter.bDone, 
	bAbort:= , 
	poqDataIn:= fb_ncinterpreter.poqDataOut, 
	dAngleTol:= , 
	bCheckAddAxVelJump:= , 
	dMaxAddAxVelDifference:= , 
	bBusy=>, 
	bError=> , 
	wErrorID=> , 
	poqDataOut=>);
	
	

//G代码文件绑定Path3D控件的底画功能块  实例
fb_pathcopierfile(
	bExecute:= , 
	udiNumberOfPointsInArray:= glvars.const_udi_size_points_in_array, 
	pBuffer:= ADR(arr_visu_3dpath_pointbuffer_bottom) , 
	sFileName:= glvars.str_filepath, 
	pvl:= , 
	piStartPosition:= , 
	aSubProgramDirs:= , 
	bParenthesesAsComments:= , 
	bEnableSyntaxChecks:= , 
	bStepSuppress:= , 
	eOriConv:= , 
	bDone=> , 
	bError=> , 
	iErrorID=> , 
	vs3dt=> );
	
	

3.2 Prg_Motion

(*
#@Copyright:
#@License:
#@Birth:            created by AlongWu on 2023-06-17
#@Content:          Prg_Motion-运动控制程序
#@Version:          0.0.1
#@Revision:         last revised by AlongWu on 2023-06-17
#@brief             
*)

PROGRAM Prg_Motion
VAR
	

END_VAR



//G代码动作速度检查功能块  实例	
glvars.fb_interpolator(
	bExecute:= , 
	//插补器 导入 nc文件的outqueue
	poqDataIn:= glvars.fb_checkvelocities.poqDataOut, 
	bSlow_Stop:= , 
	bEmergency_Stop:= , 
	bWaitAtNextStop:= , 
	dOverride:= 1, 
	iVelMode:= , 
	dwIpoTime:=2000 , 
	dLastWayPos:= , 
	bAbort:= , 
	bSingleStep:= , 
	bAcknM:= , 
	bQuick_Stop:= , 
	dQuickDeceleration:= , 
	dJerkMax:= , 
	dQuickStopJerk:= , 
	bSuppressSystemMFunctions:= , 
	bDone=> , 
	bBusy=> , 
	bError=> , 
	wErrorID=> , 
	piSetPosition=> , 
	iStatus=> , 
	bWorking=> , 
	iActObjectSourceNo=> , 
	dActObjectLength=> , 
	dActObjectLengthRemaining=> , 
	dVel=> , 
	vecActTangent=> , 
	iLastSwitch=> , 
	dwSwitches=> , 
	dWayPos=> , 
	wM=> , 
	adToolLength=> , 
	Act_Object=> );
	

//Tripod并联机械手的移动控制功能块  实例
glvars.fb_trafo_tripod_Arm(
	pi:= glvars.fb_interpolator.piSetPosition, 
	dArmLength1:= glvars.const_lr_driven_armlen, 
	dArmLength2:= glvars.const_lr_passive_armlen, 
	dArm1Radius:= glvars.const_lr_driven_arm_r, 
	dStewartRadius:= glvars.const_lr_endplate_r, 
	dDistance:= glvars.const_lr_platejoin_dist, 
	dRotationOffset:= 0, 
	dOffsetA:= 0, 
	dOffsetB:= 0, 
	dOffsetC:= 0, 
	dMaxAngleBallJoint:= 60, 
	bError=> , 
	dA=> , 
	dB=> , 
	dC=> );


	
//绗架三维空间移动控制功能块  实例	
glvars.fb_trafo_gantry3d(
	pi:= glvars.fb_interpolator.piSetPosition,  
	dOffsetX:= , 
	dOffsetY:= , 
	dOffsetZ:= , 
	dx=> , 
	dy=> , 
	dz=> );	
	

 3.3 Prg_Visu

(*
#@Copyright:
#@License:
#@Birth:            created by AlongWu on 2023-06-17
#@Content:          Prg_Visu-可视化控制程序
#@Version:          0.0.1
#@Revision:         last revised by AlongWu on 2023-06-17
#@brief             
*)
PROGRAM Prg_Visu
VAR
	
fb_positiontracker							:SMC_PositionTracker;				//Visu的Path3D控件绑定路径跟踪功能块 实例
fb_trafof_tripod_Arm						:SMC_TRAFOF_Tripod_Arm;				//Tripod并联机械手Visu的绑定功能块 实例
fb_trafof_gantry3d							:SMC_TRAFOF_Gantry3D;				//绗架三维空间移Visu的绑定功能块 实例

arr_visu_3dpath_pointbuffer_track			:ARRAY[0..glvars.const_udi_size_points_in_array] OF VisuStruct3DPathPoint ;		//Visu的3D路径点位跟踪画结构体数组		

v3d_target									:SMC_VECTOR3D;						//末端三维坐标

END_VAR




//Visu的Path3D控件绑定路径跟踪功能块	
fb_positiontracker(
	bEnable:= glvars.fb_interpolator.bBusy, 
	bClear:= , 
	dX:= Virtual_X.diActPosition, 
	dY:= Virtual_Y.diActPosition, 
	dZ:= Virtual_Z.diActPosition, 
	udiNumberOfPointsInArray:= glvars.const_udi_size_points_in_array, 
	pBuffer:= ADR(arr_visu_3dpath_pointbuffer_track), 
	vs3dt=> );
	
	
//绗架三维空间移动控制功能块  实例
fb_trafof_tripod_Arm(
	dArmLength1:= glvars.const_lr_driven_armlen, 
	dArmLength2:= glvars.const_lr_passive_armlen, 
	dArm1Radius:= glvars.const_lr_driven_arm_r, 
	dStewartRadius:= glvars.const_lr_endplate_r, 
	dDistance:= glvars.const_lr_platejoin_dist, 
	dRotationOffset:= 0, 
	dOffsetA:= 0, 
	dOffsetB:= 0, 
	dOffsetC:= 0, 
	dx=> v3d_target.dX, 
	dy=> v3d_target.dY, 
	dz=> v3d_target.dZ, 
	DriveA:= Virtual_A1, 
	DriveB:= Virtual_A2, 
	DriveC:= Virtual_A3);	
	
//绗架三维空间移Visu的绑定功能块 实例	
fb_trafof_gantry3d(
	dOffsetX:= , 
	dOffsetY:= , 
	dOffsetZ:= , 
	minX:= , 
	maxX:= 200, 
	minY:= , 
	maxY:= 200, 
	minZ:= , 
	maxZ:= 200, 
	DriveX:= Virtual_X, 
	DriveY:= Virtual_Y, 
	DriveZ:=Virtual_Z , 
	dx=> , 
	dy=> , 
	dz=> , 
	dnx=> , 
	dny=> , 
	dnz=> , 
	dm=> );

 以上。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CodeSys是一种可编程控制器软件(PLC),在机械手控制中被广泛应用。CodeSys提供了强大的功能和工具,用于编写和执行机械手控制程序。 首先,使用CodeSys可以轻松地创建和编辑机械手控制程序。通过CodeSys的图形化界面,用户可以直观地设计机械手的运动轨迹,设置操作参数和条件。CodeSys还提供了丰富的函数库和算法,以支持复杂的运动控制和路径规划。 其次,CodeSys提供了丰富的通信接口和协议,可以方便地与机械手的各个部件进行通信。用户可以使用CodeSys机械手的传感器和执行器进行数据交换,实现实时的位置和力检测,以及精确的运动控制。 此外,CodeSys还支持多种编程语言,如Ladder Diagram(LD)、Structured Text(ST)和Function Block Diagram(FBD),满足不同用户的编程需求。用户可以选择最适合自己的编程语言,并根据需要进行灵活的编程。 最后,CodeSys不仅可以用于简单的机械手控制任务,还可以应用于复杂的自动化系统中。它可以与其他设备和系统集成,实现更高级的控制和协作。同时,CodeSys还提供了强大的调试和监控工具,方便用户进行调试和优化。 综上所述,CodeSys是一种功能强大的软件平台,适用于机械手控制。它提供了丰富的功能和工具,可以帮助用户实现高效精确的机械手控制,满足不同应用需求。 ### 回答2: CODESYS是一款广泛使用的工业自动化编程软件,常用于编程控制机械设备和机器人。CODESYS可以用于控制各种类型的机械手,来完成各种工业自动化任务。 在使用CODESYS控制机械手时,首先需要创建一个项目,并选择合适的目标设备,例如PLC(可编程逻辑控制器)。接下来,可以使用CODESYS提供的函数库和工具,编写程序来控制机械手的运动和操作。 一个典型的CODESYS程序包含了几个重要的部分,包括初始化、运动控制、逻辑控制和安全控制。在初始化部分,需要对机械手进行参数设置和初始化工作,例如设置初始位置和速度。运动控制部分包括了对机械手运动轨迹的控制,可以通过编程来实现机械手的移动、旋转和抓取动作。逻辑控制部分则负责根据输入信号和逻辑条件,决定机械手的具体操作,例如判断是否抓取物体或释放物体。最后,安全控制部分可以确保机械手的运动是安全的,防止发生意外事故。 CODESYS提供了直观易用的编程界面,可以通过拖拽、点击和输入代码来完成机械手控制。同时,CODESYS还支持与其他设备和系统的通信,可以与人机界面(HMI)进行交互,或者通过网络与其他设备进行数据交换。 总之,使用CODESYS可以方便快捷地实现对机械手控制。通过编写程序,可以实现对机械手的各种运动和操作,从而满足不同工业自动化需求。CODESYS的强大功能和灵活性,使其成为许多工业领域中控制机械手的首选软件之一。 ### 回答3: CODESYS (Controller Development System) 是一种通用的软件开发工具,用于编程和控制各种自动化系统,包括机械手控制CODESYS提供了一个强大的编程环境,允许用户使用各种编程语言(如Ladder Diagram,Structured Text,Function Block Diagram等)来编写自定义的控制逻辑。这些编程语言允许用户创建算法,处理输入和输出信号,控制运动轴和执行多种操作。 机械手控制CODESYS的一个重要应用领域。通过CODESYS,用户可以使用其丰富的机械手控制函数库,来编写用于机械手运动和操作的控制程序。这些函数库提供了各种运动控制功能,如坐标转换、速度控制、轨迹规划等。用户可以根据应用需求选择适当的函数和参数,以实现机械手在不同场景中的灵活控制CODESYS还提供了与多种硬件设备和传感器的接口功能。用户可以通过适当的硬件配置和通信设置,将CODESYS机械手的电机、编码器、传感器等进行连接,以实现对机械手的实时监控和控制。此外,CODESYS还支持与外部设备的通信,如人机界面(HMI)和控制台等。 总之,CODESYS是一种强大的软件开发工具,适用于各种自动化系统的控制编程,包括机械手控制。通过CODESYS,用户可以使用丰富的函数库和编程语言,实现对机械手的各种运动和操作的控制,并与硬件设备和传感器进行连接和通信。CODESYS机械手控制提供了高度灵活和可定制的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值