理论教育 数据流处理:NC代码转换、共享内存与实时任务协调

数据流处理:NC代码转换、共享内存与实时任务协调

时间:2023-06-17 理论教育 版权反馈
【摘要】:译码器将NC代码处理完毕后,以数据链表的形式将数据放入共享内存中,任务协调器适时地将数据取出并以定义的执行步作为每一个节点存入新的数据链表中,插值器运行时便取出其中的数据进行运算处理。任务协调器是一个实时进程,为实现数据流的可靠传输,需要使用RTX的进程间通信方法。图5-3是简化的数据接收过程。

数据流处理:NC代码转换、共享内存与实时任务协调

系统的数据流(data stream)是由任务协调器调度流动的。译码器将NC代码处理完毕后,以数据链表的形式将数据放入共享内存中,任务协调器适时地将数据取出并以定义的执行步作为每一个节点存入新的数据链表中,插值器运行时便取出其中的数据进行运算处理。

系统为数据传输定义的共享内存结构如下:

978-7-111-42574-8-Chapter05-1.jpg

译码器在传送NC代码时定义一个共享内存指针指向该内存块:shm_struct* pShmSingieStep。

任务协调器是一个实时进程,为实现数据流的可靠传输,需要使用RTX的进程间通信方法。RTX进程(线程)间通信原理与Windows相似,需要使用事件(EVent)及信号量(Semaphore)等对象来实现进程(线程)同步,区别是RTX的实时性强。事件(EVent)是RTX为线程同步提供的核心对象,可以在进程之间共享。一个事件可以是有信号状态或无信号状态,可以用RtSetEvent函数(原语)设置适当的事件为有信号状态。RtWaitForSingieObject函数可以挂起线程,直到特定的对象变成有信号状态。

传送端线程在启动后就一直处于挂起状态,直到接收端通知它自己已准备好,此时,传送端也会给接收端一个信号,表明自己准备传送数据了。数据是一个节点接着一个节点传送的,节点间的传送以信号量作为标识。简化的数据传送过程如图5-1所示。

接收端定义的数据链表为CListNode<CExecutionStep*>g_programList;其中,CListNode为一个自定义链表模板类,用于对数据链的处理;CExecutionStep为一个执行步类,用于定义执行步中要用到的相关数据信息(定义数据结构及指针,分配及销毁相关的内存空间)、函数功能及有限状态机信息等。

执行步类及其子类的指针定义为CExecutionStep * ms1;CMSExecutionStep*execstep;接收数据时,对每一个NC代码段都要先进行插值类型匹配,按类型进行数据处理,然后作为一个节点存入接收端g_ProgramList数据链表中,每一个节点对应一个NC代码段。其中包含插值类型、代码段起始点坐标、进给模式、进给速度、主轴转速等数据信息。执行步对象的转化过程简述如图5-2所示。(www.daowen.com)

978-7-111-42574-8-Chapter05-2.jpg

图5-1 简化的数据传送

978-7-111-42574-8-Chapter05-3.jpg

图5-2 执行步对象的转化

接收数据时,接收端首先通知传送端,接收端已准备好,然后等待传送端发出hSendStart信息,收到后便开始接收数据。图5-3是简化的数据接收过程。

978-7-111-42574-8-Chapter05-4.jpg

图5-3 简化的数据接收

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈