網(wǎng)上有很多關(guān)于pos機(jī)器如何初始化,ABB機(jī)器人編程技巧的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)器如何初始化的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)器如何初始化
本文來自于微公號(hào):工業(yè)機(jī)器人培訓(xùn)。
1、 ABB機(jī)器人Pdisp 軌跡偏移使用
1) 如果有下圖兩個(gè)產(chǎn)品,已經(jīng)完成了右邊產(chǎn)品軌跡,左邊產(chǎn)品估計(jì)一樣,如何快速生成左邊軌跡(左邊產(chǎn)品可能有平移和旋轉(zhuǎn))
2)完成右邊軌跡示教Path_30,如上圖。起點(diǎn)為Target_20。
3) 完成左邊起點(diǎn)的示教,為Target_ref_start,如下圖。
注:如果左邊產(chǎn)品軌跡有旋轉(zhuǎn),示教的Target_ref_start相對(duì)于左邊產(chǎn)品的姿態(tài)要和Target_20相對(duì)于右邊產(chǎn)品的姿態(tài)一致(此處左邊產(chǎn)品旋轉(zhuǎn)了30°,示教的角度z方向也旋轉(zhuǎn)了30°)
4) 插入指令如下
MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;//移動(dòng)到Home位置
Path_30;//運(yùn)行右邊產(chǎn)品軌跡
MoveJpHome,v1000,z100,tWeldGunWObj:=wobj0;//回到Home
MoveJTarget_ref_start,v1000,fine,tWeldGunWObj:=wobj0;//走到左邊產(chǎn)品起點(diǎn)
ConfJOff;//因?yàn)槭褂闷疲P(guān)閉軸配置監(jiān)控,否則有可能使用原配置參數(shù)導(dǎo)致位置走不到而報(bào)錯(cuò) ConfLOff; //因?yàn)槭褂闷?,關(guān)閉軸配置監(jiān)控,否則有可能使用原配置參數(shù)導(dǎo)致位置走不到而報(bào)錯(cuò)
PDispOnRot,Target_20,tWeldGun;//設(shè)定當(dāng)前位置和Target_20的偏差關(guān)系(包括平移和旋轉(zhuǎn)),因?yàn)榇藭r(shí)機(jī)器人停在Target_ref_start起點(diǎn),即設(shè)定左邊軌跡和右邊軌跡的整體偏移關(guān)系。使用ot表示平移和旋轉(zhuǎn)均計(jì)算。如果不使用ot,則只使用平移,旋轉(zhuǎn)不計(jì)算
Path_30;//運(yùn)行原有軌跡,此時(shí)軌跡參考坐標(biāo)移動(dòng)關(guān)系,機(jī)器人實(shí)際走左邊產(chǎn)品軌跡
PDispOff;//軌跡完成,關(guān)閉平移關(guān)系
MoveJ pHome,v1000,z100,tWeldGunWObj:=wobj0;
2
2、單工位多次預(yù)約程序
1)機(jī)器人有程序如下:
3)工藝過程如下:
機(jī)器人在home等待。有人按過di信號(hào),機(jī)器人開始執(zhí)行。人工可以一次性多次預(yù)約,即如果人工一次性按過3次,機(jī)器人執(zhí)行三次
4)我們通過中斷來實(shí)現(xiàn)。
5)中斷的意義為,機(jī)器人后臺(tái)在不斷掃描(類似PLC),和機(jī)器人前臺(tái)運(yùn)動(dòng)不沖突。后臺(tái)實(shí)時(shí)掃描到信號(hào)就會(huì)去執(zhí)行設(shè)定的中斷程序,中斷程序里沒有運(yùn)動(dòng)指令,前臺(tái)機(jī)器人不停,不影響運(yùn)動(dòng)
6)新建一個(gè)例行程序,取名tr_1,注意:類型選中斷(trap)
7)進(jìn)入中斷程序,插入指令如下,即當(dāng)機(jī)器人執(zhí)行中斷程序時(shí),給reg1記錄次數(shù)加1
8)進(jìn)入主程序,設(shè)置中斷及對(duì)應(yīng)的io信號(hào)
37行的意思是,任何時(shí)候di_1信號(hào)0變1,就會(huì)觸發(fā)執(zhí)行tr_1中斷程序,即置flag1為true
35-37行程序只要運(yùn)行過一遍即可,類似于設(shè)置開關(guān),不需要反復(fù)運(yùn)行
9)主要程序如下。即如果reg1=0,機(jī)器人在home等待
3
3、在robotstudio創(chuàng)建兩臺(tái)機(jī)器人的socket連接
1)什么是socket通訊?
就是TCP/IP通訊,無協(xié)議,在微軟環(huán)境下稱為socket
2)socket通訊能干什么?
可以收發(fā)制定的數(shù)據(jù),包括sting字符串,byte數(shù)組等
3)創(chuàng)建socket機(jī)器人需要什么選項(xiàng)?
機(jī)器人需要616-1 PC-INTERFACE選項(xiàng)
4)socket通訊網(wǎng)線插哪個(gè)網(wǎng)口?
Service口(IP固定:192.168.125.1)或者Wan口都可以,(可以自己設(shè)置)
5)創(chuàng)建client端的實(shí)例
通常機(jī)器人和相機(jī)通訊,機(jī)器人作為client端。
a、新建一個(gè)機(jī)器人系統(tǒng),注意建立系統(tǒng)時(shí)加入pc-interface選項(xiàng)
b、為了避免之前的連接沒有關(guān)閉,先插入socketclose指令,后面的socket1為自己新建的socketdev類型的變量
c、之后插入創(chuàng)建連接socketCreate
d、插入建立連接SocketConnect,后面需要制定server的ip和端口,如果是在電腦和另一臺(tái)虛擬控制器連接,ip設(shè)為“127.0.0.1”,端口自定義,建議不要用默認(rèn)的1025.
這一步作用為機(jī)器人會(huì)和server建立連接,如果沒有建立成功會(huì)一直等待,如果成功則往下執(zhí)行。
e、此處做測(cè)試,在建立成功后,插入TPWrite指令,可以在示教器看到socketclinent connect successful
f、接下去可以收發(fā)數(shù)據(jù),此處示例為client先發(fā)送數(shù)據(jù)給server,再接受server發(fā)送回來的數(shù)據(jù)
g、SocketSend后面可以發(fā)送string或者byte數(shù)組,具體可以選擇不同可選變量
h、發(fā)送完畢后,client接受到server發(fā)回的數(shù)據(jù)并寫屏
6)以下為server端示例
a、重新創(chuàng)建一個(gè)工作站,創(chuàng)建時(shí)不要忘記添加pcinterface選項(xiàng)
b、作為server,機(jī)器人需要?jiǎng)?chuàng)建2個(gè)socketdev變量
c、為了避免之前的連接沒有關(guān)閉,同樣建議先socketclose
d、
e、接著創(chuàng)建socketCreatetemp_socket 服務(wù)器端socketdev
f、SocketBind為綁定socket要監(jiān)控的ip和端口,如果是虛擬仿真,ip為127.0.0.1,端口自定義(和client端設(shè)置一致)
g、SocketListen為機(jī)器人server監(jiān)聽是否有client連接
h、socketAccept為接受client的連接
i、建立連接后,機(jī)器人就可以執(zhí)行死循環(huán),即一直處于收發(fā)狀態(tài)
j、 之前client程序?yàn)閏lient先發(fā)后收,故這里server先收后發(fā)
7)client和server都寫完后,可以運(yùn)行,注意先運(yùn)行server端,即server機(jī)器人處于監(jiān)聽狀態(tài),如果連上,兩臺(tái)相互通訊,效果如下
8)server機(jī)器人收到的訊息如下:
9) client機(jī)器人收到的訊息如下:
4
4、ABB機(jī)器人雙工位預(yù)約程序
1)有如下雙工位生產(chǎn)
2)工藝過程如下:
人工完成1#工位上料后按按鈕di_1(按鈕不帶保持,即人手松開信號(hào)為0))機(jī)器人焊接1#工位。
此過程中人工對(duì)2#工位上下料,完成后按di_2完成預(yù)約(即不需要等機(jī)器人完成1#工作)。
機(jī)器人完成1#工作后,由于收到過di_2預(yù)約信號(hào),機(jī)器人自動(dòng)去完成2#工位
3)我們通過中斷來實(shí)現(xiàn)。
4)中斷的意義為,機(jī)器人后臺(tái)在不斷掃描(類似PLC),和機(jī)器人前臺(tái)運(yùn)動(dòng)不沖突。后臺(tái)實(shí)時(shí)掃描到信號(hào)就會(huì)去執(zhí)行設(shè)定的中斷程序,中斷程序里沒有運(yùn)動(dòng)指令,前臺(tái)機(jī)器人不停,不影響運(yùn)動(dòng)
5)新建一個(gè)例行程序,取名tr_1,注意:類型選中斷(trap)
6)進(jìn)入中斷程序,插入指令如下,即當(dāng)機(jī)器人執(zhí)行中斷程序時(shí),給bool量置true
同理設(shè)置第二個(gè)中斷程序
7)進(jìn)入主程序,設(shè)置中斷及對(duì)應(yīng)的io信號(hào)
37行的意思是,任何時(shí)候di_1信號(hào)0變1,就會(huì)觸發(fā)執(zhí)行tr_1中斷程序,即置flag1為true
35-40行程序只要運(yùn)行過一遍即可,類似于設(shè)置開關(guān),不需要反復(fù)運(yùn)行
8)主要程序如下。即如果沒有人給di信號(hào),機(jī)器人就在home位等待。
9)
5
5、與相機(jī)通訊的Socket收發(fā)數(shù)據(jù)處理與提取
1)相機(jī)通常發(fā)送字符串給機(jī)器人,比如”1.23,4.56,7.89D”,即x為1.23,y為4.56,z的角度為7.89,用D作為結(jié)束符,數(shù)據(jù)之間用“,”隔開。
2)如果機(jī)器人收到上述字符串,如何把字符串提取出來并付給變量deltaX,deltaY,和thetaZ?
3)建立若干num變量,用以存儲(chǔ)過程數(shù)據(jù),比如StartBit1,表示x的數(shù)據(jù)從第幾位開始,Endbit1表示x的數(shù)據(jù)結(jié)束是第幾位,Lenbit1表示x數(shù)據(jù)的長(zhǎng)度,s1表示提取的x的值的字符串
4)
5)先假設(shè)x的第一位是1,給Startbit1賦值為1
6)插入函數(shù)strfind,查找第一個(gè)“,”在第幾位,得到EndBit1值
7)
8)EndBit1減去StartBit1就是x的數(shù)據(jù)長(zhǎng)度
9)同理得到y(tǒng)和theta的信息
10)通過StrPart函數(shù),提取從StartBit1開始到LenBit1結(jié)束的字符串,即x的值的字符串
11)
12) 同理得到y(tǒng)和z的字符串
13)通過StrToVal函數(shù),把s1轉(zhuǎn)為num型,付給delta_x, StrToVal函數(shù)的反饋值為bool量,即轉(zhuǎn)換成功為true不成功為false
14)同理得到delta_y和delta_theta
15) 成功后可以寫屏測(cè)試,如下圖
6
6、ABB機(jī)器人如何創(chuàng)建數(shù)組
1)什么是數(shù)組?
將相同數(shù)據(jù)類型的元素按一定順序排列的集合
2)有什么用?
比如創(chuàng)建一個(gè)robtarget類型的數(shù)組p_array,p_array里有10個(gè)點(diǎn)位,走完10個(gè)位置就可以用如下代碼,方便簡(jiǎn)潔
FOR i FROM 1 TO 10 DO
MoveL p_array{i},v500,z1,tool0;
ENDFOR
3)哪些數(shù)據(jù)類型能創(chuàng)建數(shù)組
所有數(shù)據(jù)類型都可以創(chuàng)建數(shù)組
4)數(shù)組最大幾維?
ABB機(jī)器人數(shù)組最大三維!
5)數(shù)組起始序號(hào)是0還是1?
是1
6)如何創(chuàng)建
a、程序數(shù)據(jù)
b、選中類型,比如Robtarget
c、新建,設(shè)置名稱,維數(shù)(這里舉例1維),每個(gè)維度的元素?cái)?shù)量(舉例為10)
d、創(chuàng)建完,就有了一個(gè)10個(gè)數(shù)據(jù)的p_array,
e、修改點(diǎn)位,點(diǎn)擊上圖上某一行,修改位置,即把數(shù)組里的某一個(gè)元素位置修改了。
7
7、ABB機(jī)器人創(chuàng)建自定義數(shù)據(jù)類型
1)什么是數(shù)據(jù)類型?
諸如robtarget,jointtarget等,把一系列相關(guān)元素集合在一起,類似結(jié)構(gòu)體
2)如何查看系統(tǒng)的數(shù)據(jù)類型
Robotstudio的指令功能數(shù)據(jù)類型
3)ABB機(jī)器人是否可以自定義數(shù)據(jù)類型?
可以
4)如何創(chuàng)建自定義數(shù)據(jù)類型
必須在創(chuàng)建在模塊的最前面,使用關(guān)鍵字RECORD 和ENDRECORD
5)舉例如下:
定義了一種數(shù)據(jù)類型叫student,里面包括性別(bool量),班級(jí)(num),分?jǐn)?shù)。分?jǐn)?shù)又是一個(gè)自定義數(shù)據(jù)類型,具體內(nèi)容包括語文和數(shù)學(xué)分?jǐn)?shù)。
6)可以在程序數(shù)據(jù)里查看到這個(gè)自定義的數(shù)據(jù)類型student
7)可以新建一個(gè)變量,類型為student,可以對(duì)內(nèi)容設(shè)置
8)也可以在示教器進(jìn)行賦值,類似p10.trans.x
8
8、ABB機(jī)器人數(shù)據(jù)存儲(chǔ)類型區(qū)別
CONST VAR PERS 區(qū)別
1)ABB機(jī)器人任何數(shù)據(jù)都有存儲(chǔ)類型,分為常量CONST,變量VAR和可變量PERS
2)常量CONST,即程序內(nèi)不能賦值
3)變量和可變量程序都能賦值,區(qū)別如下
變量-有初值和當(dāng)前值。在執(zhí)行打開程序,移動(dòng)指針到main,移動(dòng)指針到routine時(shí),變量的當(dāng)前值會(huì)被初始化,即值變?yōu)槌踔?/p>
可變量,只有當(dāng)前值。即任何時(shí)候做了修改,其值就修改了。在執(zhí)行打開程序,移動(dòng)指針到main,移動(dòng)指針到routine時(shí),值就是當(dāng)前值,不會(huì)發(fā)生變化
4)默認(rèn)插入的robtarget的存儲(chǔ)類型是const,即常量,此時(shí)無法賦值(如下圖,即使類型選到robtarget還是不顯示已經(jīng)建立的robtarget)
此時(shí),到程序數(shù)據(jù),找到這個(gè)數(shù)據(jù),編輯-更改申明,修改為變量
此時(shí)插入賦值語句時(shí),就能找到這個(gè)點(diǎn)位了。
9
9、創(chuàng)建帶參數(shù)例行程序
1)什么是參數(shù)例行程序?
例行程序可以輸入?yún)?shù),使用的時(shí)候看起來就像自定義指令
2)有什么用?
方便使用,用戶不用關(guān)心內(nèi)部實(shí)現(xiàn)過程
3)如何創(chuàng)建
1)新建例行程序
2)設(shè)置名稱,點(diǎn)擊參數(shù),設(shè)置輸入?yún)?shù)
3)添加參數(shù),注意右邊的數(shù)據(jù)類型即為該參數(shù)數(shù)據(jù)類型,此處舉例輸入為2個(gè)robtarget
4)點(diǎn)擊確定。
5)程序內(nèi)部根據(jù)自己需要添加內(nèi)容
6)帶參數(shù)例行程序不能直接使用,必須有人調(diào)用,且輸入?yún)?shù),如下
使用ProcCall
7)此處舉例pknpl指令的創(chuàng)建,實(shí)現(xiàn)功能為從pHome位置吸取并到Target_10位置放置
PROCRoutine2()
pknpl pHome,Target_10;
ENDPROC
PROCpknpl(robtarget pick_pos,robtarget place_pos)
MoveJoffs(pick_pos,0,0,30),v500,z1,tool0;
MoveL pick_pos,v500,fine,tool0;
Set do1;
MoveLoffs(pick_pos,0,0,30),v500,z1,tool0;
MoveJoffs(place_pos,0,0,30),v500,z1,tool0;
MoveL place_pos,v500,fine,tool0;
ReSet do1;
MoveL offs(place_pos,0,0,30),v500,z1,tool0;
ENDPROC
10
10、 ABB機(jī)器人創(chuàng)建碼垛程序
1)什么是碼垛?
有規(guī)律的移動(dòng)機(jī)器人進(jìn)行抓取及放置
2)如何簡(jiǎn)便碼垛程序
設(shè)置好工件坐標(biāo)系,工具,對(duì)第一個(gè)碼垛放置點(diǎn)進(jìn)行示教,xyz方向的間距和個(gè)數(shù)可設(shè)
3)如何創(chuàng)建
創(chuàng)建m_pallet模塊
建立兩個(gè)routine
在init 程序里,設(shè)置xyz方向個(gè)數(shù)和各方向間距
在p_main程序里,創(chuàng)建機(jī)器人移動(dòng)到pHome點(diǎn),pPick位置(抓取位置),以及第一個(gè)放置點(diǎn)pPlace_ini
通過三層for循環(huán),進(jìn)行碼垛。實(shí)例程序?yàn)橄葂方向,再y方向,再z方向
其中偏移如下:
pPlace:=offs(pPlace_ini,(i-1)*dis_x,(j-1)*dis_y,(k-1)*dis_z);
11
11、創(chuàng)建有規(guī)律的機(jī)器人旋轉(zhuǎn)Robtarget
1)如果有上圖所示6個(gè)產(chǎn)品位置要吸取,如何最快速的創(chuàng)建點(diǎn)位?(純示教?Naive,太體力活了。)
2)如下圖,我們可以發(fā)現(xiàn)1號(hào)位置和0號(hào)位置姿態(tài)一樣,1號(hào)相對(duì)于0號(hào)就是一個(gè)半徑的偏移,2-6號(hào)位置相對(duì)于0號(hào)也都是一個(gè)半徑的偏移,2-6號(hào)姿態(tài)均朝向圓心。由于圖中為6個(gè),即從2號(hào)開始,每個(gè)點(diǎn)姿態(tài)相對(duì)于1號(hào)旋轉(zhuǎn)了60°
3)是不是可以只要示教0號(hào)點(diǎn)位置,同時(shí)已知半徑(未知的話,自己量一下),就能自動(dòng)算出其他6個(gè)點(diǎn)位置而不用示教了呢?答案當(dāng)然是可以的?。?!
4)由于涉及到坐標(biāo)系偏移和旋轉(zhuǎn),所以要做好Tool和工件坐標(biāo)系
5)創(chuàng)建工具gripper_dual,假設(shè)z方向100,工具的Z方向?yàn)楣ぞ哐由旆较?/p>
6)如下圖創(chuàng)建坐標(biāo)系,圓心在中間,0號(hào)到1號(hào)方向?yàn)閄,y如圖。下圖中的工件坐標(biāo)系Z朝下(滿足右手法則)。這樣創(chuàng)建主要是為了計(jì)算方便。
7)在workwobject2坐標(biāo)系,gripper_dual工具下,示教中間產(chǎn)品位置Target_center,此時(shí)工具的Z必須垂直于產(chǎn)品平面,即工具的Z朝下。(其實(shí)只是要用這個(gè)點(diǎn)的姿態(tài)和z,這個(gè)點(diǎn)的xy都是0,因?yàn)檫@個(gè)點(diǎn)在workobject2坐標(biāo)系處于原點(diǎn),即xy都是0)
8)設(shè)置圓心到第一個(gè)產(chǎn)品的距離(即半徑radius),這里舉例21.45mm
9)我們假設(shè)第一個(gè)位置叫Target1,則在workobject2坐標(biāo)系下
Target1:=Target_center;!先讓Target1位置和姿態(tài)都等于Target_center
Target1.trans.x:=radius*cos(60*0);!重新計(jì)算位置的x
Target1.trans.y:=radius*sin(60*0);!重新計(jì)算位置的y
Target1:=RelTool(Target1,0,0,0Rz:=0*60);!得到計(jì)算后的位置x和y后,tcp繞著工具的Z旋轉(zhuǎn)60°。
10)通過上述例子,就得到了Target1位置,注意是在workobject2坐標(biāo)系下。
11)再配合test等流程,就可以比較簡(jiǎn)單的完成6個(gè)位置的計(jì)算和移動(dòng),如下
PROC main()
radius:=21.45;
count1:=1;
WHILEcount1<7 DO
rHome;
cal;
routine1;
count1:=count1+1;
ENDWHILE
ENDPROC
PROC routine1()
MoveJoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
MoveLTarget_temp,v500,z1,gripper_dualWObj:=Workobject_2;
WaitTime 1;
MoveLoffs(Target_temp,0,0,-30),v500,z1,gripper_dualWObj:=Workobject_2;
ENDPROC
PROC cal()
Target_temp:=Target_center;
TEST count1
CASE 1:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=(count1-1)*60);
CASE 2:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=60);
CASE 3:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=120);
CASE 4:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=180);
CASE 5:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=-120);
CASE 6:
Target_temp.trans.x:=radius*cos(60*(count1-1));
Target_temp.trans.y:=radius*sin(60*(count1-1));
Target_temp:=RelTool(Target_temp,0,0,0Rz:=-60);
ENDTEST
ENDPROC
PROC rHome()
MoveJpHome,v500,z1,gripper_dualWObj:=wobj0;
ENDPROC
12
12、Fine與z0的區(qū)別
1)什么是zonedata?
機(jī)器人轉(zhuǎn)彎半徑,即機(jī)器人在運(yùn)行兩句運(yùn)動(dòng)指令時(shí),若設(shè)置了轉(zhuǎn)彎半徑,機(jī)器人會(huì)平滑的過渡,轉(zhuǎn)彎半徑意義為,機(jī)器人進(jìn)入到設(shè)置點(diǎn)半徑內(nèi)的位置,機(jī)器人開始過渡
2)什么是fine?
如果要準(zhǔn)確到達(dá)一個(gè)位置,使用fine
3)z0和fine的區(qū)別?
軌跡上,z0和fine類似。但fine除了準(zhǔn)確到達(dá),還有一個(gè)阻止程序預(yù)讀的功能
圖1 21行使用z0
圖2 21行使用fine
機(jī)器人運(yùn)行的時(shí)候,示教器有2個(gè)圖標(biāo),一個(gè)是左側(cè)的箭頭,表示程序已經(jīng)讀取到哪一行,還有一個(gè)是機(jī)器人圖標(biāo),表示機(jī)器人實(shí)際在走哪一行。為了要實(shí)現(xiàn)平滑過渡等功能,機(jī)器人要預(yù)讀幾行代碼。
如果使用了圖1的z0,機(jī)器人在走第21行,程序已經(jīng)執(zhí)行到23行,即機(jī)器人還沒走到位置已經(jīng)打開do
如果使用了圖2 的fine,機(jī)器人在走第21行,程序還在21行,即有了fine,程序指針不會(huì)預(yù)讀,即機(jī)器人走完21行后,才會(huì)執(zhí)行打開do。
以上就是關(guān)于pos機(jī)器如何初始化,ABB機(jī)器人編程技巧的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)器如何初始化的知識(shí),希望能夠幫助到大家!
![](/style/images/zhouzong.jpg)