您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 用C语言编写华中数控铣床PLC程序
如何用C语言编写华中数控系统PLC程序第1页共15页版权所有©2000,武汉华中数控系统有限公司保留所有权利@HuazhongCNC.comtel:+86-27-87545256,87542713fax:+86-27-87545256,87542713如何用C语言编写华中数控系统PLC程序一、铣床内置式PLC的结构华中数控铣削数控系统的PLC为内置式PLC,其逻辑结构如图1所示。其中:X寄存器为机床输出到PLC的开关信号,最大可有128组(或称字节,下同);Y寄存器为PLC输出到机床的开关信号,最大可有128组;R寄存器为PLC内部中间寄存器,共有768组;G寄存器为PLC输出到计算机数控系统的开关信号,最大可有256组;F寄存器为计算机数控系统输出到PLC的开关信号,最大可有256组;P寄存器为PLC外部参数,可由机床用户设置(请运行参数子菜单中的PMC用户参数命令),共有100组;B寄存器为断电保护信息,共有100组。X、Y寄存器会随不同的数控机床而有所不同,主要和实际的机床输入/输出开关信号(如限位开关、控制面板开关)有关。但X、Y寄存器一旦定义好,软件就不能更改其寄存器各位的定义;如果要更改,必须更改相应的硬件接口或接线端子。R寄存器是PLC内部的中间寄存器,可由PLC软件任意使用。G、F寄存器由数控系统与PLC事先约定好的,PLC硬件和软件都不能更改其寄存器各位(bit)的定义。P寄存器可由PLC程序与机床用户任意定义。二、铣床内置式PLC的软件结构及其运行原理和一般C语言程序都必须提供main()函数一样,用户编写内置式PLC的C语言程序必须提供如下系统函数定义及系统变量值:externvoidinit(void);//初始化PLCexternunsignedplc1_time;//函数plc1()的运行周期,单位:毫秒externvoidplc1(void);//PLC程序入口1externunsignedplc2_time;//函数plc2()的运行周期,单位:毫秒externvoidplc2(void);//PLC程序入口2其中,1.函数init()是用户PLC程序的初始化函数,系统将只在初始化时调用该函数一次。该函数一般设置系统MSBT功能的响应函数及B、P系统函数内置式PLCR寄存器机床数控系统GFXY图1华中数控系统内置式PLC的逻辑结构如何用C语言编写华中数控系统PLC程序第2页共15页版权所有©2000,武汉华中数控系统有限公司保留所有权利@HuazhongCNC.comtel:+86-27-87545256,87542713fax:+86-27-87545256,87542713系统复位的初始化工作;2.变量plc1_time及plc2_time的值分别表示plc1()、plc2()函数被系统周期调用的周期时间,单位:毫秒。系统推荐值分别为16毫秒及32毫秒,即plc1_time=16,plc2_time=32;3.函数plc1()及plc2()分别表示数控系统调用PLC程序的入口,其调用周期分别由变量plc1_time及plc2_time指定。系统初始化PLC时,将调用PLC提供的init()函数(该函数只被调用一次)。在系统初始化完成后,数控系统将周期性地运行如下过程:1.从硬件端口及数控系统成批读入所有X、F、P寄存器的内容;2.如果plc1_time所指定的周期时间已到,调用函数plc1();3.如果plc2_time所指定的周期时间已到,调用函数plc2();4.系统成批输出G、Y、B寄存器。因此,用户提供的plc1()函数及plc2()函数必须根据X及F寄存器的内容正确计算出G及Y寄存器的值。三、PLC程序的编写及其编译最简单的PLC程序只要包含系统必须的几个函数和变量定义即可编译运行(当然它什么事也不能做)。假设我们建立一个文本文件并命名为plc_null.cld,其文件内容为://plc_null.cld://PLC程序空框架,保证可以编译运行,但什么功能也不提供////版权所有©2000,武汉华中数控系统有限公司,保留所有权利。//@huazhongcnc.com//tel:+86-27-87545256,87542713fax:+86-27-87545256,87542713//最后更改日期:2000.10.31//作者:阳道善email:yang@HuazhongCNC.com//#includeplc.h//PLC系统头文件voidinit()//初始化PLC{}voidplc1(void)//PLC程序入口1{plc1_time=16;}voidplc2(void);//PLC程序入口2{plc2_time=32;}如果您安装了MSDOS6.22及BorlandC++3.1软件,在铣床数控系统的PLC目录下,输入如下命令:C:\hcnc2000\plcmakeplcplc_null如何用C语言编写华中数控系统PLC程序第3页共15页版权所有©2000,武汉华中数控系统有限公司保留所有权利@HuazhongCNC.comtel:+86-27-87545256,87542713fax:+86-27-87545256,87542713系统会响应:1file(s)copiedMAKEVersion3.6Copyright(c)1992BorlandInternationalAvailablememory64299008bytesbcc+plc.CFG-Splc.cldBorlandC++Version3.1Copyright(c)1992BorlandInternationalplc.cld:Availablememory4199568TASM/MX/Oplc.ASM,plc.OBJTurboAssemblerVersion3.1Copyright(c)1988,1992BorlandInternationalAssemblingfile:plc.ASMErrormessages:NoneWarningmessages:NonePasses:1Remainingmemory:421ktlink/t/v/m/c/Lc:\BC31\LIB@MAKE0000.$$$TurboLinkVersion5.1Copyright(c)1992BorlandInternationalWarning:DebuginfoswitchignoredforCOMfiles1file(s)copied并且又回到DOS提示符下:C:\hcnc2000\plc这时表示我们的第一个PLC程序编译成功。编译结果为文件plc_null.com。然后,我们可以更改我们的铣床软件系统配置文件NCBIOS.CFG,并加上如下一行文本让系统启动时加载我们新近编写的PLC程序:device=c:\hcnc2000\plc\plc_null.com以上就是在华中数控系统平台上编写并编译C语言PLC程序的全过程,非常简单。下面,让我们多做一点工作。假设我们在用户按下操作面板的“循环起动”键时,点亮“+X点动”灯。(让我们再一次假定“循环起动”键的输入点为X0.0,“+X点动”灯的输出点位置为Y0.7。)更改plc_null.cld文件的plc1()函数如下:voidplc1(void)//PLC程序入口1{plc1_time=16;if(X[0]&0x01)Y[0]|=0x80;elseY[0]&=~0x80;}重新输入命令makeplcplc_null,并将编译所得的文件plc_null.com放入NCBIOS.CFG所指定的位置,重新起动铣床数控系统后,当我们按下“循环起动”键时,“+X点动”灯应该被点亮。更复杂的PLC程序,可参考您所在数控系统PLC目录下的*.CLD文件,其中应该有一个是您数控系统的PLC源程序(前提是您已定购数控系统的PLC源程序)。如何用C语言编写华中数控系统PLC程序第4页共15页版权所有©2000,武汉华中数控系统有限公司保留所有权利@HuazhongCNC.comtel:+86-27-87545256,87542713fax:+86-27-87545256,87542713四、铣床内置式PLC的F、G、B寄存器的约定操作及接口函数说明前面已讲过,PLC的G及F寄存器是数控系统与PLC约定好的,用户不可随便更改其寄存器各位(bit)的含义。为方便用户编程及记忆,系统提供如下宏及函数供用户使用。(建议用户仔细阅读最后一节提供的系统函数C程序实现源代码,学会如何使用系统提供的宏及函数。)1.对于各寄存器的访问,系统提供如下变量供用户灵活使用//以下外部变量声明都指向同一块内存,即PLC中间寄存器R,共有768个字节externunsignedcharR_uc[];//以无符号字符型存取R寄存器externcharR_c[];//以字符型存取R寄存器externunsignedR_ui[];//以无符号整型存取R寄存器externintR_i[];//以整型存取R寄存器externunsignedlongR_ul[];//以无符号长整型存取R寄存器externlongR_l[];//以长整型存取R寄存器externunsignedcharR[];//以无符号字符型存取R寄存器//同理,和R寄存器一样,系统提供如下变量定义供用户灵活使用,其中://_uc表示以无符号字符型存取PLC寄存器//_c代表以字符型存取PLC寄存器_ui代表以无符号整型存取PLC寄存器//_i代表以整型存取PLC寄存器_ul代表以无符号长整型存取PLC寄存器//_l代表以长整型存取PLC寄存器externunsignedcharX_uc[],Y_uc[],*F_uc[],*G_uc[],P_uc[],B_uc[];externcharX_c[],Y_c[],*F_c[],*G_c[],P_c[],B_c[];externunsignedX_ui[],Y_ui[],*F_ui[],*G_ui[],P_ui[],B_ui[];externintX_i[],Y_i[],*F_i[],*G_i[],P_i[],B_i[];externunsignedlongX_ul[],Y_ul[],*F_ul[],*G_ul[],P_ul[],B_ul[];externlongX_l[],Y_l[],*F_l[],*G_l[],P_l[],B_l[];externunsignedcharX[],Y[];externunsigned*F[],*G[],P[],B[];2.对于F寄存器(请注意F、G均为地址指针),系统提供如下宏定义,供用户使用:2.1轴状态字#defineaxis_stat(x)(F_ui[(x)*10])//轴状态字,共16位(bit)其中宏参数x表示轴号,其值可为0,1,2,……15,即系统最大可有16个轴。其中各位的含义定义如下:#defineAX_SLSP0x0001//轴正极限到#defineAX_SLSN0x0002//轴负极限到#defineAX_HOME_LAMP0x0004//轴正在回零#defineAX_CMP_LAMP0x0008//轴正在进行间隙或螺距补偿#defineAX_HOME_FIN0x0010//回零结束#defineAX_FSTOP_LAMP0x0020//轴已精确定位停止#defineAX_HOME_GOING0x0040//轴正在回零#defineAX_MOVING_LAMP0x0080//轴正在移动#defin
本文标题:用C语言编写华中数控铣床PLC程序
链接地址:https://www.777doc.com/doc-291558 .html