隨著工業(yè)4.0的普及,倉(cāng)儲(chǔ)物流控制系統(tǒng)不但要滿足基本的設(shè)備控制的精度要求,更是需要對(duì)控制全過(guò)程的數(shù)據(jù)做信息化的處理。而倉(cāng)儲(chǔ)物流系統(tǒng)中最重要的設(shè)備就是堆垛機(jī),在此提出的基于數(shù)據(jù)管理的PLC控制技術(shù)就是一種實(shí)現(xiàn)堆垛機(jī)全過(guò)程信息數(shù)據(jù)管理的方式,該管理方式數(shù)據(jù)全面,覆蓋了堆垛機(jī)的全過(guò)程數(shù)據(jù),可以實(shí)現(xiàn)堆垛機(jī)的信息化的控制。
自動(dòng)化立體倉(cāng)庫(kù)是集機(jī)械、電子、計(jì)算機(jī)、通信網(wǎng)絡(luò)、傳感器和自動(dòng)控制等多種技術(shù)為一體,以搬運(yùn)機(jī)械化、控制自動(dòng)化、管理微機(jī)化、信息網(wǎng)絡(luò)化為特征的現(xiàn)代化物流系統(tǒng)中產(chǎn)品生產(chǎn)與儲(chǔ)存的樞紐,主要應(yīng)用于存儲(chǔ)配件、半成品、產(chǎn)品、工具、夾具和模具等。
隨著信息化技術(shù)的發(fā)展和自動(dòng)化要求的不斷提高,立體倉(cāng)庫(kù)的設(shè)備控制不僅要將堆垛機(jī)的運(yùn)行控制做到平滑順暢,更需要堆垛機(jī)系統(tǒng)能具備運(yùn)行過(guò)程中各種信息數(shù)據(jù)的轉(zhuǎn)換處理,便于操作運(yùn)行人員或者管理人員能對(duì)堆垛機(jī)的各種參數(shù)及性能得到細(xì)致的了解與掌握。
目前堆垛機(jī)控制系統(tǒng)更多的研究方向都是控制曲線的實(shí)現(xiàn),并且也已經(jīng)有很多實(shí)際成果已經(jīng)在實(shí)施。然而在堆垛機(jī)信息化管理方面,PLC系統(tǒng)做的還不是很完善且實(shí)際應(yīng)用中涉及的比較淺,這造成了在工業(yè)應(yīng)用中更多的信息化數(shù)據(jù)都是通過(guò)WMS/WCS的倉(cāng)儲(chǔ)數(shù)據(jù)的信息化,而堆垛機(jī)的設(shè)備的參數(shù)性能,堆垛機(jī)對(duì)任務(wù)處理過(guò)程數(shù)據(jù)等信息化的管理由于PLC系統(tǒng)做的不徹底,導(dǎo)致現(xiàn)在的倉(cāng)儲(chǔ)控制系統(tǒng)在這方面是一個(gè)弱點(diǎn)。
本文主要闡述一種基于PLC(SIEMENS)的堆垛機(jī)控制技術(shù)中對(duì)于堆垛機(jī)運(yùn)行過(guò)程中的數(shù)據(jù)的管理的原理以及數(shù)據(jù)處理的方式。
立體倉(cāng)庫(kù)的控制系統(tǒng)主要包括WMS/WCS系統(tǒng)以及設(shè)備控制系統(tǒng)(PLC)。最上層的WMS系統(tǒng)負(fù)責(zé)倉(cāng)儲(chǔ)業(yè)務(wù)邏輯的處理,最下層是具體物流設(shè)備的控制,比如堆垛機(jī)。WCS處于WMS與PLC之間,負(fù)責(zé)協(xié)調(diào),調(diào)度底層設(shè)備,使底層設(shè)備可以執(zhí)行倉(cāng)儲(chǔ)系統(tǒng)的業(yè)務(wù)流程并且這個(gè)過(guò)程完全按照程序預(yù)先設(shè)定的流程執(zhí)行的。通常WMS與WCS都是在同一硬件系統(tǒng)(服務(wù)器)實(shí)現(xiàn),所以下文所有的描述都統(tǒng)稱為WMS/WCS系統(tǒng)。
圖1 立體倉(cāng)庫(kù)控制系統(tǒng)構(gòu)架
PLC和WMS/WCS之間由以太網(wǎng)(無(wú)線)連接,通過(guò)TCP/IP協(xié)議交換信息數(shù)據(jù),二者之間主要由兩類數(shù)據(jù)的交互:
心跳包數(shù)據(jù):心跳包數(shù)據(jù)主要用于監(jiān)視PLC和WMS/WCS之間的連接是否正常,只有連接正常的情況下才有數(shù)據(jù)交互的可能性;
任務(wù)信息數(shù)據(jù):WMS/WCS給PLC發(fā)送的任務(wù)信息,PLC在執(zhí)行過(guò)程中該任務(wù)信息狀態(tài)反饋以及設(shè)備信息的反饋;此類數(shù)據(jù)二者在不同時(shí)刻具有不同身份,是不同信息的創(chuàng)造者;
圖2 PLC與WMS/WCS通信鏈路處理
堆垛機(jī)作業(yè)流程:
WMS/WCS根據(jù)業(yè)務(wù)流程向堆垛機(jī)發(fā)送任務(wù)信息,堆垛機(jī)系統(tǒng)(PLC)在收到任務(wù)信息后將按照信息內(nèi)容執(zhí)行任務(wù)流程并且在執(zhí)行過(guò)程中實(shí)時(shí)向WMS/WCS反饋當(dāng)前任務(wù)狀態(tài)。
正常流程:堆垛機(jī)執(zhí)行任務(wù)一次性完成,中途沒(méi)有出現(xiàn)任何異常;
異常流程:堆垛機(jī)執(zhí)行任務(wù)過(guò)程中,由于設(shè)備出現(xiàn)故障或其他因素,導(dǎo)致任務(wù)必須暫停甚至中斷稱之為異常。此時(shí)PLC必須告知WMS/WCS異常的原因并等待異常結(jié)束后將任務(wù)執(zhí)行完成,最終并發(fā)送任務(wù)完成信息給WMS/WCS系統(tǒng);
圖3 PLC與WMS/WCS作業(yè)流程示意圖
02PLC中堆垛機(jī)的數(shù)據(jù)管理方式
2.1任務(wù)信息組成
堆垛機(jī)主要基于WMS/WCS發(fā)送的任務(wù)信息執(zhí)行貨物的位置搬運(yùn),設(shè)備空移等動(dòng)作,核心要素即堆垛機(jī)的位置移動(dòng),位置定位等的控制。所以,WMS/WCS發(fā)送給PLC的任務(wù)信息也是主要包括任務(wù)屬性描述以及位置等核心數(shù)據(jù)。一般的任務(wù)信息數(shù)據(jù)可以概括如下表所示:
序號(hào) |
類別 |
名稱 |
說(shuō)明 |
備注 |
1 |
任務(wù)描述類 |
堆垛機(jī)號(hào) |
堆垛機(jī)編號(hào) |
|
2 |
任務(wù)類型 |
描述任務(wù)類型的信息 |
比如出庫(kù),入庫(kù)等 |
|
3 |
任務(wù)號(hào) |
最大長(zhǎng)度為10位的整型 |
||
4 |
優(yōu)先級(jí) |
任務(wù)執(zhí)行順序從小到大 |
||
5 |
位置信息類 |
起始棧臺(tái) |
立體倉(cāng)庫(kù)棧臺(tái)編號(hào) |
|
6 |
起始巷道 |
立體倉(cāng)庫(kù)巷道編號(hào) |
||
7 |
起始排 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架面 |
||
8 |
起始列 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架列 |
||
9 |
起始層 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架層 |
||
10 |
起始深度 |
貨位深度 |
||
11 |
目標(biāo)棧臺(tái) |
立體倉(cāng)庫(kù)棧臺(tái)編號(hào) |
||
12 |
目標(biāo)巷道 |
立體倉(cāng)庫(kù)巷道編號(hào) |
||
13 |
目標(biāo)排 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架面 |
||
14 |
目標(biāo)列 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架列 |
||
15 |
目標(biāo)層 |
立體倉(cāng)庫(kù)對(duì)應(yīng)的貨架層 |
||
16 |
目標(biāo)深度 |
貨位深度 |
不管單雙貨位都可以用深度表示貨物放置的目標(biāo)位置 |
|
17 |
任務(wù)屬性類 |
貨物重量 |
貨物重量KG |
|
18 |
托盤條碼 |
托盤條形碼 |
表格1 堆垛機(jī)任務(wù)信息數(shù)據(jù)
2.2PLC系統(tǒng)數(shù)據(jù)管理
PLC為了將接收到的任務(wù)信息能正確的執(zhí)行,在PLC中建立了四個(gè)數(shù)據(jù)區(qū)域:
Link:各種數(shù)據(jù)記錄(TST,TIF,TST)的鏈接,每一個(gè)獨(dú)立的任務(wù)信息對(duì)應(yīng)一個(gè)Link編號(hào)且該Link下面會(huì)有相關(guān)數(shù)據(jù)記錄編碼的鏈接;
TIF: Task Information,任務(wù)信息記錄,記錄任務(wù)信息中接收到的數(shù)據(jù);每一個(gè)TIF對(duì)應(yīng)一個(gè)任務(wù)ID的信息并由Link鏈接到其他記錄信息;
TST: Task States,任務(wù)狀態(tài)記錄,表明該任務(wù)信息當(dāng)前狀態(tài);每一個(gè)TST對(duì)應(yīng)一個(gè)任務(wù)ID的信息并由Link鏈接到其他記錄信息;
TDT: Task Distance,任務(wù)距離數(shù)據(jù)記錄,記錄該任務(wù)起始/目的/當(dāng)前位置信息或者距離信息,每一個(gè)堆垛機(jī)對(duì)應(yīng)一組信息記錄,同一堆垛機(jī)的TSD記錄號(hào)碼是相同的且與堆垛機(jī)編號(hào)相同;
2.2.1任務(wù)信息記錄(TIF: Task Information)
TIF用于記錄PLC收到的WMS/WCS的任務(wù)信息,用于指導(dǎo)堆垛機(jī)的運(yùn)行控制;在PLC中自定義一種結(jié)構(gòu)體數(shù)據(jù)類型名叫:UDT_TIF,其結(jié)構(gòu)如下圖所示:
TYPE "UDT_TIF"
STRUCT
Link : Int; // Link Record in Link DB list
Function_Code : Int; // 任務(wù)功能編碼:比如定義出庫(kù),入庫(kù)編號(hào)
stocker_ID : Int; // 堆垛機(jī)編號(hào)
Task_ID : DInt; // 任務(wù)編號(hào)
Priority_code : Int; // 任務(wù)優(yōu)先級(jí),級(jí)別越高越先執(zhí)行
Res_Platform : Int; // 起始棧臺(tái)編號(hào)
Res_Tunnel : Int; // 起始巷道編號(hào)
Res_Row : Int; // 起始貨架Row編號(hào),決定堆垛機(jī)伸叉方向
Res_Line : Int; // 起始貨架Y軸坐標(biāo)(堆垛機(jī)行走方向)
Res_Tier : Int; // 起始貨架X軸坐標(biāo)(堆垛機(jī)提升方向)
Res_Depth : Int; // 起始貨架Z軸坐標(biāo)(堆垛機(jī)伸叉方向)
Des_Platform : Int; // 目的棧臺(tái)編號(hào)
Des_Tunnel : Int; // 目的巷道編號(hào)
Des_Row : Int; // 目的貨架Row編號(hào),決定堆垛機(jī)伸叉方向
Des_Line : Int; // 目的貨架Y軸坐標(biāo)(堆垛機(jī)行走方向)
Des_Tier : Int; // 目的貨架X軸坐標(biāo)(堆垛機(jī)提升方向)
Des_Depth : Int; // 目的貨架Z軸坐標(biāo)(堆垛機(jī)伸叉方向)
Weigth : Int; // 貨物重量
Barcord_Tub : String[10]; // 托盤條碼
END_STRUCT;
END_TYPE
在PLC中實(shí)例化一個(gè)數(shù)據(jù)塊,名稱叫做DB_TIF_List。該數(shù)據(jù)區(qū)域包括兩部分:數(shù)據(jù)塊頭文件與數(shù)據(jù)主體。
數(shù)據(jù)頭文件區(qū)域定義了數(shù)據(jù)區(qū)域的一些屬性,比如頭文件長(zhǎng)度,數(shù)據(jù)類型的長(zhǎng)度,當(dāng)前最大記錄數(shù)目等信息;
數(shù)據(jù)主體就是存放實(shí)際數(shù)據(jù)的區(qū)域,主要由100組UDT_TIF類型組成的數(shù)據(jù)列表,意味著數(shù)據(jù)區(qū)域最多可以同時(shí)存放100個(gè)堆垛機(jī)任務(wù);
DATA_BLOCK"DB_TIF_List"
STRUCT
Length_Header : Int; // DB塊頭文件的長(zhǎng)度,工程師設(shè)定
Length_Record : Int; // 每一臺(tái)記錄的長(zhǎng)度,系統(tǒng)自動(dòng)計(jì)算
Last_Task_Record : Int; // 當(dāng)前存儲(chǔ)的記錄的位置,系統(tǒng)自動(dòng)計(jì)算
Entries_Present : Int; // 能存儲(chǔ)的最多數(shù)據(jù)的記錄
Default_Record_DB : Int; // 默認(rèn)的數(shù)據(jù)塊編號(hào)
Not_Used : Int; // 沒(méi)有定義
s_Done : Bool; // 用于指示該數(shù)據(jù)塊正在被調(diào)用
TIF : Array[1..100] of"UDT_TIF";
END_STRUCT;
END_DATA_BLOCK
2.2.2任務(wù)狀態(tài)記錄(TST: Task States)
對(duì)于堆垛機(jī)設(shè)備來(lái)說(shuō),每一個(gè)任務(wù)的執(zhí)行都是三個(gè)坐標(biāo)(水平,垂直,貨架)系統(tǒng)的目標(biāo)位置與設(shè)備當(dāng)前位置之間的坐標(biāo)位移。TST則用于記錄任務(wù)的執(zhí)行狀態(tài),其中包括兩個(gè)方面的數(shù)據(jù)的記錄:
任務(wù)的整體狀態(tài):包括任務(wù)是否被激活,任務(wù)是否正在執(zhí)行,任務(wù)是否被中斷,任務(wù)是否執(zhí)行完成等;
任務(wù)的過(guò)程狀態(tài):過(guò)程狀態(tài)包括三個(gè)坐標(biāo)系電機(jī)在當(dāng)前任務(wù)中的執(zhí)行狀態(tài),比如在該任務(wù)中水平行走坐標(biāo)是否已經(jīng)完成,垂直提升坐標(biāo)是否已經(jīng)完成,貨叉伸縮貨叉任務(wù)是否已經(jīng)完成等;
PLC自定義一種數(shù)據(jù)類型名叫:UDT_TST用于記錄任務(wù)執(zhí)行狀態(tài)
TYPE"UDT_TST"
STRUCT
Link : Int; // Link Record in Link DB list
Interrupt_code : Int; // 任務(wù)中斷代碼
Defeated_Reason : Int; // 任務(wù)中斷的原因代碼
Depth_Run_Counter : Int; // 1:單貨叉運(yùn)行;2::雙貨叉運(yùn)行
Current_Lift_Speed : Int; // 提升電機(jī)當(dāng)前速度
Current_Line_Speed : Int; // 行走電機(jī)當(dāng)前速度
Read_Barcode_States : Int; // 0表示條碼狀態(tài)正確;1:表示條碼狀態(tài)錯(cuò)誤
Read_Barcode_1 : String[10]; // 讀到的第一條條碼
Read_Barcode_2 : String[10]; // 讀到的第二條條碼
Read_Barcode_3 : String[10]; // 讀到的第三條條碼
Task_status : Bool; // 1:任務(wù)正在執(zhí)行 0:任務(wù)等待中
Task_Res_Depth_Status : Bool; // 1:任務(wù)正在執(zhí)行 0:任務(wù)等待中
Task_Des_Depth_Status : Bool; // 1:任務(wù)正在執(zhí)行 0:任務(wù)等待中
Task_Finished : Bool; // TRUE=任務(wù)完成
Task_defeated : Bool; // TRUE=任務(wù)中斷
Task_completed : Bool; // TRUE=收到WCS反饋信息
Hold_Goods : Bool; // 叉車上有貨物
Task_defeated_inform : Bool; // TRUE=上位機(jī)任務(wù)中斷確認(rèn)
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:請(qǐng)求提升電機(jī)微升
Task_Res_Req_Lift_LittleDn :Bool; // TRUE:請(qǐng)求提升電機(jī)微降
Task_Des_Req_Lift_LittleUp :Bool; // TRUE:請(qǐng)求提升電機(jī)微升
Task_Des_Req_Lift_LittleDn :Bool; // TRUE:請(qǐng)求提升電機(jī)微降
Line_Motor_Run_On : Bool; // X軸電機(jī)運(yùn)行信號(hào)
Column_Motor_Run_On : Bool; // Y軸電機(jī)運(yùn)行信號(hào)
Depth_Motor1_Run_On : Bool; // 貨叉電機(jī)1運(yùn)行信號(hào)
Depth_Motor2_Run_On : Bool; // 貨叉電機(jī)2運(yùn)行信號(hào)
END_STRUCT;
END_TYPE
在PLC中實(shí)例化一個(gè)數(shù)據(jù)塊,名稱叫做DB_TST_List。該數(shù)據(jù)區(qū)域包括兩部分:數(shù)據(jù)塊頭文件與數(shù)據(jù)主體。
數(shù)據(jù)頭文件區(qū)域定義了數(shù)據(jù)區(qū)域的一些屬性,比如頭文件長(zhǎng)度,數(shù)據(jù)類型的長(zhǎng)度,當(dāng)前最大記錄數(shù)目等信息;
數(shù)據(jù)主體就是存放實(shí)際數(shù)據(jù)的區(qū)域,主要由100組UDT_TST類型組成的數(shù)據(jù)列表,意味著數(shù)據(jù)區(qū)域最多可以同時(shí)存放100個(gè)堆垛機(jī)任務(wù);
DATA_BLOCK "DB_TST_List"
STRUCT
Length_Header : Int; // DB塊頭文件的長(zhǎng)度,工程師設(shè)定
Length_Record : Int; // 每一臺(tái)記錄的長(zhǎng)度,系統(tǒng)自動(dòng)計(jì)算
Last_Task_Record : Int; // 當(dāng)前存儲(chǔ)的記錄的位置,系統(tǒng)自動(dòng)計(jì)算
Entries_Present : Int; // 能存儲(chǔ)的最多數(shù)據(jù)的記錄
Default_Record_DB : Int; // 沒(méi)有定義
Not_Used : Int; // 沒(méi)有定義
s_Done : Bool; // 用于指示該數(shù)據(jù)塊正在被調(diào)用
TST : Array[1..100] of"UDT_TST";
END_STRUCT;
END_DATA_BLOCK
2.2.3任務(wù)位置(TSD: Task Distance)
TSD主要記錄執(zhí)行任務(wù)中相關(guān)的坐標(biāo)位置數(shù)據(jù),主要包括兩種位置數(shù)據(jù):
設(shè)備當(dāng)前位置數(shù)據(jù):包括堆垛機(jī)三臺(tái)電機(jī)的當(dāng)前位置坐標(biāo)值;
任務(wù)位置數(shù)據(jù):每一個(gè)有效任務(wù)都包括起始位置和終點(diǎn)位置,任務(wù)位置值就包括任務(wù)中這兩類的三臺(tái)設(shè)備的目的數(shù)據(jù);
PLC自定義一種數(shù)據(jù)類型名叫:UDT_TSD用于記錄任務(wù)坐標(biāo)位置值;
TYPE"UDT_TSD"
STRUCT
Link : Int;
Current : Struct // Current stocker position information
Line_Posi : DInt; // 當(dāng)前Y軸坐標(biāo)(堆垛機(jī)行走方向)
Tier_Posi : DInt; // 當(dāng)前X軸坐標(biāo)(堆垛機(jī)提升方向)
Depth_Posi : DInt; // 當(dāng)前Z軸坐標(biāo)(堆垛機(jī)伸叉方向)
Platform : Int; // 當(dāng)前棧臺(tái)編號(hào)
Tunnel : Int; // 當(dāng)前巷道編號(hào)
Row : Int; // 當(dāng)前列編號(hào)
Line : Int; // 當(dāng)前排編號(hào)
Tier : Int; // 當(dāng)前層編號(hào)
Depth : Int; // 當(dāng)前深度編號(hào)
END_STRUCT;
Task_Res : Struct // Current task resource positioninformation
Platform_Posi : DInt; // 任務(wù)棧臺(tái)位置值,單位mm
Tunnel_Posi : DInt; // 任務(wù)巷道位置值,單位mm
Row_Posi : DInt; // 貨架Row編號(hào),決定堆垛機(jī)伸叉方向
Line_Posi : DInt; // 貨架Y軸坐標(biāo)(堆垛機(jī)行走方向)
Tier_Posi : DInt; // 貨架X軸坐標(biāo)(堆垛機(jī)提升方向)
Depth_Posi : DInt; // 貨架Z軸坐標(biāo)(堆垛機(jī)伸叉方向)
END_STRUCT;
Task_Des : Struct // Current task destination positioninformation
Platform_Posi : DInt; // 任務(wù)棧臺(tái)位置值,單位mm
Tunnel_Posi : DInt; // 任務(wù)巷道位置值,單位mm
Row_Posi : DInt; // 貨架Row編號(hào),決定堆垛機(jī)伸叉方向
Line_Posi : DInt; // 貨架Y軸坐標(biāo)(堆垛機(jī)行走方向)
Tier_Posi : DInt; // 貨架X軸坐標(biāo)(堆垛機(jī)提升方向)
Depth_Posi : DInt; // 貨架Z軸坐標(biāo)(堆垛機(jī)伸叉方向)
END_STRUCT;
END_STRUCT;
END_TYPE
在PLC中實(shí)例化一個(gè)數(shù)據(jù)塊,名稱叫做DB_TSD_List。該數(shù)據(jù)區(qū)域包括兩部分:數(shù)據(jù)塊頭文件與數(shù)據(jù)主體。
數(shù)據(jù)頭文件區(qū)域定義了數(shù)據(jù)區(qū)域的一些屬性,比如頭文件長(zhǎng)度,數(shù)據(jù)類型的長(zhǎng)度,當(dāng)前最大記錄數(shù)目等信息;
數(shù)據(jù)主體就是存放實(shí)際數(shù)據(jù)的區(qū)域,主要由100組UDT_TSD類型組成的數(shù)據(jù)列表,意味著數(shù)據(jù)區(qū)域最多可以同時(shí)存放100個(gè)堆垛機(jī)任務(wù);
DATA_BLOCK "DB_TSD_List"
STRUCT
Length_Header : Int; // DB塊頭文件的長(zhǎng)度,工程師設(shè)定
Length_Record : Int; // 每一臺(tái)記錄的長(zhǎng)度,系統(tǒng)自動(dòng)計(jì)算
Last_Task_Record : Int; // 當(dāng)前存儲(chǔ)的記錄的位置,系統(tǒng)自動(dòng)計(jì)算
Entries_Present : Int; // 能存儲(chǔ)的最多數(shù)據(jù)的記錄
Last_TaskID : DInt; // 默認(rèn)的數(shù)據(jù)塊編號(hào)
s_Done : Bool; // 用于指示該數(shù)據(jù)塊正在被調(diào)用
TSD : Array[1..5] of "UDT_TSD";
END_STRUCT;
END_DATA_BLOCK
2.2.4數(shù)據(jù)鏈接(Link)
TIF,TST堆棧共有100組數(shù)組,TSD堆棧共有5組數(shù)組,當(dāng)收到一個(gè)新的任務(wù)的時(shí)候相關(guān)信息要保存到各自數(shù)據(jù)區(qū)域的哪一組里面呢?
類似疑問(wèn)就需要通過(guò)Link來(lái)解決,Link在堆垛機(jī)控制系統(tǒng)中主要有以下用途:
當(dāng)接收到新的任務(wù)信息后,系統(tǒng)會(huì)生成一個(gè)新的Link編號(hào)并存放于數(shù)據(jù)塊中;
Link生成成功后基于Link編號(hào)生成其他數(shù)據(jù)(TIF,TST,TSD)的編號(hào)并通過(guò)Link編號(hào)進(jìn)行各類數(shù)據(jù)之間的橋接;
Link數(shù)據(jù)如下所示:
TYPE"UDT_Link"
STRUCT
TIF: Int; // 任務(wù)信息編號(hào);
TST: Int; // 任務(wù)狀態(tài)編號(hào);
TSD: Int; // 任務(wù)距離編號(hào);
Priority : Int; // 優(yōu)先級(jí):確定任務(wù)執(zhí)行的先后順序,優(yōu)先級(jí)越高越先執(zhí)行;
END_STRUCT;
END_TYPE
Priority:優(yōu)先級(jí),與TIF中的優(yōu)先級(jí)的值是一致的,在Link中主要用于生成當(dāng)前任務(wù)號(hào)(優(yōu)先級(jí)越高,該任務(wù)必須越先執(zhí)行);
注:優(yōu)先級(jí)僅限于當(dāng)前列表中未執(zhí)行任務(wù)的比較;
在PLC中實(shí)例化一個(gè)數(shù)據(jù)塊,名稱叫做DB_Link_List。該數(shù)據(jù)區(qū)域包括兩部分:數(shù)據(jù)塊頭文件與數(shù)據(jù)主體。
數(shù)據(jù)頭文件區(qū)域定義了數(shù)據(jù)區(qū)域的一些屬性,比如頭文件長(zhǎng)度,數(shù)據(jù)類型的長(zhǎng)度,當(dāng)前最大記錄數(shù)目等信息;
數(shù)據(jù)主體就是存放實(shí)際數(shù)據(jù)的區(qū)域,主要由100組UDT_TSD類型組成的數(shù)據(jù)列表,意味著數(shù)據(jù)區(qū)域最多可以同時(shí)存放100個(gè)堆垛機(jī)任務(wù);
DATA_BLOCK "DB_Link_List"
STRUCT
Length_Header : Int; // DB塊頭文件的長(zhǎng)度,工程師設(shè)定
Length_Record : Int; // 每一臺(tái)記錄的長(zhǎng)度,系統(tǒng)自動(dòng)計(jì)算
Last_Record : Int; // 當(dāng)前存儲(chǔ)的記錄的位置,系統(tǒng)自動(dòng)計(jì)算
Entries_Present : Int; // 能存儲(chǔ)的最多數(shù)據(jù)的記錄
Current_Record : Int; // 當(dāng)前執(zhí)行的記錄編號(hào)
Record_DB_Nr : Int; // Link下面鏈接的其他數(shù)據(jù)DB塊編號(hào)
s_Done : Bool; // 用于指示該數(shù)據(jù)塊正在被調(diào)用
DB_nr_Record :"UDT_Record_Nr";
Link : Array[1..100] of "UDT_Link";
END_STRUCT;
END_DATA_BLOCK
數(shù)據(jù)關(guān)系的基本原則:一致性,同步性;
圖4 數(shù)據(jù)邏輯關(guān)系圖
優(yōu)先性:數(shù)據(jù)關(guān)系中Link是核心要素,當(dāng)收到新的Link生成請(qǐng)求后,只有在分配新的Link才能基于此Link生成其他Record(TIF/TST/TSD),即Link在數(shù)據(jù)管理中是最高級(jí)別的;
注:Link分配過(guò)程必須檢測(cè)分配的編號(hào)是否被占用,若占用則必須重新分配;
同步性:當(dāng)系統(tǒng)請(qǐng)求刪除Link時(shí)候,必須先刪除TIF/TST/TSD成功后才能將Record鏈接的Link的數(shù)據(jù)刪除;
一致性:TIF/TST/TSD數(shù)據(jù)中的Link必須一致且三者的編號(hào)必須與Link中的相關(guān)Record號(hào)碼一致;
詳細(xì)的邏輯流程詳見(jiàn)下圖所示:
圖5 數(shù)據(jù)管理(生成/刪除)邏輯圖
基于模塊化,標(biāo)準(zhǔn)化思維,PLC程序主要分為三個(gè)模塊:數(shù)據(jù)管理、設(shè)備控制以及通信(WMS/WCS)程序。
位置編碼是一種位置編碼與位置實(shí)際位置值之間轉(zhuǎn)換的算法,該算法是為控制系統(tǒng)中的三個(gè)模塊提供算法支持的。
圖6 堆垛機(jī)控制系統(tǒng)結(jié)構(gòu)圖
4.1 通信程序(WMS/WCS)
堆垛機(jī)的控制都是基于WMS/WCS的任務(wù)信息,所以PLC首要任務(wù)是和WMS/WCS建立通信鏈接并接收WMS/WCS的任務(wù)指令,這就是PLC控制系統(tǒng)中的通信模塊程序的任務(wù)。
此模塊程序?qū)MS/WCS的任務(wù)解析為通俗易懂的數(shù)據(jù),利用位置編碼算法將任務(wù)中的位置編碼轉(zhuǎn)換為用于控制算法的實(shí)際距離值,最終將這些數(shù)據(jù)分別存放在數(shù)據(jù)管理模塊中的TIF以及TSD序列中。
4.2 數(shù)據(jù)管理
數(shù)據(jù)管理模塊主要有以下幾項(xiàng)任務(wù):
任務(wù)執(zhí)行前檢查并確保該任務(wù)的正確性,不正確的任務(wù)數(shù)據(jù)應(yīng)該得到清除或其他方式給予恰當(dāng)處理。
監(jiān)視當(dāng)前任務(wù)的執(zhí)行狀態(tài),基于任務(wù)的狀態(tài)向WMS/WCS系統(tǒng)發(fā)送恰當(dāng)?shù)臓顟B(tài)反饋,比如任務(wù)完成信息,任務(wù)中斷信息或者設(shè)備故障等狀態(tài)信息。
當(dāng)前任務(wù)執(zhí)行完成后基于任務(wù)優(yōu)先級(jí)搜索任務(wù)序列中的有效任務(wù)并將其激活為當(dāng)前任務(wù)。
設(shè)備控制
堆垛機(jī)的設(shè)備控制主要為三個(gè)方向的位置定位控制,數(shù)據(jù)管理模塊會(huì)根據(jù)任務(wù)執(zhí)行狀態(tài)實(shí)時(shí)更新位置信息并反饋到驅(qū)動(dòng)控制器用于指導(dǎo)設(shè)備的位置及精度的控制。
設(shè)備運(yùn)行過(guò)程中信息,包括設(shè)備的狀態(tài),故障、某些邏輯的算法故障、當(dāng)前任務(wù)的執(zhí)行情況(完成、中斷或者暫停等)會(huì)實(shí)時(shí)寫入數(shù)據(jù)管理模塊,控制系統(tǒng)通過(guò)數(shù)據(jù)管理模塊將有效的信息(任務(wù)狀態(tài),設(shè)備狀態(tài)等)反饋到WMS/WCS用于整個(gè)存儲(chǔ)系統(tǒng)的數(shù)據(jù)分析,同時(shí)控制系統(tǒng)也會(huì)通過(guò)恰當(dāng)?shù)姆绞剑ū热鏗MI,SCADA)實(shí)現(xiàn)與操作者的人機(jī)信息交互。
基于數(shù)據(jù)管理的控制技術(shù)中管理的數(shù)據(jù)類型是倉(cāng)儲(chǔ)物流控制系統(tǒng)的全部的數(shù)據(jù),能實(shí)現(xiàn)堆垛機(jī)的全過(guò)程的信息化管理。該數(shù)據(jù)管理模式關(guān)注了每一個(gè)任務(wù)的全過(guò)程數(shù)據(jù),對(duì)于信息化管理要求高的企業(yè)也能滿足其要求。對(duì)于客戶的任務(wù)信息化的要求,只要在設(shè)計(jì)階段定義好數(shù)據(jù)的發(fā)送點(diǎn)以及數(shù)據(jù)的內(nèi)容,PLC能實(shí)時(shí)的將任務(wù)過(guò)程中的全部信息(任務(wù)信息、設(shè)備信息)從數(shù)據(jù)管理模塊收集起來(lái)并發(fā)送到指定設(shè)備。
同時(shí),應(yīng)用該技術(shù)可以讓W(xué)MS/WCS系統(tǒng)專注于數(shù)據(jù)的管理,對(duì)于設(shè)備控制層面的過(guò)程管理只需要和PLC做好相應(yīng)的信息接口,這樣WMS/WCS系統(tǒng)能更專業(yè),快速地處理數(shù)據(jù)并實(shí)現(xiàn)專業(yè)分工。
閃電倉(cāng)到底靠不靠譜?從倉(cāng)儲(chǔ)操作看它的真實(shí)挑戰(zhàn)
1088 閱讀京東物流遼寧省京東幫服資源招商
1001 閱讀行業(yè)首創(chuàng)!52名卡友數(shù)字人集體亮相
835 閱讀美的集團(tuán):擬分拆安得智聯(lián)至香港聯(lián)交所主板上市
814 閱讀兩大物流國(guó)企成立合資公司,意欲何為?
760 閱讀AI賦能車輪上的聲音 路歌第十一屆“5·2卡友節(jié)”圓滿舉辦
658 閱讀年?duì)I收2萬(wàn)億、凈利潤(rùn)下滑至90億,大宗供應(yīng)鏈五巨頭業(yè)績(jī)出爐!
624 閱讀破局與重生:傳統(tǒng)國(guó)際貨代如何通過(guò)數(shù)字化轉(zhuǎn)型實(shí)現(xiàn)戰(zhàn)略突圍
586 閱讀深圳首發(fā)!順豐同城與肯德基推出無(wú)人車智能配送服務(wù)
573 閱讀運(yùn)滿滿江浙滬上線“即時(shí)單”業(yè)務(wù),打造極速貨運(yùn)新體驗(yàn)
524 閱讀