0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開放式激光振鏡運(yùn)動(dòng)控制器:C++快速調(diào)用圖形庫(kù)應(yīng)用

正運(yùn)動(dòng)技術(shù) ? 來(lái)源:正運(yùn)動(dòng)技術(shù) ? 作者:正運(yùn)動(dòng)技術(shù) ? 2022-11-23 16:18 ? 次閱讀

今天,正運(yùn)動(dòng)小助手給大家分享一下開放式激光振鏡運(yùn)動(dòng)控制器C++快速調(diào)用圖形庫(kù)應(yīng)用,本文以二維碼打標(biāo)、文本打標(biāo)、矢量圖形打標(biāo)為例,解決用戶在激光打標(biāo)時(shí)需要進(jìn)行各種復(fù)雜的操作和函數(shù)庫(kù)調(diào)用時(shí)容易出現(xiàn)的錯(cuò)誤問(wèn)題。

01 ZMC408SCAN控制器介紹

ZMC408SCAN是正運(yùn)動(dòng)技術(shù)推出的高性能總線雙振鏡運(yùn)動(dòng)控制器,集成了2個(gè)百兆以太網(wǎng)口,支持EtherCAT、EtherNET、CAN、RS232、RS485、24路通用數(shù)字輸入、20路通用數(shù)字輸出、2路通用模擬量輸出、2路通用模擬量輸入、4個(gè)本地差分脈沖軸接口、1個(gè)MPG手輪編碼器接口、2個(gè)帶反饋振鏡接口、1個(gè)激光電源專用接口、一個(gè)EXIO可配置擴(kuò)展IO接口。

ZMC408SCAN控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達(dá)16軸運(yùn)動(dòng)控制,支持直線插補(bǔ)、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動(dòng)控制。單臺(tái)電腦最多支持達(dá)256個(gè)ZMC控制器同時(shí)連接。

pYYBAGN91JuAAZQVAAJn-ACHHK8452.png

(1)ZMC408SCAN內(nèi)置高精度PSO位置同步輸出功能,在加工圓角、曲線部分時(shí)即使進(jìn)行了減速調(diào)整,在高速加工的場(chǎng)合,也能控制激光輸出的間距保持恒定;

(2)支持激光振鏡控制和振鏡反饋,包含2個(gè)振鏡接口,支持2D振鏡和3D振鏡,配合不帶加減速的運(yùn)動(dòng)指令MOVESCAN,拐角處振鏡加工自動(dòng)延時(shí),完成精準(zhǔn)高效的激光控制,提高激光加工設(shè)備的產(chǎn)能;

(3)通過(guò)指令在運(yùn)動(dòng)中靈活的調(diào)節(jié)激光開光/關(guān)光延時(shí),響應(yīng)快,精確到us級(jí)別的控制,且設(shè)置過(guò)程簡(jiǎn)單,大大縮短了工程師的調(diào)參時(shí)間;(4)自帶LASER激光器控制接口,支持IPG、YLR、YLS等類型激光電源,還帶一個(gè)EXIO擴(kuò)展IO接口,通過(guò)定制轉(zhuǎn)接板,靈活控制市場(chǎng)上主流的各種激光器;(5)支持PC同時(shí)控制16個(gè)ZMC408SCAN控制器同時(shí)工作,形成一種振鏡陣列的激光加工;

(6)板載4路高速差分脈沖輸出,并帶4路高速差分編碼器反饋,支持EtherCAT總線驅(qū)動(dòng)器的控制,支持5軸XYZAC軸的插補(bǔ),支持振鏡軸與運(yùn)動(dòng)軸混合插補(bǔ)。

1.基本規(guī)格參數(shù)

項(xiàng)目 描述
型號(hào) ZMC408SCAN
基本軸數(shù) 8(4脈沖+4振鏡軸)
最多擴(kuò)展軸數(shù) 16軸(軸數(shù)與系統(tǒng)周期和振鏡周期相關(guān))
基本軸類型 EtherCAT/本地脈沖軸,振鏡軸
數(shù)字io數(shù) 24進(jìn)20出(帶過(guò)流保護(hù)),每軸端子中另外各帶2路數(shù)字輸入,2路數(shù)字輸出,可做告警,使能,到位和誤差清除等應(yīng)用。
最多擴(kuò)展io數(shù) 4096
PWM數(shù) 8(通用數(shù)字輸出 OUT0-OUT7)+2(激光接口專用,即OUT8,OUT9)
AD/DA 通用AD、DA各2路;激光專用DA1路,激光專用AD1路需定制。
最多擴(kuò)展AD/DA 1024
脈沖位數(shù) 64
編碼器位數(shù) 64
速度加速度位數(shù) 64
脈沖最高頻率 10M
每軸運(yùn)動(dòng)緩沖數(shù) 4096(緩沖數(shù)與系統(tǒng)周期相關(guān))
數(shù)組空間 256萬(wàn)個(gè)
程序空間 128M
Flash空間 256M
電源輸入 24V直流輸入,IO口負(fù)載沒有計(jì)算在內(nèi)。
通訊接口 RS232,RS485,以太網(wǎng),U盤,CAN,EtherCAT
外形尺寸 235mm*149mm*50mm

2.接口定義

pYYBAGN91LmATghlAAHyHdo3GbQ158.png

標(biāo)識(shí) 接口 個(gè)數(shù) 說(shuō)明
RS232 RS232串口(port0) 1個(gè) 采用MODBUS_RTU協(xié)議
RS485 RS485串口(port0) 1個(gè) 采用MODBUS_RTU協(xié)議
EtherCAT EtherCAT總線接口 1個(gè) EtherCAT總線接口,接EtherCAT總線驅(qū)動(dòng)器和EtherCAT總線擴(kuò)展模塊
ETHERNET 網(wǎng)口 1個(gè) 采用MODBUS_TCP協(xié)議,通過(guò)交換機(jī)擴(kuò)展網(wǎng)口個(gè)數(shù),?*port查詢網(wǎng)口通道數(shù),默認(rèn)IP地址
192.168.0.11
UDISK U盤接口 1個(gè) 插入U(xiǎn)盤設(shè)備
E+24V 主電源 1個(gè) 24V直流電源給控制器供電
CAN CAN總線接口 1個(gè) 連接CAN擴(kuò)展模塊或控制器
IN 數(shù)字IO輸入口 24個(gè) 漏型,內(nèi)部24V供電,10路高速輸入,輸入0-3具有鎖存功能
OUT 數(shù)字IO輸出口 20個(gè) 漏型,內(nèi)部24V供電,8路高速輸出,輸出0-7具有PWM功能,輸出0-7具有精準(zhǔn)輸出和PSO功能
AD 模擬量輸入口 2個(gè) 分辨率12位,0-10V
DA 模擬量輸出口 2個(gè) 分辨率12位,0-10V
Axis 脈沖軸接口 4個(gè) 每個(gè)接口包含差分脈沖輸出和差分編碼器輸入
MPG 手輪接口 1個(gè) 5-24V手輪信號(hào)輸入
SCAN 激光振鏡接口 2個(gè) 激光振鏡接口,帶反饋,采用XY2-100協(xié)議
LASER 激光器接口 1個(gè) 激光電源控制端口,支持IPG、YLR、YLS等類型激光電源
EXIO 擴(kuò)展IO接口 1個(gè) 靈活定制轉(zhuǎn)接板,可擴(kuò)展 SPI、FIBER、YAG等其它類型激光電源控制接口

3.參考架構(gòu)

pYYBAGN91MeAU6oaAAFog-m8AiQ687.png

02 打標(biāo)庫(kù)說(shuō)明

1.目的

為解決激光打標(biāo)時(shí)需要進(jìn)行各種復(fù)雜的操作和函數(shù)庫(kù)調(diào)用時(shí)容易出現(xiàn)的錯(cuò)誤問(wèn)題。用戶可以通過(guò)PC更加方便的進(jìn)行加工文件的生成,在軟件中進(jìn)行圖形加工操作。如要打標(biāo)二維碼,只需要通過(guò)條碼指令ZmotionLaser_BarCode(int nTechnology,const char *pStrText,const char *pStrType,double dX,double dY,double dSizeX,double dSizeY,double dAngle)將參數(shù)設(shè)置好,選擇好要標(biāo)刻的碼類型,將標(biāo)刻內(nèi)容輸入即可,通過(guò)程序?qū)⑵滠壽E生成的三次文件等待啟動(dòng)標(biāo)刻。如要打標(biāo)文本,則通過(guò)對(duì)應(yīng)的文本指令ZmotionLaser_Text(int nTechnology,const char *pStrText,double dX,double dY,double dAccuracy)設(shè)置好其工藝參數(shù)大小、旋轉(zhuǎn)角度等,而后輸入我們要標(biāo)刻的文本內(nèi)容,通過(guò)三次文件的形式進(jìn)行打標(biāo)。

我們打標(biāo)條碼、二維碼、不同字體樣式的文本、矢量圖形、位圖等,都有對(duì)應(yīng)的接口指令,從而實(shí)現(xiàn)快速調(diào)參開發(fā),可以節(jié)省工程師大量的編程及工藝規(guī)劃時(shí)間。

2.方式

使用ZmotionLaser.dll與ZmotionLaser.lib庫(kù)添加到需要使用的程序中,調(diào)用ZmotionLaser.h中的相關(guān)函數(shù)即可生成需要加工的三次文件,在控制器中運(yùn)行該三次文件就可以進(jìn)行加工(需要帶Zmotion庫(kù)與ZMotionCad3庫(kù))。

3.三次文件使用步驟如下

(1)先開啟文件生成;

(2)進(jìn)行各種初始化,確定軸與輸出口;

(3)設(shè)置各種加工參數(shù),調(diào)整加工效果;

(4)進(jìn)行加工函數(shù)的調(diào)用,將需要加工的數(shù)據(jù)寫入;

(5)調(diào)用生成函數(shù)生成加工三次文件;

(6)關(guān)閉文件生成。

4.優(yōu)勢(shì)

僅需要很少的指令填上對(duì)應(yīng)參數(shù)就能實(shí)現(xiàn)一個(gè)類型打標(biāo),將復(fù)雜的指令編程簡(jiǎn)單化,對(duì)于加工軌跡復(fù)雜、文件較大也能實(shí)現(xiàn)動(dòng)態(tài)追加文件發(fā)送字符串運(yùn)行。

03 指令說(shuō)明

一、條碼

1.函數(shù)名:uint32 ZmotionLaser_BarCode(int nTechnology,const char *pStrText,const char *pStrType,double dX,double dY,double dSizeX,double dSizeY,double dAngle)

2.說(shuō)明:

進(jìn)行條碼圖形的加工,通過(guò)該指令配合上幾個(gè)常用指令我們可以輕松選擇要打標(biāo)的條碼類型,以及更改我們想要的尺寸大小、打標(biāo)幅面內(nèi)的位置。

二、文本及狀態(tài)設(shè)置

1.文本

(1)函數(shù)名:

uint32 ZmotionLaser_Text(int nTechnology,const char *pStrText,double dX,double dY,double dAccuracy)

(2)說(shuō)明:

進(jìn)行文本圖形的加工,通過(guò)該指令配合上幾個(gè)常用指令我們可以簡(jiǎn)單的實(shí)現(xiàn)文本打標(biāo),只需要將打標(biāo)的內(nèi)容填到對(duì)應(yīng)參數(shù)位置,在對(duì)應(yīng)參數(shù)寫好工藝參數(shù),打標(biāo)坐標(biāo)位置等。

2.文本狀態(tài)設(shè)置

(1)函數(shù)名:uint32 ZmotionLaser_SetTextStyle(const char * pStrFont,bool bThickness,bool bItalics,bool bUnderline,bool bDelete,double dHeight,double dWidthR,double dAngle,double dTilt)

(2)說(shuō)明: 設(shè)置文本的狀態(tài),需要確定文本的字體、風(fēng)格、尺寸、角度和傾斜等狀態(tài)。該狀態(tài)設(shè)置后如果不重新設(shè)置,后續(xù)所有文本的狀態(tài)都按照該狀態(tài)進(jìn)行,配合文本指令使用進(jìn)行文本打標(biāo)。

三、矢量圖形參數(shù)設(shè)置

1.函數(shù)名:uint32 ZmotionLaser_SetVectPar(int nPower, double dFreq,double dMarkSp,double dJumpSp,double dOpenDelay,double dCloseDelay,double dJumpDelay,double dCorAngle,double dCorDelay,double dEndDelay,int nTechnology)

2.說(shuō)明: 設(shè)置某一工藝的矢量圖形加工參數(shù)。該指令用于矢量圖形加工時(shí)參數(shù)設(shè)置,針對(duì)矢量圖形的加工復(fù)雜性,通過(guò)將參數(shù)提前寫入,以在打標(biāo)時(shí)快速響應(yīng)。

04 激光振鏡控制實(shí)例

一、二維碼打標(biāo)

1.二維碼打標(biāo)參數(shù)設(shè)置界面

pYYBAGN91U-AC55bAAJvMhmwwnc340.png

2.操作流程

(1)架好設(shè)備后,用振鏡矯正工具將振鏡矯正(可參考正運(yùn)動(dòng)小助手文章“開放式激光振鏡運(yùn)動(dòng)控制器:C++振鏡矯正方法與實(shí)現(xiàn)”);(2)矯正完成后,如上圖選擇對(duì)應(yīng)的IP地址進(jìn)行連接,選擇對(duì)應(yīng)的激光器類型、設(shè)置好運(yùn)動(dòng)參數(shù)、選好填充工藝并將參數(shù)設(shè)置好、選擇要標(biāo)刻的條碼類型、設(shè)置條碼大小及打標(biāo)位置旋轉(zhuǎn)角度等,在內(nèi)容欄填入標(biāo)刻內(nèi)容;

(3)準(zhǔn)備工作完成,點(diǎn)擊標(biāo)刻進(jìn)行打標(biāo),如果中途發(fā)現(xiàn)有異常,點(diǎn)擊停止即可。

通過(guò)這個(gè)例程我們可以實(shí)現(xiàn)多種類型條碼、二維碼的打標(biāo),適用于多種激光器類型,還能隨時(shí)調(diào)整打標(biāo)的內(nèi)容、大小、位置以及在xy平面上的角度,而且通過(guò)對(duì)功率的調(diào)整我們可以在不同的物品上進(jìn)行打標(biāo),如平面產(chǎn)品包裝、充電器、手機(jī)外殼、一些金屬產(chǎn)品等。

我們用到的頭文件和定義控制器句柄,實(shí)現(xiàn)與控制器連接的第一步。通過(guò)ZAux_OpenEth(char *ipaddr, ZMC_HANDLE * phandle)指令連接控制器獲取返回句柄。斷開連接則用ZAux_Close(ZMC_HANDLE handle)。連接上就能對(duì)控制器實(shí)現(xiàn)交互控制了。

poYBAGN91WGAfBQhAABYq8yEmak284.png

程序如下:

//連接控制器
void CZmc_laserDlg::OnBnClickedBtnConnet()
{
    char   buffer[256]; 
    int32 iresult;
    if(NULL != m_Handle)
    {
        ZAux_Close(m_Handle);
        m_Handle = NULL;
    }
    GetDlgItemText(IDC_IPLIST,buffer,255);
    buffer[255] = '?';
    iresult = ZAux_OpenEth(buffer, &m_Handle);
    if(ERR_SUCCESS != iresult)
    {
        m_Handle = NULL;
        MessageBox(_T("鏈接失敗"));
        SetWindowText("未鏈接");
        return;
    }
    SetWindowText("已鏈接");
    for(int iAxis = 4;iAxis<=5;iAxis++)
    {
        iresult = ZAux_Direct_SetAtype(m_Handle,iAxis,21);
        iresult = ZAux_Direct_SetUnits(m_Handle,iAxis,500);
    }
    OnCbnSelchangeComboLaser();
}
//斷開控制器
void CZmc_laserDlg::OnBnClickedBtnClose()
{
    if(NULL != m_Handle)
    {
        KillTimer(0);            //關(guān)定時(shí)器
        ZAux_Close(m_Handle);
        m_Handle = NULL;
        SetWindowText("未鏈接");
    }
}

3.選擇激光器類型

通過(guò)指令ZAux_SetExioType(ZMC_HANDLE handle,int iType)設(shè)定轉(zhuǎn)接板類型,不同的轉(zhuǎn)接板類型對(duì)應(yīng)不同類型的激光器(需定制)。使用時(shí)我們只需要選擇對(duì)應(yīng)的激光器類型,并按照對(duì)應(yīng)接口接好線,調(diào)節(jié)好功率(激光能量)、頻率。

poYBAGN91eeAfe4pAAAV3-I2b-Q130.png

程序如下:

//修改激光器類型
void CZmc_laserDlg::OnCbnSelchangeComboLaser()
{
    if(NULL == m_Handle)
    {
        MessageBox(_T("控制器未連接"));
        return;
    }
    UpdateData(TRUE);
    if(m_nLaserType == FIBER_408)          //408 FIBER轉(zhuǎn)換?板參數(shù)設(shè)置
    {
        int iret = ZAux_SetExioType(m_Handle,0);
        m_nEnableIO = 47;
        m_nLaserIO = 8;
        m_nRedIO = 48;
        m_nAout = 3;
        m_nPwmIo = 9;
    }
    else if(m_nLaserType == LASER_408)
    {
        int iret = ZAux_SetExioType(m_Handle,-1);
        m_nEnableIO = 31;
        m_nLaserIO = 8;
        m_nRedIO = 32;
        m_nAout = 2;
        m_nPwmIo = 9;
    }
    else if(m_nLaserType == YAG_408)          //408 YAG轉(zhuǎn)換板參數(shù)設(shè)置
    {
        int iret = ZAux_SetExioType(m_Handle,1);
        m_nEnableIO = 47;
        m_nLaserIO = 8;
        m_nRedIO = 48;
        m_nAout = 3;
        m_nPwmIo = 9;
    }
    else if(m_nLaserType == FIBER_504)              //504
    {
        m_nEnableIO = 5;
        m_nLaserIO = 6;
        m_nRedIO = 28;
        m_nAout = 2;
        m_nPwmIo = 7;
    }
    UpdateData(FALSE);
}

4.設(shè)置運(yùn)動(dòng)參數(shù)和二維碼大小參數(shù)

將運(yùn)動(dòng)參數(shù)及填充工藝參數(shù)存到變量里面,在后面打標(biāo)過(guò)程中調(diào)用此參數(shù),現(xiàn)在這個(gè)值是一個(gè)初始化值,只是一個(gè)參考作用,具體參數(shù)還要通過(guò)測(cè)試調(diào)整后才能更適合相應(yīng)機(jī)臺(tái)及打標(biāo)加工,空移速度為后續(xù)打標(biāo)軌跡中空走軌跡所用速度。

開關(guān)光延時(shí)是用于提前開光和延時(shí)關(guān)光,設(shè)置適當(dāng)?shù)拈_光延時(shí)參數(shù)可以去除在運(yùn)動(dòng)起點(diǎn)出現(xiàn)的 “火柴頭”,但如果開光延時(shí)參數(shù)設(shè)置太大則會(huì)導(dǎo)致起始段缺筆的現(xiàn)象。

可以通過(guò)ZAux_Direct_MoveOpDelay設(shè)置為負(fù)值,負(fù)值標(biāo)刻激光器提前出光。一般光纖激光器的開光延時(shí)就是設(shè)置負(fù)值,而其他激光器,如端泵激光器是設(shè)置正值的。

設(shè)置適當(dāng)?shù)年P(guān)光延時(shí)參數(shù)可以去除在運(yùn)動(dòng)結(jié)束時(shí)出現(xiàn)的不閉合現(xiàn)象,但如果關(guān)光延時(shí)設(shè)置太大會(huì)導(dǎo)致結(jié)束段出現(xiàn)“火柴頭”。關(guān)光指令后調(diào)用指令ZAux_Direct_MoveDelay設(shè)置對(duì)應(yīng)的延時(shí)時(shí)間實(shí)現(xiàn)延時(shí)控制。

設(shè)置適當(dāng)?shù)墓战茄訒r(shí)參數(shù)可以去除在運(yùn)動(dòng)軌跡是直角時(shí)出現(xiàn)的圓角現(xiàn)象,但如果拐角延時(shí)設(shè)置太大會(huì)導(dǎo)致標(biāo)刻時(shí)間增加,且拐角處有重點(diǎn)現(xiàn)象,為解決這一問(wèn)題,引入拐角自動(dòng)延時(shí)模式,根據(jù)拐角角度計(jì)算延時(shí)時(shí)間。

調(diào)用指令ZAux_Direct_SetCornerMode設(shè)置拐角延時(shí)模式為2,通過(guò) ZAux_Direct_SetDecelAngle與ZAux_Direct_SetStopAngle設(shè)置拐角開始延時(shí)和結(jié)束延時(shí)角度、ZAux_Direct_SetZsmooth設(shè)置最大拐角延時(shí)時(shí)間。

pYYBAGN91iqADUuUAADJEw0mbmw467.png

實(shí)際的拐角延時(shí)則依據(jù)軌跡的實(shí)際角度自動(dòng)計(jì)算對(duì)應(yīng)拐角延時(shí)時(shí)間,在設(shè)定的角度范圍內(nèi),延時(shí)時(shí)間呈線性分布。

poYBAGN91jaACqwgAAEyXHZ9G4c585.png

程序如下:

CZmc_laserDlg::CZmc_laserDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CZmc_laserDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_nEnableIO = 47;
    m_nLaserIO = 8;
    m_nRedIO = 48;
    m_nAout = 3;
    m_nAoutVal = 128;
    m_nPwmIo = 9;
    m_nPwmFreq = 40000;
    m_dSpeed = 1000;
    m_dEmpSpeed = 1000;
    m_nStartDelay = 1000;
    m_nLastDelay = 1000;
    m_nCorDelay = 1000;
    m_nLaserType = 0;
    //填充參數(shù)初始化
    m_FillPara.m_bEnable = true;          //填充使能
    m_FillPara.m_bOutline = true;         //使能輪廓
    m_FillPara.m_bOutlineFirst = false;   //輪廓優(yōu)先
    m_FillPara.m_bEdge = false;           //是否繞邊走一次
    m_FillPara.m_bAverage = true;         //是否平均分布填充線
    m_FillPara.m_nType = 1;               //填充類型
    m_FillPara.m_nAngle = 0;              //填充線角度
    m_FillPara.m_nNum = 0;                //填充線數(shù)目
    m_FillPara.m_dLineSpace = 0.1;        //線間距
    m_FillPara.m_dMargin = 0;             //邊距
    m_FillPara.m_dSOffset = 0;            //開始偏移
    m_FillPara.m_dEOffset = 0;            //結(jié)束偏移
    m_FillPara.m_dLineIndent = 0;         //直線縮進(jìn)
    //文本參數(shù)
    m_dTextHigh = 30;                  //文本高度
    m_dTextWidth = 30;             //文本寬度
    m_dTextAngle = 0;                 //文本角度
    m_dTextXpos = 0;
    m_dTextYpos = 0;
    m_TextString = _T("");
}

5.設(shè)置填充工藝參數(shù)

由輸入內(nèi)容生成二維碼,將我們的二維碼軌跡分成小線段軌跡生成三次文件,并且將填充工藝參數(shù)等設(shè)置進(jìn)去。

通過(guò)指令ZmotionLaser_SetOutput(int nAp,int nMO,int nRed)設(shè)置好出光口號(hào),為標(biāo)刻做好準(zhǔn)備。

填充工藝:主要是指令uint32 ZmotionLaser_SetFillParam(bool bEnable,bool bOutline,bool bOutlineFirst,bool bEdge,bool bAverage,int nType,int nAngle,int nNum,double dLineSpace,double dMargin,double dSOffset,double dEOffset,double dLineIndent,int nFillNum)的一些參數(shù),將參數(shù)通過(guò)變量的形式做到界面上。

bOutline使能輪廓:填充時(shí)是否保存原來(lái)的圖形輪廓。

bOutlineFirst輪廓優(yōu)先:填充時(shí)保留輪廓的情況下,勾選輪廓優(yōu)先會(huì)使輪廓軌跡在填充線之前進(jìn)行加工,否則輪廓軌跡在填充線之后進(jìn)行加工(如想了解更多填充工藝,可聯(lián)系正運(yùn)動(dòng)技術(shù)支持工程師)。

填充類型:圖形進(jìn)行填充的方式

(1)單相填充:填充線總是從左向右填充;

(2)雙向填充:填充線先是從左向右,然后從右向左進(jìn)行填充,其余循環(huán)填充;

(3)弓形填充:類似于雙向填充,但填充線末端之間會(huì)產(chǎn)生連接線;

(4)優(yōu)化弓形填充:類似于弓形填充,但對(duì)象空白的地方仍會(huì)跳過(guò)去填充。

poYBAGN91l6Abe4BAAAeR84kuN8125.png

程序如下:

void CZmc_laserDlg::OnEnChangeEditText()
{
    UpdateData(TRUE);
    //打開打標(biāo)庫(kù)3次文件功能
    int rtn = ZmotionLaser_OpenFile3(m_Handle);      
    if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
    rtn = ZmotionLaser_SetOutputLimits(55);          //設(shè)置輸出口最大編號(hào)限制
    if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
    rtn = ZmotionLaser_SetScanAxis(4,5);          //設(shè)置振鏡軸號(hào)
    if(CheckError(rtn,"ZmotionLaser_SetScanAxis")) return;
    rtn = ZmotionLaser_SetOutput(m_nLaserIO,m_nEnableIO,m_nRedIO);  //設(shè)置開光光控制
    if(CheckError(rtn,"ZmotionLaser_SetOutput")) return;
    rtn = ZmotionLaser_AoutInit(m_nAout,255);        //設(shè)置模擬量功率設(shè)置
    if(CheckError(rtn,"ZmotionLaser_AoutInit")) return;
    rtn = ZmotionLaser_SetPowerEnable(false);           //關(guān)閉動(dòng)態(tài)修改功率
    if(CheckError(rtn,"ZmotionLaser_SetPowerEnable")) return;
    rtn = ZmotionLaser_SetLightInstruct(1);
    if(CheckError(rtn,"ZmotionLaser_SetLightInstruct")) return;
    rtn = ZmotionLaser_SetLightString("MOVE_OP(8,ON)n","MOVE_OP(8,OFF)n");
    if(CheckError(rtn,"ZmotionLaser_SetLightInstruct")) return;
    //設(shè)置加工工藝參數(shù)
    int ipower = (int)(m_nAoutVal*100/256);
    rtn = ZmotionLaser_SetVectPar(ipower, m_nPwmFreq, m_dSpeed, m_dEmpSpeed, m_nStartDelay, m_nLastDelay, m_nLastDelay, 10, m_nCorDelay,m_nLastDelay ,1);
    if(CheckError(rtn,"ZmotionLaser_SetVectPar")) return;
    //設(shè)置填充參數(shù)
    rtn = ZmotionLaser_SetFillObject(m_FillPara,1);
    if(CheckError(rtn,"ZmotionLaser_SetFillObject")) return;
    //開始填充
    rtn = ZmotionLaser_FillStart();
    if(CheckError(rtn,"ZmotionLaser_FillStart")) return;
    //加工文本字符
    CString strBarCode;
    m_ListBarCode.GetLBText(m_ListBarCode.GetCurSel(),strBarCode);
    rtn = ZmotionLaser_BarCode(1,m_TextString,strBarCode,m_dTextXpos,m_dTextYpos,m_dTextHigh,m_dTextWidth,m_dTextAngle);
    if(CheckError(rtn,"ZmotionLaser_BarCode")) return;
    //結(jié)束填充
    rtn = ZmotionLaser_FillEnd();
    if(CheckError(rtn,"ZmotionLaser_FillEnd")) return;
    char* MoveStr = NULL;
    int nRow = 0;
    MoveStr = ZmotionLaser_GetProcessString(false);
    MoveStr = ZmotionLaser_GetProEndString(nRow);
    OnShowGraph();    //顯示圖形
    //生成加工三次文件
    rtn = ZmotionLaser_CreateFile3(".//ZscanLaser.z3p",true);
    if(CheckError(rtn,"ZmotionLaser_CreateFile3")) return;
    rtn = ZmotionLaser_CloseFile3();
    if(CheckError(rtn,"ZmotionLaser_CloseFile3")) return;
}

6.進(jìn)行標(biāo)刻

通過(guò)Zpj文件方式下載三次文件到控制器ROM,開啟一個(gè)未使用或者一個(gè)確認(rèn)停止的任務(wù)號(hào)運(yùn)行該文件。

程序如下:

void CZmc_laserDlg::OnBnClickedBtnMark()
{
    if(NULL == m_Handle)
    {
        MessageBox(_T("控制器未連接"));
        return;
    }
    //運(yùn)行生成的3次文件
    int rtn = ZAux_Down3FileRom(m_Handle,".//ZscanLaser.z3p","Text123.z3p");
    if(CheckError(rtn,"ZAux_Down3FileRom")) return;
    rtn = ZAux_Direct_StopTask(m_Handle,1);
    if(CheckError(rtn,"ZAux_Direct_StopTask")) return;
    rtn = ZAux_Run3FileRom(m_Handle,"Text123.z3p",1,0);      //任務(wù)1運(yùn)行3次文件
    if(CheckError(rtn,"ZAux_Down3FileRom")) return;
}

7.完成打標(biāo)

停止加工,主要是將任務(wù)停止,然后停止所有的軸運(yùn)動(dòng),關(guān)掉激光。

程序如下:

void CZmc_laserDlg::OnBnClickedBtnStop()
{
    int rtn = ZAux_Direct_StopTask(m_Handle,1);
    if(CheckError(rtn,"ZAux_Direct_StopTask")) return;
    rtn = ZAux_Direct_Rapidstop(m_Handle,3);
    if(CheckError(rtn,"ZAux_Direct_Rapidstop")) return;
    rtn = ZAux_Direct_SetOp(m_Handle,m_nLaserIO,0);        //關(guān)光
    Sleep(10);
    rtn = ZAux_Direct_SetOp(m_Handle,m_nEnableIO,0);
    SetDlgItemTextA(IDC_BTN_LASER,"激光(關(guān))");
}

8.二維碼打標(biāo)界面

pYYBAGN91qOAcG1-AAEfeWSGlrk638.png

二、文本打標(biāo)

1.文本打標(biāo)參數(shù)設(shè)置界面

poYBAGN91rmAbtHBAAKE7iKydTE628.png

通過(guò)該例程我們可以實(shí)現(xiàn)產(chǎn)品包裝生產(chǎn)日期、金屬元件、硬質(zhì)塑料產(chǎn)品上的標(biāo)注打標(biāo),還能在金屬物品上進(jìn)行紀(jì)念語(yǔ)等的打標(biāo),多種字體樣式可選擇。

操作流程和二維碼打標(biāo)類似,連接控制器,選擇對(duì)應(yīng)激光器類型,填寫運(yùn)動(dòng)參數(shù)、填充工藝以及標(biāo)刻文本信息等(可根據(jù)實(shí)際打標(biāo)測(cè)試結(jié)果進(jìn)行調(diào)整)。程序構(gòu)建類似,唯一不同在于標(biāo)刻處程序?qū)懛ㄉ嫌胁町?,二維碼打標(biāo)是將軌跡生成與標(biāo)刻運(yùn)行分開寫,而文本打標(biāo)是將參數(shù)設(shè)置好、文本內(nèi)容確定后,點(diǎn)擊打標(biāo)才開始生成三次文件,后開啟任務(wù)運(yùn)行文件。

程序如下:

//標(biāo)刻
void CZmc_laserDlg::OnBnClickedBtnMark()
{
    if(NULL == m_Handle)
    {
        MessageBox(_T("控制器未連接"));
        return;
    }
    UpdateData(TRUE);
    //打開打標(biāo)庫(kù)3次文件功能
    int rtn = ZmotionLaser_OpenFile3();      
    if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
    rtn = ZmotionLaser_SetOutputLimits(55);                //設(shè)置輸出口最大編號(hào)限制
    if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
    rtn =  ZmotionLaser_SetScanAxis(4,5);          //設(shè)置振鏡軸號(hào)
    if(CheckError(rtn,"ZmotionLaser_SetScanAxis")) return;
    rtn =  ZmotionLaser_SetOutput(m_nLaserIO,m_nEnableIO,m_nRedIO);//設(shè)置開光控制
    if(CheckError(rtn,"ZmotionLaser_SetOutput")) return;
    rtn =  ZmotionLaser_AoutInit(m_nAout,255);         //設(shè)置模擬量功率設(shè)置
    if(CheckError(rtn,"ZmotionLaser_AoutInit")) return;
    rtn =   ZmotionLaser_SetPowerEnable(false);        //關(guān)閉動(dòng)態(tài)修改功率
    if(CheckError(rtn,"ZmotionLaser_SetPowerEnable")) return;
    rtn =   ZmotionLaser_SetLightInstruct(1);
    if(CheckError(rtn,"ZmotionLaser_SetLightInstruct")) return;
    rtn =    ZmotionLaser_SetLightString("MOVE_OP(8,ON)n","MOVE_OP(8,OFF)n");
    if(CheckError(rtn,"ZmotionLaser_SetLightInstruct")) return;
    //設(shè)置加工工藝參數(shù)
    int ipower = (int)(m_nAoutVal*100/256);
    rtn = ZmotionLaser_SetVectPar(ipower, m_nPwmFreq, m_dSpeed, m_dEmpSpeed, m_nStartDelay, m_nLastDelay, m_nLastDelay, 10, m_nCorDelay,m_nLastDelay ,1);
    if(CheckError(rtn,"ZmotionLaser_SetVectPar")) return;
    //設(shè)置填充參數(shù)
    rtn = ZmotionLaser_SetFillObject(m_FillPara,1);
    if(CheckError(rtn,"ZmotionLaser_SetFillObject")) return;
    //設(shè)置文本字體參數(shù)
    CString strFont;
    m_ListFont.GetLBText(m_ListFont.GetCurSel(),strFont);
    rtn = ZmotionLaser_SetTextStyle(strFont,m_FontThickness,m_FontItalics,m_FontUnderline,m_FontDelete,m_dTextHigh,m_dTextWidth,m_dTextAngle,m_dTextTilt);
    if(CheckError(rtn,"ZmotionLaser_SetTextStyle")) return;
    //開始填充
    rtn = ZmotionLaser_FillStart();
    if(CheckError(rtn,"ZmotionLaser_FillStart")) return;
    //加工文本字符
    rtn = ZmotionLaser_Text(1,m_TextString,m_dTextXpos,m_dTextYpos,m_dTextAccuracy);
    if(CheckError(rtn,"ZmotionLaser_Text")) return;
    //結(jié)束填充
    rtn =  ZmotionLaser_FillEnd();
    if(CheckError(rtn,"ZmotionLaser_FillEnd")) return;
    char* MoveStr = NULL;
    int nRow = 0;
    MoveStr = ZmotionLaser_GetProcessString(false);
    MoveStr = ZmotionLaser_GetProEndString(nRow);
    //生成加工三次文件
    rtn = ZmotionLaser_CreateFile3(".//ZscanLaser.z3p",true);
    if(CheckError(rtn,"ZmotionLaser_CreateFile3")) return;
    rtn = ZmotionLaser_CloseFile3();
    if(CheckError(rtn,"ZmotionLaser_CloseFile3")) return;
    //運(yùn)行生成的3次文件
    rtn = ZAux_Down3FileRom(m_Handle,".//ZscanLaser.z3p","Text123.z3p");
    if(CheckError(rtn,"ZAux_Down3FileRom")) return;
    rtn = ZAux_Direct_StopTask(m_Handle,1);
    if(CheckError(rtn,"ZAux_Direct_StopTask")) return;
    rtn = ZAux_Run3FileRom(m_Handle,"Text123.z3p",1,0);      //任務(wù)運(yùn)行3次文件
    if(CheckError(rtn,"ZAux_Down3FileRom")) return;
}

三、矢量圖形打標(biāo)

1.矢量圖形打標(biāo)參數(shù)設(shè)置界面

pYYBAGN91uaAZVAzAADXlVdza20711.png

通過(guò)該例程我們可以實(shí)現(xiàn)一些圖案的打標(biāo),如產(chǎn)品LONG打印、圖案打印、金屬牌上打印圖案做項(xiàng)鏈等。

操作流程和前面兩個(gè)例程類似,唯一不同的是這里矢量圖形標(biāo)刻,我們要選擇保存好的矢量圖形,設(shè)置完大小、位置、旋轉(zhuǎn)角度后進(jìn)行標(biāo)刻。我們添加進(jìn)來(lái)圖形可以在右下部分區(qū)域看見圖形(二維碼例程一樣有顯示圖形)。如下圖紅色框內(nèi)顯示。

2.矢量圖形打標(biāo)界面

poYBAGN91uyATPWcAAI_PbTVvSs713.png

程序如下:

//顯示圖形
void CZmc_laserDlg::OnShowGraph()
{
    CDC*dc = GetDlgItem(IDC_PIC_SHOW)->GetDC();
    CRect rectClient;
    GetDlgItem(IDC_PIC_SHOW)->GetClientRect(rectClient);
    CBrush brush(RGB(255, 255, 255));
    dc->FillRect(&rectClient, &brush);
    //畫一個(gè)外框
    int iwidth = rectClient.Width();
    int iheight = rectClient.Height();
    dc->MoveTo(0,0);
    dc->LineTo(iwidth-1,0);
    dc->LineTo(iwidth-1,iheight-1);
    dc->LineTo(0,iheight-1);
    dc->LineTo(0,0);
    int rtn=0;
    rtn = ZMotionCad3_DeleteChain((Struct_ZCad_Item *) m_pGraph->m_pVectorData);
    rtn = ZMotionCad3_DeleteChain((Struct_ZCad_Item *) m_pGraph->m_pImageData);
    m_pGraph->m_pImageData = NULL;
    m_pGraph->m_pVectorData = ZMotionCad3_ImportVectGraph(m_FileName, 1016,1,0.001);    //導(dǎo)入圖形生成軌跡
    if (m_pGraph)
    {
        uint32 uiresult;
        //元素尺寸
        float left, bottom, width, height;
        uiresult = ZMotionCad3_GetRange((Struct_ZCad_Item *)m_pGraph, &left, &bottom, &width, &height);
        float  top;
        //轉(zhuǎn)成顯示坐標(biāo)
        top = -(bottom + height);
        //顯示的區(qū)域
        double WinWidth  = rectClient.Width() - 8;
        double WinHeight = rectClient.Height() - 8;
        // 實(shí)際的區(qū)域
        double ObjectWidth = width;
        double ObjectHeight = height;
        double ObjectPixWidth, ObjectPixHeight;
        if (ObjectWidth*WinHeight <= WinWidth*ObjectHeight)
        {
            ObjectPixHeight = WinHeight;
            ObjectPixWidth = ObjectPixHeight *ObjectWidth/ObjectHeight;
        }
        else
        {
            ObjectPixWidth = WinWidth;
            ObjectPixHeight = ObjectPixWidth *ObjectHeight/ObjectWidth;
        }
        double dUnitsPerMm = ObjectPixHeight/ObjectHeight; //每MM的顯示點(diǎn)數(shù)
        CPoint ZeroPoint;
        ZeroPoint.x = (rectClient.Width()-ObjectPixWidth)/2 ;
        ZeroPoint.y = (rectClient.Height()-ObjectPixHeight)/2 ;
        dc->SetViewportOrg(ZeroPoint.x-left*dUnitsPerMm, ZeroPoint.y-top*dUnitsPerMm);
        ZMotionCad3_Draw(dc->m_hDC, (Struct_ZCad_Item *) m_pGraph, 0, 1.0f/dUnitsPerMm);      //繪圖
    }
}

本次,正運(yùn)動(dòng)技術(shù)開放式激光振鏡運(yùn)動(dòng)控制器:C++快速調(diào)用圖形庫(kù)應(yīng)用,就分享到這里。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 運(yùn)動(dòng)控制器

    關(guān)注

    2

    文章

    389

    瀏覽量

    24618
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2096

    瀏覽量

    73449
  • 圖形庫(kù)
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    8998
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ZMC408SCAN控制光纖激光器加工

    ZMC408SCAN是正運(yùn)動(dòng)技術(shù)新推出的一款支持EtherCAT總線的開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 09-14 14:16 ?1580次閱讀
    ZMC408SCAN<b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>控制</b>光纖<b class='flag-5'>激光器</b>加工

    開放式激光運(yùn)動(dòng)控制器在Ubuntu+Qt下自定義圖形標(biāo)刻

    開放式激光運(yùn)動(dòng)控制器在Ubuntu+Qt下自定義圖形
    的頭像 發(fā)表于 10-08 10:45 ?560次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>在Ubuntu+Qt下自定義<b class='flag-5'>圖形</b>標(biāo)刻

    開放式激光+運(yùn)動(dòng)控制器(五):ZMC408SCAN控制器

    軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動(dòng)控制。ZMC408SCAN總線控制器支持脈沖軸/總線軸/軸混合插補(bǔ)。
    發(fā)表于 03-03 14:45 ?2085次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b>+<b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>(五):ZMC408SCAN<b class='flag-5'>控制器</b>

    激光運(yùn)動(dòng)控制器(一):ZMC408SCAN接口與功能

    ZMC408SCAN是正運(yùn)動(dòng)技術(shù)新推出的一款支持EtherCAT總線的開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 08-01 15:03 ?3022次閱讀
    <b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>(一):ZMC408SCAN接口與功能

    開放式激光運(yùn)動(dòng)控制器C++快速開發(fā)

    今天,正運(yùn)動(dòng)技術(shù)為大家分享一下應(yīng)用ZMC408SCAN開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 10-19 09:04 ?1396次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>:<b class='flag-5'>C++</b><b class='flag-5'>快速</b>開發(fā)

    應(yīng)用ZMC408SCAN開放式激光運(yùn)動(dòng)控制器C++開發(fā)

    今天,正運(yùn)動(dòng)技術(shù)為大家分享一下應(yīng)用ZMC408SCAN開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 10-24 11:26 ?1651次閱讀

    ZMC408SCAN控制光纖激光器加工的方法

    ZMC408SCAN是正運(yùn)動(dòng)技術(shù)新推出的一款支持EtherCAT總線的開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 10-26 17:32 ?1943次閱讀

    開放式激光運(yùn)動(dòng)控制器C++矯正方法與實(shí)現(xiàn)

    ZMC408SCAN是正運(yùn)動(dòng)技術(shù)新推出的一款支持EtherCAT總線的開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 10-27 09:02 ?1871次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>:<b class='flag-5'>C++</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b>矯正方法與實(shí)現(xiàn)

    開放式激光運(yùn)動(dòng)控制器ZMC408SCAN進(jìn)行矯正的方法與實(shí)現(xiàn)

    ZMC408SCAN是正運(yùn)動(dòng)技術(shù)新推出的一款支持EtherCAT總線的開放式激光運(yùn)動(dòng)
    的頭像 發(fā)表于 10-31 17:56 ?1733次閱讀

    運(yùn)動(dòng)激光運(yùn)動(dòng)控制器ZMC408SCAN用戶手冊(cè)

    ZMC408SCAN 激光運(yùn)動(dòng)控制器是正運(yùn)動(dòng)技術(shù)推出的高性能總線雙
    發(fā)表于 04-11 14:22 ?3次下載

    ZMC420SCAN激光運(yùn)動(dòng)控制器用戶手冊(cè)

    ZMC 是正運(yùn)動(dòng)技術(shù)推出的網(wǎng)絡(luò)運(yùn)動(dòng)控制器型號(hào)簡(jiǎn)稱。 ZMC4 系列支持正運(yùn)動(dòng) XPLC 的功能,可以通過(guò)網(wǎng)絡(luò)來(lái)做組態(tài)顯示。 ZMC420SCAN 系列
    發(fā)表于 04-11 14:28 ?3次下載

    運(yùn)動(dòng)控制器激光控制

    激光運(yùn)動(dòng)控制系統(tǒng)中不但有運(yùn)動(dòng)控制,還有
    的頭像 發(fā)表于 09-26 11:44 ?1988次閱讀
    <b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>控制</b>

    開放式激光運(yùn)動(dòng)控制器激光清洗應(yīng)用

    開放式激光運(yùn)動(dòng)控制器激光清洗解決方案。
    的頭像 發(fā)表于 07-18 09:44 ?259次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>的<b class='flag-5'>激光</b>清洗應(yīng)用

    開放式激光運(yùn)動(dòng)控制器在Ubuntu+Qt下CAD圖形標(biāo)刻

    開放式激光運(yùn)動(dòng)控制器再Ubuntu+Qt下CAD圖形
    的頭像 發(fā)表于 09-18 15:12 ?216次閱讀
    <b class='flag-5'>開放式</b><b class='flag-5'>激光</b><b class='flag-5'>振</b><b class='flag-5'>鏡</b><b class='flag-5'>運(yùn)動(dòng)</b><b class='flag-5'>控制器</b>在Ubuntu+Qt下CAD<b class='flag-5'>圖形</b>標(biāo)刻