CNC 示例2: 使用变量在线解码

参阅相关的示例工程 CNConline.project!

 

1. 在CNC编辑器中创建CNC程序:

与在 上一个示例中一样创建一个CNC程序,但是现在我们使用两个全局变量 g_x 和 g_y。

示例:

VAR_GLOBAL

g_x: REAL:=100;

g_y:REAL:=50;

END_VAR

 

 插图 97: 实例对象

我们选择编译模式 SMC_CNC_REF 因为我们在CNC程序中使用变量。

2. 驱动器接口,PLC配置:

驱动器结构与 之前示例中描述的相同。

 

3. 创建IEC程序:

在当前的程序中我们选择了不同的编译模式,所以在IEC程序中必须要做译码以及路径处理。 费时的处理程序必须通过插补及时处理 (原因:在每次译码调用的同时都会创建一个路径对象,并且这个对象可以被应用到多个插补模块调用),因此插补运算往往会替换优先级较低的任务,优先级低的任务将会被更低的调用:

 插图 98: 路径任务对象

底层处理机制:在低任务初始化时,在每个周期将会有一个 GEOINFO-对象被创建,并存储在译码器模块的 OUTQUEUE-结构中。一旦这个 OUTQUEUE 被填满,低优先级的任务将会被停止直到 OUTQUEUE 不再满,这意味着直到高级任务开始处理第一个 GEOINFO-对象并将其从 OUTQUEUE列表中移除。在这种情况下低优先级任务重新被激活并开始重新填写数据到 OUTQUEUE-结构中。在高优先级任务的每一个周期内结构体OUTQUEUE 中每一个路径点,也就是插补模块的输入数据参数将会被处理。按照事实 GEOINFO-对象通常包含多个位置点,在第一个 GEOINFO-对象被完全处理并从插补器中被移除之前需要执行多个周期。因为 GEOINFO-对象的处理比对象的创建要耗费更多的周期,所以低优先级的周期会被告优先级的周期调用次数要多。然而,任务时间必须通过一种方式进行定义以确保在地低任务周期中最后的OUTQUEUE结构中包含足够的 GEOINFO-对象,这样就不会产生数据丢失的现象。一个数据丢失的情况会导致在最后一个路径还没有达到的时候插补器将得不到其他的 GEOINFO-对象。在这种情况下插补将会中断并停止,直到新的数据元素被获得。

在路径程序中NC程序的译码以及速度检测将会被实现:

 插图 99: 路径对象

IEC程序中插补实现部分激活没有改变,只是插补模块的输入不在是CNC程序的名称,而是路径预处理模块的 OutQueue-输出 (这里是: g_ncDecoder.poqDataOut)。

4. 创建操作并测试接口:

继续使用在上一个示例程序中的可视化模板并添加新的模块(SMC_NCDecoder 以及 SMC_CheckVelocities)。除此以外还需要对全局变量 g_x 和 g_y 进行编辑,以便于之后检查函数并启动。

5. 启动:

程序如果编译没有错误就可以启动。如果Decoder 和 Interpolator 插补的Execute-输入被置位,那么CNC程序将会被处理。如果改变全局变量的值,这些数据将会在Decoder重启的时候进行重新读取并重新被判定。还可以同时更改附加解码器的输入功能。