SMC_AvoidLoop (FB)

此功能块位于CODESYS SoftMotion library SM3_CNC。功能块 SMC_AvoidLoop 可以用于路径预处理。

此功能块首先会复制操作路径,但是去除其中包含的循环。如果一个交叉点位于一个原始路径中,那么该路径将会切断交叉点,循环将会移除并且路径中包含的其他部分会继续执行。因此将会出现一个连续的路径循环。

更多相关信息参阅 SMC_ToolCorr 模块。

功能块 SMC_AvoidLoop 设计

模块用于处理输入的SMC_OUTQUEUE结构中找到的所有的 SMC_GEOINFO-对象。如果在这些对象中的变量Intern_Mark中的Bit7被置位,那么放置重复循环功能被激活。此函数用于检查预处理的 SMC_GEOINFO-对象与下一个SMC_GEOINFO-对象之间是否有交集,要执行这种设置变量Intern_Mark中的 Bit6 将会被置位。激活此位将启动避免循环功能。如果没有找到交叉点,那么对象将被复制到 SMC_OUTQUEUE 的输出。否则第一个交叉对象将会在交叉点被切断,位于两个相交点的 SMC_GEOINFO-对象将会被移除,新对象将会连接第二个交叉点的两部分。 SMC_NCDecoder 将设置指令 G61/G60 中的变量 Intern_Mark 中的 Bits 6 和 7 。

注意:SMC_AvoidLoop 的作用效果受功能块 SMC_OUTQUEUE的影响。一个循环包含多个对象可以被存储在 SMC_OUTQUEUE,不能被删除!另一方面:对于任意对象一个交叉检查是按照以下队列对象进行的处理。如果队列比较大,那么需要更长的时间完成校验。

SMC_AVOIDLOOP功能块

 名称

类型

初始值

描述

VAR_IN

     

bExecute

BOOL

FALSE

当 TRUE 时,功能块被激活

bAbort

BOOL

FALSE

 

如果为 TRUE ,功能块当前的处理将会被中断

bAppend

BOOL

FALSE

只要输入一直为 FALSE, DataOutQueue 将会在每次复位时都被清除。一旦保持为 TRUE,新增加的数据将会被写入到 DataOutQueue 的结尾

poqDataIn

POINTER TO SMC_OUTQUEUE

0

这个变量指向 SMC_OUTQUEUE 结构体对象,其中包含路径的 SMC_GEOINFO-对象;通常情况下他指向预处理模块(例如:SMC_NCDecoder)的 DataOut 输出。 SMC_OUTQUEUE应该定义一个适当的尺寸大小(见上文)!

nSizeOutQueue

UDINT

0

这个变量定义数据缓冲区大小,GEOINFO 结构体对象列表将会被写入。这个缓冲区至少应为 GEOINFO 结构体本身的五倍大小。否则,SMC_NCDecoder 将不会进行任何动作的执行。尺寸大小可以预先定义,但是在下次复位之前不能被修改。可以通过以下方法创建缓冲区

ExampleBuf: Array[ 1..50] of SMC_GeoInfo

定义的缓冲区大小可以通过sizeof(ExampleBuf)操作进行读取。

pbyBufferOutQueue

POINTER TO ARRAY[0..0] OF SMC_GEOINFO

0

这个输入必须指向 OUTQUEUE-结构体定义的内存区域的第一个字节地址。定义的这个区域至少与 nSizeOutQueue 定义的一样大。通常情况下IEC中存储区域的定义是通过定义一个 SMC_GEOINFO 数组实现的 (例如:BUF: ARRAY[1..50] OF SMC_GEOINFO:这个缓冲区可以存储50个路径元素)。变量值可以预定义,但是在下次复位前不能被修改。

VAR_OUT

     

bDone

BOOL

FALSE

如果输入数据...DataIn 被完全处理,那么这个变量将=会被设置为 TRUE 。因此在复位之前此模块不会执行其他动作。如果输入 bExecute 为 FALSE, bDone 将会被复位为 FALSE。

bBusy

BOOL

FALSE

TRUE,功能块的处理没有完成

bError

BOOL

FALSE

功能块内部发生错误信号

wErrorID

SMC_ERROR

SMC_NOERROR

错误ID

poqDataOut

POINTER TO SMC_OUTQUEUE

0

这个变量指向 SMC_OUTQUEUE-结构体,用于管理循环路径中的 SMC_GEOINFO-对象

“SMC_OUTQUEUE ”

iStatus

SMC_AL_STATUS

0

这个枚举变量显示模块的当前状态。可能的状态:

AL_OFF: 0; 避免循环功能关闭

AL_ON: 1; 避免循环功能打开

AL_END: 2; 对象处理终止

“SMC_AL_STATUS (ENUM)”