關(guān)于變量命名對(duì)于編程者都有自己的習(xí)慣,而別人卻不一定懂得或理解,所以對(duì)于一個(gè)公司必須有統(tǒng)一的規(guī)范,否則調(diào)試編程人員需要去適應(yīng)其他編程調(diào)試人員。基于之前在GB公司的工作經(jīng)驗(yàn),他們?cè)诠緲?biāo)準(zhǔn)化方面確實(shí)做得成熟,正是那段經(jīng)歷讓我收獲頗多。后面我也會(huì)分享Excel及Excel VBA或者Python在標(biāo)準(zhǔn)化上面的示例。(本文只是個(gè)人習(xí)慣,不代表其他人)
1.1 變量命名規(guī)則
KRL是KUKA的編程語(yǔ)言,在對(duì)機(jī)器人進(jìn)行編程時(shí),變量是在機(jī)器人程序運(yùn)行中出現(xiàn)的各種計(jì)算值的存儲(chǔ)器。每個(gè)變量都屬于一個(gè)專(zhuān)門(mén)的數(shù)據(jù)類(lèi)型,在應(yīng)用前必須聲明數(shù)據(jù)類(lèi)型;變量按照存儲(chǔ)位置可劃分為局部變量和全局變量。一個(gè)全局變量,適用于所有程序。一個(gè)局部變量建立于某程序模塊中,因此僅適用于此程序模塊。變量定義規(guī)則如下:①變量名稱(chēng)長(zhǎng)度最多允許24個(gè)字符。②變量名稱(chēng)允許含有字母 (A ~ Z)、數(shù)字 (0 ~ 9) 以及特殊字符“_” 和“$”。③變量名稱(chēng)不允許以數(shù)字開(kāi)頭。④變量名稱(chēng)不允許使用系統(tǒng)關(guān)鍵詞。⑤變量名稱(chēng)不區(qū)分大小寫(xiě)(但還是建議使用駝峰規(guī)則來(lái)定義變量)。⑥變量命名最好沒(méi)有下劃線,推薦使用駝峰命名規(guī)則。當(dāng)變量沒(méi)有下劃線時(shí),可以在KCP快速訪問(wèn)變量,而且沒(méi)必要變量名中是否有下劃線。⑦變量應(yīng)根據(jù)其數(shù)據(jù)類(lèi)型添加前綴,并且其名稱(chēng)應(yīng)以簡(jiǎn)潔的方式簡(jiǎn)短地說(shuō)明其功能
1.1.1 變量名稱(chēng)
1.輸入輸出信號(hào)變量:①單個(gè)輸入信號(hào) (1 位)-以前綴i開(kāi)始表示單個(gè)輸入信號(hào): SIGNAL iVacuumOk $IN[1]
②多個(gè)輸入信號(hào)(》 1 位)-以前綴gi開(kāi)始表示輸入信號(hào)組: SIGNAL giSt12PlateType $IN[1281] TO $IN[1296]
③單個(gè)輸出信號(hào) (1 位)-以前綴o開(kāi)始表示單個(gè)輸入信號(hào): SIGNAL oErrorTarget $OUT[1265]
④多個(gè)輸出信號(hào)(》 1 位)-以前綴go開(kāi)始表示輸出信號(hào)組: SIGNAL goStartValueEnc1 $OUT[705] TO $OUT[721]
⑤模擬輸入信號(hào)-以前綴ai開(kāi)始表示模擬輸入信號(hào): SIGNAL aiWeldVoltage $ANIN[1]
⑥模擬輸出信號(hào)-以前綴ao開(kāi)始表示模擬輸出信號(hào): SIGNAL aoActPower $ANOUT[1]
2.布爾型變量-以前綴b開(kāi)始表示布爾類(lèi)型: DECL BOOL bGripperEmpty= TRUE
3.有符號(hào)整形變量-以前綴z開(kāi)始表示布爾類(lèi)型: DECL INT zTarget = 2
4.單精度浮點(diǎn)類(lèi)型變量-以前綴r開(kāi)始表示布爾類(lèi)型: DECL REAL rCenterOffset= 0.0
5.FRAME型變量-以前綴f開(kāi)始表示布爾類(lèi)型: DECL FRAME fStackCorrection[2]
6.枚舉型變量-以前綴e開(kāi)始表示布爾類(lèi)型: DECL ENUM ePostion HOME,STACK12,STACK34,CULLET,DROPOFF_CONV,RAZING
DECL ePostion POSITION = #HOME
7.結(jié)構(gòu)體類(lèi)型變量-以前綴s定義結(jié)構(gòu)體類(lèi)型但變量定義前無(wú)任何前綴: DECL STRUC sRackData INT nActType,… DECL sRackData Stack[2] Stack[1]= {nActType 1,…}
8.POS / AXIS/E6POS/E6AXIS位置類(lèi)型變量-以前綴x定義變量: ①計(jì)算獲得的變量-以前綴mx定義變量: DECL POS mxAfterTouched[2]
②通過(guò)示教獲得的位置變量-以前綴x定義變量: DECL E6POS xStack12A = {X … }
9.字符及字符串類(lèi)型變量-以前綴s定義變量: DECL CHAR sCharacter= “A”
1.1.2 基本準(zhǔn)測(cè)1.對(duì)于所有變量類(lèi)型,常量前面都帶有c,然后緊接著變量前綴(見(jiàn)1.1.1): DECL INT czCompMin = 30
2.對(duì)于所有變量類(lèi)型,局部變量均以l (local)開(kāi)頭: DECL INT lzCompMin = 30
3.對(duì)于所有變量類(lèi)型,運(yùn)行過(guò)程變量前面都帶有一個(gè)n: DECL INT nzActStack
4.對(duì)于通過(guò)外部信號(hào)插入程序的所有變量類(lèi)型,若為輸入信號(hào),則第二個(gè)字符為i;若為輸出信號(hào),則第二個(gè)字符為o: DECL BOOL biProgramEnd= FALSE
DECL INT zoPlateType = 1
5.坐標(biāo)點(diǎn)/坐標(biāo)位置命名規(guī)則必須保持標(biāo)準(zhǔn)化的點(diǎn)名稱(chēng),以使運(yùn)動(dòng)易于閱讀。
⑴起點(diǎn)/ 終點(diǎn):例如xHomeA,xStack12A,等。①?gòu)囊粋€(gè)工站到另一個(gè)工站的運(yùn)動(dòng)永遠(yuǎn)不會(huì)使用起點(diǎn)。②點(diǎn)的名稱(chēng)總是指定位置,而不是功能!(例如xConveyor1而不是xDropOff)。③每個(gè)路徑都有單獨(dú)的起點(diǎn)和終點(diǎn)!
⑵從一個(gè)工站到另一個(gè)工站的運(yùn)動(dòng):每個(gè)起點(diǎn)基本上都有兩條通向每個(gè)目標(biāo)點(diǎn)的路徑,只從Home位開(kāi)始的這些工站除外:① ServicePosition ②Cullet1 ③ Cullet2例如:沿著路徑A從原點(diǎn)Home到工站Stack12的運(yùn)動(dòng)路徑: Home_Stack12(#A) ①起始預(yù)備點(diǎn): xHome_Stack12A1 (最接近起點(diǎn)的點(diǎn)或距離終點(diǎn)最遠(yuǎn)的點(diǎn)) ②中間點(diǎn): xHome_Stack12A2(注釋掉,如果沒(méi)有必要) ③中間點(diǎn): xHome_Stack12A3 (注釋掉,如果沒(méi)有必要) ④終點(diǎn)預(yù)備點(diǎn): xHome_Stack12A4 (距離終點(diǎn)最近的點(diǎn)) ⑤終點(diǎn): xStack12A例如:沿著路徑A從工站Stack12到工站Stack34的運(yùn)動(dòng)路徑: Stack12_Stack34(#A) ①起始預(yù)備點(diǎn): xStack12_Stack34A1 (最接近起點(diǎn)的點(diǎn)或距離終點(diǎn)最遠(yuǎn)的點(diǎn)) ②中間點(diǎn): xStack12_Stack34A2 (注釋掉,如果沒(méi)有必要) ③中間點(diǎn): xStack12_Stack34A3 (注釋掉,如果沒(méi)有必要) ④終點(diǎn)預(yù)備點(diǎn): xStack12_Stack34A4 (距離終點(diǎn)最近的點(diǎn)) ⑤終點(diǎn): xStack34A例如:沿著路徑B從工站Stack12到工站Stack34的運(yùn)動(dòng)路徑: Stack12_Stack34(#B)
①起始預(yù)備點(diǎn): xStack12_Stack34B1 (最接近起點(diǎn)的點(diǎn)或距離終點(diǎn)最遠(yuǎn)的點(diǎn)) ②中間點(diǎn): xStack12_Stack34B2 (注釋掉,如果沒(méi)有必要) ③中間點(diǎn): xStack12_Stack34B3 (注釋掉,如果沒(méi)有必要) ④終點(diǎn)預(yù)備點(diǎn): xStack12_Stack34B4 (距離終點(diǎn)最近的點(diǎn)) ⑤終點(diǎn): xStack34B
1.1.3 變量位置/路徑:1. 必須在全局系統(tǒng)文件R1System$Config.Dat中聲明對(duì)外部設(shè)備或站的輸入和輸出2. 全局變量必須在R1ProgramDat文件夾中的相應(yīng)數(shù)據(jù)類(lèi)型文件中聲明,例如,必須在文件b_bool.dat中聲明一個(gè)布爾變量。數(shù)據(jù)文件說(shuō)明
b_bools.dat 存放所有用戶(hù)定義的全局Bool類(lèi)型變量
z_intergers.dat 存放所有用戶(hù)定義的全局Int類(lèi)型變量
r_reals.dat存放所有用戶(hù)定義的全局Real類(lèi)型變量
f_frames.dat存放所有用戶(hù)定義的全局Frame類(lèi)型變量
Structs.dat存放所有用戶(hù)定義的全局Struc類(lèi)型變量
e_enums.dat存放所有用戶(hù)定義的全局Enum類(lèi)型變量
x_Points_Movements.dat存放所有直接運(yùn)動(dòng)或間接運(yùn)算的全局且固定位置點(diǎn)變量
mx_Points.dat存放所有可變的全局位置點(diǎn)類(lèi)型變量
Strings.dat存放所有用戶(hù)定義的全局CHAR類(lèi)型變量(如:報(bào)警信息)
3. 盡可能避免使用常量,而應(yīng)使用變量.4. 運(yùn)動(dòng)點(diǎn): ①外部計(jì)算或模擬的點(diǎn)將傳輸?shù)饺止病癉A文件”。點(diǎn)坐標(biāo)和相關(guān)參考空間參數(shù)(BASE,TOOL)必須在文件x_points_movements.dat中全局聲明。②計(jì)算和計(jì)算的點(diǎn)也存儲(chǔ)在單獨(dú)的全局公共“DAT文件”中。點(diǎn)坐標(biāo)和相關(guān)參考空間參數(shù)(Base,TCP)必須在以下文件中全局聲明:x_points.dat③可變點(diǎn)數(shù)據(jù)必須在mx_points.dat中聲明。
1.2 子程序及函數(shù)
⑴ fl前綴: 局部函數(shù)
⑵ ul前綴: 局部子程序⑶ ip前綴: 中斷程序⑷ o前綴: 將輸出變量寫(xiě)入控制器輸出信號(hào)的函數(shù)⑸ i前綴: 從控制器輸入信號(hào)讀取輸入變量的函數(shù)
責(zé)任編輯:pj
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28608瀏覽量
207887 -
儲(chǔ)存
+關(guān)注
關(guān)注
3文章
201瀏覽量
22399
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論