华中数控PLC编程说明书武汉华中数控股份有限公司二零零一年七月前言华中数控内置式PLC已集成在数控装置内,具有48路输入/输出点。
华中数控PLC采用C语言编程,具有灵活、高效、使用方便等特点。
本说明详细介绍了内置式PLC的基本原理、寄存器操作接口、PLC程序的编写与安装等内容,并给出了大量C语言程序示例代码。
关于PLC硬件接线请参阅《华中数控世纪星硬件联接说明书》阅读本文之前,必须具有C语言编程的基本知识。
目录前言 (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)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.4G寄存器系统约定 (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)3.4.14.1 通道当前的M代码模态值 (22)3.4.14.2 通道当前的S代码模态值 (22)3.4.14.3 通道当前的T代码模态值 (22)3.4.14.4 通道当前的B代码模态值 (22)3.4.14.5 通道是否正在执行MST指令 (22)3.4.14.6 PLC正在执行MST指令,不允许系统停止运行 (22)3.4.14.7 通道程序停止M00/程序选择停止M01 (23)3.4.15 系统控制字 (23)3.4.16 系统外部报警 (24)3.17 系统变量组2(系统保留) (24)3.5寄存器B系统约定 (24)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操作符&= ~ (28)4.1.2 左移操作符〈〈和位右移操作符〉〉 (29)4.2软件滤波上升沿信号及下降沿信号的捕捉 (30)4.3顺序动作处理与典型换刀动作的实现 (31)第五章PLC运动控制的实现 (40)5.1机床轴回零控制 (40)5.2机床轴点动 (43)5.3机床轴步进 (45)5.4机床轴直线运动 (48)5.4.1 设置轴移动距离及速率 (48)5.4.2 设置轴移动的目的地及速率 (48)5.5停止机床轴运动 (48)5.5机床轴运动状态获取 (48)5.5.1 取指定轴当前位置 (48)5.5.2 判断指定轴是否停止 (48)第六章辅助指令M、S、T、B的控制 (49)6.1辅助指令响应函数及其初始化 (49)6.2访问辅助指令模态值 (50)6.2.1 通道当前的M代码 (50)6.2.2 通道当前的T代码 (50)6.2.3 通道当前的B代码 (50)6.2.4 通道当前的S代码 (50)6.3在PLC程序中控制系统辅助指令模态值与系统应答 (50)6.3.1 通道当前的M代码模态值 (50)6.3.2 通道当前的S代码模态值 (51)6.3.3 通道当前的T代码模态值 (51)6.3.4 通道当前的B代码模态值 (51)6.4辅助指令控制示例 (52)第七章机床手动控制的实现 (53)第八章主轴控制 (58)第九章刀库控制 (61)第十章断电保护区的使用 (62)第十一章三坐标数控铣PLC编写实例 (63)11.1机床简介 (63)11.2控制面板图 (64)11.3系统PLC电气原理图 (65)11.4系统PLC源程序详解 (69)第一章华中数控内置式PLC基本原理本章介绍了内置式PLC的逻辑结构及其系统运行流程。
1.1 华中数控内置式PLC的结构及相关寄存器的访问华中数控铣削数控系统的PLC为内置式PLC,其逻辑结构如图1所示。
其图1.1 华中数控世纪星内置式PLC的逻辑结构中: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程序与机床用户任意自行定义。
对于各寄存器,系统提供了相关变量供用户灵活使用。
首先,介绍访问中间继电器R的变量定义。
对于PLC来说,R寄存器是一块内存区域,系统定义如下指针对其进行访问:extern unsigned char R[]; //以无符号字符型存取R寄存器注:对于C语言,数组即相当于指向相应存储区的地址指针同时,为了方便对R寄存器内存区域进行操作,系统定义了如下类型指针(无符号字符型、字符型、无符号整型、整型、无符号长整型、长整型)对该内存区进行访问。
即这些地址指针在系统初始化时被初始化为指向同一地址。
extern unsigned char R_uc[]; //以无符号字符型存取R寄存器extern char R_c[]; //以字符型存取R寄存器extern unsigned R_ui[]; //以无符号整型存取R寄存器extern int R_i[]; //以整型存取R寄存器extern unsigned long R_ul[]; //以无符号长整型存取R寄存器extern long R_l[]; //以长整型存取R寄存器同理,和R寄存器一样,系统提供如下类似数组指针变量供用户灵活操作各类寄存器:extern unsigned char X_uc[], Y_uc[], *F_uc[], *G_uc[], P_uc[], B_uc[];extern char X_c[], Y_c[], *F_c[], *G_c[], P_c[], B_c[];extern unsigned X_ui[], Y_ui[], *F_ui[], *G_ui[], P_ui[], B_ui[];extern int X_i[], Y_i[], *F_i[], *G_i[], P_i[], B_i[];extern unsigned long X_ul[], Y_ul[], *F_ul[], *G_ul[], P_ul[], B_ul[];extern long X_l[], Y_l[], *F_l[], *G_l[], P_l[], B_l[];extern unsigned char X[], Y[];extern unsigned*F[], *G[], P[], B[];1.2 华中数控内置式PLC的软件结构及其运行原理和一般C语言程序都必须提供main()函数一样,用户编写内置式PLC的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程序的初始化函数,系统将只在初始化时调用该函数一次。
该函数一般设置系统M、S、B、T等辅助功能的响应函数及系统复位的初始化工作;2)变量plc1_time及plc2_time的值分别表示plc1()、plc2()函数被系统周期调用的周期时间,单位:毫秒。