数据队列

数据队列可创建不同数据类型的队列,用于缓存数据。

数据队列可在流程之间进行数据传递,主要配合发送数据和接收数据模块使用,发送数据模块将数据缓存到队列中,接收数据模块从数据队列中读取数据。同时当队列中已缓存数据时,可触发指定流程执行并从队列中获取所需的数据。

图 1 数据传递示意
说明:

使用时,可根据本章节的介绍并结合使用示例进行理解。

流程编辑区域点击切换为全流程时,左侧选择并拖动到编辑区域即可新增数据队列模块。

双击数据队列后,可对队列设置触发流程进行设置。

队列设置

队列设置主要用于设置可缓存的数据队列类型和数据大小。

图 2 队列设置

点击队列列数下的可添加该模块可缓存的数据队列。选择数据类型,并自定义列名称即可。数据类型支持int、float、string和IMAGE,最多可添加16个数据队列,但IMAGE类型的数据队列最多支持添加4个。

说明:
  • 自定义列名称时,需确保不同数据队列的名称不重复。

  • 切换已存在数据的数据类型时,若该队列中已缓存数据,缓存的数据将会被清空。

  • 当队列缓存的数据个数达到上限时,遵循先进先出的原则,删除最先入队的数据,用于存储新入队的数据。

各类型数据队列可缓存的数据个数有所差别:

  • int、float、string类型数据队列:通过队列行数处的队列缓存行数控制可缓存的数据个数,最大支持[1,256]。

  • IMAGE类型数据队列:通过队列行数处的图像队列行数控制可缓存的数据个数,最大支持[1,10]。

触发流程

触发流程主要用于当所有数据队列都有数据时,触发某一流程执行,并使流程从数据队列中获取数据做进一步处理。

图 3 触发流程

点击触发流程列表下的可订阅需触发的流程,最多可添加16个流程。

说明:
  • 若存在多个触发流程,触发流程执行时,会根据添加触发流程的顺序跳过所有处理中的流程,执行第一个空闲的流程。一旦有个流程执行成功,则终止本次触发,即一次触发最多只有一个流程执行成功。

  • 若所有流程均触发失败,软件默认会删除当前队列的数据。若需要保留,可将DataQueueConfig.xml配置文件下的value字段由数值0改为1,配置文件所在路径为:..\VisionMaster4.3.0\ Applications\Module(sp)\x64\Global\DataQueueModule。

触发流程分为同步触发和异步触发,通过是否开启异步触发进行设置。

  • 同步触发:当有数据进入数据队列时,若满足触发条件,则触发流程执行,无论成功与否,本次触发结束;若不满足,则不触发流程执行。优点为可及时触发流程执行,缺点为一旦触发失败只能等待下次数据入队。

  • 异步触发:新建数据队列模块时,会创建该模块的子线程。子线程一直处于运行中状态,每隔一定时间判断是否满足触发条件。若满足,则触发流程执行;若不满足,则不触发流程执行。优点为触发失败时不用等下次数据入队,间隔一段时间后可继续触发流程执行。缺点为存在时间等待,触发流程执行可能存在延时。