用C語言編寫華中數(shù)控銑床PLC程序_第1頁
用C語言編寫華中數(shù)控銑床PLC程序_第2頁
用C語言編寫華中數(shù)控銑床PLC程序_第3頁
用C語言編寫華中數(shù)控銑床PLC程序_第4頁
用C語言編寫華中數(shù)控銑床PLC程序_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

機床GXFY機床GXFYPLC其中:X寄存器為機床輸出到PLC的開關(guān)信號,最大可有128組(或稱字節(jié),Y寄存器為PLC輸出到機床的開關(guān)信號,G寄存器為PLC輸出到計算機數(shù)控系統(tǒng)F寄存器為計算機數(shù)控系統(tǒng)輸出到PLC的開關(guān)信P寄存器為PLC外部參數(shù),可由機床用戶設(shè)置(請運行參數(shù)子菜單中的B寄存器為斷電保護信息,共有100組。端子。其寄存器各位(bit)的定義。P寄存器可由PLC程序與機床用戶任意定義。和一般C語言程序都必須提供main()函數(shù)一樣,用戶編寫內(nèi)置式PLC的C語言程序必須提供如下系統(tǒng)函數(shù)定義及系統(tǒng)變量值:其中,1.函數(shù)init()是用戶PLC程序的初始化函數(shù),系統(tǒng)將只在初始化時系統(tǒng)復(fù)位的初始化工作;3.函數(shù)plc1()及plc2()分別表示數(shù)控系統(tǒng)調(diào)用PLC程序的入口,其調(diào)用周期分別由變量plc1_time及plc2_在系統(tǒng)初始化完成后,數(shù)控系統(tǒng)將周期性地運行如下過程:因此,用戶提供的plc1()函數(shù)及plc2()函數(shù)必須根據(jù)X及F寄存器的內(nèi)容正確計算出G及Y寄存器的值。最簡單的PLC程序只要包含系統(tǒng)必須的幾個函數(shù)和變量定義即可編譯運行文件內(nèi)容為://PLC程序空框架,保證可以編譯運行,但什么功能也////版權(quán)所有?2000,武漢華中數(shù)控系統(tǒng)有限公司,保留所有權(quán)利。//email:market@huazhongcnc.c//tel:+86-27-87545256,87542713fax:+86-27-87545256,87542713//作者:陽道善email:yang@H//{}{plc1_time=16;}{plc2_time=32;}C:\hcnc2000\plc>makeplc系統(tǒng)會響應(yīng):MAKEVersion3.6CopyrightAvailablememory64299008bybcc+plc.CFG-Splc.cldBorlandC++Version3.1Copyrightplc.cld:Availablememory4199TASM/MX/Oplc.ASMTurboAssemblerVeAssemblingfile:plc.Warningmessages:NoRemainingmemory:4tlink/t/v/m/c/Lc:\BC31\LIB@MAKE0000TurboLinkVersion5.1CopyrigWarning:Debuginfoswitchig這時表示我們的第一個PLC程序編譯成功。編譯結(jié)果為文件plc_。然后,我們可以更改我們的銑床軟件系統(tǒng)配置文件NCBIOS.CFG,并加上如下一行文本讓系統(tǒng)啟動時加載我們新近編寫的PLC程序:device=c:\hcnc2000\plc\plc以上就是在華中數(shù)控系統(tǒng)平臺上編寫并編譯C語言PLC程序的全過程,非常簡單。voidplc1(void)//PLC程序入口1{plc1_time=16;}重新輸入命令makeplcplc_null,并將編譯所得的文件plc_放入中應(yīng)該有一個是您數(shù)控系統(tǒng)的PLC源程序(前提是您已定購數(shù)控系統(tǒng)的PLC源前面已講過,PLC的G及F寄存器是數(shù)控系統(tǒng)與PLC約定好的,函數(shù)供用戶使用。建(議用戶仔細閱讀最后一節(jié)提供的系統(tǒng)函數(shù)C程序?qū)崿F(xiàn)源代//同理,和R寄存器一樣,系統(tǒng)提供如下變量定義供用戶靈活使用,其中://_c代表以字符型存取PLC寄存器_ui代表以無符號整型存取PLC寄存器//_i代表以整型存取PLC寄存器_ul代表以無符號長整型存取PLC寄存器X_c[],Y_c[],*F_c[],*G_c[],X_i[],Y_i[],*F_i[],*G_i[],X_l[],Y_l[],*F_l[],*G_l[],戶使用:#defineaxis_stat(x)(F_ui[(x)*10])//軸狀態(tài)字,共16位(bi其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。其中各位的含義定義如下:0x0001//軸正極限到0x0002//軸負(fù)極限到0x0004//軸正在回零0x0008//軸正在進行間隙或螺距補償0x0010//回零結(jié)束0x0020//軸已精確定位停止0x0040//軸正在回零0x0080//軸正在移動0x0100//軸非連接狀態(tài)指示0x0200//失敗指示燈0x0400//警報0x0800//軸已回零,坐標(biāo)系已建立0x1000//軸伺服使能允許0x2000//軸就緒0x4000//軸聯(lián)機0x8000//軸存在例:unsignedintu1=*axis_stat(if((u1&AX_EXIST)==0)//{}#defineaxis_pout(x)(F_l[(x)*1其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。例,取某軸當(dāng)前位置的函數(shù)可用C語言表述如下:longget_axis_pos(int{l=*axis_pout(axis)+(*axis_pic_a}#defineaxis_pact(x)(F_l[(x)*10+3])//軸的實際位置2.4軸當(dāng)前移動速度,單位:脈沖當(dāng)#defineaxis_speed(x)(F_i[(x)*2.5軸的負(fù)載電流,只對華中11型伺服有效,請參見"#defineaxis_current(x)(F_i[(x#defineaxis_vmax(x)(F_i[(x)*10+7])其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。例,設(shè)置某一個軸步進的函數(shù)可用C語言表達如下:voidset_axis_step(intaxis,longdisplaceme{l=*axis_pic_a(axis)+displv=l1/200*(*sys_iip_time(}#definech_user_out(x)(F_ul[(x)*20+160])//通用戶在G代碼程序中,可定義自已特有的PLC設(shè)數(shù)控機床在生產(chǎn)流水線上運行,我們希望數(shù)控機床加工完一道工序后為Y7.0)通知生產(chǎn)線這臺數(shù)控機床已完成某工序,這時,我們可以在G代碼的最后加上這樣一行(請參見華中數(shù)控銑削系統(tǒng)數(shù)控編程說明中的宏指令編unsignedlonguo=*ch_user#definech_stat(x)(F_ui[(x)*20+162])//通道狀態(tài)其中宏參數(shù)x表示通道號,其值可為0,1,2,3,即系統(tǒng)最大可有4個通道。其值各位的意義定義如下:#defineCH_NORMAL_CUTTING0x0001//正在加工,非G00指令#defineCH_THREAD_CUTTING0x0002//正在螺紋加工#defineCH_DEN0x0004//通道已#defineCH_FEEDHOLD_LAMP0x0010//進給保#defineCH_CYCLE_LAMP0x0020//循環(huán)#defineCH_VERIFY_LAMP#defineCH_CUT_USE_OUT0x0080//通道刀具壽命已到#defineCH_FAIL_LAMP0x2000//通道失敗#defineCH_ALARM_LAMP#defineCH_RESET_LAMP0x8000//通道正在復(fù)位#definech_mst_stb(x)(F_ui[(x)*20+163])//通道MST指令請求其中宏參數(shù)x表示通道號,其值可為0,1,2,3,即系統(tǒng)最大可有4個通道。其值各位的意義定義如下:#defineCH_M_STB0x0100//M指令#defineCH_MSTHOLD_CMD0x200#defineCH_MST_CANCEL#definechMcode(x)(F_i[(x)*#definechTcode(x)(F_i[(x)*20+165#definechBcode(x)(F_#definechScode(x)(F_i[(x)*#definech_var(x,n)(F_ui[(x)*20+170+(n)#definesys_stat()(F_u系統(tǒng)狀態(tài)字各位的定義如下:0x0001//系統(tǒng)斷電保護區(qū)丟失0x0080//系統(tǒng)已啟動(軟件安裝完成)0x1000//系統(tǒng)參數(shù)錯0x2000//系統(tǒng)故障0x4000//系統(tǒng)報警0x8000//系統(tǒng)復(fù)位#definesys_iip_time()#definesys_pr1md()#definesys_var1(n)(F_ui[240+(n)])//系統(tǒng)變量組3.對于G寄存器,系統(tǒng)提供如下宏定#defineaxis_ctrl(x)(G_ui[(x)*10])//軸控制其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。其中各位的含義定義如下:#defineAX_LSP0x0001/#defineAX_LSN0x0002/設(shè)置/軸負(fù)極限到,并急停#defineAX_HOME_SW0x0004//軸參考#defineAX_PHASE_Z0x0010//零相脈沖信號#defineAX_DISABLE_P0x0020//正極限到,但不急停#defineAX_HMODE_SW0x0040//設(shè)置軸自動回零#defineAX_DISABLE_N0x0080//負(fù)極限到#defineAX_UNLINK0x0100//設(shè)置軸不連接#defineAX_LOCK0x0200//#defineAX_SVFAIL_IN0x0400//外部伺服故障#defineAX_NC_OFF0x0800//關(guān)NC軸#defineAX_UNCLAMP0x2000//設(shè)置軸松開,然后可人工轉(zhuǎn)動電機#defineAX_ESTOP0x4000//設(shè)置軸外部急停#defineAX_RESET0x8000//設(shè)置軸外部復(fù)位#defineaxis_pic_a(x)(G_l[(x)*10+1])//軸移動位移3.3設(shè)置軸增量移動速度,單位:內(nèi)#defineaxis_pic_v(x)(G_i[(x)*10+3])//軸移動速度#defineaxis_pvcmd(x)(G_i[(x)*10+4])//#defineaxis_pecmd(x)(G_i[(x)*10+5])其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。利用本宏可在PLC中設(shè)置相應(yīng)軸當(dāng)前的間隙補償值或螺距補償值,系統(tǒng)會根據(jù)PLC的輸入對當(dāng)前軸進行補償。#definech_user_in(x)(G_ul[(x)*20+160])//通道用戶輸入屏蔽其中宏參數(shù)x表示軸號,其值可為0,1,2,……15,即系統(tǒng)最大可有16個軸。該宏同上一節(jié)2.7所介紹的宏ch_user_out(x)相#definech_ctrl(x)(G_ui[(x)*20其中宏參數(shù)x表示通道號,其值可為0,1,2,3,即系統(tǒng)最大可有4個通道。其#defineCH_MODE_MSK0x0007//通道模式屏蔽位#defineMODE_AUTO#defineMODE_JOG2//點動模式#defineMODE_STEP3//步進模式#defineMODE_HANDWHEEL4//手搖模式#defineMODE_REF_RETURN5#defineCH_SGL_BLK0x0008//單段方式#defineCH_FEEDHOLD_SW0x001#defineCH_CYCLE_SW0x0#defineCH_DRY_RUN0x0040//空運行#defineCH_ESC_SW0x0080//用戶面板要求當(dāng)前段運行取消#defineCH_FLUSH0x0100//通道超前插補數(shù)據(jù)清除#defineCH_FSTOP0x0200//通道#defineCH_PROC_CANCEL0x0400//程序運行結(jié)束#defineCH_ESTOP0x4000#defineCH_RESET0x8000#definech_mst_ack(x)(G_ui[(x)*20+其中宏參數(shù)x表示通道號,其值可為0,1,2,3,即系統(tǒng)最大可有4個通道。其#defineCH_M_ACK0x0001//PLC#defineCHTACK0x0004#defineCHBACK0x0008#defineCH_MST_BUSY0x0010//通道#defineCH_MSTHOLD_LAMP0x0020//MST#definech_feedover(x)(G_ui[(x)*20+164])#definech_rapidover(x)(G_ui[(x)*20+165])#definech_cut_inuse(x)(G_i[(x)*20+166])#definech_spdl_speed(x)(G_i[(x)*20+167])//主軸轉(zhuǎn)動速度#definech_skip_sw(x)(G_ui[(x)*20+168])/跳選段的具體實現(xiàn)如下:在G代碼程序中需要加工時選擇運行的G代碼行的開頭加入‘/’或‘//’,波段開關(guān)在哪一檔時,應(yīng)該跳過該段程序行。例,設(shè)在數(shù)控程序中有如下行:則跳選段開關(guān)處在波段7時,數(shù)控系統(tǒng)將跳過這一段程序??刂泼姘迳媳仨氂幸粋€跳選段波段開關(guān)或其它類型段的類型(如禁止跳選段、跳1類段、跳2類段、---跳9類段等)。PLC程序中,必須檢測跳選段波段開關(guān)的狀態(tài)。如果禁止跳選段功能,其中,宏ch_skip_sw(int)的參數(shù)為通道號。#definech_mst_mod(x,n)(G_i[(x)*20+170+(n)])//通道MST其中宏參數(shù)x表示通道號,其值可為0,1,2,3,即系統(tǒng)最大可有4個通道;參數(shù)n表示狀態(tài)字節(jié)偏移量,具體定義如下:#definemodMcode(ch)(*ch_m#definemodScode(ch)(*ch_mst_mod(#definemodTcode(ch)(*#definemodBcode(ch)#definemod_mst_busy(ch)(*c0x0002//S指令忙,不能再接0x0004//T指令忙,不能再接受0x0008//B指令忙,不能再接受#definemsthold_dis(ch)(*ch_mst_mod(ch,4))宏表示PLC不能按數(shù)控系統(tǒng)要求立即停止正在執(zhí)行的MST指令。其中各位含義如下:#defineCHTHDIS0x04#defineCHBHDIS0x08#definemod_m00_m01(ch)(*ch_mst_mod(ch,4))#defineCH_M000x1000//M00指令#defineCH_M010x2000//M01指令對其進行特殊處理。系統(tǒng)要求在函數(shù)plc1()中對“循環(huán)起動”按鍵進行處理之前,if(mod_m00_m01(0)&(CH_M00|CH_M01)){mod_m00_m01(0)&=~(CH_M00|CH}{u1=X[2]&R[12]&R[22]&3;//假設(shè)“循環(huán)啟u2=(X[2]|R[12]|R[22])&3;//假設(shè)“進給保{}#definesys_ctrl()(G_ui[250])//其控制字各位定義如下:0x0001//保存斷電緩沖0x0002//保存刀具狀態(tài)0x0004//保存坐標(biāo)0x0008//保存位置0x0010//保存錯誤0x1000//裝載參數(shù)0x4000//系統(tǒng)停止0x8000//系統(tǒng)復(fù)位#definesys_ext_aPLC最多可定義15種外部報警信息。報警信息可在參數(shù)中設(shè)置。這樣PLC程序也可以向系統(tǒng)及用戶報警。#definesys_var2(n)(G_ui[240+(n)])//系統(tǒng)變量組2(n)4.對于B寄存器,系統(tǒng)提供如下宏定義,供用戶使用:#definetot_mag_pos()(voidset_axis_home(intaxis,//所指定的軸號:0-15注:實際上,本節(jié)提供的函數(shù)都非常簡單,用戶也可以根據(jù)前面幾節(jié)的介紹voidset_axis_home(intaxis,intstart_st{{}{}}voidset_axis_jog(intaxis,//所指定的intspeed);//點動速度,單位:內(nèi)部脈沖/插補本函數(shù)可以用C語言表達如下:voidset_axis_jog(int{}voidset_axis_step(intaxis,//所指定的軸號:0-15longdisplacement);//步進增量,單位:本函數(shù)可以用C語言表達如下:voidset_axis_step(intaxis,longdisplaceme{l=*axis_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論