本發(fā)明涉及一種用于智能化制造、用io的標記與io命令及變量或常量三要素組成io輸入輸出語句的工業(yè)機器人語言,機器人運行時根據(jù)所述的工業(yè)機器人語言編制的程序進行運動控制,感知環(huán)境,執(zhí)行動作,從而達到使得工廠無人化網(wǎng)絡(luò)化的目的。
背景技術(shù):
在現(xiàn)有技術(shù)中,工業(yè)機器人語言用于數(shù)控機床加工及工廠自動化控制,是現(xiàn)代制造業(yè)的核心技術(shù)。為此,國際標準化組織公布了iso6983標準,該標準公布了g代碼與m代碼。g代碼可以控制機器高精度的運動,m代碼可以使機器執(zhí)行動作。iso6983標準解決了機器的運動控制及動作執(zhí)行,但邏輯控制部分等其他功能由各公司自行定義。自行定義的部分與iso6983標準合在一起就是工業(yè)機器人語言。
目前工業(yè)機器人語言主要以fanuc及西門子為標準。fanuc語言包括iso6983標準的全部g代碼與m代碼;再加上fanuc自定義的宏代碼。宏代碼由變量、變量之間的運算、內(nèi)置函數(shù)語句、變量之間的賦值、無條件轉(zhuǎn)移語句(goto語句)、條件轉(zhuǎn)移語句(if語句)、循環(huán)語句(while語句)組成。
在現(xiàn)有的技術(shù)中,fanuc將輸入接口信號io的狀態(tài)映射到系統(tǒng)變量#1000----#1035中,通過設(shè)定系統(tǒng)變量#1100-----#1135的值來設(shè)定輸出io為高電平或低電平。io口的標記在用戶機器人語言程序中沒有體現(xiàn),程序員只能通過固定的系統(tǒng)變量#1000-#1035及#1100-----#1135來操作io。西門子與fanuc一樣,只是將#換成了r,,這種操作io的方法,不直接,程序不易閱讀,難維護,難擴充,同時,變量太少,控制的點少,在復(fù)雜靈活的機器人運動控制中不是太好用。
技術(shù)實現(xiàn)要素:
針對上述現(xiàn)有技術(shù),本發(fā)明所解決的技術(shù)問題是提供一種易閱讀易維護可直接操作大量io口的工業(yè)機器人語言。
為解決上述技術(shù)問題,本發(fā)明的工業(yè)機器人語言包括:
g代碼:g00、g01、g02、g03、g04、g05、g06、g07、g08、g09、g10、g11、
g12,g13,g14,g15,g16,g17,g18,g19、g20、g21、g22、g23,g24、g25、g26、g27、g28、
g29、g30、g31、g32、g33、g34、g35、g36、g37、g38、g39、g40、g41、g42、g43、
g44、g45、g46、g47、g48、g49、g50、g51、g52、g53、g54、g55、g56、g57、
g58、g59、g60、g61、g62、g63、g64、g65、g66、g67、g68、g69、g70、g71、g72、
g73、g74、g75、g76、g77、g78、g79、g80、g81、g82、g83、g84、85、g86、
g87、g88、g89、g90、g91、g92、g93、g94、g95、g96、g97、g98、g99;
m代碼:m00、m01、m02、m03、m04、m05、m06、m07、m08、m09、m10、m11、m12、
m13、m14、m15、m16、m17、m18、m19、m20、m21、m22、m23、m24、m25、m26、
m27、m28、m29、m30、m31、m32、m33、m34、m35、m36、m37、m38、m39、m40、
m41、m42、m43、m44、m45、m46、m47、m48、m49、m50、m51、m52、m53、
m54、m55、m56、m57、m58、m59、m60、m61、m62、m63、m64、m65、m66、m67、
m68、m69、m70、m71、m72、m73、m74、m75、m76、m77、m78、m79、m80、m81、
m82、m83、m84、m85、m86、m87、m88、m89、m90、m91、m92、m93、m94、m95、
m96、m97、m98、m99;
尺寸地址:x、y、z、a、b、c、u、v、w、p、q、i、j、k、e、r、h;
非尺寸地址:n、g、f、s、t、m、l、o;
表達式語句,算術(shù)運算語句,邏輯運算語句,內(nèi)置函數(shù)語句;
無條件轉(zhuǎn)移語句(goto語句),條件轉(zhuǎn)移語句(if(條件表達式)then語句);
循環(huán)(while語句);
變量,賦值語句;
io處理;
在上述技術(shù)方案中,本發(fā)明的特征在于:用數(shù)字或字符串標記輸入輸出io,將io輸入命令、內(nèi)存變量及輸入io標記三要素放在一條語句內(nèi)組成io輸入語句;將io輸出命令、內(nèi)存變量及輸出io標記三要素放在一條語句內(nèi)組成io輸出語句;以下是將io高低電平狀態(tài)或模擬值(電壓或電流值)和變量建立直接對應(yīng)關(guān)系的語句:
io輸入語句的構(gòu)成是:
“變量名=io輸入命令輸入io的字符串或數(shù)字標記”;
“變量名=輸入io的字符串標記”;
“變量名=輸入io的字符串或數(shù)字標記”io輸入命令;
“變量名輸入io的字符串或數(shù)字標記”io輸入命令;
“變量名io輸入命令輸入io的字符串或數(shù)字標記”;
“io輸入命令變量名輸入io的字符串或數(shù)字標記”;
“io輸入命令輸入io的字符串或數(shù)字標記”變量名;
輸入io的字符串或數(shù)字標記”“io輸入命令變量名;
“變量名=獲取模擬io值的io輸入命令輸入io的標記”;
io輸出語句的構(gòu)成是:
“io輸出命令輸出io字符串或數(shù)字標記布爾型變量名”;
“輸出io的字符串或數(shù)字標記=布爾型變量名”;
“io輸出命令輸出io的字符串或數(shù)字標記io的高電平狀態(tài)”;
“輸出io的字符串或數(shù)字標記=io的高電平狀態(tài)”;
“io輸出命令輸出io的字符串或數(shù)字標記io的低電平狀態(tài)”;
“輸出io的字符串或數(shù)字標記=io的低電平狀態(tài)”;
“輸出模擬io值的io輸出命令輸出io的字符串或數(shù)字標記表達式”。
變量名按如下方式組成:
用“int”代表整數(shù)類型的字符串,用“real”代表實數(shù)類型的字符串,用“bool”代表布爾類型的字符串,用“str”代表字符串類型的字符串,整數(shù)變量名是由“int”+字符串所組成,實數(shù)變量名是由“real”+字符串所組成,布爾型變量名是由“bool”+字符串所組成,字符串變量名是由“str”+字符串所組成
具體實施方式
下面對本發(fā)明工業(yè)機器人語言的具體實施方式作出詳細的說明。
本發(fā)明的工業(yè)機器人語言第一種實施方式如下所示:
本發(fā)明的工業(yè)機器人語言包括的g代碼、m代碼、尺寸地址及非尺寸地址、變量、常量、算術(shù)運算符號、內(nèi)置函數(shù)、比較符號、優(yōu)先級符號、賦值符號、邏輯運算符號、表達式語句、賦值語句、無條件轉(zhuǎn)移語句(goto語句)、條件轉(zhuǎn)移語句、循環(huán)語句、io輸入語句、io輸出語句,詞法及語法如下:
詞法如下:
/*g代碼關(guān)鍵字*/
"g00"
"g01"
"g02"
"g03"
"g04"
"g10"
"g11"
"g17"
"g18"
"g19"
"g20"
"g21"
"g22"
"g23"
"g25"
"g26"
"g27"
"g28"
"g30"
"g31"
"g32"
"g36"
"g37"
"g40"
"g41"
"g42"
"g43"
"g44"
"g49"
"g50"
"g51"
"g50.1"
"g51.1"
"g52"
"g53"
"g54"
"g55"
"g56"
"g57"
"g58"
"g59"
"g65"
"g66"
"g67"
"g68"
"g69"
"g70"
"g71"
"g72"
"g73"
"g74"
"g75"
"g80"
"g81"
"g82"
"g83"
"g84"
"g85"
"g86"
"g87"
"g88"
"g89"
"g90"
"g91"
"g92"
"g94"
"g96"
"g97"
"g98"
"g99"
/*m代碼關(guān)鍵字*/
"m00"
"m01"
"m02"
"m03"
"m04"
"m05"
"m06"
"m07"
"m08"
"m09"
"m10"
"m11"
"m13"
"m14"
"m15"
"m17"
"m18"
"m19"
"m20"
"m30"
"m31"
"m38"
"m39"
"m50"
"m51"
"m52"
"m53"
"m58"
"m59"
"m68"
"m69"
"m74"
"m75"
"m78"
"m79"
"m80"
"m81"
"m88"
"m90"
"m98"
"m99"
/*地址尺寸關(guān)鍵字*/
"x"
"y"
"z"
"a"
"b"
"c"
"u"
"v"
"w"
"i"
"j"
"k"
"r"
"p"
"q"
"e"
"h"
/*非地址尺寸關(guān)鍵字*/
"m"
"f"
"s"
"n"
"t"
"l"
"o"
"d"
"g"
/*程序結(jié)束符關(guān)鍵字*/
"end"
/*運算操作符*/
"or"邏輯運算符號
"and"邏輯運算符號
"!"邏輯運算符號
"+"
"-"
"*"
"/"
"="
"|"
","
";"
"["
"]"
"("優(yōu)先級符號
")"優(yōu)先級符號
"{"
"}"
"'"
/*比較操作符*/
">"returncmp;
"<"returncmp;
"!="returncmp;
"=="returncmp;
">="returncmp;
"<="returncmp;
/*關(guān)鍵字*/
"goto"
"enddo"
"if"
"then"
"else"
"while"
"do"
"let"
"ifdo"
"endif"
"inpul"
"einpul"
"outpul"
"eout"
"up"
"down"
"updown"
"ret"
"save"
"get"
"true"returnhigh;
"false"returnlow;
"true"return1;
"false"return0;
/*內(nèi)置函數(shù)*/
"sin"returnfunc;
"asin"returnfunc;
"cos"returnfunc;
"acos"returnfunc;
"tan"returnfunc;
"atan"returnfunc;
"sqrt"returnfunc;
"abs"returnfunc;
"round"returnfunc;
"fix"returnfunc;
"fup"returnfunc;
"ln"returnfunc;
"log"returnfunc;
"exp"returnfunc;
"print"returnfunc;
/*變量及序號名*/
"n"[0-9]+returnxuhao及值
"o"[0-9]+returnproghao及值
"i"[0-9]+returninthao及值
[0-9]+returninteger及值常量整數(shù)
[0-9]+"."[0-9]*{exp}問號|
"."問號[0-9]+{exp}問號returnnumber及值常量實數(shù)
"bool"[a-za-z][a-za-z0-9]*returnboole及值
"str"[a-za-z][a-za-z0-9]*returnchars及值
"real"[a-za-z][a-za-z0-9]*returnreal及值
"int"[a-za-z][a-za-z0-9]*returninte及值
"bool""rom"[a-za-z][a-za-z0-9]*returnboole及值及rom
"str""rom"[a-za-z][a-za-z0-9]*returnchars及值及rom
"real""rom"[a-za-z][a-za-z0-9]*returnreal及值及rom
"int""rom"[a-za-z][a-za-z0-9]*returninte及值及rom
[a-za-z][a-za-z0-9]*returniomark及值
"'"[a-za-z][a-za-z0-9]*"'"returnstrcha及值字符串常量
"([".*"]".*")"忽略注釋
"http://".*
[\t]忽略空白
\\nprintf("c>");
"\n"{returneol;}
.printerror("errorcharacter%c\n");
<<eof>>{exit(0);}
語法如下:
santence->eol接受;
|slisteol接受;
;
slist->stmt
|sliststmt
;
stmt->g00
|g01
|g02
|g03
|g04
|g05
|g06
|g07
|g08
|g09
|g10
|g11
|g12
|g13
|g14
|g15
|g16
|g17
|g18
|g19
|g20
|g21
|g22
|g23
|g24
|g25
|g26
|g27
|g28
|g29
|g30
|g31
|g32
|g33
|g34
|g35
|g36
|g37
|g38
|g39
|g40
|g41
|g42
|g43
|g44
|g45
|g46
|g47
|g48
|g49
|g50
|g51xexpyexpzexpiexpjexpkexp
|g51xexpyexpzexppexp
|g500
|g501
|g52
|g53
|g54
|g55
|g56
|g57
|g58
|g59
|g60
|g61
|g62
|g63
|g64
|g66pnumber
|g67
|g68
|g69
|g70
|g71
|g72
|g73
|g74
|g75
|g76
|g77
|g78
|g79
|g80
|g81
|g82
|g83
|g84
|g85
|g86
|g87
|g88
|g89
|g90
|g91
|g92
|g93
|g94
|g95
|g96
|g97
|g98
|g99
|gexp
|m00
|m01
|m02
|m03
|m04
|m05
|m06
|m07
|m08
|m09
|m10
|m11
|m13
|m14
|m15
|m17
|m18
|m19
|m20
|m30
|m31
|m38
|m39
|m50
|m51
|m52
|m53
|m58
|m59
|m68
|m69
|m74
|m75
|m78
|m79
|m80
|m81
|m88
|m90
|m98pproghao
|m99
|xuhao
|sexp
|texp
|proghao
|inthao
|fexp
|xexp
|yexp
|zexp
|uexp
|vexp
|wexp
|qexp
|iexp
|jexp
|kexp
|aexp
|bexp
|cexp
|rexp
|eexp
|dexp
|hexp
|delaymsexp
|delayusexp
|delaysexp
|pnumber
|lnumber
|gotoxuhao
|if'('boolean')'thenstmt
|if'('boolean')'gotoxuhao
|if'('boolean')'ifdointeger
|endifinteger
|while'('boolean')'dointeger
|enddointeger
|boole'='boolean
|real'='exp
|inte'='exp
|boole'='inpulinteger
|real'='einpulinteger
|boole'='inpuliomark
|real'='einpuliomark
|boole'='iomark
|iomark'='boole
|outpulintegerboole
|outpulintegerhigh
|outpulintegerlow
|eoutintegerexp
|outpuliomarkboole
|outpuliomarkhigh
|outpuliomarklow
|eoutiomarkexp
|inpulintegerupinthao
|inpulintegerdowninthao
|inpulintegerupdowninthao
|end
|ret
|savereal
|saveinte
|saveboole
|savechars
|getreal
|getinte
|getchars
|getboole
|settimmsintegerexpinthao
|settimusintegerexpinthao
|settimsintegerexpinthao
|starttiminteger
|setpwmintegerexp
|startpwmintegerexp
|real'='getrtcus
|real'='getrtcms
|real'='getrtcs
|inte'='getrtcus
|inte'='getrtcms
|inte'='getrtcs
|setrtcstrcha
|setrtcchars
|chars'='strcha
|chars'='chars
|makepwmintegerexpinteger
|stoppwminteger
|chars
|real
|inte
|boole
;
exp_boolean->exp
|boolean
;
exp->exp'+'exp
|exp'-'exp
|exp'*'exp
|exp'/'exp
|'|'exp
|'('exp')'
|'-'exp%precuminus
|func'('explist')'
|number
|integer
|real
|inte
|strcha
|real'('explist')'
|inte'('explist')'
;
boolean->expcmpexp
|booleanorboolean
|booleanandboolean
|booleancmpboolean
|'!'boolean
|'('boolean')'
|boole
|boole'('explist')'
|high
|low
;
explist->exp_boolean
|exp_boolean,'explist
在本發(fā)明第一種實施方式的詞法及語法的產(chǎn)生式中,有關(guān)io處理的實施方式如下:
用inpul表示io輸入命令,用einpul表示獲取模擬io值的io輸入命令,用outpul表示io輸出命令,用eout表示輸出模擬io值的io輸出命令;在詞法里加入詞:
"inpul""einpul""outpul""eout"
用數(shù)字integer或字符或字符串iomark標記io,則io狀態(tài)輸入到變量語句的語法構(gòu)成是:
boole'='inpulinteger|iomark
語法構(gòu)成關(guān)鍵詞的位置可發(fā)生變化及inpul可沒有,并不改變本發(fā)明的宗旨,如:boole'='integer|iomarkinpul,其他語句的語法構(gòu)成也一樣。
現(xiàn)有與boole對應(yīng)的布爾變量名boolleft,io數(shù)字標記是12,則將io12的狀態(tài)輸入到布爾變量boolleft與語法結(jié)構(gòu)對應(yīng)的合法語句是:
boolleft=inpul12;
這條合法的io輸入語句,表示將所標記的io狀態(tài)(高電平或低電平)存儲到=號左邊的變量中。
io模擬值(電壓或電流)輸入到變量語句的語法構(gòu)成是:
real'='einpulinteger|iomark
現(xiàn)有與real對應(yīng)的實數(shù)變量名realleft,io數(shù)字標記是12,則將io12的狀態(tài)輸入到實數(shù)變量realleft與語法結(jié)構(gòu)對應(yīng)的合法語句是:
realleft=einpul12;
這條合法的io輸入語句,表示將所標記的io的電流或電壓的值存儲到=號左邊的變量中。
布爾型變量的值輸出到io語句的語句構(gòu)成是:
outpulinteger|iomarkboole
現(xiàn)有與boole對應(yīng)的布爾變量名boollight,io數(shù)字標記是3,則將boollight的值輸出到io3與語法結(jié)構(gòu)對應(yīng)的的合法語句是:
outpul3boollight;
這條合法的變量io狀態(tài)輸出語句,表示將內(nèi)存變量的值(高電平或低電平)輸出到所標記的io3。
常量高電平輸出到io語句的語句構(gòu)成是:
outpulinteger|iomarkhigh
現(xiàn)有io數(shù)字標記是53,則將high輸出到io53與語法結(jié)構(gòu)對應(yīng)的的合法語句是
outpul53high;
這條合法的變量io狀態(tài)輸出語句,表示將高電平輸出到所標記的io53。
常量低電平輸出到io語句的語句構(gòu)成是:
outpulinteger|iomarklow
現(xiàn)有io數(shù)字標記是53,則將low輸出到io53與語法結(jié)構(gòu)對應(yīng)的的合法語句是
outpul53low;
這條合法的變量io狀態(tài)輸出語句,表示將低電平輸出到所標記的io。
表達式的值(電流或電壓)輸出到模擬io語句的語法構(gòu)成是:
eoutinteger|iomarkexp
現(xiàn)有表達式為5.0+realmyexp,io數(shù)字標記是3,則將5.0+realmyexp的值輸出到io3與語法結(jié)構(gòu)對應(yīng)的的合法語句是:
eout35.0+realmyexp;
這條合法的變量io狀態(tài)輸出語句,表示將表達式5.0+realmyexp的模擬值輸出到所標記的io3。
下面說明本發(fā)明工業(yè)機器人語言第二種實施方式:
在本發(fā)明工業(yè)機器人語言第二種實施方式中,除io輸入輸出語句的實施方式不同外,其他部分與第一種實施方式相同。
在本發(fā)明的第二種實施方式中,對io輸入輸出語句部分的實施如下:
用getio表示io輸入命令,用egetio表示獲取模擬io值的io輸入命令,用outio表示io輸出命令,用eoutio表示輸出模擬io值的io輸出命令;在詞法里加入詞:
"getio""egetio""outio""eoutio"
用數(shù)字integer或字符或字符串iomark標記io,則io狀態(tài)輸入到變量語句的語法構(gòu)成是:
boole'='getiointeger|iomark
語法構(gòu)成關(guān)鍵詞的位置可發(fā)生變化,并不改變本發(fā)明的宗旨,如:
boole'='integer|iomarkgetio,
其他語句的語法構(gòu)成也一樣。
現(xiàn)有與boole對應(yīng)的布爾變量名boolleft,io數(shù)字標記是12,則將io12的狀態(tài)輸入到布爾變量boolleft與語法結(jié)構(gòu)對應(yīng)的合法語句是:
boolleft=getio12;
這條合法的io輸入語句,表示將所標記的io狀態(tài)(高電平或低電平)存儲到=號左邊的變量中。如果io字符串標記是in12,則將ioin12的狀態(tài)輸入到布爾變量boolleft與語法結(jié)構(gòu)對應(yīng)的合法語句是:
boolleft=getioin12;
io模擬值(電壓或電流)輸入到變量語句的語法構(gòu)成是:
real'='egetiointeger|iomark
現(xiàn)有與real對應(yīng)的實數(shù)變量名realleft,io標記是in3,則將ioin3的狀態(tài)輸入到實數(shù)變量realleft與語法結(jié)構(gòu)對應(yīng)的合法語句是:
realleft=egetioin3;
這條合法的io輸入語句,表示將所標記的io的電流或電壓的值存儲到=號左邊的變量中。
布爾型變量的值輸出到io語句的語句構(gòu)成是:
outiointeger|iomarkboole
現(xiàn)有與boole對應(yīng)的布爾變量名boollight,io數(shù)字標記是3,則將boollight的值輸出到io3與語法結(jié)構(gòu)對應(yīng)的的合法語句是:
outio3boollight;
這條合法的變量io狀態(tài)輸出語句,表示將內(nèi)存變量的值(高電平或低電平)輸出到所標記的io3。
常量高電平輸出到io語句的語句構(gòu)成是:
outiointeger|iomarkhigh
現(xiàn)有io數(shù)字標記是53,則將high輸出到io53與語法結(jié)構(gòu)對應(yīng)的的合法語句是
outio53high;
這條合法的變量io狀態(tài)輸出語句,表示將高電平輸出到所標記的io53。
常量低電平輸出到io語句的語句構(gòu)成是:
outiointeger|iomarklow
現(xiàn)有io數(shù)字標記是53,則將low輸出到io53與語法結(jié)構(gòu)對應(yīng)的的合法語句是
outio53low;
這條合法的變量io狀態(tài)輸出語句,表示將低電平輸出到所標記的io。
表達式的值(電流或電壓)輸出到模擬io語句的語法構(gòu)成是:
eoutiointeger|iomarkexp
現(xiàn)有表達式為5.0+realmyexp,io數(shù)字標記是3,則將5.0+realmyexp的值輸出到io3與語法結(jié)構(gòu)對應(yīng)的的合法語句是:
eoutio35.0+realmyexp;
這條合法的變量io狀態(tài)輸出語句,表示將表達式5.0+realmyexp的模擬值輸出到所標記的io3。
根據(jù)所述的第一種或第二種實施方式的工業(yè)機器人語言的語法,編寫編譯程序,將以所述的第一種或第二種實施方式的工業(yè)機器人語言所寫的程序進行編譯,生成代碼,將所生成的代碼下載到cpu的存儲器中,即可運行,控制工業(yè)機器人的行為動作。
通過上述手段,提供一種易閱讀易維護可直接操作大量io口的工業(yè)機器人語言,使得使用本工業(yè)機器人語言所寫的程序的可讀性和可維護性以及io口的數(shù)量得以提高,具備強大的復(fù)雜的邏輯運算與控制能力。
上面對本發(fā)明的實施方式作了詳細說明,但是本發(fā)明并不限于上述實施方式,在本領(lǐng)域普通技術(shù)人員所具備的知識范圍內(nèi),還可以在不脫離本發(fā)明宗旨的前提下作出各種變化。