淺談MES的通用設計之二:工藝參數的下載
MES是計劃和執行層之間的橋樑,除了將工單下發到車間外,還有一個重要功能是將工藝參數下載到設備,從而起到指導現場作業的作用。
本文試以實例說明常見的兩種設計思路,以及一種更為通用的設計方法。
業務場景及設計實例1
某發動機工廠支持混線生產,有兩種發動機,排量分別為2L、3L。當發動機到達加油機工位時,PLC需要判斷發動機的排量,從而進行對應的加油作業,如2L發動機加20L油,3L發動機加30L油。
實現方法如下:
為此工位專門寫一個程序,邏輯步驟為:
1、發動機到達時,PLC讀取RFID存儲的發動機序列號。
2、PLC將發動機序列號上傳到MES伺服器,執行查詢請求。
3、MES根據發動機序列號查詢得到工單號。
4、MES根據工單號查詢得到製造BOM。
5、MES根據油缸料號的命名規則,查詢得到發動機對應的油缸類型。
6、MES將油缸類型數據下載到PLC。
7、PLC根據油缸類型決定加油量,進行加油作業。
業務場景及設計實例2
某整車廠焊裝車間支持混線生產,同一款車有兩種車門配置,分別為4門、5門。當車身到達某焊裝工位時,PLC需要判斷車門配置,從而決定焊接機器人的取料路徑。
實現方法如下:
擴展工單的屬性表,為每個工單建立一個長長的配置單,包括車型、門數、天窗、顏色、內飾等所有工藝需要的配置參數。邏輯步驟為:
1、車身到達時,PLC讀取RFID存儲的車輛識別碼。
2、PLC將車輛識別碼上傳到MES伺服器,執行查詢請求。
3、MES根據車輛識別碼查詢得到工單號。
4、MES根據工單號關聯查詢配置單,得到所有配置參數。
5、MES將所有配置參數下載到PLC。
6、PLC讀取指定的數據塊位置,得到門數參數。
7、PLC根據門數參數決定取料路徑。
方法1的缺點是幾乎每個工位都要做客戶化開發。
方法2的缺點是配置單的準備相當繁瑣,並且下載到PLC的數據量相當大。
下面介紹一種更為通用的、基於工藝配方的腳本化設計方法。
1、首先提供一個界面,允許用戶定義工藝配方。
決定工藝配方唯一性的條件有:產品料號、工位號、步驟號、工單執行時間等。
每個工藝配方允許用戶定義解釋性欄位,如名稱、說明、圖片等。
每個工藝配方的輸出值為不定長的字元串。
為每個工藝配方定義字元轉換條件,如長度、空值處理等。
每個工藝配方對應的邏輯是一個資料庫函數。
也就是說,每次查詢一次工藝配方,相當於運行一次資料庫函數,根據輸入值及函數邏輯(通常是一次查詢),得到輸出值也就是工藝配方的值。
2、然後編寫一段代碼,實現:
1) 運行工藝配方,得到每個步驟對應的初始工藝參數。
2) 根據字元轉換條件,得到更為規範的步驟工藝參數。
3) 將工位所有步驟號對應的步驟工藝參數,根據步驟順序進行拼合,得到工位完整的工藝參數。
3、然後將完整工藝參數下載到PLC。
工藝配方的示例:
表中,欄位itemtype表示工藝配方的類型,其中類型0表示常量,工藝參數值為欄位itemvalue的值;類型1表示變數,工藝參數值為欄位itemfunction的值對應的資料庫函數的執行結果。
欄位itemlength表示步驟工藝參數的長度。
欄位fillchar表示查詢返回空值時的填充字元。
Oracle中利用動態游標技術拼合步驟工藝參數的方法示例,下面為部分代碼:
DECLARE
tmp VARCHAR2(2000);
tmp2 VARCHAR2(2000);
tmpfun VARCHAR2(2000);
allstr VARCHAR2(2000);
type curtype is ref cursor;
mycur2 curtype;
CURSOR mycur IS
SELECT
t.itemno,
t.itemname,
t.itemtype,
t.itemvalue,
t.itemfunction,
t.itemlength,
t.fillchar
FROM t -- 此處t應為工藝配方表
WHERE t.station = I_STATION -- 此處可添加更多的篩選條件
ORDER BY t.itemno;
BEGIN
-- 1. get all item for station
tmp := ;
tmpfun := ;
allstr := ;
FOR rec IN mycur
LOOP
IF rec.itemtype = 0
THEN tmp2 := rec.itemvalue; --> get value
ELSE --> get function
tmpfun := rec.ITEMFUNCTION;
tmpfun := tmpfun || ( || TO_CHAR(I_SN) || );
tmpfun := SELECT || tmpfun || myvalue FROM dual;
OPEN mycur2 FOR tmpfun; --> get item function
FETCH mycur2 INTO tmp2;
close mycur2;
END IF;
tmp := LPAD(tmp2, rec.itemlength, rec.fillchar);
allstr := allstr || tmp;
END LOOP;
RETURN allstr;
推薦閱讀:
※工業工程轉行做MES難度大嗎,接觸過幾個過程式控制制方面的MES項目。自學編程需要多久,還有無其他要注意?
※製造執行系統(MES)的核心功能是什麼?
※MES在汽車製造中的應用之工藝篇(2) -- 商用車製造工藝
※MES在汽車製造中的應用之架構篇(5) -- Kepware OPC產品介紹
TAG:MES |