<nobr id="zkazv"></nobr>

      午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
      首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
      中華工控網首頁
        P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
        D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
        電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
      開放式激光振鏡運動控制器:C++ 快速調用圖形庫應用
      深圳市正運動技術有限公司
      收藏本文     查看收藏

      今天,正運動小助手給大家分享一下開放式激光振鏡運動控制器:C++快速調用圖形庫應用,本文以二維碼打標、文本打標、矢量圖形打標為例, 解決用戶在激光打標時需要進行各種復雜的操作和函數庫調用時容易出現的錯誤問題。

      01 ZMC408SCAN控制器介紹

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

      ZMC408SCAN控制器支持EtherCAT總線連接,支持最快500μs的刷新周期,支持最多達16軸運動控制,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等;采用優化的網絡通訊協議可以實現實時的運動控制。單臺電腦最多支持達256個ZMC控制器同時連接。

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

      (2)支持激光振鏡控制和振鏡反饋,包含2個振鏡接口,支持2D振鏡和3D振鏡,配合不帶加減速的運動指令MOVESCAN,拐角處振鏡加工自動延時,完成精準高效的激光控制,提高激光加工設備的產能;

      (3)通過指令在運動中靈活的調節激光開光/關光延時,響應快,精確到us級別的控制,且設置過程簡單,大大縮短了工程師的調參時間;

      (4)自帶LASER激光器控制接口,支持IPG、YLR、YLS等類型激光電源,還帶一個EXIO擴展IO接口,通過定制轉接板,靈活控制市場上主流的各種激光器;

      (5)支持PC同時控制16個ZMC408SCAN控制器同時工作,形成一種振鏡陣列的激光加工;

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

      1.基本規格參數

      2.接口定義


      3.參考架構

      02 打標庫說明

      1.目的

      為解決激光打標時需要進行各種復雜的操作和函數庫調用時容易出現的錯誤問題。用戶可以通過PC更加方便的進行加工文件的生成,在軟件中進行圖形加工操作。

      如要打標二維碼,只需要通過條碼指令ZmotionLaser_BarCode(int nTechnology,const char *pStrText,const char *pStrType,double dX,double dY,double dSizeX,double dSizeY,double dAngle)將參數設置好,選擇好要標刻的碼類型,將標刻內容輸入即可,通過程序將其軌跡生成的三次文件等待啟動標刻。

      如要打標文本,則通過對應的文本指令ZmotionLaser_Text(int nTechnology,const char *pStrText,double dX,double dY,double dAccuracy)設置好其工藝參數大小、旋轉角度等,而后輸入我們要標刻的文本內容,通過三次文件的形式進行打標。

      我們打標條碼、二維碼、不同字體樣式的文本、矢量圖形、位圖等,都有對應的接口指令,從而實現快速調參開發,可以節省工程師大量的編程及工藝規劃時間。

      2.方式

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

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

      (1)先開啟文件生成;

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

      (3)設置各種加工參數,調整加工效果;

      (4)進行加工函數的調用,將需要加工的數據寫入;

      (5)調用生成函數生成加工三次文件;

      (6)關閉文件生成。

      4.優勢

      僅需要很少的指令填上對應參數就能實現一個類型打標,將復雜的指令編程簡單化,對于加工軌跡復雜、文件較大也能實現動態追加文件發送字符串運行。

      03 指令說明

      一、條碼

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

      2.說明: 進行條碼圖形的加工,通過該指令配合上幾個常用指令我們可以輕松選擇要打標的條碼類型,以及更改我們想要的尺寸大小、打標幅面內的位置。

      二、文本及狀態設置

      1.文本

      (1)函數名: uint32 ZmotionLaser_Text(int nTechnology,const char *pStrText,double dX,double dY,double dAccuracy)

      (2)說明: 進行文本圖形的加工,通過該指令配合上幾個常用指令我們可以簡單的實現文本打標,只需要將打標的內容填到對應參數位置,在對應參數寫好工藝參數,打標坐標位置等。

      2.文本狀態設置

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

      (2)說明: 設置文本的狀態,需要確定文本的字體、風格、尺寸、角度和傾斜等狀態。該狀態設置后如果不重新設置,后續所有文本的狀態都按照該狀態進行,配合文本指令使用進行文本打標。

      三、矢量圖形參數設置

      1.函數名: 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.說明: 設置某一工藝的矢量圖形加工參數。該指令用于矢量圖形加工時參數設置,針對矢量圖形的加工復雜性,通過將參數提前寫入,以在打標時快速響應。

      04 激光振鏡控制實例

      一、二維碼打標

      1.二維碼打標參數設置界面

      2.操作流程

      (1)架好設備后,用振鏡矯正工具將振鏡矯正(可參考正運動小助手文章“開放式激光振鏡運動控制器:C++振鏡矯正方法與實現”);

      (2)矯正完成后,如上圖選擇對應的IP地址進行連接,選擇對應的激光器類型、設置好運動參數、選好填充工藝并將參數設置好、選擇要標刻的條碼類型、設置條碼大小及打標位置旋轉角度等,在內容欄填入標刻內容;

      (3)準備工作完成,點擊標刻進行打標,如果中途發現有異常,點擊停止即可。

      通過這個例程我們可以實現多種類型條碼、二維碼的打標,適用于多種激光器類型,還能隨時調整打標的內容、大小、位置以及在xy平面上的角度,而且通過對功率的調整我們可以在不同的物品上進行打標,如平面產品包裝、充電器、手機外殼、一些金屬產品等。

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

      程序如下:

      //連接控制器
      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] = '\0';
          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);            //關定時器
              ZAux_Close(m_Handle);
              m_Handle = NULL;
              SetWindowText("未鏈接");
          }
      }

      3.選擇激光器類型

      通過指令ZAux_SetExioType(ZMC_HANDLE handle,int iType)設定轉接板類型,不同的轉接板類型對應不同類型的激光器(需定制)。

      使用時我們只需要選擇對應的激光器類型,并按照對應接口接好線,調節好功率(激光能量)、頻率。

      程序如下:

      //修改激光器類型
      void CZmc_laserDlg::OnCbnSelchangeComboLaser()
      {
          if(NULL == m_Handle)
          {
              MessageBox(_T("控制器未連接"));
              return;
          }
          UpdateData(TRUE);
          if(m_nLaserType == FIBER_408)          //408 FIBER轉換?板參數設置
          {
              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轉換板參數設置
          {
              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.設置運動參數和二維碼大小參數

      將運動參數及填充工藝參數存到變量里面,在后面打標過程中調用此參數,現在這個值是一個初始化值,只是一個參考作用,具體參數還要通過測試調整后才能更適合相應機臺及打標加工,空移速度為后續打標軌跡中空走軌跡所用速度。

      開關光延時是用于提前開光和延時關光,設置適當的開光延時參數可以去除在運動起點出現的  “火柴頭”,但如果開光延時參數設置太大則會導致起始段缺筆的現象。

      可以通過ZAux_Direct_MoveOpDelay設置為負值,負值標刻激光器提前出光。一般光纖激光器的開光延時就是設置負值,而其他激光器,如端泵激光器是設置正值的。

      設置適當的關光延時參數可以去除在運動結束時出現的不閉合現象,但如果關光延時設置太大會導致結束段出現“火柴頭”。

      關光指令后調用指令ZAux_Direct_MoveDelay設置對應的延時時間實現延時控制。

      設置適當的拐角延時參數可以去除在運動軌跡是直角時出現的圓角現象,但如果拐角延時設置太大會導致標刻時間增加,且拐角處有重點現象,為解決這一問題,引入拐角自動延時模式,根據拐角角度計算延時時間。

      調用指令ZAux_Direct_SetCornerMode設置拐角延時模式為2,通過 ZAux_Direct_SetDecelAngle與ZAux_Direct_SetStopAngle設置拐角開始延時和結束延時角度、ZAux_Direct_SetZsmooth設置最大拐角延時時間。

      實際的拐角延時則依據軌跡的實際角度自動計算對應拐角延時時間,在設定的角度范圍內,延時時間呈線性分布。

      程序如下:

      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;
          //填充參數初始化
          m_FillPara.m_bEnable = true;          //填充使能
          m_FillPara.m_bOutline = true;         //使能輪廓
          m_FillPara.m_bOutlineFirst = false;   //輪廓優先
          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;                //填充線數目
          m_FillPara.m_dLineSpace = 0.1;        //線間距
          m_FillPara.m_dMargin = 0;             //邊距
          m_FillPara.m_dSOffset = 0;            //開始偏移
          m_FillPara.m_dEOffset = 0;            //結束偏移
          m_FillPara.m_dLineIndent = 0;         //直線縮進
          //文本參數
          m_dTextHigh = 30;                  //文本高度
          m_dTextWidth = 30;             //文本寬度
          m_dTextAngle = 0;                 //文本角度
          m_dTextXpos = 0;
          m_dTextYpos = 0;
          m_TextString = _T("");
      }

      5.設置填充工藝參數

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

      通過指令 ZmotionLaser_SetOutput(int nAp,int nMO,int nRed)設置好出光口號,為標刻做好準備。

      填充工藝: 主要是指令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)的一些參數,將參數通過變量的形式做到界面上。

      bOutline 使能輪廓 :填充時是否保存原來的圖形輪廓。

      bOutlineFirst輪廓優先 :填充時保留輪廓的情況下,勾選輪廓優先會使輪廓軌跡在填充線之前進行加工,否則輪廓軌跡在填充線之后進行加工(如想了解更多填充工藝,可聯系正運動技術支持工程師)。

      填充類型 :圖形進行填充的方式

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

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

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

      (4)優化弓形填充:類似于弓形填充,但對象空白的地方仍會跳過去填充。

      程序如下:

      void CZmc_laserDlg::OnEnChangeEditText()
      {
          UpdateData(TRUE);
          //打開打標庫3次文件功能
          int rtn = ZmotionLaser_OpenFile3(m_Handle);      
          if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
          rtn = ZmotionLaser_SetOutputLimits(55);          //設置輸出口最大編號限制
          if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
          rtn = ZmotionLaser_SetScanAxis(4,5);          //設置振鏡軸號
          if(CheckError(rtn,"ZmotionLaser_SetScanAxis")) return;
          rtn = ZmotionLaser_SetOutput(m_nLaserIO,m_nEnableIO,m_nRedIO);  //設置開光光控制
          if(CheckError(rtn,"ZmotionLaser_SetOutput")) return;
          rtn = ZmotionLaser_AoutInit(m_nAout,255);        //設置模擬量功率設置
          if(CheckError(rtn,"ZmotionLaser_AoutInit")) return;
          rtn = ZmotionLaser_SetPowerEnable(false);           //關閉動態修改功率
          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;
          //設置加工工藝參數
          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;
          //設置填充參數
          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;
          //結束填充
          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.進行標刻

      通過Zpj文件方式下載三次文件到控制器ROM,開啟一個未使用或者一個確認停止的任務號運行該文件。

      程序如下:

      void CZmc_laserDlg::OnBnClickedBtnMark()
      {
          if(NULL == m_Handle)
          {
              MessageBox(_T("控制器未連接"));
              return;
          }
          //運行生成的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);      //任務1運行3次文件
          if(CheckError(rtn,"ZAux_Down3FileRom")) return;
      }

      7.完成打標

      停止加工,主要是將任務停止,然后停止所有的軸運動,關掉激光。

      程序如下:

      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);        //關光
          Sleep(10);
          rtn = ZAux_Direct_SetOp(m_Handle,m_nEnableIO,0);
          SetDlgItemTextA(IDC_BTN_LASER,"激光(關)");
      }

      8.二維碼打標界面

      9.界面參數配置講解&打標效果展示

      二、文本打標

      1.文本打標參數設置界面

      通過該例程我們可以實現產品包裝生產日期、金屬元件、硬質塑料產品上的標注打標,還能在金屬物品上進行紀念語等的打標,多種字體樣式可選擇。

      操作流程和二維碼打標類似,連接控制器,選擇對應激光器類型,填寫運動參數、填充工藝以及標刻文本信息等(可根據實際打標測試結果進行調整)。

      程序構建類似,唯一不同在于標刻處程序寫法上有差異,二維碼打標是將軌跡生成與標刻運行分開寫,而文本打標是將參數設置好、文本內容確定后,點擊打標才開始生成三次文件,后開啟任務運行文件。

      程序如下:

      //標刻
      void CZmc_laserDlg::OnBnClickedBtnMark()
      {
          if(NULL == m_Handle)
          {
              MessageBox(_T("控制器未連接"));
              return;
          }
          UpdateData(TRUE);
          //打開打標庫3次文件功能
          int rtn = ZmotionLaser_OpenFile3();      
          if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
          rtn = ZmotionLaser_SetOutputLimits(55);                //設置輸出口最大編號限制
          if(CheckError(rtn,"ZmotionLaser_OpenFile3")) return;
          rtn =  ZmotionLaser_SetScanAxis(4,5);          //設置振鏡軸號
          if(CheckError(rtn,"ZmotionLaser_SetScanAxis")) return;
          rtn =  ZmotionLaser_SetOutput(m_nLaserIO,m_nEnableIO,m_nRedIO);//設置開光控制
          if(CheckError(rtn,"ZmotionLaser_SetOutput")) return;
          rtn =  ZmotionLaser_AoutInit(m_nAout,255);         //設置模擬量功率設置
          if(CheckError(rtn,"ZmotionLaser_AoutInit")) return;
          rtn =   ZmotionLaser_SetPowerEnable(false);        //關閉動態修改功率
          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;
          //設置加工工藝參數
          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;
          //設置填充參數
          rtn = ZmotionLaser_SetFillObject(m_FillPara,1);
          if(CheckError(rtn,"ZmotionLaser_SetFillObject")) return;
          //設置文本字體參數
          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;
          //結束填充
          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;
          //運行生成的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);      //任務運行3次文件
          if(CheckError(rtn,"ZAux_Down3FileRom")) return;
      }

      2.界面參數配置講解&打標效果展示

      三、矢量圖形打標

      1.矢量圖形打標參數設置界面

      通過該例程我們可以實現一些圖案的打標,如產品LONG打印、圖案打印、金屬牌上打印圖案做項鏈等。

      操作流程和前面兩個例程類似,唯一不同的是這里矢量圖形標刻,我們要選擇保存好的矢量圖形,設置完大小、位置、旋轉角度后進行標刻。

      我們添加進來圖形可以在右下部分區域看見圖形(二維碼例程一樣有顯示圖形)。如下圖紅色框內顯示。

      2.矢量圖形打標界面

      程序如下:

      //顯示圖形
      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);
          //畫一個外框
          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);    //導入圖形生成軌跡
          if (m_pGraph)
          {
              uint32 uiresult;
              //元素尺寸
              float left, bottom, width, height;
              uiresult = ZMotionCad3_GetRange((Struct_ZCad_Item *)m_pGraph, &left, &bottom, &width, &height);
              float  top;
              //轉成顯示坐標
              top = -(bottom + height);
              //顯示的區域
              double WinWidth  = rectClient.Width() - 8;
              double WinHeight = rectClient.Height() - 8;
              // 實際的區域
              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的顯示點數
              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);      //繪圖
          }
      }

      3.界面參數配置講解&打標效果展示

      本次,正運動技術開放式激光振鏡運動控制器:C++快速調用圖形庫應用,就分享到這里。

      更多精彩內容請關注“ 正運動小助手 ”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師:400-089-8936。

      本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

      正運動技術專注于運動控制技術研究和通用運動控制軟硬件產品的研發,是國家級高新技術企業。正運動技術匯集了來自華為、中興等公司的優秀人才,在堅持自主創新的同時,積極聯合各大高校協同運動控制基礎技術的研究,是國內工控領域發展最快的企業之一,也是國內少有、完整掌握運動控制核心技術和實時工控軟件平臺技術的企業。主要業務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位等等。


       

      狀 態: 離線

      公司簡介
      產品目錄

      公司名稱: 深圳市正運動技術有限公司
      聯 系 人: 戴德弟
      電  話: 0755-32976042
      傳  真: 0755-2606 6955
      地  址: 深圳市寶安區西鄉洲石路陽光工業園A1棟5樓
      郵  編: 518100
      主  頁:
       
      該廠商相關技術文摘:
      強實時運動控制內核MotionRT750(七):us級高速交互之Qt,為智能裝備提速
      【2025上海工博會】高速高精運動控制卡應用預覽(一)
      強實時運動控制內核MotionRT750(六):us級高速交互之C++,為智能裝備提速
      解鎖光未來!9月 CIOE 2025,正運動邀您相聚深圳,共赴光電盛宴!
      機器視覺運動控制一體機在線路板跟隨灌膠上的應用
      強實時運動控制內核MotionRT750(五):EtherCAT總線冗余讓生產制造更可靠
      深圳·EelE智博會:智控賦能,驅動未來制造
      機器視覺運動控制一體機在喇叭跟隨點膠上的應用
      強實時運動控制內核MotionRT750(四):高速貼裝應用中的拱形運動
      聚焦深圳國際電子展 | 正運動攜熱門產品和方案!等您來體驗!
      超高速EtherCAT實時運動控制卡在高速半導體固晶機上的應用
      強實時運動控制內核MotionRT750(三):us級高速交互之C#,為智能裝備提速
      更多文摘...
      立即發送詢問信息在線聯系該技術文摘廠商:
      用戶名: 密碼: 免費注冊為中華工控網會員
      請留下您的有效聯系方式,以方便我們及時與您聯絡

      關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
      工控網客服熱線:0755-86369299
      版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

      主站蜘蛛池模板: 国产午夜福利av在线麻豆| 日韩高清不卡免费一区二区 | 自拍偷区亚洲综合第二区| 午夜男女爽爽影院在线| 国产69精品久久久久99尤物| 被灌满精子的少妇视频| 国产精品国产亚洲看不卡| 中日韩中文字幕一区二区| 男女动态无遮挡动态图| 成人午夜视频在线| 蜜臀91精品国产高清在线| 精品无码成人片一区二区| 日韩中文字幕免费在线观看| 激情综合网激情五月激情| 亚洲av成人免费在线| 亚洲成在人网站av天堂| 国产极品粉嫩馒头一线天| 亚洲av无码精品色午夜蛋壳| 久久经精品久久精品免费观看 | 久久天天躁狠狠躁夜夜不卡| 国产精品中文第一字幕| 中文字幕人妻中文AV不卡专区| 深夜福利成人免费在线观看| 女性高爱潮视频| 暖暖 免费 高清 日本 在线观看5 色老头亚洲成人免费影院 | 国产精品亚洲二区在线播放 | 岛国最新亚洲伦理成人| 国产精品 自在自线| 成人动漫综合网| 黄色A级国产免费大片视频| 丰满人妻AV无码一区二区三区 | 日本福利一区二区精品| 精品国产中文字幕av| 亚洲大尺度一区二区三区| 99热国产这里只有精品9| 欧美国产精品啪啪| 国产日韩久久免费影院| 国产女人18毛片水真多1| 国产亚洲一在无在线观看| 人妻激情乱人伦视频| 国产日韩精品免费二三氏|