一个路径的动态程序

动态程序

这里是一个SMC_NCDecoderHere 对象类型的POU路径,通常作为G代码格式外部描述的计算,被一个新的程序路径创建的路径替换。这里定义一个SMC_OUTQUEUE类型的对象并指向数组类型 SMC_GEOINFO。SMC_GEOINFO 数组相当于路径描述。

从 CNConline.project 中退出。

准备步骤

1. 打开 CNConline.project 并删除存在的 POU 路径。添加一个新的 POU 路径实现语言为 ST。 ( 添加对象 ➔  POU )。
2. 因此,定义一个SMC_OUTQUEUE 类型的数据对象 QUEUE ,分配存取区域用于SMC_GEOINFO路径描述序号并定义变量类型 SMC_GEOINFO。
3. 实现 QUEUE 的初始化步骤。

IEC-代码

代码:

PROGRAM Path

VAR
    QUEUE: SMC_OUTQUEUE; 
    BUF: ARRAY[0..49] OF SMC_GEOINFO;
    GEO: SMC_GEOINFO:=(dT1:=0, dT2:=1, dToolRadius:=0, dVel:=100, dVel_End:=100, dAccel:=200, dDecel:=500, iObj_Nr:=0);
END_VAR

//Initialization Queue
QUEUE.nSize := SIZEOF(BUF);
QUEUE.pbyBuffer := ADR(BUF[0]);
...
 

实现

按照以下步骤实现 元素数组:

1. 设置起始位置(第一个对象)或者从之前对象中拷贝。

GEO.piStartPos.dX := 0; 或者 GEO.piStartPos := GEO.piDestPos;

2. 定义运动类型

GEO.iMoveType := CCWL; 或者 GEO.iMoveType := LIN;

3. 通过选择运动类型设置参数。

如果已经定义了一个圆的半径 (例如 CCWL),不要忘记设置以下参数:GEO.dP1 := 200; GEO.dP2 := 100; GEO.dP3 := 50; GEO.dT1 := 0; GEO.dT2 := 90;

4. 如果适用,在 InternMark 中设置路径预处理的起始或者停止位。
5. 计算结束位置

SMC_CalcEndPnt(ADR(GEO));

6. 计算对象长度:

SMC_CalcLengthGeo(ADR(GEO));

7. 存储对象到 OUTQUEUE:

SMC_AppendObj(POQ:=ADR(QUEUE), PGI:=ADR(GEO));

8. 在路径创建之后立即设置结束标志:

QUEUE.bEndOfList := TRUE;

提示!

如果每个SMC_GEOINFO类型的元素被写入,例如,如果 QUEUE.bFULL = TRUE,你不能尝试去附加一个工程。在这种情况下路径的创建必须被中断直到 QUEUE 第一个对象被处理。那么这样可以附加一个工程。如果希望避免这种情况,必须定义缓冲区的大小非常大这样可以包含所有的路径元素。

QUEUE 最终首先进行转化到 CheckVelocities 模块并最后达到插补,并在此模块中深入处理。