PLC编程C语言.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PLC编程C语言

华中数控培训讲义 · 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.exe(标准PLC配置软件) plc_map.h 寄存器的数值说明 以R寄存器为例,不同的类型有着不同的取值范围。 (注:PLC不支持浮点运算) 定义自己的R寄存器 正确的定义方式 #define spdl_ctrl R[20] //主轴控制(0停止1正转2反转) #define spdl_cmd R_i[22/2] //主轴转速 #define spdl_dwell R_ui[24/2] //主轴定时器 #define Lube_dwell R_ul[28/4] //润滑定时器 C语言编程中,使用带有含义的变量,往往比直接对R寄存器操作更加直观。定义自己需要的R寄存器,是编程的第一步。 一般说来,类似记录开关量的状态,用char型的变量。如果需要记录类似主轴转速或用作短时间计时器的话,则用int型的变量,而记录轴的位置或用作长时间计时器,则需要用long型的变量。 错误的定义方式 #define spdl_ctrl R[20/2] //主轴控制(0停止1正转2反转) #define spdl_cmd R_i[22] //主轴转速 #define spdl_dwell R_ui[23/2] //主轴定时器 #define Lube_dwell R_ul[26/4] //润滑定时器 PLC常用指令浅析一 #define bit(x,b) ((x)(1(b))) //获取某一位的状态 #define set_bit(x,b) ((x)|=1(b)) //将某一位置1 #define clr_bit(x,b) ((x)=~(1(b))) //将某一位置0 plc常用宏、寄存器的定义和函数的声明都可以在sys目录下的plc.h中找到,而部分函数的定义则放在sys目录下plc_sub.c中。 实例:手动方式下,Z轴正向点动时,灯信号的处理(假设面板按键 X33.5,灯信号Y33.5) if(bit(X[33],5)) set_bit(Y[33],5); //点亮+Z灯 else clr_bit(Y[33],5); //熄灭+Z灯 PLC常用指令浅析二 #define axis_ctrl(x) (G_ui[(x)*10]) //轴控制 #define axis_stat(x) (F_ui[(x)*10]) //轴状态 #define ch_ctrl(x) (G_ui[(x)*20+162]) //通道控制 #define ch_stat(x) (F_ui[(x)*20+162] //通道状态 不同的G和F寄存器代表不同的意义,这些已经由CNC控制软件定义定义在plc.h中,这里只针对几个常用的寄存器作一个简单的讲解。 实例一:X轴负限位的处理(假设X轴负限位X0.1,当前通道为0) if(bit(X[0],1)) *axis_ctrl(0)|=AX_LSN; //通知CNC,X轴已到负限位 else *axis_ctrl(0)=~AX_LSN; //清

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档