Table of Contents
1. 介紹
1.1 本軟件的創作目的
openTCS是一款為自動小車設計的控制系統,或者說是協作式的管理軟件。主要是為協調多個AGV在生產型工廠中執行運轉任務而開發的。同時,也可以應用於類似移動機器人或者四輪小車上等產品上。openTCS對於每個小車是獨立控制的,每個小車的控制方式取決於該小車的所配置的特性,如導航原則、軌道引導系統(track guidance system不知應該翻譯成軌道引導系統還是跟隨引導系統)和負載處理裝置等。他可以同時處理不同類型的小車且同時處理不同的任務。這是通過可插拔驅動將小車集成到系統中來實現的,與操作系統中的設備驅動類似。
1.2 系統要求
openTCS沒有任何特定的硬件要求。CPU功率和RAM容量在很大程度上取決於使用情況,例如駕駛路線的大小和復雜性以及所管理的小車數量。某些網絡硬件需要與小車進行通信,在大多數情況下只需要一個標准的以太網控制器(以及可能的其他系統,如倉庫管理系統等)。
要運行openTCS,需要Java Runtime Environment(JRE)1.8版。(JRE的安裝路徑的bin,需配置到環境變量中,例如將C:/Program Files/Java/jre1.8.0/bin配置到PATH中,以便能夠使用包含的啟動腳本)。
1.3 更多教程
如果您擴展和定制openTCS,請參閱開發人員指南和openTCS發行版中的JavaDoc文檔。
1.4 疑問解答和問題報告
如果您對本手冊、openTCS項目或使用和擴展openTCS等方面有疑問,請使用
如果您在使用openTCS時遇到技術問題,請記住在問題報告中應附帶足夠的數據以幫助開發人員為您解決問題,例如:
-
應用程序的日志文件,在kernel和plant overview應用的log/文件夾內。
-
您正在使用的工廠模型,在kernel和plant overview應用的data/文件夾內。
2. 系統概況
2.1 系統組件和結構
openTCS由以下組件組成,這些組件作為單獨的進程運行,並在C/S體系結構中協同工作:
-
內核(服務器進程):運行與小車無關的策略和受控小車的驅動程序
-
客戶端:
-
用於建模和可視化工廠模型的工廠概述
-
用於控制和監視內核的內核控制中心,例如提供小車/其相關驅動程序的詳細視圖
-
任意客戶與其他系統通信,例如過程控制或倉庫管理
-
圖1. openTCS系統概覽
openTCS的內核的功能是提供了一個運輸系統或工廠的抽象驅動的模型,可用來管理運輸訂單、計算小車行進路線。客戶端可與該服務進程通信來完成如下工作:修改工廠模型、觀察駕駛路線、觀察運輸訂單的處理狀態和創建新的運輸訂單等。對於用戶交互來說,內核提供了一個名叫內核控制中心(Kernel Control Center)的用戶圖形界面。
![]() |
內核應用程序提供的內核控制中心GUI已棄用,並計划在5.0版中刪除。並會增加一個單獨的內核控制中心應用程序來代替。 |
---|---|
內核中的運輸訂單處理策略主要有三個:
-
調度員決定哪個訂單由哪個小車處理。此外,他需要制定在特殊情況下小車的處理策略,例如,當沒有任何運輸訂單或小車電量不足時的處理策略。
-
制定一個路由策略(router),使得小車能沿着最優的路徑抵達目標點。
-
制定一個調度方案(scheduler),管理資源分配以進行車流管理,即避免小車相互撞擊。
openTCS發行版附帶了每種策略的默認實現。開發人員可以輕松地替換這些實現,以適應特定於環境的要求。
作為openTCS內核一部分,驅動程序框架(The driver framework)管理着通信通道並將小車驅動與小車相關聯。小車驅動是內核和小車之間的適配器,並且將每個小車的特定的通信協議轉換為內核的內部通信方案(kernel’s internal communication schemes),反之亦然。此外,驅動可以通過內核的圖形用戶界面向用戶提供低級功能,例如手動將電報發送到相關車輛。通過使用合適的車輛驅動,可以通過一個openTCS實例可同時管理不同類型的車輛。
作為openTCS發行版的一部分,工廠概述客戶端(The plant overview client)可以編輯工廠模型,該模型可以在kernel中加載。它可以用來配置負載變換站、駕駛路線和小車。在內核的工廠運行模式中,工廠概覽客戶端用於顯示運輸系統的概覽狀態、所有激活的運輸流程監控和以人機交互的方式創建新的運輸訂單。
作為openTCS發行版的一部分,內核控制中心客戶端(The kernel control center client)用來控制和監視內核。其中一部分功能是將車輛驅動分配給車輛,可通過通信的方式來控制它們,可通過顯示車輛狀態信息來監控它們。
其他客戶例如控制更高級別的工廠流程,也可以實施和附加。對於Java客戶端來說,openTCS內核提供基於Java RMI(遠程方法調用)的接口。還提供了一個主機接口,用於使用通過TCP/IP連接發送的XML報文創建傳輸訂單。此外,openTCS還提供了一個Web API,用於創建和撤銷傳輸訂單以及檢索傳輸訂單狀態更新。
2.2 工廠模型元素
在openTCS中,一個工廠模型由以下一系列的元素構成。可以使用工廠概覽客戶端(在建模模式下)編輯與工廠模型相關的元素的屬性,例如點的坐標或路徑的長度。
2.2.1 點(Point)
點是駕駛過程中離散小車位置的邏輯映射。在工廠運行模式中,小車指定從在模型中的一個點出發移動至在模型中的另一個點。一個點具有以下幾種屬性:
-
類型(type),有如下三種類型:
-
停止位置(Halt position):表示小車在處理訂單時暫時停留的位置,在改點可執行某些操作。每當車輛到達此位置時需要進行報告。但是,它可能不會在此停留超過必要的時間。使用工廠概覽客戶端進行建模時,暫停位置是點的默認類型。
-
報告位置(Reporting position):表示車輛僅進行**報告的位置。車輛不會被指派到報告位置,並且不允許在這樣的位置停止。因此,僅由報告點組成的路線將是不可路由的,因為車輛無法在任何位置停止。
-
停車位置(Park position):表示車輛在沒有訂單時可停留較長時間的位置。車輛到達此位置時也會報告。
-
-
位置(position),即在工廠的坐標系中的點的坐標。
-
車輛方向角(vehicle orientation angle),它體現了小車在某點上時的假定/預期的方向。
2.2.1.1 布局坐標和模型坐標
一個點有兩組坐標:布局坐標和模型坐標。布局坐標僅用於工廠概覽客戶端中的圖形呈現,而模型坐標是小車驅動在導航時使用的或發送到與其通信的小車的數據(例如,如果車輛需要目的地點的精確坐標)。兩個坐標集本身並不相互關聯,它們可以不同。這樣做可以將展示在UI界面上的坐標和驅動系統內部使用的坐標進行區分;例如,您主要想集中查看所有的點和坐標,但是工廠里的實際路線和點的位置可能相距甚遠。所以您可能需要能夠提供一份進行扭曲壓縮后的視圖。拖動一個點, 更改它們在GUI中的位置只會影響相應的布局坐標。
要同步布局坐標與模型坐標以及每個點周圍的路徑,您將有兩個選擇:
-
選擇操作 ▸ 將模型值復制到布局或操作 ▸ 將布局值復制到模型以全局同步它們。
-
選擇單個布局元素,右鍵單擊並選擇菜單中的上下文(Context) ▸ 將模型值復制到布局或上下文菜單(Context) ▸ 將布局值復制到模型以僅對所選元素同步它們。
Select Actions ▸ Copy model values to layout or Actions ▸ Copy layout values to model to synchronize them globally.
Select a single layout element, right click it and select Context menu ▸ Copy model values to layout or Context menu ▸ Copy layout values to model to synchronize them only for the selected element.
2.2.2 路徑(Path)
路徑兩個點之間的連接線,點和路徑組合起來可以用於小車的導航。路徑的主要屬性如下(僅次於源點和目標點旁邊??A path’s main attributes, next to its source and destination point, are:):
-
長度(length),在工廠運行模式中,這個是與小車相關的信息。如何配置了相關的路由器信息,它還可用於計算路由成本/尋找到目的地點的最佳路由。
-
最大正向速度和最大反向速度(**maximum velocity and maximum reverse velocity**),在工廠運行模式中,這個是與小車相關的信息。如何配置了相關的路由器信息,它還可用於計算路由成本/尋找到目的地點的最佳路由。
-
路由成本(routing cost),這是一個明確的,無單位的值。根據路由器配置,它可用於計算路由成本/尋找到目的地點的最佳路由。
-
鎖定標志(locked flag),這個標志如何使能,他的作用是在計算時,不可使用該路徑來進行小車的路線。
2.2.3 位置(Location)
位置是一個特殊的點的標記,在位置上,車輛可以執行一些的特殊操作(例如裝載或卸載貨物,為電池充電等)。位置的屬性如下:
-
類型(type),基本上定義了在該位置允許的操作 - 請參閱位置類型一節。
-
鏈接(**links ),該位置可以到達的點的集合。為了小車能夠在工廠模型中的使用,需要將位置與至少一個點相關聯。
2.2.4 位置類型(Location type)
位置類型是對位置進行分組的抽象元素。位置類型只有一個相關屬性:
-
一組允許的操作(allowed operations)的集合,定義車輛可以在這種類型的位置執行哪些操作。
-
常見類型有:Recharge(充電)、Transfer(搬運)、Working(工作)
2.2.5 小車(Vehicle)
小車映射的是每一台物理上存在的小車,目的是與他們通信、觀察他們所在的位置和其他特性。每個小車提供以下屬性:
-
臨界能量水平(critical energy level),這是一個電量的閾值,如果低於該閾值,小車的電量會被認為處於致命的狀態。此時小車必須要進行充電。
-
良好的能量水平(good energy level),這是一個電量的閾值,如果超過該閾值,小車的電量被認為是正常的。此時小車返回充電並不是必須的。
-
完全充電的能量水平(fully recharged energy level),這是一個電量的閾值,如果超過該閾值,則認為小車是完全充滿電的。此時小車應該停止充電。
-
需要再充電的能量水平(sufficiently recharged energy level),這是一個電量的閾值,如果超過該閾值,則認為小車達到了需要充電的要求。該值可以在工廠運行時使用,以決定車輛何時可以停止充電。
-
最大速度和最大反向速度(**maximum velocity and maximum reverse velocity**)。根據路由配置,它可用於計算路由成本或者尋找到目的地點的最佳路由。
-
集成度(integration level),指示該小車能夠被集成到系統中的等級。例如:車輛可以被
-
... 忽略(ignored):車輛及其報告的位置將被完全忽略,因此車輛將不會在工廠概覽中顯示。此時該車輛無法用於運輸訂單。
-
... 注意(noticed):該小車將按照每次他所匯報的位置,顯示在工廠概覽中,但是系統將不會針對該位置進行資源分配。該車輛無法用於運輸訂單。
-
... 尊敬(respected):該小車將獲得在他所匯報的位置的資源。該車輛無法用於運輸訂單。
-
... 利用(utilized):車輛可用於運輸訂單,將被openTCS使用。
-
-
處理的運輸訂單類別(processable transport order categories),它們是一組字符串,用於過濾運輸訂單並分配給車輛的。另請參閱運輸訂單一節。
-
路線顏色(route color),當小車向目的點運行時,將以該顏色着色。
2.2.6 塊(Block)
塊(或塊區域)可以應用特殊交通規則。它們可在例如路徑交叉點或死角處防止死鎖的情況發生,塊有兩個相關屬性:
-
成員(members),即塊組成的資源(點、路徑、位置)。
-
類型(type),它確定小車進入到塊區域的規則:
-
僅限單一車輛(Single vehicle only):此區塊中匯總的資源只能由同一輛車同時使用。使用工廠概覽客戶端進行建模時,這是塊的默認類型。
-
僅相同方向(Same direction only):此塊中聚合的資源可以由多個車輛同時使用,但前提是它們以相同方向遍歷該塊。
-
小車橫穿區塊的方向在第一次申請分配分配區塊的資源時就已經確定 - 參見默認調度程序。對於請求的資源(通常來說就是指的點和路徑(a point and a path)),將使用密鑰tcs:blockEntryDirection(key)來檢查路徑的屬性。屬性的值可以使任意字符串(包括空字符串)。如果沒有這樣的屬性,那么路徑的名字將被當做方向來使用。
2.3 工廠運營要素
運輸訂單和訂單序列是僅在工廠運營時可用的元素。它們的屬性主要在創建相應元素時設置。
2.3.1 運輸訂單(Transport order)
運輸訂單是移動的參數化序列和小車所有的操作 。創建運輸訂單時,可以設置以下屬性:
-
目的地(destinations):小車必須進行操作的一系列的目的地的集合(按照給定的順序)。每個目的地包括車輛必須前往的位置以及必須在那里執行的操作。
-
截止日期(deadline)(可選),指示應該處理運輸單的截止時間。
-
可選類別(category)(可選),是用於區分不同可進行訂單運輸的小車。小車僅可以接受他對應類別的訂單。(類別示例如"Transport"和"Maintenance")。
-
預期車輛(intended vehicle)(可選),告知調度員將運輸訂單分配給指定的車輛而不是自動選擇一個。
-
依賴項、(dependencies)(可選),即對在傳輸訂單之前需要先處理完成的其他傳輸訂單。依賴是可傳遞的,意味着如果訂單A依賴於訂單B而訂單B依賴於訂單C,則必須首先處理C,然后是B,然后是A.因此,依賴關系是運輸訂單集的執行順序的一種方法。(但是,它們不會要求所有運輸訂單必須由同一車輛處理。這可以通過設置運輸訂單的預期車輛屬性來實現。)下圖顯示了多個運輸訂單之間的依賴關系的示例:
圖2. 運輸訂單的依賴
2.3.2 訂單序列(Order sequence)
![]() |
工廠概覽應用程序(plant overview application)當前不提供創建訂單序列的方法。它們只能通過不屬於openTCS發行版的其他專用客戶端以編程方式創建。 |
---|---|
訂單序列描述了跨越多個運輸訂單的過程,該過程隨后將由單個小車以序列定義的確切順序執行。一旦將小車分配給某個訂單序列,它就不會處理該序列以外的運輸訂單,直到當前序列完成。
當某一個小車在執行一個復雜的訂單時且這個時候小車不能被映射到運輸訂單的時候,使用訂單序列是非常有效的方法。例如,當處理過程中,某些步驟的細節必須等到前序步驟執行完畢之后才可以獲得。情況就是這樣。
訂單序列具有以下屬性:
-
傳輸訂單(transport orders)序列,可以在未設置完整標志的情況下延長。
-
完成(complete)標志,表示不會向序列中添加其他傳輸訂單。這不能重置。
-
失敗的致命的(failure fatal)標志,這表明,如果序列中的一個運輸秩序失敗,到其后的所有訂單,應立即被視為失敗了。
-
結束完成(**finished )標志,表示該順序序列已被處理(並且小車不會再被當前訂單序列綁定)。如果需要使用這個標志(finished),必須先將序列標記為完成(complete)。
-
類別 (category )(可選)- 請參閱運輸訂單。如果設置,將忽略序列中使用傳輸訂單設置的類別。
-
預期車輛(intended vehicle)(可選),告知調度員將訂單序列分配給指定的車輛而不是自動選擇一個。如果設置,則添加到訂單序列的所有運輸訂單必須使用相同的小車。
圖3.訂單序列
2.4 通用元素屬性
2.4.1 唯一名稱
每個工廠模型和工廠操作元素都有一個唯一的名稱,在系統中標識它,無論它是什么類型的元素。兩個元素可能不會被賦予相同的名稱,即使例如一個是一個點而另一個是運輸訂單。
2.4.2 通用屬性
除了列出的屬性之外,還可以以鍵值對(key-value pairs)的方式為驅動定義任意屬性,這樣,小車的驅動和客戶端軟件都可以讀取。鍵和值都可以是任意字符串。例如,可以為模型中的小車定義新的鍵值對"IP address": "192.168.23.42"說明客戶端將使用哪個IP地址與小車進行通信;現在,小車驅動可以在運行期間檢查鍵"IP address"的值是否已定義,如果是,則使用它自動配置與小車的通信通道。這些通用屬性的另一個用途是可以在模型中的某些路徑上執行的小車的特定動作。例如,如果小車應當在當前在某個路徑上時發出聲音警告,且/或打開右側方向指示器,則可以為該路徑定義具有鍵"acoustic warning"且/或屬性"right-hand direction indicator"並由相應的小車驅動進行評估。
3. 操作系統
3.1 啟動系統
要創建或編輯傳輸系統的工廠模型,必須啟動openTCS工廠概覽應用程序並切換至建模模式。如果是要使用這個運輸控制系統(transportation control system)必須以一個現有的工廠模型為基礎且必須在工廠操作模式(plant operation mode)下啟動。通過執行相應的Unix shell腳本(.sh)或Windows批處理文件(.bat)來完成組件的啟動。通過修改工廠概覽(Plant Overview)里面的配置項可以使程序以特定模式啟動,如initialMode配置成OPERATING或MODELLING(見工廠概覽配置)。
3.1.1 從建模模式開始
-
啟動工廠概述客戶端(startPlantOverview.bat/.sh)
默認情況下,它配置為以“建模模式”("Modelling mode")啟動。
-
工廠概覽將以新的空模型開始,但您也可以從文件(文件 ▸ 加載模型(File ▸ Load Model))或當前內核模型(文件 ▸ 加載當前內核模型(File ▸ Load current kernel model))加載模型。后一個選項需要工廠概述客戶端可以連接到的已運行的內核,並且已加載現有工廠模型。
-
使用工廠概覽客戶端的圖形用戶界面可以為相應應用程序/項目創建任意驅動(driving course)。如何在駕駛過程中添加點,路徑和車輛等元素,請參閱構建新工廠模型。
3.1.2 從工廠運行模式開始
圖4.顯示工廠模型的工廠概覽客戶端
\1. 啟動內核(startKernel.bat/.sh)。
如果這是您第一次運行內核,則需要先保存當前的工廠模型。在工廠概覽中選擇文件 ▸ 內核中的持久模型(Select File ▸ Persist model in the kernel in the plant overview)(另請參閱
\2. (可選)啟動內核控制中心客戶端(startKernelControlCenter.bat/.sh)
\3. 啟動工廠概覽客戶端(startPlantOverview.bat/.sh)
將工廠概覽客戶端切換到“操作模式”(文件 ▸ 模式 ▸ 操作模式)(File ▸ Mode ▸ Operating mode)。
\4. 在內核控制中心中選擇選項卡車輛驅動(**Vehicle driver)**。然后為模型中的每輛車選擇配置和啟動驅動(configure and start driver)。
b) 雙擊列表中的車輛后,可以在右側的驅動面板看到小車的詳細視圖。該詳細視圖的具體設計取決於與車輛相關聯的驅動。通常,顯示由車輛發送的狀態信息(例如,當前位置和操作模式),並且在此提供低級設置(例如,用於車輛的IP地址)。
c) 右鍵單擊列表中的小車會彈出一個菜單,允許為選定的車輛添加驅動程序。
d) 對於由系統控制的小車,需要將驅動程序附接到小車並使能。(如果要測試,但是沒有可以與系統進行通信的真實車輛,可以使用所謂的環回驅動程序,它提供虛擬小車或仿真小車。)在配置中詳細說明了如何連接和啟用車輛驅動程序小車驅動。
![]() |
目前,有關選項卡小車驅動程序(Vehicle driver)的所有步驟都可以在內核本身提供的內核控制中心中完成,也可以在獨立/遠程版本中完成。但是,內核中的內核控制中心GUI將在openTCS 5.0中刪除。 |
---|---|
圖5.帶有小車詳細信息視圖的驅動面板
3.2 構建新的工廠模型
這些說明大致說明了如何創建新的工廠模型並填充驅動元素,以便最終可以在工廠運行模式中使用。
3.2.1 啟動工廠建模組件
-
啟動工廠概述客戶端(startPlantOverview.bat/.sh)並選擇“建模模式”。
-
等到工廠概覽客戶端的圖形用戶界面顯示出來。
-
您現在可以將驅動組件添加到空模型中。每當要重新開始時,從主菜單中選擇文件 ▸ 新建模型(File ▸ New Model)。
3.2.2 向工廠模型添加元素
圖6.工廠概述客戶端中的控制元素(建模模式)
-
從驅動元素工具欄中選擇點工具,然后單擊繪圖區域上的三個位置,創建三個點(請參見上面屏幕截圖中的紅框)。
-
將三個點與路徑連接到閉環
-
雙擊選擇路徑工具。
-
單擊一個點,然后將路徑拖動到下一個點並在那里釋放鼠標按鈕。
-
-
通過雙擊位置工具並單擊繪圖區域上的任意兩個自由位置來創建兩個位置。由於工廠模型中尚不存在位置類型,因此在創建第一個位置時會隱式創建一個新位置,這可以在繪圖區域左側的樹視圖中看到。
-
將這兩個位置與(不同)點相連
-
雙擊鏈接工具。
-
單擊某個位置,將鏈接拖動到某個點並釋放鼠標按鈕。
-
-
單擊元素工具欄中的車輛按鈕創建新車輛。
-
通過以下方式為新創建的位置定義車輛的允許操作
-
在繪圖區域左側的樹視圖中選擇位置類型(請參閱上面屏幕截圖中的藍框)。
-
單擊"Actions"樹視圖下面的屬性窗口中標記的值單元格。
-
例如"Load cargo",在顯示的對話框中輸入允許的位置作為任意文本"Unload cargo"。
-
(可選)您可以通過編輯屬性為所選類型的位置選擇符號"Symbol"。
-
![]() |
除非您在工廠模型中創建位置,將這些位置鏈接到駕駛路線中的點並定義車輛可以使用相應位置類型執行的操作,否則您將無法創建任何運輸訂單並將其分配給車輛。 |
---|---|
3.2.3 保存工廠模型
您有兩種保存模型的選項:在本地的硬盤里或在工廠概述已經連接到的內核實例中。
3.2.3.1 模型保存在本地
選擇文件 ▸ 保存模型或文件 ▸ 模型另存為...(File ▸ Save Model or File ▸ Save Model As…),然后為模型輸入任意名稱。
3.2.3.2 在正在運行的內核中保留模型