[计算机硬件及网络]华中数控世纪星PLC编程说明书.doc_第1页
[计算机硬件及网络]华中数控世纪星PLC编程说明书.doc_第2页
[计算机硬件及网络]华中数控世纪星PLC编程说明书.doc_第3页
[计算机硬件及网络]华中数控世纪星PLC编程说明书.doc_第4页
[计算机硬件及网络]华中数控世纪星PLC编程说明书.doc_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华中数控 PLC 编程说明书 武汉华中数控股份有限公司 二零零一年七月 华中数控 PLC 编程说明书 2 前言前言 华中数控内置式 PLC 已集成在数控装置内,具有 48 路输入/输出点。华 中数控 PLC 采用 C 语言编程,具有灵活、高效、使用方便等特点。 本说明详细介绍了内置式 PLC 的基本原理、寄存器操作接口、PLC 程序 的编写与安装等内容,并给出了大量 C 语言程序示例代码。 关于 PLC 硬件接线请参阅华中数控世纪星硬件联接说明书 阅读本文之前,必须具有 C 语言编程的基本知识。 华中数控 PLC 编程说明书 3 目录目录 前言前言2 目录目录3 第一章第一章 华中数控内置式华中数控内置式 PLC 基本原理基本原理7 1.1 华中数控内置式 PLC 的结构及相关寄存器的访问7 1.2 华中数控内置式 PLC 的软件结构及其运行原理8 第二章第二章 华中数控内置式华中数控内置式 PLC 的编程与安装的编程与安装9 2.1 华中数控 PLC 程序的编写及其编译9 2.2 华中数控 PLC 程序的安装12 第三章第三章 华中数控华中数控 PLC 寄存器定义与接口函数说明寄存器定义与接口函数说明12 3.1 访问 PLC 寄存器的系统变量13 3.2 寄存器 F 系统约定.14 3.3.1 轴状态字.14 3.3.2 轴移动的指令位置,单位:内部脉冲当量.14 3.3.3 轴当前的实际位置,单位:内部脉冲当量.15 3.3.4 轴当前移动速度(单位:脉冲当量/插补周期)15 3.3.5 轴的负载电流(只对本公司生产的华中11型伺服有效).15 3.3.6 轴的最大速度(可在参数中设置).15 3.3.7 通道用户自定义输出字(32位)16 3.3.8 通道状态.16 3.3.9 通道MSTB指令状态.17 3.3.10 通道当前的M代码17 3.3.11 通道当前的T代码.17 3.3.12 通道当前的B代码.17 3.3.13 通道当前的S代码.17 华中数控 PLC 编程说明书 4 3.3.14 通道变量,通道内部参数.17 3.3.15 系统状态字.17 3.3.16 系统插补周期,单位:毫秒.18 3.3.17 系统移动轴内部脉冲当量.18 3.3.18 系统旋转轴内部脉冲当量.18 3.3.19 系统变量组1(系统保留)18 3.4 G 寄存器系统约定18 3.4.1 轴控制字.18 3.4.2 设置轴移动增量值,单位:内部脉冲当量.19 3.4.3 设置轴增量移动速度,单位:内部脉冲当量/插补周期19 3.4.4 轴点动速度,单位:内部脉冲当量/插补周期19 3.4.5 设置轴补偿值.19 3.4.6 通道用户自定义输入.19 3.4.7 通道控制字.19 3.4.8 通道MST应答20 3.4.9 通道进给速度修调分子(分母为100)20 3.4.10 通道快移速度修调分子(分母为100)20 3.4.11 通道正在使用的刀具号.20 3.4.12 通道主轴转速.21 3.4.13 通道跳选段控制及其实现说明.21 3.4.14 通道MST指令模态值22 通道当前的 M 代码模态值.22 通道当前的 S 代码模态值22 通道当前的 T 代码模态值22 通道当前的 B 代码模态值 .22 通道是否正在执行 MST 指令22 PLC 正在执行 MST 指令,不允许系统停止运行.22 通道程序停止 M00/程序选择停止 M0123 3.4.15 系统控制字.23 3.4.16 系统外部报警.24 3.17 系统变量组2(系统保留).24 3.5 寄存器 B 系统约定 24 华中数控 PLC 编程说明书 5 3.5.1 刀座数.24 3.5.2 某一刀座中的刀号(刀库表).24 3.6 可被 PLC 程序调用的系统函数24 3.6.1 设置轴回零.24 3.6.2 设置轴点动速度.25 3.6.3 设置轴步进指定距离.25 3.6.4 设置轴移动距离及速率.26 3.6.5 设置轴移动的目的地及速率.26 3.6.6 设置指定轴停止运动.26 3.6.7 取指定轴当前位置.27 3.6.8 指定轴当是否停止.27 3.6.9 设置轴手摇移动.27 3.6.10 取手摇状态对应的位移量.27 3.6.11 设置MST指令的响应函数28 第四章第四章 编写编写 PLC 程序的常用技巧与示例程序的常用技巧与示例28 4.1 常用运算操作符.28 4.1.1 置1操作符 |= 和 置0操作符 /以无符号字符型存取 R 寄存器 注:对于 C 语言,数组即相当于指向相应存储区的地址指针 同时,为了方便对 R 寄存器内存区域进行操作,系统定义了如下类型指 针(无符号字符型、字符型、无符号整型、整型、无符号长整型、长整型)对该 内存区进行访问。即这些地址指针在系统初始化时被初始化为指向同一地址。 extern unsigned charR_uc;/以无符号字符型存取 R 寄存器 extern charR_c;/以字符型存取 R 寄存器 extern unsignedR_ui;/以无符号整型存取 R 寄存器 extern intR_i;/以整型存取 R 寄存器 extern unsigned longR_ul;/以无符号长整型存取 R 寄存器 extern longR_l;/以长整型存取 R 寄存器 同理,和 R 寄存器一样,系统提供如下类似数组指针变量供用户灵活操 作各类寄存器: extern unsigned charX_uc, Y_uc, *F_uc, *G_uc, P_uc, B_uc; extern charX_c, Y_c, *F_c, *G_c, P_c, B_c; extern unsignedX_ui, Y_ui, *F_ui, *G_ui, P_ui, B_ui; extern intX_i, Y_i, *F_i, *G_i, P_i, B_i; extern unsigned longX_ul, Y_ul, *F_ul, *G_ul, P_ul, B_ul; extern longX_l, Y_l, *F_l, *G_l, P_l, B_l; extern unsigned charX, Y; extern unsigned*F, *G, P, B; 1.2 华中数控内置式华中数控内置式 PLC 的软件结构及其运行原理的软件结构及其运行原理 和一般 C 语言程序都必须提供 main()函数一样,用户编写内置式 PLC 的 C 语言程序必须提供如下系统函数定义及系统变量值: extern void init(void);/初始化 PLC extern unsigned plc1_time;/函数 plc1()的运行周期,单位:毫秒 extern void plc1(void);/PLC 程序入口 1 extern unsigned plc2_time;/函数 plc2()的运行周期,单位:毫秒 华中数控 PLC 编程说明书 9 extern void plc2(void);/PLC 程序入口 2 其中: 1)函数 init()是用户 PLC 程序的初始化函数,系统将只在初始化时调用 该函数一次。该函数一般设置系统 M、S、B、T 等辅助功能的响应函 数及系统复位的初始化工作; 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_time 总是小于 plc2_time,即函数 plc1()较 plc2()调用的频率 要高。因此,华中数控称函数 plc1()为 PLC 高速扫描进程、plc2()为低速扫描 进程。 因此,用户提供的 plc1()函数及 plc2()函数必须根据 X 及 F 寄存器的内容 正确计算出 G 及 Y 寄存器的值。 第二章第二章 华中数控内置式华中数控内置式 PLC 的编程与安装的编程与安装 本章介绍 PLC 程序的编写、编译及运行安装过程 2.1 华中数控华中数控 PLC 程序的编写及其编译程序的编写及其编译 华中数控 PLC 程序的编译环境为:Borland C+3.1+MSDOS6.22。因此, 要编写 PLC 程序您必须在您计算机上安装 Borland C+3.1 软件及 MSDOS6.22 或 MS Windows 9X 操作系统。 华中数控 PLC 编程说明书 10 华中数控系统约定 PLC 源程序后辍为“.CLD” ,即“*.CLD”文件为 PLC 源程序。 最简单的 PLC 程序只要包含系统必须的几个函数和变量定义(请参见 1.2 节)即可编译运行,当然它什么事也不能做。 在 DOS 环境下,进入数控软件 PLC 所安装的目录,如 C:HCNC2000PLC,在 DOS 提示符下敲入如下命令: c:hcnc2000plc edit plc_null.cld 建立一个文本文件并命名为 plc_null.cld,其文件内容为: / /plc_null.cld: /PLC 程序空框架,保证可以编译运行,但什么功能也不提供 / /版权所有2000,武汉华中数控系统有限公司,保留所有权利。 / email: / tel: +86-27-87545256,87542713fax: +86-27-87545256,87542713 /最后更改日期: 2000.10.31 /作者:阳道善 email: yangHuazhongCNC.com #include “plc.h“ /PLC 系统头文件 void init()/PLC 初始化函数 void plc1(void) /PLC 程序入口 1 plc1_time=16;/ 系统将在 16 毫秒后再次调用 plc1()函数 void plc2(void); /PLC 程序入口 2 plc2_time=32;/ 系统将在 32 毫秒后再次调用 plc1()函数 如果您安装了 MSDOS6.22 及 Borland C+3.1 软件,在铣床数控系统的 PLC 目录下,输入如下命令: c:hcnc2000plc makeplc plc_null.cld 系统会响应: 1 file(s) copied MAKE Version 3.6 Copyright (c) 1992 Borland International Available memory 64299008 bytes 华中数控 PLC 编程说明书 11 bcc +plc.CFG -S plc.cld Borland C+ Version 3.1 Copyright (c) 1992 Borland International plc.cld: Available memory 4199568 TASM /MX /O plc.ASM,plc.OBJ Turbo Assembler Version 3.1 Copyright (c) 1988, 1992 Borland International Assembling file: plc.ASM Error messages: None Warning messages: None Passes: 1 Remaining memory: 421k tlink /t/v/m/c/Lc:BC31LIB MAKE0000.$ Turbo Link Version 5.1 Copyright (c) 1992 Borland International Warning: Debug info switch ignored for COM files 1 file(s) copied 并且又回到 DOS 提示符下: c:hcnc2000plc 这时表示我们的第一个 PLC 程序编译成功。编译结果为文件 plc_。然后,我们可以更改数控软件系统配置文件 NCBIOS.CFG,并 加上如下一行文本让系统启动时加载我们新近编写的 PLC 程序: device=c:hcnc2000plcplc_ 以上就是在华中数控系统平台上编写并编译 C 语言 PLC 程序的全过程, 非常简单。 下面,让我们多做一点工作。假设我们在用户按下操作面板的“循环起动” 键时,点亮“+X 点动”灯。假定“循环起动”键的输入点为 X0.1, “+X 点动” 灯的输出点位置为 Y2.7。 更改 plc_null.cld 文件的 plc1()函数如下: void plc1(void) /PLC 程序入口 1 plc1_time=16; / 系统将在 16 毫秒后再次调用 plc1()函数 if ( X0 / 点亮“+X 点动”灯 else/ 循环起动键没有被按下 Y2 / 灭掉“+X 点动”灯 重新输入命令 makeplc plc_null,并将编译所得的文件 plc_ 放入 华中数控 PLC 编程说明书 12 NCBIOS.CFG 所指定的位置,重新起动铣床数控系统后,当我们按下“循环 起动”键时, “+X 点动”灯应该被点亮。 更复杂的 PLC 程序,可参考您所在数控系统 PLC 目录下的*.CLD 文件, 其中应该有一个是您数控系统的 PLC 源程序。另外,本说明书的最后一章详 细讲解了步进电机三坐标铣床的 PLC 源程序,请参考。 2.2 华中数控华中数控 PLC 程序的安装程序的安装 从上节,我们已经知道 PLC 源程序编译后,将产生一个 DOS 可执行. COM 文件。要安装写好的 PLC 程序,我们必须更改华中数控系统的配置文件 NCBIOS.CFG。 在 DOS 环境下,进入数控软件所安装的目录,如 C:HCNC2000,在 DOS 提示符下敲入如下命令: c:hcnc2000 edit ncbios.cfg 可编辑数控系统配置文件。一般情况下,配置文件的内容如下(具体内容因机 床的不同而异,分号后面是为说明方便添加的注释): DEVICE=C:HCNC2000binsv_step.drv;步进电机伺服驱动 DEVICE=C:HCNC2000binhc5904.drv;5904 驱动程序 DEVICE=C:HCNC2000plcplc_;PLC 程序程序 PARMPATH=C:HCNC2000PARM;系统参数所在目录 DATAPATH=C:HCNC2000DATA;系统数据所在目录 PROGPATH=C:HCNC2000PROG;数控 G 代码程序所在目录 DISKPATH=A:;软盘 BINPATH=C:HCNC2000bin;系统 BIN 目录 用粗体突出的第三行即设置好了上文编写的 PLC 程序 plc_。 第三章第三章 华中数控华中数控 PLC 寄存器定义与接口函数说明寄存器定义与接口函数说明 第一章说明了 PLC 的逻辑结构及各寄存器的含义。已经知道,PLC 的 G 及 F 寄存器是数控系统与 PLC 约定好的,用户不可随便更改其寄存器各位(bit)的 含义。为方便用户编程及记忆,系统提供如下大量宏及函数供用户使用。本章 华中数控 PLC 编程说明书 13 将详细给出这些宏及函数的接口说明。建议您阅读本书提供的 PLC 例子程序 时,再至本章查阅相关函数细节。 3.1 访问访问 PLC 寄存器的系统变量寄存器的系统变量 第一章已经说明,以下地址指针变量都指向同一块内存,即 PLC 中间寄 存器 R,共有 768 个字节: extern unsigned charR_uc;/以无符号字符型存取 R 寄存器 extern charR_c;/以字符型存取 R 寄存器 extern unsignedR_ui;/以无符号整型存取 R 寄存器 extern intR_i;/以整型存取 R 寄存器 extern unsigned longR_ul;/以无符号长整型存取 R 寄存器 extern longR_l;/以长整型存取 R 寄存器 extern unsigned charR;/以无符号字符型存取 R 寄存器 同理,和 R 寄存器一样,系统提供如下变量定义供用户灵活使用,其中: 1)_uc 表示以无符号字符型存取 PLC 寄存器 2)_c 代表以字符型存取 PLC 寄存器 3)_ui 代表以无符号整型存取 PLC 寄存器 4)_i 代表以整型存取 PLC 寄存器 5)_ul 代表以无符号长整型存取 PLC 寄存器 6)_l 代表以长整型存取 PLC 寄存器 extern unsigned charX_uc, Y_uc, *F_uc, *G_uc, P_uc, B_uc; extern charX_c, Y_c, *F_c, *G_c, P_c, B_c; extern unsignedX_ui, Y_ui, *F_ui, *G_ui, P_ui, B_ui; extern intX_i, Y_i, *F_i, *G_i, P_i, B_i; extern unsigned longX_ul, Y_ul, *F_ul, *G_ul, P_ul, B_ul; extern longX_l, Y_l, *F_l, *G_l, P_l, B_l; extern unsigned charX, Y; extern unsigned*F, *G, P, B; 对于输入信号寄存器 X,为了方便高低速扫描进程进行滤波处理及上升/ 下降沿信号的捕捉,系统复制了所有 X0N信号到 X100(100+N),其中 N 为系统 PLC 输入信号组数。一般约定高速扫描进程 plc1()函数使用 X0N, 而低速扫描进程 plc2()函数则使用 X100(100+N)。 关于输入信号滤波、上升/下降沿信号的捕捉,可参阅第四章“编写 PLC 程序的常用技巧与示例” 。 华中数控 PLC 编程说明书 14 3.2 寄存器寄存器 F 系统约定系统约定 对于 F 寄存器(请注意 F、G 均为地址指针),系统提供如下宏定义,供用 户使用: 3.3.1 轴状态字 #define axis_stat(x) (F_ui(x)*10)/轴状态字,共 16 位(bit) 其中宏参数 x 表示轴号,其值可为 0,1,2,15,即系统最大可有 16 个轴。 其中各位的含义定义如下: #define AX_SLSP0x0001 /轴正极限到 #define AX_SLSN0x0002 /轴负极限到 #define AX_HOME_LAMP0x0004 /轴正在回零 #define AX_CMP_LAMP0x0008 /轴正在进行间隙或螺距补偿 #define AX_HOME_FIN0x0010 /回零结束 #define AX_FSTOP_LAMP0x0020 /轴已精确定位停止 #define AX_HOME_GOING0x0040 /轴正在回零 #define AX_MOVING_LAMP0x0080 /轴正在移动 #define AX_UNLINK_LAMP0x0100 /轴非连接状态指示 #define AX_FAIL_LAMP0x0200 /失败指示灯 #define AX_ALARM0x0400 /警报 #define AX_COORD_SETUP0x0800 /轴已回零,坐标系已建立 #define AX_SV_ENBL0x1000 /轴伺服使能允许 #define AX_READY0x2000 /轴就绪 #define AX_ONLINE0x4000 /轴联机 #define AX_EXIST0x8000 /轴存在 例: unsigned int u1=*axis_stat(i);/轴状态 if (u1 asm cli l=*axis_pout(axis)+(*axis_pic_a(axis); asm sti return l; 3.3.3 轴当前的实际位置,单位:内部脉冲当量 #define axis_pact(x)(F_l(x)*10+3) /轴的实际位置 其中宏参数 x 表示轴号,其值可为 0,1,2,15,即系统最大可有 16 个轴。 3.3.4 轴当前移动速度(单位:脉冲当量/插补周期) #define axis_speed(x)(F_i(x)*10+5) /轴移动速度 其中宏参数 x 表示轴号,其值可为 0,1,2,15,即系统最大可有 16 个轴。 3.3.5 轴的负载电流(只对本公司生产的华中 11 型伺服有效) #define axis_current(x)(F_i(x)*10+6) /轴的负载电流 其中宏参数 x 表示轴号,其值可为 0,1,2,15,即系统最大可有 16 个轴。 3.3.6 轴的最大速度(可在参数中设置) #define axis_vmax(x)(F_i(x)*10+7) /轴的最大速度 其中宏参数 x 表示轴号,其值可为 0,1,2,15,即系统最大可有 16 个轴。 例,设置某一个轴步进的函数可用 C 语言表达如下: void set_axis_step(int axis,long displacement) long l,l1,v,v1; if(displacement=0) return; asm cli l=*axis_pic_a(axis)+displacement; l1=abs(l); v=l1/200*(*sys_iip_time(); v1=*axis_vmax(axis); if(vv1) v=v1; 华中数控 PLC 编程说明书 16 if(vv1) / 速度限制控制 v=v1; if(v0) if(ll1) l=l1; else if(-ll1) l=-l; *axis_pic_a(axis)=l; asm sti set_axis_jog(axis,0); set_axis_home(axis,0); 3.6.7 取指定轴当前位置 long get_axis_pos(int axis);/所指定的轴号:0-15 本函数可以用 C 语言表达如下: long get_axis_pos(int axis) long l; asm cli l=*axis_pout(axis)+(*axis_pic_a(axis); asm sti return l; 华中数控 PLC 编程说明书 28 3.6.8 指定轴当是否停止 int get_axis_den(int axis);/所指定的轴号:0-15。 返回 1:已停,0:没有停 本函数可以用 C 语言表达如下: int get_axis_den(int axis) return (*axis_pic_a(axis)!=0|*axis_pvcmd(axis)!=0)? 0:1; 3.6.9 设置轴手摇移动 void handwheel(int h_no,/手摇号 int axis,/轴号 int step_mul);/步进倍率 3.6.10 取手摇状态对应的位移量 int get_handwheel(int handwheel);/手摇号 3.6.11 设置 MST 指令的响应函数 void set_mst_func(int ch,/通道 char name, /代码类型:M、S、T void (*mst_func)(int);/响应函数入口地址 第四章第四章 编写编写 PLC 程序的常用技巧与示例程序的常用技巧与示例 本章将通过两个常用的 PLC 编程技巧与示例来加快您掌握如何用 C 语言 编写华中数控 PLC 程序的进度与质量。首先,我们复习一下 C 语言中有关操 作运算符的知识。 4.1 常用运算操作符常用运算操作符 对于基本的是将 Y2 寄存器第七位的值置 1 Y2 是将 Y2 寄存器第七位的值置 0 因此完全可以把“|=”当作置 1 操作符,而把“ i_e2 = 1 1 ; i_e4 = (P50%10) 1 ; 如已知 P50 =403,即 P50 等于 403 ,那么 (P50%10)等于 3,上面 的表达式就等价于: i_e1 = 1 3 ; /1(即 0001)右移 3 位变成 0000,所以 i_e1 等于 0 i_e2 = 1 1 ; /3(即 0011)右移 1 位变成 0001,所以 i_e3 等于 1 i_e4 = 3 1 ; /3(即 0011)左移 1 位变成 0110,所以 i_e4 等于 6 类似地,应该不难理解如下语句的意义: 华中数控 PLC 编程说明书 30 #define x(g,b)(Xg /M06 返回上一步重新执行 return; den=*ch_stat(ch) /当前通道是否正在运动的标志 switch(M06_STEP) case 0: /M06 初始状态,不做任何动作。 return; case 1: /记录当前各轴位置 R_l500/4 = get_axis_pos(0); R_l504/4 = get_axis_pos(1); R_l508/4 = get_axis_pos(2); R_l512/4 = get_axis_pos(8); M06_STEP+;/M06 可执行下一步动作 return; case 2: / 首先移动 Z 轴到换刀位置 if(den=0)/系统正在运动,等待运动完成 return; if(*axis_stat(2) if(P_i34)/移动 Z 轴到指定位置(绝对坐标) set_axis_moveto(2,(long)P_i32*1000L,P_i35); M06_STEP+; return; case 3: /等待 Z 轴运动完成后,再移动 W 轴 if(den=0) return; if(*axis_stat(2) M06_STEP+; if(P_i34)/移动 W 轴到指定位置(绝对坐标) set_axis_moveto(8,(long)P_i33*1000L,P_i35); return; case 4: /等待 W 轴运动完成后,再移动 X、Y 轴 if(den=0) return; if(*axis_stat(8) M06_STEP+; if(P_i34) /移动 XY 轴到指定位置(绝对坐标) 华中数控 PLC 编程说明书 35 set_axis_moveto(0,(long)P_i30*1000L,P_i35); set_axis_moveto(1,(long)P_i31*1000L,P_i35); return; case 5: /等待 XY 轴运动完成 if(den=0) return; if(*axis_stat(1) if(*axis_stat(0) M06_STEP+; return; case 6: /等待按一次循环起动键,即捕捉该键上升沿信号一次 if(X0 return; case 7: /再等待按一次循环起动键,即捕捉该键上升沿信号一次 if(X0 return; case 8: /将 XY 轴移回换刀前的位置 set_axis_moveto(0, R_l500/4, P_i35); set_axis_moveto(1, R_l504/4, P_i35); M06_STEP+; return; case 9: /等待 XY 轴运动完成,再将 Z 轴移回换刀前的位置 if(den=0) return; if(*axis_stat(1) if(*axis_stat(0) set_axis_moveto(2, R_l508/4, P_i35); M06_STEP+; return; case 10: /等待 Z 轴运动完成,再将 W 轴移回换刀前的位置 if(den=0) return; if(*axis_stat(2) set_axis_moveto(8, R_l512/4, P_i35); M06_STEP+; return; 华中数控 PLC 编程说明书 36 case 10: /等待 W 轴运动完成 if(den=0) return; if(*axis_stat(8) mod_M_code(ch)=-1;/M06 指令完成 *ch_ctrl(ch)|=CH_FEEDHOLD_SW; /要求再次按循环起动键才能继续 M06_STEP = 0; return; / 在 plc1()函数中调用 M06 的实现函数 void plc1(void) plc1_time=16; /间隔 16 毫秒后,再调用 plc1()函数 Exec_M06(0); /调用 M06 的实现函数 /记住第 0-3 组信号的最近四次采样值,以实现软件滤波 R_ui30/2=R_ui20/2; /记录上上次周期的采样值 R_ui32/2=R_ui22/2; R_ui20/2=R_ui10/2;/记录上次周期的采样值 R_ui22/2=R_ui12/2; R_ui10/2=X_ui0/2;/记录当前周期的采样值 R_ui12/2=X_ui2/2; 下面我们看看华中数控教学车床换刀动作的实现。教学车床刀架有四个刀 位,PLC 通过 X3.0 至 X3.3(即 X3/设置自动换刀响应函数 ToolPos=0;/ 初始化换刀用的中间寄存器状态 ToolChangeState=0; ToolDesPos=0; / 自动换刀 T 指令的实现函数。数控系统在自动运行 T 指令时,会调用本函数 void exec_T(int ch) /当前通道号 int T; if(mac_lock()|mst_lock() /机床锁住或 MST 锁住 mod_T_code(ch)=-1;/ 向数控系统发送完成 T 指令的信号 return; if(ToolChangeState != 0)/ 正在换刀,立等待换刀完成 return; T=mod_T_code(ch)/100;/ 计算目地刀位号 switch(T) case 1:/刀位 1 case 2: /刀位 2 case 3: /刀位 3 case 4: /刀位 4 ToolDesPos = T;/ 目地刀位号 ToolChangeState = 1;/ 启动换刀 break; case 0: default: / 只有四个刀位,对其它刀位不作处理 mod_T_code(ch)=-1;/ 向数控系统发送完成 T 指令的信号 break; /刀具手动换刀的相关信号输入检测 void ToolManualActionInput(void) if(X3/刀架启动/停止灯灭 Y2 /清刀架正反转位 return; if(mst_lock()|mac_lock() /机床锁住 Y0 /刀架启动/停止灯灭 Y2 /清刀架正反转位 return; if(mode_sel!=MODE_JOG) /当前不是手动状态 return; switch(X1 break; case 0x01: /刀号 2 ToolDesPos = 2; break; case 0x02: /刀号 3 ToolDesPos = 3; break; case 0x00: /刀号 4 ToolDesPos = 4; break; if(X1 /换刀控制 void ToolAction(void) switch(X3 华中数控 PLC 编程说明书 39 break; case 0x02: /刀号 2 ToolPos = 2; break; case 0x04: /刀号 3 ToolPos = 3; break; case 0x08: /刀号 4 ToolPos = 4; break; /目的刀具已到 if(ToolDesPos=ToolPos) if(ToolChangeState=0) /换刀已完成 Y0 /刀架启动/停止灯灭 Y2 /清刀架正反转位 return; else if (ToolChangeState=1) /换刀到位后,要反转刀架一下 ToolChangeState=2; switch(ToolChangeState) case 0: /刀具到位 Y0 /刀架启动/停止灯灭 Y2 /清刀架正反转位 break; case 1: /转动刀架(正向) start moving tool Y0 |= 0x04;/刀架启动/停止灯亮 Y2 /清刀架正反转位 Y2 |= 0x04;/置刀架正转 break; case 2: /反向转动刀架,然后延时 10*16 ms,以便锁住刀具。 Y0 |= 0x04;/刀架启动/停止灯亮 Y2 /清刀架正反转位 Y2 |= 0x08;/置刀架反转 case 3: case 4: case 5: case 6: case 7: case 8: 华中数控 PLC 编程说明书 40 case 9: case 10: case 11: case 12: ToolChangeState+; break; case 13: /换刀完成 ToolChangeState = 0; mod_T_code(0) = -1;/ 向数控系统发送完成 T 指令的信号 break; / 手动方式处理 void manual(void) ToolManualActionInput(); /刀具手动换刀的相关信号输入检测 / 在 plc1()函数中调用换刀实现函数 ToolAction() void plc1(void) plc1_time=16; /间隔 16 毫秒后,再调用 plc1()函数 if(stat/调用手动处理 ToolAction (); /调用换刀动作的实现函数 /记住第 0-3 组信号的最近四次采样值,以实现软件滤波 R_ui30/2=R_ui20/2; /记录上上次周期的采样值 R_ui32/2=R_ui22/2; R_ui20/2=R_ui10/2;/记录上次周期的采样值 R_ui22/2=R_ui12/2; R_ui10/2=X_ui0/2;/记录当前周期的采样值 R_ui12/2=X_ui2/2; 华中数控 PLC 编程说明书 41 第五章第五章 PLC 运动控制的实现运动控制的实现 第三章介绍了 PLC 程序可调用的一些函数接口,利用其中一些函数便可 实现轴运动控制的实现。本章将示例说明各运动控制函数的使用 5.1 机床轴回零控制机床轴回零控制 在手动方式下需要控制机床轴回零时,调用函数 set_axis_home()即可起动 相关轴开始回零。该函数的原型为: void set_axis_home( int axis,/所指定的轴号:0-15 int start_stop);/为 0:取消回零 非 0:回零 当碰到回零开关时,PLC 程序必须通过轴控制字*axis_ctrl(x) |AX_HOME_SW告诉伺服系统回零开关已到。当伺服轴找到机械零位后,系统 会通过轴状态字*axis_stat(x)/禁止 X 轴点动 set_axis_jog(1,0);/禁止 Y 轴点动 set_axis_jog(2,0);/禁止 Z 轴点动 /如果进给保持设定(进给保持键 X1.1 为常闭点) if(X1/取消 X 轴回零 set_axis_home(1,0);/取消 Y 轴回零 set_axis_home(2,0);/取消 Z 轴回零 else /X、Y、Z 轴正点动的输入点分别为 X2.1、X2.3、X2.5 if(X2/起动 X 轴回零 if(X2 /起动 Y 轴回零 if(X2 /起动 Z 轴回零 return; void plc1( ) /PLC 扫描入口函数 1 plc1_time=16; /间隔 16 毫秒后,再调用 plc1()函数 /回零信号处理回零信号处理 /X、Y、Z 轴回零的输入点分别为轴回零的输入点分别为 X3.3、X3.4、X3.5 u1=X3 u2=X3|R13|R23; if(u1 / X 轴回零 else if(u2 if(u1 / Y 轴回零 else if(u2 if(u1 / Z 轴回零 else if(u2 /记住输入信号最后三次的采样值 R_ui30/2=R_ui20/2; R_ui32/2=R_ui22/2; R_ui20/2=R_ui10/2; R_ui22/2=R_ui12/2; R_ui10/2=X_ui0/2; R_ui12/2=X_ui2/2; void plc2( ) /PLC 扫描入口函数 2 plc2_time=32; /间隔 32 毫秒后,再调用 plc2()函数 /回零灯回零灯 Y2/熄灭 X、Y、Z 轴回零灯 if(*axis_stat(0)/点亮 X 轴回零灯(输出点为 Y1.4) else Y1/灭掉 X 轴回零灯(输出点为 Y1.4) if(*axis_stat(1)/点亮 Y 轴回零灯(输出点为 Y1.5) else Y1/灭掉 Y 轴回零灯(输出点为 Y1.5) if(*axis_stat(2)/点亮 Z 轴回零灯(输出点为 Y1.6) else Y1/灭掉 Z 轴回零灯(输出点为 Y1.6) /记住输入信号最后三次的采样值 R_ui130/2=R_ui120/2; R_ui132/2=R_ui122/2; R_ui120/2=R_ui110/2; R_ui122/2=R_ui112/2; 华中数控 PLC 编程说明书 44 R_ui110/2=X_ui100/2; R_ui112/2=X_ui102/2; 5.2 机床轴点动机床轴点动 点动控制方式下,只要用户按下点动键,机床轴便不停止运动。在手动方 式下需要点动控制机床轴运动时,调用函数 set_axis_jog()即可点动相关轴运动。 该函数的原型为: void set_axis_jog(int axis,/点动轴号:0-15 int speed);/点动速度,单位:内部脉冲/插补周期 在 PLC 程序中,点动控制的主要流程为: 1)在手动操作点动方式下,根据面板按键计算点动速度 2)检测点动按键状态,调用函数 set_axis_jog()点动/停止相关轴。 例: #define Speed_MAX420/坐标轴移动速度最大值 #define mode_sel R0/模式选择 #define jog_speed R4/点动速率 void manual( ) /手动方式控制处理函数 switch(mode_sel)/根据手动操作模式分别进行处理 case MODE_JOG:/点动模式 /计算 X 轴点动速度 i = (long) jog_speed*(*axis_vmax(0)/Speed_MAX; if(X2 switch(X2 break; case 0x04:/-X(输入点为 X2.2) i=-i; break; default: 华中数控 PLC 编程说明书 45 i=0; set_axis_jog(0,i);/X 轴点动 /计算 Y 轴点动速度 i = (long) jog_speed*(*axis_vmax(1)/Speed_MAX; if(X2 switch(X2 break; case 0x10:/-Y(输入点为 X2.4) i=-i; break; default: i=0;/点动速度为零,即停止运动 set_axis_jog(1,i);/Y 轴点动 /计算 Z 轴点动速度 i = (long) jog_speed*(*axis_vmax(2)/Speed_MAX; if(X2 switch(X2 break; case 0x40:/-Z(输入点为 X2.6) i=-i; break; default: i=0;/点动速

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论