国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

謝智立

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

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

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

機床數(shù)控系統(tǒng)采用SIEMENS840D系統(tǒng),并在其基礎(chǔ)上采用了自主開發(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è)置所對應(yīng)的操作參數(shù)。當(dāng)用提供的操作軟件下載參數(shù)時,功能參數(shù)則是按照默認來設(shè)置,可以通過修改參數(shù)來檢查并改變功能,具體參數(shù)見表1。

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

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

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

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

圖2 印刷電路板

圖3 編碼器信號傳輸

圖4 細分接口與擴展

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

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

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

位重啟復(fù)位、帶零位啟動、帶零位停止、重啟

復(fù)位、啟動、停止、參數(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è)置計數(shù)卡基礎(chǔ)地址

{

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è)定里數(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è)定里數(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ù)設(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 結(jié)語

隨著世界經(jīng)濟的發(fā)展和生產(chǎn)的提高,人們開始對機床的多功能和先進性的要求越來越高。由于冶金鋼鐵及汽車行業(yè)的迅猛發(fā)展,對金屬板材的精度要求越來越高。為了能壓制出高精度的板材,軋機中軋輥表面精度是決定板材精度的最主要因素,因此,軋輥的測量與磨削控制就顯得非常重要。基于SIEMENS 840D數(shù)控系統(tǒng)為機床廠家提供了極好的平臺,高速計數(shù)卡的應(yīng)用提供了強大的功能,使數(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ù)控加工工藝及設(shè)備[M].北京:高等教育出版社, 2003.

猜你喜歡
磨床軋輥計數(shù)器
采用虛擬計數(shù)器的電子式膜式燃氣表
煤氣與熱力(2022年2期)2022-03-09 06:29:30
彈性夾具在軸承磨床中的應(yīng)用
哈爾濱軸承(2020年3期)2021-01-26 00:35:02
梅鋼1780產(chǎn)線高速鋼軋輥使用維護
淺析曲軸磨床的可靠性改進
MZ208全自動液壓磨床PLC程序改進
數(shù)控軋輥磨床主輔系統(tǒng)分離的探討
計數(shù)器競爭冒險及其處理的仿真分析
軋輥用012Al鋼熱處理試驗研究
上海金屬(2014年1期)2014-12-18 06:52:03
任意N進制計數(shù)器的設(shè)計方法
河南科技(2014年10期)2014-02-27 14:09:30
基于單片機的仰臥起坐計數(shù)器
德格县| 信宜市| 永康市| 封开县| 南京市| 南雄市| 北宁市| 延边| 广河县| 新兴县| 五寨县| 长丰县| 永德县| 沧源| 阜南县| 浏阳市| 九江县| 巴青县| 宁河县| 星座| 海兴县| 盱眙县| 渑池县| 遂平县| 永定县| 肇源县| 宣恩县| 铜梁县| 治县。| 紫金县| 海伦市| 新龙县| 河东区| 徐闻县| 肥乡县| 仁化县| 沙湾县| 凌海市| 长汀县| 桐柏县| 临沂市|