王建偉 何洪巖
摘? 要:為了縮短汽車的投產周期,汽車自動化焊裝生產線多采用仿真驗證然后輸出離線程序的方式完成工業機器人的編程工作。而由于軟件、人為等方面的因素,輸出的機器人程序可能存在各種錯誤,削弱了離線編程的優勢。文章介紹了一種基于flex和bison編寫的Kuka-Volvo機器人焊接程序的解析器,對輸出的離線程序進行檢查。實驗證明,該解析器可以有效檢測出程序中的錯誤,從而及早修正程序中的錯誤,保證離線程序的質量,使汽車能夠盡快投產。
關鍵詞:機器人? 解析器? 焊接? 程序檢查
隨著科技的不斷進步,汽車行業的競爭也日趨激烈。白車身制造是汽車制造中不可或缺的一環,而白車身焊接的柔性化不及涂裝和總裝,因此,白車身焊接線投產周期的縮短,有利于將汽車產品盡快推向市場,提高市場競爭力,從而提升企業的經濟效益。
在白車身焊裝自動生產線上,均使用工業機器人完成焊接任務,以提高效率,保證焊接質量,并降低工人勞動強度。機器人的焊接工作是由機器人程序驅動的,為了進一步縮短投產周期,并降低現場調試風險,機器人程序多采用仿真軟件驗證的離線編程方式編制。由于軟件不夠完善以及工作人員的疏漏,難免會出現輸出的離線程序存在各種各樣的問題,無法供生產線上的機器人直接使用,而在現場修改程序是一件費時費力的工作,削弱了離線編程所帶來的優勢。針對該情況,需要有一種手段來檢測出程序中存在的語法錯誤和邏輯錯誤,方便在程序發放給生產線上的機器人前對錯誤進行修正。
使用解析器可以有效地檢測程序中的語法錯誤,而應用解析器生成的語法樹則可以進行邏輯錯誤的檢查。機器人程序解析由兩個部分構成:詞法解析和語法解析。詞法解析是對程序文件中的內容進行分詞,識別有意義的最小元素;語法解析則是應用詞法解析的結果,組合成有意義的語句,并將語句組合成語法樹。flex和bison是常用的兩種構建解析器的工具,文獻[1]中講解了flex和bison的結合使用方式。
1? Kuka-Volvo機器人焊接程序
Kuka-Volvo是在Kuka機器人的基礎指令上開發出的適用于Volvo體系的機器人工藝包集合,文獻[2-5]中對擴展部分的語法做了詳細的說明。一個完整的Kuka-Volvo機器人焊接程序模塊有兩個文件構成:擴展名為”.dat”的數據文件和擴展名為”.src”的程序文件。
1.1 數據文件
數據文件存放變量的定義,包括空間位置、負載信息、信號地址等。數據的聲明均以”DECL”開始,之后是變量的類型和變量名稱,之后是變量的初始值。部分示例如下:
DECL LockSignType AllocateZone4={Number 27,Info[] "R1-1,R1-3 Weld and R4-2 Weld"}
1.2 程序文件
程序文件中定義機器人需要執行的指令,包括運動、設備交互、時間同步等。程序文件中會定義若干程序塊,其中一個為主程序塊,主程序塊調用文件中的其他塊,而主程序則會被其他模塊調用。
2? 解析器構造
flex是一種詞法分析生成器,可以根據定義好的詞法匹配規則,生成相應的詞法分析程序。flex的詞法規則定義由3個部分構成,使用'%%'作為分隔標識。第一部分由聲明及選項組成。第二部分則是詞法規則的定義部分。詞法匹配規則由正則表達式書寫,并在表達式后面對匹配到的元素進行相應的處理。第三部分是附加的C語言代碼,這些代碼會直接復制到生成的詞法分析程序中。
分詞階段需要根據不同的語法定義相應的詞法規則,此處主要依據Kuka-Volvo的規范編寫詞法規則,區分關鍵詞、注釋、數值等。由于篇幅有限,此處只摘錄部分詞法規則。
"DEFDAT"? {return DEFDAT;}
"ENDDAT"? {return ENDDAT;}
"DECL"? {return DECL;}
它是一個語法解析器生成器,經常與flex結合使用。同flex一樣,bison的文件也由3個部分構成:包含聲明和選項的第一部分,語法規則定義的第二部分,以及附加C語言代碼的第三部分,各部分之間也以'%%'分隔。
一個程序文件和對應的數據文件被解析為一個模塊,數據文件被解析為模塊中的數據塊,程序文件被解析為模塊中的指令塊,而文件的基礎名稱(不含擴展名)作為整個模塊的名稱。
數據塊存放變量列表,變量列表中的每個變量由名稱、類型和值構成;指令塊則存放機器人的指令段列表,指令段由指令序列構成,而指令又包含名稱和參數,參數可以是在數據塊中定義的變量。
bison的語法規則根據模塊的結構編寫,從上至下,并采用遞歸的方式:
modular: blocklist{moduleAppendBlock(gCurrentModule,$1);}
blocklist:/*nothing*/{$$=NULL;}
|block{$$=$1;}
|blocklist block{$$=blockListAppend($1,$2);}
block: statementlist{gCurrentBlock=blockCreateFromStatements($1);
$$=gCurrentBlock; }
|datblock{gCurrentBlock=blockCreateFromDatBlock($1);
$$=gCurrentBlock;}
|srcProgram{gCurrentBlock=blockCreateFromProgram($1);
$$=gCurrentBlock;}
3? 錯誤檢查
錯誤檢查程序首先初始化內置變量表和函數表,然后使用解析器解析數據文件,生成變量表,然后再解析指令文件,分析機器人操作。在解析指令文件的時候可以完成一部分程序完整性檢查,如引用未定義的變量等,最后遍歷模塊完整的語法樹,查找一些高級的錯誤,如干涉區定義不成對、信號定義但沒有使用等。
在所檢查的程序中發現了變量未定義的錯誤和廢棄的函數使用警告,達到了預期的目標。對實驗的8臺機器人的離線程序進行檢測。
4? 結語
通過解析器的構建和使用,可以檢測出機器人離線程序的語法格式、數據定義和數據使用等錯誤,有利于機器人程序錯誤的早期修正,從而保證輸出的機器人離線程序的質量。語法樹的構建,也可以作為統計分析的一個基礎,對焊槍的使用、焊點的焊接及機器人干涉區進行統計,并進行優化,提高離線程序的質量,因此,統計優化是下一個研究方向。
參考文獻
[1] John R.Levine.Flex & Bison[M].Sebastopol:Oreilly,2009.
[2] KUKA Roboter GmbH.VCC Basic[Z].KUKA Roboter GmbH,2013.
[3] KUKA Roboter GmbH.VCC Handling[Z].KUKA Roboter GmbH,2013.
[4] KUKA Roboter GmbH.VCC Spot Weld[Z].KUKA Roboter GmbH,2013.
[5] KUKA Roboter GmbH.VCC ToolChange[Z].KUKA Roboter GmbH,2013.
[6] 左培良,鄧先智,王建平.工業機器人在自動化控制中的應用研究[J].中國設備工程,2019(9):212-214.