西门子6SL3060-4AK00-0AA0
磨齿机,加工精度好,效率高。但由于是七十年代设计的产品,电气控制采用继电器逻辑,不仅体积大,结构复杂,维修困难,特别是经过近二十年的使用,备件耗尽,继电器触点损坏严重,近几年故障率高。由于润滑充分,该机床的导轨,丝杠,丝母,滑台及工作台的蜗轮蜗杆等磨损不大,机床机械精度保持较好。*近我们用NUM1040数控系统和相应的驱动及伺服电机对分度工作台1、X轴进行了数控化改造,机械上取掉了所有挂轮,不仅操作简单,还提高了传动精度。电气控制全部用PLC代替原来的继电器逻辑,简化了电路结构。经检测加工出的齿轮累积误差达到0.0052mm,齿距偏差0.0038mm,6齿距差 0.0046mm,径跳0.009mm,加工工件精度一致性好,改造取得完全成功。
2. 数控改造方案
ZSTZ315/630 C3磨齿机的主要参数如下:
工作台直径:315mm/630mm 工作台承载:200kg/400kg
X轴行程:360mm 砂轮磨削角:14~26度
滑座冲程长度:20~225mm 冲程次数:75~315/Min
原机床的运动通过各类机械传动来完成,分度工作台(B轴)和X轴根据加工齿轮的大小,模数和齿数使用三级挂轮实现展成磨削运动。改造后X和B轴伺服电机轴分别通过连轴器直接与各自丝杠连接,取消挂轮减小传动误差。为了降低改造成本,缩短改造周期,经过研究论证,确定数控化改造方案如下:
(1)用NUM1040数控系统对磨削加工的展成运动进行控制,用交流数字驱动模块MDLA和BPH伺服电机驱动X和B轴,利用电机内置3072线编码器组成半闭环控制。运用数控系统对X和B二轴联动和插补运算完成各种齿轮型面的加工。
(2)利用NUM1040系统内置的PLC功能模块对机床操作、液压、冷却、润滑、砂轮起/停和滑台冲程等实现控制,取代了原机床的继电器逻辑线路,提高了机床稳定性和可靠性。
(3)保留原机床砂轮修整器的机械部分,将原来砂轮修整用的直流电机改为3 x 380V,1200R/Min,30W 的交流微型电机,增加一个小型换相接触器即可实现修整1和修整2的功能。
(4)保留砂轮驱动电机和滑台冲程电机,液压,润滑和冷却部分不变。
3. 数控系统的配置
(1)CNC硬件模块的组成
NUM1040 是集CNC、PLC于一体的全功能数控系统,能控制1-6个轴(4轴插补),基本配置的输入/输出点数是64I/48O(可扩展为256I/O),1-3 个手轮,8.4寸液晶彩显。能实现从刀具轨迹控制到外部设备的监控。 CNC系统硬件采用了CMOS电路,光纤通讯技术及模块化设计思想,减少了系统和外界的连线,提高了整个机床电气系统的可靠性。系统主要由电源、CNC、驱动模块组成。系统软件具有开放性和友好界面,可提供帮助性编程方式和强大的通信功能,完善的丝杠螺距误差补偿和多种插补方式,用户可以方便地根据加工特性需要编写自己的固定循环。系统的硬件配置如下:
(2)PLC程序的模块化设计
NUM 数控系统为内置式PLC结构,本机床外加二块32输入/24输出(输出带继电器,每只继电器有动合/动开触点各2对)I/O扩展板。采用梯形图编程语言,模块化程序设计,根据控制功能PLC程序编写成多个模块,每一个模块完成指定功能,各功能模块统一由主任务模块循环调用。这样设计的程序可读性强,逻辑控制可靠性高。主要模块有:
%INI—系统初始化模块:完成控制系统参数的设置与优化检查。I/O端口、定时器、计数器预置。堆栈、数据保护区、数据交换区的起始地址及容量的确定等。
%TS—主任务模块:完成对各功能模块% FP的循环调用。
%TP1~n—功能模块:处理与CNC的数据交换;伺服轴进给控制;功能代码处理,砂轮修整控制;滑台运动控制;操作面板处理,报警文本处理等。
%TH—中断处理模块:实时处理随机事件。
PLC控制程序流程图如下:
4. 结束语
该磨齿机床主要用于磨削渐开线圆柱型齿轮。采用展成 — 分度原理磨削渐开线齿形,用锥形砂轮按齿条和齿轮啮合原理生成渐开线齿廓。X和B两个数控轴合成实现展成运动,在展成运动的同时,旋转的砂轮连同滑台一起沿齿向往复运动,一次展成循环过程,生成一个渐开线齿面。
工作台是数控回转运动,当展成到分度位置时,砂轮自动退回脱离与工件的接触,工件分度到下一个齿槽,分度的大小和精度由控制系统确定。对不同大小、模数和齿数的齿轮,数控系统自动计算,控制展成和分度运动。
该机床改造以来,因为提高了机械传动精度,加之合理使用间隙和螺距误差补偿能力,工件加工精度和工作效率有所提高。机床性能稳定可靠,运行以来未发生重大故障,据初步统计,故障率较改造前降低80%以上。
1定时器功能介绍
wincc中定时器的使用可以使wincc按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。wincc已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,wincc 提供的定时器不能满足我们需求,这时我们就可以通过 wincc提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用wincc其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。wincc 提供了c 脚本和vbs脚本,本文主要以全局 c 脚本编程为例介绍定时功能的实现。
2脚本中定时器介绍
既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发:
图1 脚本触发器分类
如图1所示: 脚本触发器分为使用定时器和使用变量, 定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。 使用变量触发脚本,即在变量发生变化时,脚本就执行一次, 而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。
3使用脚本实现更多定时器功能
利用脚本自身的定时器, 可以通过在脚本中编程的方式实现更多其它定时功能。
3.1整点归档
wincc提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档, 比如:整点归档。下面的设置结合wincc脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。
软件环境:bbbbbbs 7 professional service pack1 , wincc v7.0 sp3
归档名称:processvaluearchive
归档变量:newtag
归档周期:1 分钟
归档控制变量 startarchive
c脚本触发周期:10秒
脚本代码:
#include "apdefap.h"
int gscbbbbbb( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void getlocaltime (systemtime* lpst);
#pragma code();
systemtime time;
int t1;
getlocaltime(&time);
t1=time.wminute;
if(t1==00)
settagbit("startarchive",1);
}
if(t1==05)
settagbit("startarchive",0);
return 0;
归档设置如图2:
图2 归档设置
同理,在以上脚本的基础上做修改,可以实现在某个指定的时间点打印报表,只要在满足触发条件时调用下列函数:
rptjobprint("myprintjob");
myprintjob为事先创建好的打印作业。
脚本主要部分在于获取系统当前时间,下面的脚本实现了获取当前时间并分别获取年、
月、日、时、分、秒、毫秒,星期几的功能。
varname1到varname8为wincc内部变量。若在wincc画面上显示时,由于默认i/o 域
的格式为999.99, 要把 varname1的显示格式改为9999。
settagword("varname1",time.wyear);
settagword("varname2",time.wmonth);
settagword("varname3",time.wdayofweek);
settagword("varname4",time.wday);
settagword("varname5",time.whour);
settagword("varname6",time.wminute);
settagword("varname7",time.wsecond);
settagword("varname8",time.wmilliseconds);
设置或读取系统时间的函数如下:
setsystemtime
setlocaltime
getsystemtime
getlocaltime
系统中本地计算机时间和格林威治时间是有区别的。函数“setsystemtime /
getsystemtime”用于设置或读取格林威治时间。
函数“setlocaltime / getlocaltime”用于设置或读取本地计算机时间。
两种时间会因地理的时区不同而改变。两个函数使用方法相同。
3.2 wincc项目激活时避免脚本初次执行及延迟执行脚本
全局脚本在项目激活时,是要执行一次的,在有些情况下,需要避免脚本执行,就采用在脚本中去判断。比如可以创建wincc内部布尔型变量 flag,脚本如下:
if ( gettagbit("flag")==1)
settagword("newtag",1);//根据自己的需求编写对应代码.
else
settagbit("flag",1); //return-type: bool
除了避免项目运行激活时触发脚本执行,我们还可以通过sleep() 延迟脚本功能执行,比如开机后五分钟开始执行脚本具体功能