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.如果工藝場景有明確的要求起始安全位置要求,最好是增加明確的增加點位而不完全依賴于起始位置節點查找規則,這樣可以避免一些由于程序邏輯調整,導致查找到的起始位置變化的問題。