• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Unigraphics NX二次開發(fā)功能的批量后置軟件

      2020-11-21 03:21:02趙仁兵劉金科
      機(jī)械制造 2020年11期
      關(guān)鍵詞:配置文件后置批量

      □ 趙仁兵 □ 劉金科

      宜賓市普什模具有限公司 四川宜賓 644000

      1 開發(fā)背景

      目前,Unigraphics NX軟件擁有強(qiáng)大的計(jì)算機(jī)輔助設(shè)計(jì)和計(jì)算機(jī)輔助制造集成功能[1],應(yīng)用廣泛。在企業(yè)編程部門,由于編程人員的習(xí)慣不同,編程規(guī)范不同,企業(yè)很難制定統(tǒng)一的技術(shù)標(biāo)準(zhǔn)。隨著設(shè)計(jì)產(chǎn)品的復(fù)雜化,每個(gè)產(chǎn)品加工都需要使用Unigraphics NX軟件輔助編程。Unigraphics NX軟件自帶的后置處理器每次只能處理一個(gè)數(shù)控程序,并且不對操作中可能包含的錯(cuò)誤進(jìn)行檢查。對此,編程人員需對大量程序進(jìn)行錯(cuò)誤檢查和后置處理,浪費(fèi)大量時(shí)間和精力。筆者利用Unigraphics NX軟件的二次開發(fā)功能,結(jié)合Visual Studio 2005開發(fā)環(huán)境,設(shè)計(jì)批量后置軟件,提供批量后處理、錯(cuò)誤預(yù)警、刀具報(bào)告等功能。應(yīng)用這一批量后置軟件,可以提高Unigraphics NX軟件后置處理效率,減少加工事故。

      2 應(yīng)用程序接口

      Unigraphics NX是一款功能強(qiáng)大的計(jì)算機(jī)輔助設(shè)計(jì)與制造軟件,不僅可以通過用戶界面操作來控制、實(shí)現(xiàn)功能,而且能夠提供多種應(yīng)用程序接口對內(nèi)部對象進(jìn)行訪問。應(yīng)用程序接口是Unigraphics NX軟件與外部應(yīng)用程序之間的接口,是Unigraphics NX軟件二次開發(fā)工具提供的一系列函數(shù)和過程的集合[2]。通過這些應(yīng)用程序接口,用戶可以擴(kuò)展Unigraphics NX軟件的功能,實(shí)現(xiàn)與Unigraphics NX軟件的無縫集成。

      Unigraphics NX應(yīng)用程序接口支持多種開發(fā)語言和多種操作系統(tǒng),軟件功能的覆蓋率超過90%,不同Unigraphics NX軟件版本間的一致性良好。

      Unigraphics NX軟件內(nèi)部采用統(tǒng)一對象模型來描述對象及其操作,用戶界面操作和應(yīng)用程序接口都構(gòu)建于統(tǒng)一對象模型之上,確保了應(yīng)用程序接口與用戶界面操作訪問的都是內(nèi)部統(tǒng)一對象模型[3]?;诓煌_發(fā)語言的應(yīng)用程序接口都由同一個(gè)內(nèi)部對象轉(zhuǎn)化而來,無論用戶采用何種開發(fā)語言的應(yīng)用程序接口,其調(diào)用的實(shí)質(zhì)都是同一個(gè)內(nèi)核函數(shù),從而實(shí)現(xiàn)了開發(fā)語言無關(guān)性和平臺(tái)無關(guān)性,用戶可以選擇自己擅長的開發(fā)語言,提高開發(fā)速度。

      (1) GRIP開發(fā)包[4]。GRIP是一種解釋性的編程語言,能實(shí)現(xiàn)Unigraphics NX軟件交互界面下的所有功能操作。GRIP具有簡單易學(xué)、運(yùn)行效率高、不長駐內(nèi)存等特點(diǎn),深受開發(fā)人員喜愛。但是,Unigraphics NX軟件在新版本中停止對GRIP開發(fā)包的更新。另一方面,GRIP在交互界面對話框中函數(shù)單一,開發(fā)較大項(xiàng)目時(shí)用戶的交互受限。可見,GRIP適用于簡單的二次開發(fā)。

      (2) Unigraphics/Open開發(fā)包。Unigraphics/Open是基于C語言的二次開發(fā)應(yīng)用程序接口,包括3 000多個(gè)C語言函數(shù),功能強(qiáng)大,適合企業(yè)高級開發(fā)人員使用。Unigraphics/Open直接構(gòu)建于內(nèi)部代碼上,運(yùn)行效率較高,能夠?qū)崿F(xiàn)Unigraphics NX軟件大部分功能。Unigraphics/Open需要C語言和軟件工程等技術(shù)的支持,因此適合中高級用戶使用。

      (3) KF開發(fā)包。KF是應(yīng)用于知識(shí)熔接技術(shù)的由求解需求驅(qū)動(dòng)的解釋性面向?qū)ο蟮恼Z言,是基于知識(shí)工程智能化的二次開發(fā)應(yīng)用程序接口,具有靈活、易學(xué)、可由知識(shí)驅(qū)動(dòng)等特點(diǎn),適合企業(yè)或第三方軟件公司進(jìn)行專家系統(tǒng)開發(fā)。

      (4) NXOpen開發(fā)包。NXOpen是完全面向?qū)ο蟮亩伍_發(fā)應(yīng)用程序接口,支持多種操作系統(tǒng)和多種開發(fā)語言,涵蓋了Unigraphics NX軟件絕大部分功能。用戶可以通過系統(tǒng)日志功能直接錄制Unigraphics NX軟件操作,生成代碼,用于研究Unigraphics NX軟件的系統(tǒng)架構(gòu)、運(yùn)行原理,并可以通過修改代碼來提高開發(fā)速度。NXOpen適合企業(yè)和第三方公司進(jìn)行功能定制開發(fā)。

      3 計(jì)算機(jī)輔助制造模塊

      在Unigraphics NX軟件計(jì)算機(jī)輔助制造模塊中,計(jì)算機(jī)輔助制造導(dǎo)航器包含四個(gè)視圖,每個(gè)視圖對應(yīng)不同的操作和功能。在不同的視圖下,用戶可以方便地對程序進(jìn)行快捷修改和定義。計(jì)算機(jī)輔助制造導(dǎo)航器視圖如圖1所示。

      ▲圖1 計(jì)算機(jī)輔助制造導(dǎo)航器視圖

      程序順序視圖是計(jì)算機(jī)輔助制造操作的主要視圖,便于數(shù)控程序文檔層次管理,如圖2所示。機(jī)床視圖主要用于刀具定義和管理。幾何視圖主要用于加工坐標(biāo)系和加工過程幾何定義與管理。加工方法視圖主要用于公共銑削參數(shù)管理。

      4 批量后置軟件設(shè)計(jì)

      批量后置軟件的設(shè)計(jì)內(nèi)容主要包括人機(jī)交互界面獲取用戶選擇、讀寫用戶配置文件、讀寫后處理配置文件、錯(cuò)誤校驗(yàn)等。批量后置軟件的工作流程如圖3所示。

      ▲圖2 程序順序視圖▲圖3 批量后置軟件工作流程

      獲取用戶選擇的程序指獲取用戶在Unigraphics NX軟件計(jì)算機(jī)輔助制造導(dǎo)航器中選擇的程序。獲取后置器模板指讀取后置文件template_post.dat中的后置器配置列表。獲取.tcl文件配置指讀取后置器所指向的.tcl配置文件,獲取數(shù)控程序后綴。獲取用戶配置指對話框載入時(shí),讀入用戶配置。對話框退出時(shí),保存用戶配置。初始化用戶界面指初始化用戶界面參數(shù),配置用戶的前一次默認(rèn)設(shè)置。安全檢查包括加工坐標(biāo)系、刀具號(hào)、刀具參數(shù)、程序號(hào)檢查等。批量后置輸出報(bào)告指遍歷用戶選取的程序,按規(guī)則對每個(gè)程序做后置處理,輸出程序報(bào)告、刀具報(bào)告、警告信息。

      批量后置軟件人機(jī)交互界面設(shè)計(jì)時(shí)使用了Block Styled 用戶界面生成器模塊[5],所設(shè)計(jì)的人機(jī)交互界面如圖4所示。人機(jī)交互界面主要包括后置配置列表、數(shù)控文件輸出目錄、單位定義、錯(cuò)誤校驗(yàn)等控件。Block Styled用戶界面生成器模塊保存對話框內(nèi)容時(shí),會(huì)自動(dòng)生成.dlx文件和.c文件。.dlx文件是對話框二進(jìn)制定義文件,開發(fā)時(shí)復(fù)制到運(yùn)行目錄。.c文件可根據(jù)開發(fā)語言的不同,選擇相應(yīng)的配置來生成對應(yīng)的開發(fā)工具代碼。

      ▲圖4 批量后置軟件人機(jī)交互界面

      5 批量后置軟件運(yùn)行原理

      在Unigraphics NX軟件計(jì)算機(jī)輔助制造導(dǎo)航器中實(shí)現(xiàn)批量數(shù)控程序后置輸出的基本原理是:獲取用戶在計(jì)算機(jī)輔助制造導(dǎo)航器中選擇的程序,遍歷程序中包含的操作和組,按對應(yīng)程序保存到內(nèi)部鏈表中;對所有操作和組進(jìn)行安全規(guī)則檢查,通過安全規(guī)則檢查后,遍歷獲得的所有操作,獲取操作對應(yīng)的加工坐標(biāo)系和刀具信息[6];按順序后置處理每個(gè)數(shù)控程序,保存到指定文件夾,同時(shí)輸出相關(guān)信息報(bào)表。批量后置軟件運(yùn)行原理如圖5所示。

      6 關(guān)鍵代碼

      6.1 操作函數(shù)

      Unigraphics NX軟件計(jì)算機(jī)輔助制造導(dǎo)航器相關(guān)操作函數(shù)如下:

      UFSession.GetUFSession();//獲取會(huì)話[7]。

      public void AskApplicationModule(out int module_id);//若module_id的值是16,則為計(jì)算機(jī)輔助制造應(yīng)用模塊。在Unigraphics NX軟件中,相關(guān)函數(shù)必須在相應(yīng)應(yīng)用模塊中才能工作,所以要實(shí)現(xiàn)在計(jì)算機(jī)輔助制造編程操作,必須保證當(dāng)前應(yīng)用模塊為計(jì)算機(jī)輔助制造模塊。

      ▲圖5 批量后置軟件運(yùn)行原理

      public void AskView(out UFUiOnt.TreeMode view);//查詢計(jì)算機(jī)輔助制造導(dǎo)航器中當(dāng)前視圖。

      public void SwitchView(UFUiOnt.TreeMode view);//切換當(dāng)前視圖。

      public void AskSelectedNodes(out int count,out Tag[]objects);//獲取計(jì)算機(jī)輔助制造導(dǎo)航器視圖中選定的程序,目標(biāo)可能是操作或組,編程時(shí)需進(jìn)行類型判斷,再進(jìn)行不同操作。

      public void OptAskPostNames(out int count,out string[]names);//獲取后置文件template_plot.dat中后置器配置列表[8]。

      public void AskMemberList(Tag obj_tag,out int count,out Tag[]list);//獲取一個(gè)組中包含的成員列表,可能是組或操作,使用時(shí)需作類型判斷。

      public bool IsGroup(CAMObject camObject);//判斷一個(gè)目標(biāo)是否為組。

      public void AskSetup(out Tag setup_tag);//查詢當(dāng)前設(shè)置的目標(biāo)。

      public void AskProgramNull(Tag setup_tag,out Tag program_null);//查詢當(dāng)前設(shè)置下視圖的空組。

      public void AskName(Tag object_id,out string name);//查詢目標(biāo)名稱。

      public void AskCutterGroup(Tag oper,out Tag group);//查詢當(dāng)前操作使用的刀具。

      public void AskGeomGroup(Tag oper,out Tag group);//查詢當(dāng)前操作使用的加工坐標(biāo)系。

      public void GenerateProgram(Tag setup,Tag group,string post_name,string output_filename,UFSetup.outputUnits output_units);//生成數(shù)控程序函數(shù)。使用該函數(shù)時(shí),一個(gè)組下的所有操作會(huì)合并為數(shù)控程序輸出。

      public void IsListingWindow Open(out bool response);//查詢信息窗口是否已打開。

      public void OpenListingWindow();//打開信息窗口。

      public void WriteListingWindow(string _string);//寫文本串到信息窗口。

      public void CloseListingWindow()://關(guān)閉信息窗口。

      6.2 獲取會(huì)話及應(yīng)用環(huán)境檢查

      具體代碼如下:

      int module ID,select Count;

      Tag[]selectObjList;

      UFUiOnt.TreeMode treeMode;

      UFSession theUfSession = UFSession.GetUFSession();

      the UfSession.UF.AskApplicationModule(out moduleID);

      if (module ID != 16)//計(jì)算機(jī)輔助制造應(yīng)用環(huán)境。

      {

      throw new Exception("請切換到計(jì)算機(jī)輔助制造應(yīng)用模塊!");//拋出一個(gè)異常。

      }

      theUfSession.UiOnt.AskView(out treeMode);

      if (!treeMode.Equals(UFUiOnt.TreeMode.Order))

      {

      theUfSession.UiOnt.SwitchView(UFUiOnt.TreeMode.Order);//切換到程序順序視圖。

      throw new Exception("已切換到程序順序視圖,請重新選擇!");

      }

      theUfSession.UiOnt.AskSelectedNodes(out select Count,out selectObjList);//獲取計(jì)算機(jī)輔助制造導(dǎo)航器選取的程序。

      if (selectCount <= 0)

      {

      throw new Exception("未選擇有效程序組,請重新選擇!");

      }

      6.3 讀取用戶配置

      為了保存用戶設(shè)置,需要定義一個(gè)配置文件,文件位置一般為程序執(zhí)行目錄。用戶配置文件格式如圖6所示。

      在加載對話框時(shí),首先加載后置器配置列表,然后讀取用戶配置文件來初始化對話框。當(dāng)執(zhí)行結(jié)束后,應(yīng)將當(dāng)前對話框配置信息保存到配置文件中,以供下次調(diào)用。在C語言中沒有專門的類來讀寫配置文件,因此需要通過自定義一個(gè)配置文件操作類來實(shí)現(xiàn)數(shù)據(jù)讀寫,代碼如下:

      using System;

      using System.Collections.Generic;

      using System.Text;

      ▲圖6 用戶配置文件格式

      using System.Runtime.InteropServices;

      using System.IO;

      using System.Reflection;

      namespace BatchPostProcess

      {

      class IniFileOperate

      {

      private string iniFilePath;

      private StringBuilder returnValue;

      private const string fileName = "\BatchPostProcess.ini";

      [DllImport("kernel32.dll")]

      private static extern long WritePrivateProfileString(string section,string key,string value,string filepath);

      [DllImport("kernel32.dll")]

      private static extern long GetPrivateProfileString(string section,string key,string def,StringBuilder returnValue,int buffersize,string filepath);

      public IniFileOperate()

      {

      string path;

      returnValue = new StringBuilder();

      path = Assembly.Get ExecutingAssembly().Location;

      FileInfo finfo = new FileInfo(path);

      iniFilePath = finfo.Directory.ToString() + fileName;

      }

      public string ReadValue(string section,string key)

      {

      GetPrivateProfileString(section,key,"",returnValue,1024,iniFilePath);

      return returnValue.ToString();

      }

      public void WriteValue(string section,string key,string value)

      {

      WritePrivateProfileString(section,key,value,iniFilePath);

      }

      }

      }

      6.4 讀取后置文件并初始化用戶界面

      后置文件template_post.dat內(nèi)容如圖7所示。

      ▲圖7 后置文件內(nèi)容

      具體操作代碼如下:

      int[]selectRows=newint[1];//列表中當(dāng)前選中的表項(xiàng)索引。

      int postCount;//后處理器數(shù)量。

      string[] postNames;//后處理器配置列表。

      selectRows[0]=1;//默認(rèn)選中第一個(gè)項(xiàng)目。

      NXOpen.BlockStyler.ListBox listPost;

      theUfSession.Cam.OptAskPostNames(out postCount,out postNames);//獲取后置器配置列表。

      listPost.GetProperties().SetStrings("ListItems",postNames);//初始化列表。

      listPost.GetProperties().SetIntegerVector("SelectedItems",selectRows);//初始化選中項(xiàng)。

      6.5 獲取數(shù)控程序默認(rèn)后綴

      在Unigraphics NX軟件中,后置處理器會(huì)生成三個(gè)文件[9]。.pui文件用于設(shè)定與后置處理器相關(guān)的參數(shù)。.tcl文件為事件處理文件,用于設(shè)定每一個(gè)事件的處理方式。.def文件用于定義事件處理后的數(shù)據(jù)格式。當(dāng)用戶選擇后置器選項(xiàng)時(shí),解析后置處理器相對應(yīng)的.tcl文件,獲取用戶在變量set_mom_sys_output_file_suffix中設(shè)置的后綴名。.tcl文件內(nèi)容如圖8所示。

      6.6 后置處理

      在后置處理選定的數(shù)控程序時(shí),默認(rèn)的數(shù)控程序號(hào)是當(dāng)前選定的操作或組的名稱。處理前應(yīng)判斷用戶是否已經(jīng)設(shè)置了數(shù)控程序后綴,如果有則去除,并按實(shí)際后置處理器中自定義的后綴來修改,代碼如下:

      private string postMachineName;//后處理設(shè)備編號(hào)。

      private UFSetup.OutputUnits outputUnits;//輸出單位。

      ▲圖8 .tcl文件內(nèi)容

      private UFSession ufSession;//當(dāng)前會(huì)話。

      public void postProcess(Tag[]objList)//傳入操作目標(biāo)列表,每個(gè)程序?yàn)橐粋€(gè)鏈表。

      {

      Tag tagSetup;

      string ncFullName = "",ncName;

      int i = 1;

      int loction;

      foreach (Tag obj in objList)//遍歷所有程序鏈表。

      {

      ufSession.Setup.AskSetup(out tagSetup);

      ufSession.Obj.AskName(obj,out ncName);

      loction=ncName.LastIndexOf(".");

      if (loction != -1)

      {

      ncName=nc Name.Remove(loction);

      }

      ncFullName = outputDirctory + ncName + "." + suffix;//加入后綴判斷,如出現(xiàn)“.”號(hào),則從“.”開始替換程序后綴。

      uf Session.Setup.GenerateProgram(tagSetup,obj,postMachineName,ncFullName,outputUnits);//后置每個(gè)鏈表輸出數(shù)控程序。

      }

      }

      7 批量后置軟件運(yùn)行效果

      經(jīng)過調(diào)試和功能完善,使用Unigraphics NX軟件MenuScript模塊[10]將批量后置軟件添加至Unigraphics NX軟件菜單和工具欄,運(yùn)行效果如圖9所示。

      8 結(jié)束語

      經(jīng)過安全測試和代碼完善,所開發(fā)的批量后置軟件能夠滿足編程人員的編程需求。實(shí)踐表明,使用本批量后置軟件,可以提高后置處理效率70%以上,有效解決了由加工坐標(biāo)、刀具、程序編號(hào)設(shè)定等引發(fā)的錯(cuò)

      ▲圖9 批量后置軟件運(yùn)行效果

      誤問題。通過刀具定義、程序編號(hào)、加工坐標(biāo)定義等強(qiáng)制規(guī)范,能夠形成一套標(biāo)準(zhǔn)的編程習(xí)慣,提高團(tuán)隊(duì)編程協(xié)作效率。

      猜你喜歡
      配置文件后置批量
      提示用戶配置文件錯(cuò)誤 這樣解決
      批量提交在配置分發(fā)中的應(yīng)用
      非正交五軸聯(lián)動(dòng)數(shù)控機(jī)床后置處理算法開發(fā)
      搭建簡單的Kubernetes集群
      互不干涉混用Chromium Edge
      忘記ESXi主機(jī)root密碼怎么辦
      沉淀后置生物處理組合工藝的工程應(yīng)用
      Review of Research on the Prevention of HPV Infection and Cervical Cancer
      淺議高校網(wǎng)銀批量代發(fā)
      后置式自動(dòng)發(fā)卡機(jī)系統(tǒng)應(yīng)用
      昭觉县| 娄底市| 乌拉特中旗| 孟村| 南部县| 元阳县| 孝昌县| 蒲城县| 全椒县| 罗江县| 义马市| 体育| 灵丘县| 新化县| 遵义市| 韶山市| 织金县| 温州市| 铜陵市| 那曲县| 望谟县| 北辰区| 韶关市| 星座| 石门县| 红安县| 桦川县| 通化市| 绿春县| 义乌市| 桑植县| 白山市| 盐城市| 青阳县| 定边县| 香格里拉县| 莆田市| 郧西县| 平度市| 昌都县| 惠安县|