亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        HEIDENHAIN IK220 高速計數(shù)卡在數(shù)控軋輥磨床上的應用

        2012-07-08 01:04:36謝智立
        精密制造與自動化 2012年3期
        關鍵詞:磨床軋輥計數(shù)器

        謝智立

        (上海機床廠有限公司 上海 200093)

        數(shù)控軋輥磨床專用于冶金、造紙、橡膠、印機等行業(yè)磨削各類大型軋機工作輥及支承輥以及各種壓機的金屬、非金屬壓延輥等的磨削加工。可磨削圓柱形、圓錐形、輥面、輥頸、中凸、中凹正弦曲線,拋物線、弧線、CVC曲線以及用戶自定義曲線輥面。采用德國SIEMENS數(shù)控系統(tǒng)分別控制拖板往復運動、砂輪架切入進給循環(huán)、砂輪偏小擺動進給、自動測量、砂輪磨損測量和快速接近等。并具有砂輪快速趨近工件、各類輥形曲線的生成、錐面磨削、端進給、錐度誤差補償、砂輪磨損補償、曲線誤差補償、恒線速和恒功率等控制功能。配有自動測量裝置,能測量工件直徑、圓度、圓柱度、同心度、輥形誤差,其測量數(shù)據(jù)可反饋到數(shù)控磨削程序并進行自動補償。測量數(shù)據(jù)經(jīng)過運算處理后按測量項目打印出曲線圖形和誤差數(shù)據(jù)。

        1 機床的系統(tǒng)配置

        機床數(shù)控系統(tǒng)采用SIEMENS840D系統(tǒng),并在其基礎上采用了自主開發(fā)的OEM控制軟件,并且配備了HEIDENHAIN IK220高速計數(shù)卡用于閉環(huán)控制、自動測量、自動補償。

        2 HEIDENHAIN IK220 高速計數(shù)卡的原理、功能

        將IK220 高速計數(shù)卡直接插入到一個計算機PCI擴展槽接口,如圖1所示,可以直接支持HEIDENHAIN的編碼器,也可以接受正弦電流信號(11 μApp),電壓信號(1 Vpp),以及絕對值數(shù)據(jù)和小型工業(yè)接口SSI數(shù)據(jù)。同時在計算機屏幕上顯示控制軸(2根)的位置編碼器數(shù)據(jù)并保存在該計算機上作進一步的處理,常用于高分辨率的編碼器信號和快速測量數(shù)據(jù)的采集。

        圖1 計算機PCI擴展槽接口

        IK220 要正確執(zhí)行所需的功能,則要設置所對應的操作參數(shù)。當用提供的操作軟件下載參數(shù)時,功能參數(shù)則是按照默認來設置,可以通過修改參數(shù)來檢查并改變功能,具體參數(shù)見表1。

        通過在印刷電路板上的X1、X2這兩個10芯接口(如圖2所示)輸入編碼器信號,信號源為正弦電流信號(11 μApp)。相應功能軟件產品提供了編碼器信號補償,編碼器信號可以實現(xiàn)在線自動補償。

        作為一個選件,其中的一個組件可以通過1~2個細分接口和2根寬電纜擴展,如圖3所示。

        通過擴展可以連接不止一個高速計數(shù)卡來實現(xiàn)閉環(huán)測量,并且可以同時保存所有測量軸的測量數(shù)據(jù),如圖4所示。輸出信號鎖存器2引導所有相應的編碼器輸入,這樣使所有的鎖定軸采樣同時在一個循環(huán)周期運行時毫無差異。

        表1 操作參數(shù)設置

        圖2 印刷電路板

        圖3 編碼器信號傳輸

        圖4 細分接口與擴展

        3 HEIDENHAIN IK220 高速計數(shù)卡的應用實例及分析

        在C++的編程語言環(huán)境下編制一個界面并用于測量數(shù)控系統(tǒng)中各數(shù)控軸的實際運動。

        //設置操作界面,三根伺服軸,三個按鈕,帶零

        位重啟復位、帶零位啟動、帶零位停止、重啟

        復位、啟動、停止、參數(shù)設置、功能狀態(tài)等功

        能按鍵

        m_Axis0 = _T("");

        m_Axis1 = _T("");

        m_Axis2 = _T("");

        m_Check0 = FALSE;

        m_Check1 = FALSE;

        m_Check2 = FALSE;

        DDX_Text(pDX, IDC_Axis0, m_Axis0);

        DDX_Text(pDX, IDC_Axis1, m_Axis1);

        DDX_Text(pDX, IDC_Axis2, m_Axis2);

        DDX_Check(pDX, IDC_CHECK0, m_Check0);

        DDX_Check(pDX, IDC_CHECK1, m_Check1);

        DDX_Check(pDX, IDC_CHECK2, m_Check2);

        BEGIN_MESSAGE_MAP(CIK220TSTDlg, CDialog)

        ON_WM_SYSCOMMAND()

        ON_WM_PAINT()

        ON_WM_QUERYDRAGICON()

        ON_WM_TIMER()

        ON_BN_CLICKED(IDC_RESET_RI, OnResetREF)

        ON_BN_CLICKED(IDC_START_RI, OnStartREF)

        ON_BN_CLICKED(IDC_STOP_RI, OnStopREF)

        ON_BN_CLICKED(IDC_RESET, OnReset)

        ON_BN_CLICKED(IDC_START, OnStart)

        ON_BN_CLICKED(IDC_STOP, OnStop)

        ON_BN_CLICKED(IDC_CHECK0, OnCheck0)

        ON_BN_CLICKED(IDC_CHECK1, OnCheck1)

        ON_BN_CLICKED(IDC_CHECK2, OnCheck2)

        ON_BN_CLICKED(IDC_Setup, OnSetup)

        ON_BN_CLICKED(IDC_STATUS, OnStatus)

        if (!IK220Find (IKCard)) //設置計數(shù)卡基礎地址

        {

        m_IK220found = FALSE;

        AfxMessageBox ("No IK 220 found", MB_ICONSTOP);

        }

        for (int Ax=0; Ax<3; Ax++)

        {

        m_Active[Ax] = FALSE;

        OldSta[Ax] = 0xFFFF;

        m_SignalPeriod[Ax]= 0.020; //默認的信號分辨率

        m_EncoderType[Ax]= 0;// 默認的編碼器類型 0:增量式

        m_SignalType[Ax] = 1; // 默認的信號類型 1: 1Vss

        }

        for (int Ax=0; Ax<3; Ax++)

        {

        if (IKCard[Ax]!=0)

        {

        IK220Init (Ax); // 初始化高速計數(shù)卡

        if ( !IK220WritePar (Ax, 1, m_EncoderType[Ax]) )

        if ( !IK220WritePar (Ax, 2, m_SignalType[Ax] ) )

        m_Active[Ax]=TRUE;

        switch (Ax)

        {

        case 0: m_Check0=TRUE; break;

        case 1: m_Check1=TRUE; break;

        case 2: m_Check2=TRUE; break;

        }

        }

        }

        TimID = SetTimer (1, 150, NULL); //啟動計數(shù)器顯示數(shù)據(jù)值

        return TRUE; }

        void CIK220TSTDlg:OnCancel()

        {

        KillTimer (TimID);

        CDialog:OnCancel();

        }

        void CIK220TSTDlg:OnTimer(UINT nIDEvent) //用于顯示測量數(shù)值的定時器,通過它顯示測量數(shù)據(jù)的實值

        {

        double Wert;

        int Ax;

        char buffer[25];

        const char *format = "%1.6f";

        const char *hexformat = "%04X";

        CString Axis;

        ULONG Stat;

        CString StatusTXT;

        USHORT EnStatus, EnAlarm;

        for (Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        {

        if ( m_EncoderType[Ax]==0 )

        {

        if ( IK220Read48 (Ax, 0, &Wert) ) //根據(jù)參數(shù)設定里數(shù)據(jù)類型為增量式編碼器數(shù)據(jù)來讀取增量式值

        {

        Wert = Wert*m_SignalPeriod[Ax];

        sprintf(buffer, format, Wert);

        Axis = buffer;

        if (Wert>=0) Axis="+"+Axis;

        }

        else Axis = " Error ";

        }

        if ( m_EncoderType[Ax]==1 )

        {

        if ( IK220ReadEn (Ax, &EnStatus, &Wert, nAlarm) )

        //根據(jù)參數(shù)設定里數(shù)據(jù)類型為增量式編碼器數(shù)據(jù)來讀取絕對值

        {

        Wert = Wert*m_SignalPeriod[Ax];

        sprintf(buffer, format, Wert);

        Axis = buffer;

        if (Wert>=0) Axis="+"+Axis;

        }

        else Axis = " Error ";

        }

        switch (Ax) // 顯示數(shù)控軸數(shù)據(jù)值

        {

        case 0: m_Axis0 = Axis; break;

        case 1: m_Axis1 = Axis; break;

        case 2: m_Axis2 = Axis; break;

        }

        }

        UpdateData(FALSE); // 顯示數(shù)據(jù)刷新

        if (m_StatusOn && m_pModeless)

        {

        for (Ax=0; Ax<3; Ax++)

        {

        StatusTXT ="";

        if (IKCard[Ax]!=0)

        {

        if (IK220Status(Ax, &Stat))

        {

        if (OldSta[Ax] != Stat)

        {

        OldSta[Ax] = Stat;

        sprintf(buffer, hexformat, Stat);

        StatusTXT=buffer;

        StatusTXT="0x"+StatusTXT+": ";

        if (Stat & 0x00000001) StatusTXT = StatusTXT + "Latch 0, ";

        if (Stat & 0x00000002) StatusTXT = StatusTXT + "Latch 1, ";

        if (Stat & 0x00000004) StatusTXT = StatusTXT + "Latch 2, ";

        if (Stat & 0x00000020) StatusTXT = StatusTXT + "started,"; else StatusTXT = StatusTXT + "stopped, ";

        if (Stat & 0x00000040) StatusTXT = StatusTXT +"REF-Function active, ";

        if (Stat & 0x00000080) StatusTXT = StatusTXT +"Frequency Error, ";

        if (Stat & 0x00000100) StatusTXT = StatusTXT +"Amplitude Error, ";

        if ((Stat & 0x0000C000)==0x00000000) StatusTXT =

        StatusTXT + "No REF";

        if ((Stat & 0x0000C000)==0x00004000) StatusTXT =

        StatusTXT + "Wait 1. REF";

        if ((Stat & 0x0000C000)==0x00008000) StatusTXT =

        StatusTXT + "Wait 2. REF";

        if ((Stat & 0x0000C000)==0x0000C000) StatusTXT =

        StatusTXT + "REF";

        }

        }

        else

        {

        StatusTXT = " --- Status Error ---";

        }

        }

        else

        {

        StatusTXT = " --- No IK 220 installed ---";

        }

        if (StatusTXT!="")

        {

        switch (Ax)

        {

        case 0: m_pModeless->m_STEXT1 = StatusTXT;

        break;

        case 1: m_pModeless->m_STEXT2 = StatusTXT; break;case 2: m_pModeless->m_STEXT3 = StatusTXT; break;

        }

        }

        }

        }

        CDialog:OnTimer(nIDEvent);

        }

        void CIK220TSTDlg:OnReset()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220Reset (Ax); // 重置計數(shù)器

        }

        void CIK220TSTDlg:OnStart()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220Start (Ax);// 啟動計數(shù)器

        }

        void CIK220TSTDlg:OnStop()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220Stop (Ax);// 停止計數(shù)器

        }

        void CIK220TSTDlg:OnResetREF()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220ResetRef (Ax);// 到參考點計數(shù)器清零

        }

        void CIK220TSTDlg:OnStartREF()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220StartRef (Ax); // 到參考點計數(shù)器啟動

        }

        void CIK220TSTDlg:OnStopREF()

        {

        for (int Ax=0; Ax<3; Ax++)

        if (IKCard[Ax]!=0)

        if (m_Active[Ax]) IK220StopRef (Ax); // 到參考點計數(shù)器停止

        }

        void CIK220TSTDlg:OnCheck0() //激活軸選項共有三個

        {

        if (IKCard[0]!=0)

        {

        m_Acti ve[0] = !m_Active[0];

        m_Check0 = !m_Check0;

        }

        else m_Check0 = FALSE;

        }

        void CIK220TSTDlg:OnCheck1()

        {

        if (IKCard[1]!=0)

        {

        m_Active[1] = !m_Active[1];

        m_Check1 = !m_Check1;

        }

        else m_Check1 = FALSE;

        }

        void CIK220TSTDlg:OnCheck2()

        {

        if (IKCard[2]!=0)

        {

        m_Active[2] = !m_Active[2];

        m_Check2 = !m_Check2;

        }

        else m_Check2 = FALSE;

        }

        }

        void CIK220TSTDlg:OnSetup() //參數(shù)設置

        {

        int Ax;

        ULONG Para_1, Para_2;

        USHORT EnStatus, EnType, EnTurns, EnRefDist,

        EnCntDir;

        ULONG EnPeriod, EnStep;

        CSetupDlg dlgSetup;

        Ax=0;

        while ( ((IKCard[Ax]==0) || (!m_Active[Ax])) &&(Ax<=3) ) Ax++;

        if (Ax<=3)

        {

        dlgSetup.m_Period = m_SignalPeriod[Ax];

        if (!IK220ReadPar (Ax, 1, &Para_1))

        if (!IK220ReadPar (Ax, 2, &Para_2))

        dlgSetup.m_Encoder = Para_1;

        dlgSetup.m_Signal = Para_2;

        {

        Para_1 = dlgSetup.m_Encoder;

        Para_2 = dlgSetup.m_Signal;

        for (Ax=0; Ax<3; Ax++)

        if ( (IKCard[Ax]!=0) && (m_Active[Ax]) )

        {

        m_EncoderType[Ax] = dlgSetup.m_Encoder;

        m_SignalType[Ax] = dlgSetup.m_Signal;

        m_SignalPeriod[Ax] = dlgSetup.m_Period;

        if (!IK220WritePar (Ax, 1, Para_1))

        if (!IK220WritePar (Ax, 2, Para_2))

        if ( m_EncoderType[Ax]==1)

        {

        }

        }

        void CIK220TSTDlg:OnStatus()

        {

        for (int Ax=0; Ax<3; Ax++) OldSta[Ax]=0xFFFF;

        }

        4 結語

        隨著世界經(jīng)濟的發(fā)展和生產的提高,人們開始對機床的多功能和先進性的要求越來越高。由于冶金鋼鐵及汽車行業(yè)的迅猛發(fā)展,對金屬板材的精度要求越來越高。為了能壓制出高精度的板材,軋機中軋輥表面精度是決定板材精度的最主要因素,因此,軋輥的測量與磨削控制就顯得非常重要。基于SIEMENS 840D數(shù)控系統(tǒng)為機床廠家提供了極好的平臺,高速計數(shù)卡的應用提供了強大的功能,使數(shù)控軋輥磨床的自動測量、數(shù)據(jù)采樣更加準確,并得到了眾多用戶認可。經(jīng)過努力,數(shù)控軋輥磨床一定會達到國際先進水平。

        [1] 閆利文,丁曉燕,王妹婷.數(shù)控軋輥磨床測量系統(tǒng)軟件開發(fā)[J].機床與液壓, 2007, 35(7): 110-114.

        [2] IK220 PC CounterCard for HEIDENHAIN Encoders[Z]. 2010.

        [3] 趙長明,劉萬菊.數(shù)控加工工藝及設備[M].北京:高等教育出版社, 2003.

        猜你喜歡
        磨床軋輥計數(shù)器
        采用虛擬計數(shù)器的電子式膜式燃氣表
        煤氣與熱力(2022年2期)2022-03-09 06:29:30
        彈性夾具在軸承磨床中的應用
        哈爾濱軸承(2020年3期)2021-01-26 00:35:02
        梅鋼1780產線高速鋼軋輥使用維護
        冶金設備(2020年2期)2020-12-28 00:15:34
        淺析曲軸磨床的可靠性改進
        MZ208全自動液壓磨床PLC程序改進
        數(shù)控軋輥磨床主輔系統(tǒng)分離的探討
        計數(shù)器競爭冒險及其處理的仿真分析
        軋輥用012Al鋼熱處理試驗研究
        上海金屬(2014年1期)2014-12-18 06:52:03
        任意N進制計數(shù)器的設計方法
        河南科技(2014年10期)2014-02-27 14:09:30
        基于單片機的仰臥起坐計數(shù)器
        亚洲国产av剧一区二区三区| 久久久久久国产精品无码超碰动画 | 欧美拍拍视频免费大全| 欧美大成色www永久网站婷| 伊人婷婷在线| 美女露屁股无内裤视频| 亚洲一区第二区三区四区| 2020无码专区人妻系列日韩| 天美麻花果冻视频大全英文版| 极品av在线播放| 亚洲乱妇熟女爽到高潮视频高清 | 色老板精品视频在线观看| 国产午夜精品理论片| 一本久道视频无线视频试看| 久久久国产精品123| 99精品国产一区二区三区| 国产农村妇女毛片精品久久久| 国产亚洲亚洲精品视频| 国产免费一区二区三区精品视频| 免费久久人人爽人人爽av| 婷婷九月丁香| 国产精品一区二区黄色片| 日日噜噜夜夜狠狠久久丁香五月| 成人免费看吃奶视频网站| 亚洲欧美国产日产综合不卡| 内谢少妇xxxxx8老少交| 亚洲AV无码永久在线观看| 自拍偷拍亚洲视频一区二区三区| 好吊妞视频这里有精品| 18禁超污无遮挡无码免费游戏| 日本不卡一区二区高清中文| 国产人妖在线观看一区二区三区 | 久久噜噜噜| 视频一区视频二区亚洲| av无码国产精品色午夜| 亚洲中文字幕无码久久2020| 国产一区二区三区最新视频| 免费观看在线视频播放| 午夜dy888国产精品影院| 亚洲日韩乱码中文无码蜜桃臀| 午夜天堂精品一区二区|