用C语言编写华中数控铣床PLC程序

上传人:夏** 文档编号:564816852 上传时间:2023-01-11 格式:DOCX 页数:17 大小:65.80KB
返回 下载 相关 举报
用C语言编写华中数控铣床PLC程序_第1页
第1页 / 共17页
用C语言编写华中数控铣床PLC程序_第2页
第2页 / 共17页
用C语言编写华中数控铣床PLC程序_第3页
第3页 / 共17页
用C语言编写华中数控铣床PLC程序_第4页
第4页 / 共17页
用C语言编写华中数控铣床PLC程序_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《用C语言编写华中数控铣床PLC程序》由会员分享,可在线阅读,更多相关《用C语言编写华中数控铣床PLC程序(17页珍藏版)》请在金锄头文库上搜索。

1、如何用C语言编写华中数控系统PLC程序一、铣床内置式 PLC 的结构华中数控铣削数控系统的PLC为内置式PLC,其逻辑结构如图1所示。图1华中数控系统内置式PLC的逻辑结构其中:X寄存器为机床输出到PLC的开关信号,最大可有128组(或称字节,下同);Y寄存器为PLC输出到机床的开关信号,最大可有128组;R 寄存器为 PLC 内部中间寄存器,共有 768 组;G寄存器为PLC输出到计算机数控系统的开关信号,最大可有256组; F寄存器为计算机数控系统输出到PLC的开关信号,最大可有256组; P 寄存器为 PLC 外部参数,可由机床用户设置(请运行参数子菜单中的PMC 用户参数命令),共有

2、100 组;B 寄存器为断电保护信息,共有 100 组。X、Y 寄存器会随不同的数控机床而有所不同,主要和实际的机床输入/输出 开关信号(如限位开关、控制面板开关)有关。但X、Y寄存器一旦定义好,软件 就不能更改其寄存器各位的定义;如果要更改,必须更改相应的硬件接口或接线 端子。R寄存器是PLC内部的中间寄存器,可由PLC软件任意使用。G、F寄存器由数控系统与PLC事先约定好的,PLC硬件和软件都不能更改 其寄存器各位(bit)的定义。P 寄存器可由 PLC 程序与机床用户任意定义。二、铣床内置式 PLC 的软件结构及其运行原理和一般C语言程序都必须提供main()函数一样,用户编写内置式PL

3、C的C 语言程序必须提供如下系统函数定义及系统变量值:extern void init(void);/初始化 PLCextern unsigned plc1_time; 函数plc1 ()的运行周期,单位:毫秒 extern void plc1(void);/PLC 程序入口 1extern unsigned plc2 _time; 函数plc2()的运行周期,单位:毫秒 extern void plc2(void);/PLC 程序入口 2其中,1. 函数init()是用户PLC程序的初始化函数,系统将只在初始化时 调用该函数一次。该函数一般设置系统MSBT功能的响应函数及系统复位的初始化工作

4、;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

5、 所指定的周期时间已到,调用函数 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,武汉华中数控系统

6、有限公司,保留所有权利。/ http:/email: tel: +86-27-87545256,87542713fax: +86-27-87545256,87542713/ 最后更改日期: 2000.10.31/ 作者:阳道善 email: yangHuazhongCNC.com/#include plc.h /PLC 系统头文件void init()初始化 PLCvoid plc1(void) /PLC 程序入口 1plc1_time=16;void plc2(void); /PLC 程序入口 2plc2_time=32;如果您安装了 MSDOS6.22及Borland C+3.1软件,在

7、铣床数控系统的PLC目录下,输入如下命令:C:hcnc2000plcmakeplc plc_null系统会响应:1 file(s) copiedMAKE Version 3.6 Copyright (c) 1992 Borland InternationalAvailable memory 64299008 bytesbcc +plc.CFG -S plc.cldBorland C+ Version 3.1 Copyright (c) 1992 Borland Internationalplc.cld:Available memory 4199568TASM /MX /O plc.ASM,pl

8、c.OBJTurbo Assembler Version 3.1 Copyright (c) 1988, 1992 Borland InternationalAssembling file: plc.ASMError messages: NoneWarning messages: NonePasses:1Remaining memory: 421ktlink /t/v/m/c/Lc:BC31LIB MAKE0000.$Turbo Link Version 5.1 Copyright (c) 1992 Borland InternationalWarning: Debug info switch

9、 ignored for COM files1 file(s) copied并且又回到 DOS 提示符下:C:hcnc2000plc这时表示我们的第一个 PLC 程序编译成功。编译结果为文件 plc_。 然后,我们可以更改我们的铣床软件系统配置文件NCBIOS.CFG,并加上如下 一行文本让系统启动时加载我们新近编写的 PLC 程序: device=c:hcnc2000plcplc_以上就是在华中数控系统平台上编写并编译C语言PLC程序的全过程,非 常简单。下面,让我们多做一点工作。假设我们在用户按下操作面板的“循环起动” 键时,点亮“+X点动”灯。(让我们再一次假定“循环起动”键的输入点为X

10、0.0, “+X 点动”灯的输出点位置为 Y0.7。)更改plc_null.cld文件的plcl ()函数如下:void plc1(void) /PLC 程序入口 1plc1_time=16;if ( X0 & 0x01 )Y0 |= 0x80;elseY0 &= 0x80;重新输入命令 makeplc plc_null,并将编译所得的文件plc_放入 NCBIOS.CFG 所指定的位置,重新起动铣床数控系统后,当我们按下“循环起 动”键时,“+X点动”灯应该被点亮。更复杂的PLC程序,可参考您所在数控系统PLC目录下的*.CLD文件,其 中应该有一个是您数控系统的PLC源程序(前提是您已定购

11、数控系统的PLC源程 序)。四、铣床内置式PLC的F、G、B寄存器的约定操作及接口函数说明前面已讲过,PLC的G及F寄存器是数控系统与PLC约定好的,用户不可 随便更改其寄存器各位(bit)的含义。为方便用户编程及记忆,系统提供如下宏及 函数供用户使用。(建议用户仔细阅读最后一节提供的系统函数C程序实现源代 码,学会如何使用系统提供的宏及函数。 )1. 对于各寄存器的访问,系统提供如下变量供用户灵活使用以下外部变量声明都指向同一块内存,即PLC中间寄存器R,共有768个字节extern unsigned char extern charextern unsigned extern intext

12、ern unsigned long extern longextern unsigned charR_uc; 以无符号字符型存取R寄存器 R_c; 以字符型存取R寄存器 R_ui; 以无符号整型存取R寄存器R_i;以整型存取R寄存器R_ul; 以无符号长整型存取R寄存器 R_l;以长整型存取R寄存器R;以无符号字符型存取R寄存器同理,和R寄存器一样,系统提供如下变量定义供用户灵活使用,其中:/ _uc表示以无符号字符型存取PLC寄存器/ _c代表以字符型存取PLC寄存器_ui代表以无符号整型存取PLC寄存器_i代表以整型存取PLC寄存器_ul代表以无符号长整型存取PLC寄存器代表以长整型存取P

13、LC寄存器extern unsigned char extern charextern unsigned extern intextern unsigned long extern longextern unsigned char extern unsignedX_uc, Y_uc, *F_uc, *G_uc, P_uc, B_uc; X_c, Y_c,*F_c, *G_c, P_c, B_c;X_ui, Y_ui, *F_ui, *G_ui, P_ui, B_ui; X_i, Y_i,*F_i,*G_i,P_i, B_i;X_ul, Y_ul, *F_ul, *G_ul, P_ul, B_u

14、l; X_l, Y_l,*F_l,*G_l,P_l, B_l;B;X, Y;*F,*G,P,2. 对于F寄存器(请注意F、G均为地址指针),系统提供如下宏定义,供用 户使用:2.1 轴状态字#define axis_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/轴正在移动#defineAX_UNLINK_LAMP0x0100/轴非连接状态指示#defineAX FAIL LAMP0x0200/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号