收藏 分享(赏)

PLC中实现直线插补算法实例.pdf

上传人:HR专家 文档编号:5917193 上传时间:2019-03-21 格式:PDF 页数:5 大小:290.52KB
下载 相关 举报
PLC中实现直线插补算法实例.pdf_第1页
第1页 / 共5页
PLC中实现直线插补算法实例.pdf_第2页
第2页 / 共5页
PLC中实现直线插补算法实例.pdf_第3页
第3页 / 共5页
PLC中实现直线插补算法实例.pdf_第4页
第4页 / 共5页
PLC中实现直线插补算法实例.pdf_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、PLC 中实现直线插补算法实例 /采用逐点逼近算法 /终点判别 :分别判断各坐标轴的进给步数 /整体程序 :采用虚拟坐标控制原理,即将 “ 实际坐标轴 ” 平移变换为 “ 虚拟坐标轴 ” ,从而简化控制复杂度 ; 大多数资料里只讲解了确定象限的直线段控制,采用“虚拟坐标轴”原理,可以实现跨象限的直线段控制 /可以适用于四象限工作 /一次移动的脉冲基准,默认为 “1“ /此程序只有参考意义,无实际工程实用价值! ! STEP7 5.5 编写! 希望对大家有帮助! BXL (苏州 ) 2012-12-31 /以下为第一象限 的偏差算法 /以下为 四 象限的算法 FUNCTION_BLOCK FB1

2、/实例程序 VERSION: 1.0 AUTHOR: BXL KNOW_HOW_PROTECT VAR_INPUT X_StartPoint:DINT;/X 轴起点坐标 Y_StartPoint:DINT;/Y 轴起点坐标 X_StopPoint:DINT;/X 轴终点坐标 Y_StopPoint:DINT;/Y 轴终点坐标 END_VAR VAR_OUTPUT X_JD_Value:DINT;/X 轴绝对控制时,位置脉冲值 Y_JD_Value:DINT;/Y 轴绝对控制时,位置脉冲值 X_XD_Value:DINT;/X 轴相对控制时,脉冲增量值 Y_XD_Value:DINT;/Y 轴相

3、对控制时,脉冲增量值 X_XD_Forward:BOOL;/X 轴相对控制时,正向行进 X_XD_Reverse:BOOL;/X 轴相对控制时,反向行进 Y_XD_Forward:BOOL;/Y 轴相对控制时,正向行进 Y_XD_Reverse:BOOL;/Y 轴相对控制时,反向行进 END_VAR VAR_IN_OUT Run:BOOL;/运行命令 END_VAR VAR Save_X_StopPoint:DINT;/虚拟 X 轴终点坐标 Save_Y_StopPoint:DINT;/虚拟 Y 轴终点坐标 Fi_ErrorValue:DINT;/第 i 步偏差值 X_StepValue:DI

4、NT;/X 轴进给步数值 Y_StepValue:DINT;/Y 轴进给步数值 Save_Run:BOOL;/运行命令寄存 Quadrant_1:BOOL;/第一象限 Quadrant_2:BOOL;/第二象限 Quadrant_3:BOOL;/第三象限 Quadrant_4:BOOL;/第四象限 END_VAR BEGIN/程序开始 /* /初始化数据 IF Run AND (NOT Save_Run) THEN X_JD_Value:=X_StartPoint; Y_JD_Value:=Y_StartPoint; X_XD_Value:=0; Y_XD_Value:=0; X_XD_For

5、ward:=FALSE; X_XD_Reverse:=FALSE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=FALSE; Fi_ErrorValue:=0; X_StepValue:=0; Y_StepValue:=0; Save_X_StopPoint:=X_StopPoint-X_StartPoint;/计算虚拟 X 轴终点坐标 Save_Y_StopPoint:=Y_StopPoint-Y_StartPoint;/计算虚拟 Y 轴终点坐标 IF (Save_X_StopPoint=0)AND(Save_Y_StopPoint=0) THEN/判断终点和起点相

6、等 Quadrant_1:=FALSE; Quadrant_2:=FALSE; Quadrant_3:=FALSE; Quadrant_4:=FALSE; Run:=FALSE; ELSIF (Save_X_StopPoint0)AND(Save_Y_StopPoint0) THEN/判断虚拟坐标位于第一象限 Quadrant_1:=TRUE; Quadrant_2:=FALSE; Quadrant_3:=FALSE; Quadrant_4:=FALSE; ELSIF (Save_X_StopPoint0) THEN/判断虚拟坐标位于第二象限 Quadrant_1:=FALSE; Quadra

7、nt_2:=TRUE; Quadrant_3:=FALSE; Quadrant_4:=FALSE; ELSIF (Save_X_StopPoint0)AND(Save_Y_StopPoint=0 THEN/偏差判别 IF Quadrant_1 THEN/第一象限, X 轴正向进给 X_JD_Value:=X_JD_Value+1; Y_JD_Value:=Y_JD_Value+0; X_XD_Value:=1; Y_XD_Value:=0; X_XD_Forward:=TRUE; X_XD_Reverse:=FALSE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=F

8、ALSE; END_IF; IF Quadrant_2 THEN/第二象限, X 轴反向进给 X_JD_Value:=X_JD_Value-1; Y_JD_Value:=Y_JD_Value+0; X_XD_Value:=1; Y_XD_Value:=0; X_XD_Forward:=FALSE; X_XD_Reverse:=TRUE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=FALSE; END_IF; IF Quadrant_3 THEN/第三象限, X 轴反向进给 X_JD_Value:=X_JD_Value-1; Y_JD_Value:=Y_JD_Valu

9、e+0; X_XD_Value:=1; Y_XD_Value:=0; X_XD_Forward:=FALSE; X_XD_Reverse:=TRUE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=FALSE; END_IF; IF Quadrant_4 THEN/第四象限, X 轴正向进给 X_JD_Value:=X_JD_Value+1; Y_JD_Value:=Y_JD_Value+0; X_XD_Value:=1; Y_XD_Value:=0; X_XD_Forward:=TRUE; X_XD_Reverse:=FALSE; Y_XD_Forward:=FALS

10、E; Y_XD_Reverse:=FALSE; END_IF; Fi_ErrorValue:=Fi_ErrorValue-ABS(Save_Y_StopPoint);/偏差计算 X_StepValue:=X_StepValue+1;/X 轴进给步数计算 ELSE/偏差判别 IF Quadrant_1 THEN/第一象限, Y 轴正向进给 X_JD_Value:=X_JD_Value+0; Y_JD_Value:=Y_JD_Value+1; X_XD_Value:=0; Y_XD_Value:=1; X_XD_Forward:=FALSE; X_XD_Reverse:=FALSE; Y_XD_F

11、orward:=TRUE; Y_XD_Reverse:=FALSE; END_IF; IF Quadrant_2 THEN/第二象限, Y 轴正向进给 X_JD_Value:=X_JD_Value+0; Y_JD_Value:=Y_JD_Value+1; X_XD_Value:=0; Y_XD_Value:=1; X_XD_Forward:=FALSE; X_XD_Reverse:=FALSE; Y_XD_Forward:=TRUE; Y_XD_Reverse:=FALSE; END_IF; IF Quadrant_3 THEN/第三象限, Y 轴反向进给 X_JD_Value:=X_JD_V

12、alue+0; Y_JD_Value:=Y_JD_Value-1; X_XD_Value:=0; Y_XD_Value:=1; X_XD_Forward:=FALSE; X_XD_Reverse:=FALSE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=TRUE; END_IF; IF Quadrant_4 THEN/第四象限, Y 轴反向进给 X_JD_Value:=X_JD_Value+0; Y_JD_Value:=Y_JD_Value-1; X_XD_Value:=0; Y_XD_Value:=1; X_XD_Forward:=FALSE; X_XD_Reve

13、rse:=FALSE; Y_XD_Forward:=FALSE; Y_XD_Reverse:=TRUE; END_IF; Fi_ErrorValue:=Fi_ErrorValue+ABS(Save_X_StopPoint);/偏差计算 Y_StepValue:=Y_StepValue+1;/Y 轴进给步数计算 END_IF; IF (X_StepValue=ABS(Save_X_StopPoint)AND(Y_StepValue=ABS(Save_Y_StopPoint) THEN/终点判别 Run:=FALSE; END_IF; END_IF; Save_Run:=Run; /* END_FUNCTION_BLOCK

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报