c语言plc库,PLC编程-C语言.ppt

PLC编程-C语言.ppt

华中数控培训讲义 PLC编程,C语言编程,PLC控制的范围,数控机床所受到的控制可分为两类数字控制和顺序控制。 数字控制主要指对各进给轴进行精确的位置控制,包括轴移 动距离、插补、补偿等。 顺序控制主要指以CNC内部和机床各行程开关,传感器,按 钮,继电器等的开关量信号状态为条件,并按照预先规定的逻辑顺 序对诸如主轴的起停,刀具的转换,工件的夹紧松开,液压,冷 却,润滑系统的运行等进行的控制。 与“数字控制”比较,“顺序控制”的信息主要是开关量信号。 PLC控制的范围包括全部顺序控制和简单的数字控制(如轴 点动),寄存器是数控系统、PLC、机床三者之间交流的载体,是PLC控制的主要对象,也是PLC程序的最小单元。,寄存器的分类,寄存器的个数,PLC源代码的基本构成,初始化函数void init; 仅上电时调用一次 高速扫描函数void plc1; 每隔8ms被调用一次 低速扫描函数void plc2; 每隔128ms被调用一次,PLC执行程序的生成,运行环境-MSDOS6.22 编译器-Borland C 3.1 BC31的路径需要加入OS的环境变量 编译环境-各种信息定义文件(*.inc) PLC源文件 铣-plc_21mu.cld 车-plc-21.cpp PLC头文件 车-plc_map.h 主要包含IO点的定义,PLC头文件的生成,plctab_t.dat IO点信息文件,standplc.标准PLC配置软件,plc_map.h,寄存器的数值说明,以R寄存器为例,不同的类型有着不同的取值范围。 (注PLC不支持浮点运算),定义自己的R寄存器,正确的定义方式 define spdl_ctrl R20 主轴控制(0停止1正转2反转) define spdl_ R_i22/2 主轴转速 define spdl_dwell R_ui24/2 主轴定时器 define Lube_dwell R_ul28/4 润滑定时器,C语言编程中,使用带有含义的变量,往往比直接对R寄存器操作更加直观。定义自己需要的R寄存器,是编程的第一步。 一般说来,类似记录开关量的状态,用char型的变量。如果需要记录类似主轴转速或用作短时间计时器的话,则用int型的变量,而记录轴的位置或用作长时间计时器,则需要用long型的变量。,错误的定义方式 define spdl_ctrl R20/2 主轴控制(0停止1正转2反转) define spdl_ R_i22 主轴转速 define spdl_dwell R_ui23/2 主轴定时器 define Lube_dwell R_ul26/4 润滑定时器,PLC常用指令浅析一,define bitx,b x1b 获取某一位的状态 define set_bitx,b x|1b 将某一位置1 define clr_bitx,b x1b 将某一位置0,plc常用宏、寄存器的定义和函数的声明都可以在sys目录下的plc.h中找到,而部分函数的定义则放在sys目录下plc_sub.c中。,实例手动方式下,Z轴正向点动时,灯信号的处理(假设面板按键 X33.5,灯信号Y33.5) ifbitX33,5 set_bitY33,5; 点亮Z灯 else clr_bitY33,5; 熄灭Z灯,PLC常用指令浅析二,define axis_ctrlx G_uix*10 轴控制 define axis_statx F_uix*10 轴状态 define ch_ctrlx G_uix*20162 通道控制 define ch_statx F_uix*20162 通道状态,不同的G和F寄存器代表不同的意义,这些已经由CNC控制软件定义定义在plc.h中,这里只针对几个常用的寄存器作一个简单的讲解。,实例一X轴负限位的处理(假设X轴负限位X0.1,当前通道为0) ifbitX0,1 *axis_ctrl0|AX_LSN; 通知CNC,X轴已到负限位 else *axis_ctrl0 清除标记 注 AX_LSN的定义详见plc.h,PLC常用指令浅析二,实例二循环启动的处理(按键X31.6,灯Y31.6) ifbitX31,6 *ch_ctrl0 熄灭循环启动灯,PLC常用函数浅析一,除了宏定义,函数也是PLC必不可少的组成部分。前面我们已经介绍了 PLC不可或缺的三个函数init、plc1和plc2,这里我们再介绍几个常用的函数。,void set_axis_homeint axis,int start_stop; void set_axis_jogint axis,int speed; void set_axis_stepint axis,long displacement; void handwheelint h_no,int axis,int step_mul;,ifbitX35,3 -Z jog set_axis_jog2,-100; else set_axis_jog2,0; 注这里速度单位是脉冲/秒。若设计单位是毫米/分钟,需要先乘上(插补周期/ 60)。 假设插补周期为4ms,那么 1500毫米/分钟 等同于 100脉冲/秒,PLC常用函数浅析一,实例X轴回零的处理(正点动X35.4,回零挡块X1.0) define Finding_Axis_Zero R7 if*axis_stat0,PLC常用函数浅析二,M(辅助)、S(主轴速度)、T(刀具)指令是PLC经常 会用到的功能,它们可以让用户在G代码中自动控制机床的 动作而不需要手工干预。 M、S、T分别对应函数c_M、 c_S、 c_T。 它们需要在初始化的时候就加载到扫描周期中。,void initvoid set_mst_func0,M,c_M; set_mst_func0,T,c_T; set_mst_func0,S,c_S; ,PLC常用函数浅析二,M代码编程实例一吹气,假设开关Y2.3 void c_M int ch switch*ch_M_codech case 88 吹气开 set_bitY2,3; mod_M_codech-1; M代码完成 break; case 89 吹气关 clr_bitY2,3; mod_M_codech-1; M代码完成 break; ,C语言编程实例一 触发器,int get_raiseint g,int b取上升沿 int v 0; ifbitXg,b ifbitR600g,b0 v1; else set_bitR600g,b; else clr_bitR600g,b; return v; ,define coolant R100 void plc1void ifget_raise30,5 ifcoolant coolant0; else coolant1; ifcoolant set_bitY30,5;点亮冷却灯 else clr_bitY30,5;熄灭冷却灯 ,C语言编程实例一 触发器,int get_fallint g,int b取下降沿 int v 0; ifbitXg,b0 ifbitR600g,b v1; else clr_bitR600g,b; else set_bitR600g,b; return v; ,C语言编程实例二 定时器,define tcnt R_i300/2 define TM R302 void plc1void TM0; ifbitX1,0 压力报警 iftcnt2000/8 tcnt; else TM1; else tcnt0; ifTM1 报警 ,当检测到压力报警,延时2S后输出报警,假设压力报警点1.0,C语言编程实例三 M代码Switch语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值