PAC9300 運動控制器與 機器視覺的綜合應用

文:深圳市雷賽控制技術有限公司 左力2020年第三期

雷賽PAC9300運動控制器外形如圖1所示,它本質為一臺專用的嵌入式工業計算機,其CPU為4核1.99GHz主頻、內存為2GB、固態硬盤為60GB,操作系統為Windows7,運動控制軟件獨占一個CPU核,另外3核運行其他軟件。

PAC9300運動控制器與機器視覺的綜合應用1.jpg

圖1 雷賽PAC9300運動控制器外觀

PAC9300運動控制器有1路EtherCAT總線接口,可連接128個節點;控制32個電機時通訊周期可達1ms。PAC9300運動控制器有1個VGA顯示器接口、4個USB接口,可用于連接顯示器、鍵盤和鼠標等設備;有2個Ethernet網絡接口,用于連接上位機、網口相機等設備;還有2路RS232接口和2路RS485接口,可與其他擴展設備連接。

PAC9300運動控制器具有多軸直線插補、空間圓弧插補、螺旋線插補、樣條曲線插補、電子齒輪、電子凸輪等運動控制功能,可采用符合IEC61131-3標準的5種編程方式編寫程序,5種編程方式分別為:梯形圖(LD)、指令表(IL)、順序功能圖表(SFC)、功能塊圖(FBD)、結構化文本(ST)。

下面通過一個實驗由三軸平臺模擬點膠機結合機器視覺,給工件定位,實現工件點膠的過程,以展示PAC9300運動控制器優異的性能。

視覺點膠機模擬實驗裝置及動作流程

1 實驗系統硬件

實驗系統的照片如圖2所示。三軸平臺上有一個雷賽L7總線型交流伺服電機、二個DM系列總線型步進電機以及一些IO器件,電路圖詳見圖3。三軸平臺上安裝了一個總線接口相機,并連接在PAC9300上,用于拍攝工件照片、通過圖像處理獲取工件位置。

PAC9300運動控制器與機器視覺的綜合應用2.jpg

圖2 雷賽PAC9300運動控制器實驗系統

PAC9300運動控制器與機器視覺的綜合應用3.jpg

圖3 EtherCAT總線三軸運動平臺電路圖

2 實驗系統的軟件結構

如圖4所示,視覺點膠機模擬實驗系統的軟件由運動控制程序和機器視覺程序2部分組成。2個相對獨立的程序通過讀寫共享內存交換信息。運動控制程序采用結構化文本語言編寫;機器視覺程序采用C#語言編寫。

PAC9300運動控制器與機器視覺的綜合應用4.jpg

圖4 視覺點膠機模擬實驗系統軟件結構

3 動作流程

(1)運動控制程序用Jog運動調整平臺位置,使相機能完整拍攝工裝位置;

(2)在界面上按PositionReset鍵,設置平臺當前位置為加工原點。

(3)圖像處理程序初始化相機;

(4)標定相機,計算像素長度系數kx,ky;

(5)運動控制程序用Jog運動調整平臺位置,使點膠針頭到達工裝位置的左上角。按Getoffset鍵,得到加工原點與加工原點的偏差dx,dy,dz;

(6)按Home鍵,點膠頭回到加工原點;

(7)放置工件后,點擊Dispense鍵,開始點膠加工;

(8)運動控制程序給圖像處理程序發送指令;

(9)圖像處理程序接收到指令后,控制相機給工裝拍照,獲取0~9號工件的位置;

(10)為了能以較短的時間完成10個工件的點膠動作,圖像處理程序優化點膠路徑,并將點膠路徑發送給運動控制程序;

(11)運動控制程序按規劃路徑點膠,完成后自動回到加工原點;

(12)轉至流程7。

視覺點膠機模擬實驗系統的軟件

1 點膠過程的主要算法

在工裝上任意擺放了10個工件,如圖5所示。圖像處理程序將優化處理后數據傳送給運動控制程序。點膠頭從起點出發,依次對#7、#0、#9、#3、#5、#2、#8、#4、#1、#6工件點膠,為最后返回原點。每個工件的點膠時間長為0.5秒。

PAC9300運動控制器與機器視覺的綜合應用5.jpg

圖5 工裝上任意擺放的10個工件及點膠軌跡

為了讓點膠過程運動平穩、快速,點膠頭在工件之間的運動軌跡如圖6所示。采用樣條曲線插補函數控制軌跡運動,可保證矢量速度連續平穩。樣條曲線共8個點;但從原點出發的樣條曲線P0~P2三個點的Z軸坐標和P3點的相同;最后回原點的樣條曲線P5~P7三個點的Z軸坐標和P4點的相同。

PAC9300運動控制器與機器視覺的綜合應用6.jpg

圖6點膠頭從一個工件移動到另一個工件的運動軌跡

在調用樣條曲線插補函數前,必須計算樣條曲線各點的坐標;還要計算點與點之間距離,得到點與點之間的運動時間。

P0~P7的坐標計算公式如下:

起點為:P0(0,0,0);

終點為:P7(x1,y1,0);

P1、P6點的高度設為h1,其坐標為:P1(0,0,h1)、P6(x1,y1,h1);

P3、P4點的高度設為h1+r,其坐標為:P3(p,q,h1+r)、P4(x1-p,y1-q,h1+r);

其中:q=kp

k=y1/x1

p2+q2=r2

p=(r2/(1+k2))0.5,如果x1小于0,則p為負P2、P5點為圓弧的中點,其坐標為:

P2(m,n,h2)、P5(x1-m,y1-n,h2);

其中:h2=h1+r*sin(PI/4)

m2+n2=L2

L=r-r*cos(PI/4)

n=k*m

m=(L2/(1+k2))0.5,如果x1小于0,則m為負如果x1=0,則:m=0

n=r-r*cos(PI/4),如果y1小于0,則n為負

p=0

q=r,如果y1小于0,則q為負計算樣條曲線各段運動時間的公式如下:

設樣條曲線插補速度為v,則:

P0~P1點的時間為t1=h1/v

P1~P2點的時間為t2=PI*r/4/v

P2~P3點的時間為t3=t2

P3~P4點的時間為t4=(P4(x1-2p)2+(y1-2q)2)0.5/v

P4~P5點的時間為t5=t2

P5~P6點的時間為t6=t2

P6~P7點的時間為t6=t1

PAC9300運動控制器與機器視覺的綜合應用7.jpg

圖7 點膠過程的位移曲線和速度曲線

PAC9300運動控制器與機器視覺的綜合應用8.jpg

圖8 局部放大圖

圖7為樣條曲線插補運動的位移與速度曲線。圖8是曲線的放大圖。由圖可看出:樣條曲線插補的位移曲線十分平滑;速度曲線也很連續。

2 運動控制程序的框圖

PAC9300運動控制器采用循環掃描方式執行結構化文本編寫的程序。這和C#由事件觸發執行程序的方式完全不同。

點膠機的運動控制主程序框圖如圖9所示。程序首先進行共享內存初始化工作。完成后,將變量initMem設為FALSE。電機可運動鍵按下后,可進行手動控制平臺運動、也可進行自動點膠。

PAC9300運動控制器與機器視覺的綜合應用9.jpg

圖9 點膠機的運動控制主程序框圖

PAC9300運動控制器與機器視覺的綜合應用10.jpg

圖10 手動控制平臺運動子程序框圖

手動控制平臺運動子程序框圖如圖10所示。

該子程序可進行X軸、Y軸和Z軸的回原點(Home)運動;可控制3個軸的點動(Jog運動),且點動的速度有高、中、低三檔可選;可控制3軸進行點位運動;還可加工原點與相機原點的偏移量。

PAC9300運動控制器與機器視覺的綜合應用11.jpg

圖11 點膠子程序框圖

點膠子程序框圖如圖11所示。其中有3個狀態:splineBusy、PVTBusy、DelayOff2(定時器2時間到)。

當splineBusy=TRUE時,進行樣條曲線各點坐標和時間的計算、樣條曲線插補函數參數的設置、啟動樣條曲線插補運動。

當PVTBusy=TRUE時,等待樣條曲線插補運動結束。若運動結束,就開啟點膠閥。

當DelayOff2=TRUE時,等待定時器時間到。若時間到,關閉點膠閥;為運動到下一個點做準備。

PAC的運動控制程序原代碼請見附錄。

3 運動控制程序的界面

PAC9300運動控制器與機器視覺的綜合應用12.jpg

圖12 PAC9300運動控制器的操作界面

雷賽PAC9300運動控制器可以在顯示器上顯示優美的操作界面,如圖12所示。

JOG分組框(GroupBox)中6個按鍵可控制運動平臺3個軸朝正、負方向點動。運動平臺上的2、4、6、8和1、7號鍵也可以控制相應的軸點動。

Movedistance分組框中3個文本框可輸入3個軸的運動距離,后面3個按鍵是點位運動的啟動按鍵。

Position分組框在3個文本框顯示的是3個軸的位置。

Select Speed下拉列表框(ComboBox)可選擇種速度:Low、Middle、High。

Inputs分組框中為9個復選框(Checkbox),用于指示運動平臺上9個按鍵的狀態。當有鍵按下時,框中顯示有一個“√”。速度表為BarDisplay控件。

Output按鍵是PushSwitchLed控件;當按鍵按下左邊的指示燈變綠,按鍵抬起指示燈變紅。

雷賽PAC運動控制器的軟件中還有很多實用的控件,在此不一一列舉。

視覺點膠機模擬實驗系統的圖像處理程序

1 相機像素點尺寸的標定

要從圖像中獲取物體的位置,首先要標定圖像的像素點的尺寸。

PAC9300運動控制器與機器視覺的綜合應用13.jpg

圖13 圖像坐標與加工坐標的關系

如圖13所示,在相機拍攝范圍內,分別放置2個用于測量距離的標記:Mark點1和Mark點2。已知2個標記的相對距離為dx和dy。

相機拍攝照片,通過圖像處理,得到Mark點1和Mark點2在照片中的位置坐標,分別為(x1,y1),(x2,y2)。該坐標的單位為像素。則像素點x和y方向的尺寸分別為:

kx=dx/(x2-x1)

ky=dy/(y1-y2),單位:mm/像素

PAC9300運動控制器與機器視覺的綜合應用14.jpg

圖14 標定結果

標定結果如圖14所示,一個像素的長和寬約為0.012mm。

2 圖像坐標與加工坐標的關系

相機是固定在運動平臺的機座上,不隨X、Y、Z軸一起運動。在工裝位置畫一個圖像坐標X’Y’,如圖13所示。圖像坐標系中Y’軸方向和我們習慣采用的Y軸方向相反。

調整相機位置和平臺位置,使圖像的左上角與圖像坐標原點重合,如圖14所示,將此時X、Y軸的位置設為加工原點。

手動調節X、Y軸,使點膠頭移動到圖像坐標原點。此時X、Y軸的移動距離即為點膠頭的加工坐標與圖像坐標的偏移量:Xoffset、Yoffset,如圖13所示。該方法比較簡單,但精度不是太高。

通過圖像處理得到工件位置坐標(x’,y’)轉換至加工坐標(x,y)的關系式如下:

x=x’+Xoffset

y=-y’+Yoffset

3 圖像處理程序框圖

圖像處理程序主程序框圖如圖15所示。完成相機初始化后,定時器控制相機每100ms拍照一次,并將圖像顯示在界面上。在開始對工件進行位置識別之前,要進行相機的標定,計算像素點的尺寸。

PAC9300運動控制器與機器視覺的綜合應用15.jpg

圖15 圖像處理程序主程序框圖

當Start按鍵按下后,打開線程1。線程1的程序框圖如圖16所示。

PAC9300運動控制器與機器視覺的綜合應用16.jpg

圖16 線程1的程序框圖

初始化共享內存后,線程1等待運動控制程序發來的指令。當接受到一個新指令,且指令代碼為22時,線程1開始進行工件位置識別。

如果識別成功,將對工件坐標數據進行路徑優化,使點膠時間最短。

PAC9300運動控制器與機器視覺的綜合應用17.jpg

圖17 圖像識別及數據優化結果

如圖17所示,接受到第22號指令,指令代碼為22,圖像識別成功。如果按0~9的順序對工件點膠,路徑長為115.1mm,經過優化計算后,點膠路徑為#7、#0、#9、#3、#5、#2、#8、#4、#1、#6,路徑長為66.4mm。圖像識別、路徑優化共耗時986ms。

運動控制程序與圖像處理程序之間的數據交換

運動控制程序與圖像處理程序之間的數據交換通過讀寫共享內存得以實現。

PAC9300運動控制器與機器視覺的綜合應用18.jpg

圖18 2個進程通過共享內存通信

共享內存是內存映射文件的一種特殊形式。如圖18所示,共享內存映射的是一塊物理內存,而非磁盤上的文件。2個進程通過虛擬地址空間及用戶級頁表可以讀、寫物理內存中的同一塊區域,從而實現進程間的通信。該方式通訊效率高。

1 圖像處理程序中有關共享內存的代碼

存放在共享內存的數據為結構類數據。因此,在使用共享內存前,要定義自己的結構體。詳細代碼如下:

//實例化3個結構體

DataExchangeCommanddataExchangeR;//存放指令

DataExchangeResult1dataExchangeW1;//存放指令執行結果

DataExchangeResult2dataExchangeW2;//存放優化后的軌跡數據

intdataSizeR=Marshal.SizeOf(typeof(DataExchangeCommand));//給結構體分配空間

intdataSizeW1=Marshal.SizeOf(typeof(DataExchangeResult1));

intdataSizeW2=Marshal.SizeOf(typeof(DataExchangeResult2));

using(varcommandRead=MemoryMappedFile.CreateOrOpen("SharedMemory_Command",dataSizeR))

using(varresultWrite1=MemoryMappedFile.CreateOrOpen("SharedMemory_Result1",dataSizeW1))

using(varresultWrite2=MemoryMappedFile.CreateOrOpen("SharedMemory_Result2",dataSizeW2))

//在系統內存中創建或打開具有指定容量的內存映射文件

{

using(varaccessorRead=commandRead.CreateViewAccessor(0,dataSizeR,MemoryMappedFileAccess.Read))

using(varaccessorWrite1=resultWrite1.CreateViewAccessor(0,dataSizeW1,MemoryMappedFileAccess.Write))

using(varaccessorWrite2=resultWrite2.CreateViewAccessor(0,dataSizeW2,MemoryMappedFileAccess.Write))

//創建View對象:指定內存映射文件的偏移量、大小和訪問限制

{

………

while(true)//循環查詢由運動控制程序發來的指令

{

accessorRead.Read(0,outdataExchangeR);         //讀共享內存

commandNo=dataExchangeR.Noi;        //將結構體的數據賦值給變量

commandValue=dataExchangeR.command;

………

dataExchangeW1.Noi=commandNo;        //給結構體的數據賦值

dataExchangeW1.picOK=pictureOK;

accessorWrite1.Write(0,refdataExchangeW1);        //寫入共享內存

………

dataExchangeW2.x0=OPx[0];        //給結構體的數據賦值

dataExchangeW2.y0=OPy[0];

dataExchangeW2.x1=OPx[1];

dataExchangeW2.y1=OPy[1];

………

accessorWrite2.Write(0,refdataExchangeW2);        //寫入共享內存

………

if(Job1Stop==1)        //結束通信

{

accessorRead.Dispose();        //關閉共享內存

accessorWrite1.Dispose();

accessorWrite2.Dispose();

commandRead.Dispose();

resultWrite1.Dispose();

resultWrite2.Dispose();

     }

   }

 }

}

………

用Memory Mapped File.Create Or Open和Create View Accessor函數初始化共享內存后,就可以反復讀寫共享內存了。在退出程序前要釋放共享內存空間。

2 運動控制程序中有關共享內存的代碼

結構化文本語言有關共享內存的函數,與C#的類似,但沒有創建View對象的函數。在創建內存映射文件時,文件名要和C#的一樣。詳細代碼如下:

//定義共享內存的變量:

hShMemRead1:RTS_IEC_HANDLE;

ResultRead1:RTS_IEC_RESULT;

deInstRead1:DataExchangeResult1;

ReadResult1:RTS_IEC_RESULT;

iRead1:__UXINT;

ulSizeR1:UDINT:=SIZEOF(DataExchangeResult1);

hShMemRead2:RTS_IEC_HANDLE;

ResultRead2:RTS_IEC_RESULT;

deInstRead2:DataExchangeResult2;

ReadResult2:RTS_IEC_RESULT;

iRead2:__UXINT;

ulSizeR2:UDINT:=SIZEOF(DataExchangeResult2);

hShMemWrite:RTS_IEC_HANDLE;

ResultWrite:RTS_IEC_RESULT;

deInstWrite:DataExchangeCommand;

WriteResult:RTS_IEC_RESULT;

iWrite:__UXINT;

ulSizeW:UDINT:=SIZEOF(DataExchangeCommand);

……

//在共享內存內寫、讀數據:

hShMemWrite:=SysSharedMemoryCreate('SharedMemory_Command',0,ADR(ulSizeW),ADR(ResultWrite));

//在系統內存中創建或打開具有指定容量的內存映射文件

deInstWrite.Noi:=1;        //給結構體賦值,指令編號

deInstWrite.command:=22;        //指令代碼

iWrite:=SysSharedMemoryWrite(hShMemWrite,0,ADR(deInstWrite),SIZEOF(deInstWrite),ADR(WriteResult));

//將結構體寫入共享內存

……

hShMemRead1:=SysSharedMemoryCreate('SharedMemory_Result1',0,ADR(ulSizeR1),ADR(ResultRead1));

hShMemRead2:=SysSharedMemoryCreate('SharedMemory_Result2',0,ADR(ulSizeR2),ADR(ResultRead2));

//在系統內存中創建或打開具有指定容量的內存映射文件

iRead1:=SysSharedMemoryRead(hShMemRead1,0,ADR(deInstRead1),SIZEOF(deInstRead1),ADR(ReadResult1));

iRead2:=SysSharedMemoryRead(hShMemRead2,0,ADR(deInstRead2),SIZEOF(deInstRead2),ADR(ReadResult2));

//讀共享內存的數據

Px[1]:=deInstRead2.x0;        //共享內存的數據賦值給變量

Px[2]:=deInstRead2.x1;

Px[3]:=deInstRead2.x2;

Px[4]:=deInstRead2.x3;

……

RTRIGcloseM(CLK:=ButtonCloseM);        //獲取CloseM按鍵按下的上升沿

IFRTRIGcloseM.Q=TRUETHEN

iWrite:=SysSharedMemoryClose(hShm:=hShMemWrite);//關閉共享內存

iRead1:=SysSharedMemoryClose(hShm:=hShMemRead1);

iRead2:=SysSharedMemoryClose(hShm:=hShMemRead2);

END_IF

……

小結

用結構化文本語言編寫的運動控制程序和用C#語言編寫的圖像處理程序在PAC9300運動控制器上同時運行,一個負責運動平臺的控制,一個負責圖像處理和數據優化;各司其職,發揮出各自的優勢;同時通過共享內存交換信息,又相互協作,使PAC運動控制器強大的性能得到充分的體現。

PAC9300運動控制器與機器視覺的綜合應用19.jpg

圖19 2個程序同時運行時占用PAC資源的情況

如圖19所示,PAC9300運動控制器在運行這2個程序時,CPU使用率在40%左右。在“CPU使用記錄”第3個圖形中(即CPU的第3個核),有一個小波峰,是圖像處理程序在進行圖像識別,持續時間不到1秒,物理內存使用率在50%左右,說明PAC9300運行這2個程序還比較輕松。

本實驗結果表明:

(1)雷賽PAC9300運動控制器不但具有優秀的運動控制功能,其人機界面也十分優美,用鼠標、鍵盤操作方便。

(2)PAC9300的CPU性能很好,完全可以同時運行圖像處理程序。

(3)使用共享內存,可以使2個相對獨立的程序進行快速的信息交換。

(4)采用本實驗的硬件結構,比工控機+運動控制卡、運動控制器+觸摸屏這兩種方案的性價比都更好。

中傳動網版權與免責聲明:

凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

如涉及作品內容、版權等問題,請在作品發表之日起一周內與本網聯系,否則視為放棄相關權利。

伺服與運動控制

關注伺服與運動控制公眾號獲取更多資訊

直驅與傳動

關注直驅與傳動公眾號獲取更多資訊

中國傳動網

關注中國傳動網公眾號獲取更多資訊

熱搜詞
  • 運動控制
  • 伺服系統
  • 機器視覺
  • 機械傳動
  • 編碼器
  • 直驅系統
  • 工業電源
  • 電力電子
  • 工業互聯
  • 高壓變頻器
  • 中低壓變頻器
  • 傳感器
  • 人機界面
  • PLC
  • 電氣聯接
  • 工業機器人
  • 低壓電器
  • 機柜
回頂部
點贊 0
取消 0
往期雜志
  • 2025年第一期

    2025年第一期

    伺服與運動控制

    2025年第一期

  • 2024年第六期

    2024年第六期

    伺服與運動控制

    2024年第六期

  • 2024年第五期

    2024年第五期

    伺服與運動控制

    2024年第五期

  • 2024年第四期

    2024年第四期

    伺服與運動控制

    2024年第四期

  • 2024年第三期

    2024年第三期

    伺服與運動控制

    2024年第三期