基於WMSWCS與PLC資料互動的立體倉庫控制系統案例分析
本文已獲原創作者授權轉載,原文連結基於WMS/WCS與PLC資料互動的立體倉庫控制系統案例分析
寫在面前
上次分享了文章:
TIA Portal實現動態加密的高階玩法—分級催款金鑰授權管理
然後很快就有朋友根據裡面的思路實現了,很贊,不過提醒大家的是,我們分享的只是一些思路,不是讓大家跟做某件事,請理性看待,不要陷入自己的思維蠶繭之中~
00 前言
自動化立體倉庫是集機械、電子、計算機、通訊網路、感測器和自動控制等多種技術為一體,以搬運機械化、控制自動化、管理微機化、資訊網路化為特徵的現代化物流系統中產品生產與儲存的樞紐,主要應用於儲存配件、半成品、產品、工具、夾具和模具等。
隨著資訊化技術的發展和自動化要求的不斷提高,立體倉庫的裝置控制不僅要將堆垛機的執行控制做到平滑順暢,更需要堆垛機系統能具備執行過程中各種資訊資料的轉換處理,便於操作執行人員或者管理人員能對堆垛機的各種引數及效能得到細緻的瞭解與掌握。
目前堆垛機控制系統更多的研究方向都是控制曲線的實現,並且也已經有很多實際成果已經在實施。然而在堆垛機資訊化管理方面,PLC系統做的還不是很完善且實際應用中涉及的比較淺,這造成了在工業應用中更多的資訊化資料都是透過WMS/WCS的倉儲資料的資訊化,而堆垛機的裝置的引數效能,堆垛機對任務處理過程資料等資訊化的管理由於PLC系統做的不徹底,導致現在的倉儲控制系統在這方面是一個弱點。
本文主要闡述一種基於PLC(SIEMENS)的堆垛機控制技術中對於堆垛機執行過程中的資料的管理的原理以及資料處理的方式。
01 立體倉庫控制系統
立體倉庫的控制系統主要包括WMS/WCS系統以及裝置控制系統(PLC)。最上層的WMS系統負責倉儲業務邏輯的處理,最下層是具體物流裝置的控制,比如堆垛機。WCS處於WMS與PLC之間,負責協調,排程底層裝置,使底層裝置可以執行倉儲系統的業務流程並且這個過程完全按照程式預先設定的流程執行的。通常WMS與WCS都是在同一硬體系統(伺服器)實現,所以下文所有的描述都統稱為WMS/WCS系統。
圖1 立體倉庫控制系統構架
PLC和WMS/WCS之間由乙太網(無線)連線,透過TCP/IP協議交換資訊資料,二者之間主要由兩類資料的互動:
心跳包資料:心跳包資料主要用於監視PLC和WMS/WCS之間的連線是否正常,只有連線正常的情況下才有資料互動的可能性;
任務資訊資料:WMS/WCS給PLC傳送的任務資訊,PLC在執行過程中該任務資訊狀態反饋以及裝置資訊的反饋;此類資料二者在不同時刻具有不同身份,是不同資訊的創造者;
圖2 PLC與WMS/WCS通訊鏈路處理
堆垛機作業流程:
WMS/WCS根據業務流程向堆垛機發送任務資訊,堆垛機系統(PLC)在收到任務資訊後將按照資訊內容執行任務流程並且在執行過程中實時向WMS/WCS反饋當前任務狀態。
正常流程:堆垛機執行任務一次性完成,中途沒有出現任何異常;
異常流程:堆垛機執行任務過程中,由於裝置出現故障或其他因素,導致任務必須暫停甚至中斷稱之為異常。此時PLC必須告知WMS/WCS異常的原因並等待異常結束後將任務執行完成,最終併發送任務完成資訊給WMS/WCS系統;
圖3 PLC與WMS/WCS作業流程示意圖
02 PLC中堆垛機的資料管理方式
2。1任務資訊組成
堆垛機主要基於WMS/WCS傳送的任務資訊執行貨物的位置搬運,裝置空移等動作,核心要素即堆垛機的位置移動,位置定位等的控制。所以,WMS/WCS傳送給PLC的任務資訊也是主要包括任務屬性描述以及位置等核心資料。一般的任務資訊資料可以概括如下表所示:
表格1 堆垛機任務資訊資料
2。2PLC系統資料管理
PLC為了將接收到的任務資訊能正確的執行,在PLC中建立了四個資料區域:
Link:各種資料記錄(TST,TIF,TST)的連結,每一個獨立的任務資訊對應一個Link編號且該Link下面會有相關資料記錄編碼的連結;
TIF: Task Information,任務資訊記錄,記錄任務資訊中接收到的資料;每一個TIF對應一個任務ID的資訊並由Link連結到其他記錄資訊;
TST: Task States,任務狀態記錄,表明該任務資訊當前狀態;每一個TST對應一個任務ID的資訊並由Link連結到其他記錄資訊;
TDT: Task Distance,任務距離資料記錄,記錄該任務起始/目的/當前位置資訊或者距離資訊,每一個堆垛機對應一組資訊記錄,同一堆垛機的TSD記錄號碼是相同的且與堆垛機編號相同;
2。2。1任務資訊記錄(TIF: Task Information)
TIF用於記錄PLC收到的WMS/WCS的任務資訊,用於指導堆垛機的執行控制;在PLC中自定義一種結構體資料型別名叫:UDT_TIF,其結構如下圖所示:
TYPE “UDT_TIF”
STRUCT
Link : Int; // Link Record in Link DB list
Function_Code : Int; // 任務功能編碼:比如定義出庫,入庫編號
stocker_ID : Int; // 堆垛機編號
Task_ID : DInt; // 任務編號
Priority_code : Int; // 任務優先順序,級別越高越先執行
Res_Platform : Int; // 起始棧臺編號
Res_Tunnel : Int; // 起始巷道編號
Res_Row : Int; // 起始貨架Row編號,決定堆垛機伸叉方向
Res_Line : Int; // 起始貨架Y軸座標(堆垛機行走方向)
Res_Tier : Int; // 起始貨架X軸座標(堆垛機提升方向)
Res_Depth : Int; // 起始貨架Z軸座標(堆垛機伸叉方向)
Des_Platform : Int; // 目的棧臺編號
Des_Tunnel : Int; // 目的巷道編號
Des_Row : Int; // 目的貨架Row編號,決定堆垛機伸叉方向
Des_Line : Int; // 目的貨架Y軸座標(堆垛機行走方向)
Des_Tier : Int; // 目的貨架X軸座標(堆垛機提升方向)
Des_Depth : Int; // 目的貨架Z軸座標(堆垛機伸叉方向)
Weigth : Int; // 貨物重量
Barcord_Tub : String[10]; // 托盤條碼
END_STRUCT;
END_TYPE
在PLC中例項化一個數據塊,名稱叫做DB_TIF_List。該資料區域包括兩部分:資料塊標頭檔案與資料主體。
資料標頭檔案區域定義了資料區域的一些屬性,比如標頭檔案長度,資料型別的長度,當前最大記錄數目等資訊;
資料主體就是存放實際資料的區域,主要由100組UDT_TIF型別組成的資料列表,意味著資料區域最多可以同時存放100個堆垛機任務;
DATA_BLOCK“DB_TIF_List”
STRUCT
Length_Header : Int; // DB塊標頭檔案的長度,工程師設定
Length_Record : Int; // 每一臺記錄的長度,系統自動計算
Last_Task_Record : Int; // 當前儲存的記錄的位置,系統自動計算
Entries_Present : Int; // 能儲存的最多資料的記錄
Default_Record_DB : Int; // 預設的資料塊編號
Not_Used : Int; // 沒有定義
s_Done : Bool; // 用於指示該資料塊正在被呼叫
TIF : Array[1。。100] of“UDT_TIF”;
END_STRUCT;
END_DATA_BLOCK
2。2。2任務狀態記錄(TST: Task States)
對於堆垛機裝置來說,每一個任務的執行都是三個座標(水平,垂直,貨架)系統的目標位置與裝置當前位置之間的座標位移。TST則用於記錄任務的執行狀態,其中包括兩個方面的資料的記錄:
任務的整體狀態:包括任務是否被啟用,任務是否正在執行,任務是否被中斷,任務是否執行完成等;
任務的過程狀態:過程狀態包括三個座標系電機在當前任務中的執行狀態,比如在該任務中水平行走座標是否已經完成,垂直提升座標是否已經完成,貨叉伸縮貨叉任務是否已經完成等;
PLC自定義一種資料型別名叫:UDT_TST用於記錄任務執行狀態
TYPE“UDT_TST”
STRUCT
Link : Int; // Link Record in Link DB list
Interrupt_code : Int; // 任務中斷程式碼
Defeated_Reason : Int; // 任務中斷的原因程式碼
Depth_Run_Counter : Int; // 1:單貨叉執行;2::雙貨叉執行
Current_Lift_Speed : Int; // 提升電機當前速度
Current_Line_Speed : Int; // 行走電機當前速度
Read_Barcode_States : Int; // 0表示條碼狀態正確;1:表示條碼狀態錯誤
Read_Barcode_1 : String[10]; // 讀到的第一條條碼
Read_Barcode_2 : String[10]; // 讀到的第二條條碼
Read_Barcode_3 : String[10]; // 讀到的第三條條碼
Task_status : Bool; // 1:任務正在執行 0:任務等待中
Task_Res_Depth_Status : Bool; // 1:任務正在執行 0:任務等待中
Task_Des_Depth_Status : Bool; // 1:任務正在執行 0:任務等待中
Task_Finished : Bool; // TRUE=任務完成
Task_defeated : Bool; // TRUE=任務中斷
Task_completed : Bool; // TRUE=收到WCS反饋資訊
Hold_Goods : Bool; // 叉車上有貨物
Task_defeated_inform : Bool; // TRUE=上位機任務中斷確認
Task_Res_Line_Finish : Bool; // TRUE=起始Y軸(行走)完成
Task_Des_Line_Finish : Bool; // TRUE=目的Y軸(行走)完成
Task_Res_Column_Finish : Bool; //TRUE=起始X軸(提升)完成
Task_Des_Column_Finish : Bool; //TRUE=目的X軸(提升)完成
Task_Res_Depth1_Finish : Bool; //TRUE=起始Z軸(單伸貨叉)完成
Task_Des_Depth1_Finish : Bool; //TRUE=目的Z軸(單伸貨叉)完成
Task_Res_Depth2_Finish : Bool; //TRUE=起始Z軸(雙伸貨叉)完成
Task_Des_Depth2_Finish : Bool; //TRUE=目的Z軸(雙伸貨叉)完成
Task_Res_Req_Lift_LittleUp : Bool;//TRUE:請求提升電機微升
Task_Res_Req_Lift_LittleDn :Bool; // TRUE:請求提升電機微降
Task_Des_Req_Lift_LittleUp :Bool; // TRUE:請求提升電機微升
Task_Des_Req_Lift_LittleDn :Bool; // TRUE:請求提升電機微降
Line_Motor_Run_On : Bool; // X軸電機執行訊號
Column_Motor_Run_On : Bool; // Y軸電機執行訊號
Depth_Motor1_Run_On : Bool; // 貨叉電機1執行訊號
Depth_Motor2_Run_On : Bool; // 貨叉電機2執行訊號
END_STRUCT;
END_TYPE
在PLC中例項化一個數據塊,名稱叫做DB_TST_List。該資料區域包括兩部分:資料塊標頭檔案與資料主體。
資料標頭檔案區域定義了資料區域的一些屬性,比如標頭檔案長度,資料型別的長度,當前最大記錄數目等資訊;
資料主體就是存放實際資料的區域,主要由100組UDT_TST型別組成的資料列表,意味著資料區域最多可以同時存放100個堆垛機任務;
DATA_BLOCK “DB_TST_List”
STRUCT
Length_Header : Int; // DB塊標頭檔案的長度,工程師設定
Length_Record : Int; // 每一臺記錄的長度,系統自動計算
Last_Task_Record : Int; // 當前儲存的記錄的位置,系統自動計算
Entries_Present : Int; // 能儲存的最多資料的記錄
Default_Record_DB : Int; // 沒有定義
Not_Used : Int; // 沒有定義
s_Done : Bool; // 用於指示該資料塊正在被呼叫
TST : Array[1。。100] of“UDT_TST”;
END_STRUCT;
END_DATA_BLOCK
2。2。3任務位置(TSD: Task Distance)
TSD主要記錄執行任務中相關的座標位置資料,主要包括兩種位置資料:
裝置當前位置資料:包括堆垛機三臺電機的當前位置座標值;
任務位置資料:每一個有效任務都包括起始位置和終點位置,任務位置值就包括任務中這兩類的三臺裝置的目的資料;
PLC自定義一種資料型別名叫:UDT_TSD用於記錄任務座標位置值;
TYPE“UDT_TSD”
STRUCT
Link : Int;
Current : Struct // Current stocker position information
Line_Posi : DInt; // 當前Y軸座標(堆垛機行走方向)
Tier_Posi : DInt; // 當前X軸座標(堆垛機提升方向)
Depth_Posi : DInt; // 當前Z軸座標(堆垛機伸叉方向)
Platform : Int; // 當前棧臺編號
Tunnel : Int; // 當前巷道編號
Row : Int; // 當前列編號
Line : Int; // 當前排編號
Tier : Int; // 當前層編號
Depth : Int; // 當前深度編號
END_STRUCT;
Task_Res : Struct // Current task resource positioninformation
Platform_Posi : DInt; // 任務棧臺位置值,單位mm
Tunnel_Posi : DInt; // 任務巷道位置值,單位mm
Row_Posi : DInt; // 貨架Row編號,決定堆垛機伸叉方向
Line_Posi : DInt; // 貨架Y軸座標(堆垛機行走方向)
Tier_Posi : DInt; // 貨架X軸座標(堆垛機提升方向)
Depth_Posi : DInt; // 貨架Z軸座標(堆垛機伸叉方向)
END_STRUCT;
Task_Des : Struct // Current task destination positioninformation
Platform_Posi : DInt; // 任務棧臺位置值,單位mm
Tunnel_Posi : DInt; // 任務巷道位置值,單位mm
Row_Posi : DInt; // 貨架Row編號,決定堆垛機伸叉方向
Line_Posi : DInt; // 貨架Y軸座標(堆垛機行走方向)
Tier_Posi : DInt; // 貨架X軸座標(堆垛機提升方向)
Depth_Posi : DInt; // 貨架Z軸座標(堆垛機伸叉方向)
END_STRUCT;
END_STRUCT;
END_TYPE
在PLC中例項化一個數據塊,名稱叫做DB_TSD_List。該資料區域包括兩部分:資料塊標頭檔案與資料主體。
資料標頭檔案區域定義了資料區域的一些屬性,比如標頭檔案長度,資料型別的長度,當前最大記錄數目等資訊;
資料主體就是存放實際資料的區域,主要由100組UDT_TSD型別組成的資料列表,意味著資料區域最多可以同時存放100個堆垛機任務;
DATA_BLOCK “DB_TSD_List”
STRUCT
Length_Header : Int; // DB塊標頭檔案的長度,工程師設定
Length_Record : Int; // 每一臺記錄的長度,系統自動計算
Last_Task_Record : Int; // 當前儲存的記錄的位置,系統自動計算
Entries_Present : Int; // 能儲存的最多資料的記錄
Last_TaskID : DInt; // 預設的資料塊編號
s_Done : Bool; // 用於指示該資料塊正在被呼叫
TSD : Array[1。。5] of “UDT_TSD”;
END_STRUCT;
END_DATA_BLOCK
2。2。4資料鏈接(Link)
TIF,TST堆疊共有100組陣列,TSD堆疊共有5組陣列,當收到一個新的任務的時候相關資訊要儲存到各自資料區域的哪一組裡面呢?
類似疑問就需要透過Link來解決,Link在堆垛機控制系統中主要有以下用途:
當接收到新的任務資訊後,系統會生成一個新的Link編號並存放於資料塊中;
Link生成成功後基於Link編號生成其他資料(TIF,TST,TSD)的編號並透過Link編號進行各類資料之間的橋接;
Link資料如下所示:
TYPE“UDT_Link”
STRUCT
TIF: Int; // 任務資訊編號;
TST: Int; // 任務狀態編號;
TSD: Int; // 任務距離編號;
Priority : Int; // 優先順序:確定任務執行的先後順序,優先順序越高越先執行;
END_STRUCT;
END_TYPE
Priority:優先順序,與TIF中的優先順序的值是一致的,在Link中主要用於生成當前任務號(優先順序越高,該任務必須越先執行);
注:優先順序僅限於當前列表中未執行任務的比較;
在PLC中例項化一個數據塊,名稱叫做DB_Link_List。該資料區域包括兩部分:資料塊標頭檔案與資料主體。
資料標頭檔案區域定義了資料區域的一些屬性,比如標頭檔案長度,資料型別的長度,當前最大記錄數目等資訊;
資料主體就是存放實際資料的區域,主要由100組UDT_TSD型別組成的資料列表,意味著資料區域最多可以同時存放100個堆垛機任務;
DATA_BLOCK “DB_Link_List”
STRUCT
Length_Header : Int; // DB塊標頭檔案的長度,工程師設定
Length_Record : Int; // 每一臺記錄的長度,系統自動計算
Last_Record : Int; // 當前儲存的記錄的位置,系統自動計算
Entries_Present : Int; // 能儲存的最多資料的記錄
Current_Record : Int; // 當前執行的記錄編號
Record_DB_Nr : Int; // Link下面連結的其他資料DB塊編號
s_Done : Bool; // 用於指示該資料塊正在被呼叫
DB_nr_Record :“UDT_Record_Nr”;
Link : Array[1。。100] of “UDT_Link”;
END_STRUCT;
END_DATA_BLOCK
03 資料處理邏輯
資料關係的基本原則:一致性,同步性;
圖4 資料邏輯關係圖
優先性:資料關係中Link是核心要素,當收到新的Link生成請求後,只有在分配新的Link才能基於此Link生成其他Record(TIF/TST/TSD),即Link在資料管理中是最高級別的;
注:Link分配過程必須檢測分配的編號是否被佔用,若佔用則必須重新分配;
同步性:當系統請求刪除Link時候,必須先刪除TIF/TST/TSD成功後才能將Record連結的Link的資料刪除;
一致性:TIF/TST/TSD資料中的Link必須一致且三者的編號必須與Link中的相關Record號碼一致;
詳細的邏輯流程詳見下圖所示:
圖5 資料管理(生成/刪除)邏輯圖
04 控制系統框架以及實現
基於模組化,標準化思維,PLC程式主要分為三個模組:資料管理、裝置控制以及通訊(WMS/WCS)程式。
位置編碼是一種位置編碼與位置實際位置值之間轉換的演算法,該演算法是為控制系統中的三個模組提供演算法支援的。
圖6 堆垛機控制系統結構圖
4。1 通訊程式(WMS/WCS)
堆垛機的控制都是基於WMS/WCS的任務資訊,所以PLC首要任務是和WMS/WCS建立通訊連結並接收WMS/WCS的任務指令,這就是PLC控制系統中的通訊模組程式的任務。
此模組程式將WMS/WCS的任務解析為通俗易懂的資料,利用位置編碼演算法將任務中的位置編碼轉換為用於控制演算法的實際距離值,最終將這些資料分別存放在資料管理模組中的TIF以及TSD序列中。
4。2 資料管理
資料管理模組主要有以下幾項任務:
任務執行前檢查並確保該任務的正確性,不正確的任務資料應該得到清除或其他方式給予恰當處理。
監視當前任務的執行狀態,基於任務的狀態向WMS/WCS系統傳送恰當的狀態反饋,比如任務完成資訊,任務中斷資訊或者裝置故障等狀態資訊。
當前任務執行完成後基於任務優先順序搜尋任務序列中的有效任務並將其啟用為當前任務。
裝置控制
堆垛機的裝置控制主要為三個方向的位置定位控制,資料管理模組會根據任務執行狀態實時更新位置資訊並反饋到驅動控制器用於指導裝置的位置及精度的控制。
裝置執行過程中資訊,包括裝置的狀態,故障、某些邏輯的演算法故障、當前任務的執行情況(完成、中斷或者暫停等)會實時寫入資料管理模組,控制系統透過資料管理模組將有效的資訊(任務狀態,裝置狀態等)反饋到WMS/WCS用於整個儲存系統的資料分析,同時控制系統也會透過恰當的方式(比如HMI,SCADA)實現與操作者的人機資訊互動。
05 結束語
基於資料管理的控制技術中管理的資料型別是倉儲物流控制系統的全部的資料,能實現堆垛機的全過程的資訊化管理。該資料管理模式關注了每一個任務的全過程資料,對於資訊化管理要求高的企業也能滿足其要求。對於客戶的任務資訊化的要求,只要在設計階段定義好資料的傳送點以及資料的內容,PLC能實時的將任務過程中的全部資訊(任務資訊、裝置資訊)從資料管理模組收集起來併發送到指定裝置。
同時,應用該技術可以讓WMS/WCS系統專注於資料的管理,對於裝置控制層面的過程管理只需要和PLC做好相應的資訊介面,這樣WMS/WCS系統能更專業,快速地處理資料並實現專業分工。
免責申明:本公眾號所載文章為本公眾號原創或根據網路搜尋編輯整理,文章版權歸原作者所有。因轉載眾多,無法找到真正來源,如標錯來源,或對於文中所使用的圖片,資料,下載連結中所包含的軟體,資料等,如有侵權,請跟我們聯絡協商或刪除,謝謝!
往期推薦
施耐德
施耐德Wonderware system platform介紹Wonderware-Intouch C/S架構冗餘配置
西家、羅家、施家組態軟體連線資料庫—Intouch利用SQL資料庫發郵件
施耐德SoMachine平臺Ethernet/IP通訊解決方案
施耐德SoMachine平臺下的OPC UA通訊
西門子TIA Portal大魚吃小魚VS施耐德Intouch潛水艇小遊戲
網路-通訊
淺談 MES、SCADA、PLC專案中的串列埠通訊(232,485,422)及常見問題
Modus 的RTU、ASCII、TCP傻傻搞不清楚?這將是你見過的最全面分析
MES、SCADA下的資料採集— 西門子S7comm協議分析
MES下的資料採集——掃碼器的串列埠通訊
[ 附labview下載 ]LabVIEW與RS232串列埠通訊
OPCUA、PROFINET、Ethercat等都支援的TSN是什麼?—工業通訊未來已來
OPC UA&與OPC Classic之間的資料轉換
OPC UA-面向未來的工業通訊規範