CS机器人安全位置查找功能
1. 简介
- CS 任务启动时,如果包含移动命令,会先弹出手动移动到安全位置的页面,由用户手动操作移动到安全位置,然后开始任务运行,保证程序启动时的安全性。目前查找程序启动位置的逻辑还不够完善,比如不进行调用的子程序的启动位置的查找,比如针对插件节点查找逻辑存在一定问题。
针对上述需求,优化了任务启动位置查找逻辑,并规范了完整的查找方案,用户也可以根据方案自行推测任务的启动位置。
机器人版本:2.12.0以上
2.操作流程
2.1从首行任务开始运行的查找规则
1. 目前可以作为起始安全位置的节点包括这几种,固定位置路点、变量路点、相对路点、原点节点。目前这几种节点的安全位置触发逻辑有些不同,具体如下。
● 固定位置路点与原点任务节点:程序运行时如果机器人不在该路点或原点位置,则会弹出手动运行到位置的页面,让用户手动控制机器人,移动到起始位置。如图-1所示

图-1
● 变量路点、相对路点:由于此两种位置的路点没有固定的位置信息,所以此类型路点作为起始位置时,机器人会直接从当前位置开始运行任务,不会弹出手动运行到位置的页面,该逻辑可以实现可变起始安全位置的逻辑。(要注意的是使用变量路点做为起始位置时,要先在初始化变量里对该变量进行赋值,如图-2红框所示,如果不进行赋值就会出现报错)

图-2
2. 任务起始安全位置查找的基础逻辑是深度优先原则,也就是从第一个节点开始,向其内部逐层遍历子节点,直到找到可以作为起始位置的节点,如图-3的任务,会找到路点_1作为起始位置,遍历过程中,并不会考虑该节点是否真实的可以运行到(比如If False真实情况下,并不会运行,但此时也会查找该分支内部的节点作为安全起始位置),而是仅采用深度优先原则遍历。

图-3
3. 如果任务存在开始前序列,则不论是从头开始运行任务还是使用任务的任意行运行功能从任务中间行运行任务,都会优先从开始前序列中正向查找起始的安全位置,比如图-4所示的任务,不论任务是否从头运行,都会找到路点_4作为起点。

图-4
4. 如果程序流程中,存在调用子任务节点,则会进入被调用的子任务内部按照相应规则,查找起始安全位置点位,如图-5所示程序,如果任务从第一行开始运行,则会查找到路点_6作为程序起始位置。

图-5
5. If节点如果存在Else或者Else If分支,则会将它们作为一个整体考虑,其查找顺序为先查找If节点内的起始位置,如果该节点不存在起始位置,则按顺序依次查找Else或者Else If分支内的起始位置。如图-6所示任务,则会查找到路点_1作为程序起始位置;图-7所示任务就会查找到路点_8作为程序起始位置。

图-6

图-7
2.2从任务中间行开始运行查找规则
1. 如果任务存在开始前序列,由于开始前序列为顺序执行,所以其查找规则与从首行开始运行完全相同,不会从逆向查找,并且不论从任务的哪行开始运行,都会优先正向查找开始前序列的启动位置。如图-8所示任务,即使我的起始位置为路点_2,也会已开始前序列中的路点_4作为起始位置。

图-8
2. If节点如果存在Else或者Else If分支,如果开始运行的行是分支内部的节点,则仅在该分支内部查找起始安全位置,该分支内部如果不存在起始安全位置,则向上查找其兄弟节点。如图-9所示任务,如果从第17行开始运行,则会找到路点_8作为起始位置。下方图-10所示任务则会找到路点_9作为起始位置。

图-9

图-10
3. 如果起始行不可以作为起始安全位置节点,则会查找该节点上方的节点,如果存在可以作为起始位置的节点,则选做起始位置节点,如果不存在起始位置节点,则会进一步正向查找该节点内部是否存在起始位置节点,如果存在,则作为起始位置。如下方图-11所示任务,如果选择第4行文件夹为开始节点,则会找到路点_3作为起始位置。如果文件夹上方如果没有起始路点,则会向下找到起始点,如图-12所示则会找到路点_1作为起始位置。

图-11

图-12
4. 如果当前选中的任务节点上方无可以运行到的节点并且内部也没有可以运行到的点,则会直接开始运行,不再继续向后考虑支持运行到的路点。所以下方图-13所示程序会支持开始运行,不会已路点_4作为起始位置。

图-13
5. 如果起始行的上方存在子任务节点,则会找到该子任务节点的终止位置作为起始位置。如下方图-14所示任务,如果以第19行作为起始行,则会找到路点_7作为起始位置。

图-14
3. 常见问题解答
1.如果工艺场景有明确的要求起始安全位置要求,最好是增加明确的增加点位而不完全依赖于起始位置节点查找规则,这样可以避免一些由于程序逻辑调整,导致查找到的起始位置变化的问题。