世纪星车床标准化plc程序.docx
《世纪星车床标准化plc程序.docx》由会员分享,可在线阅读,更多相关《世纪星车床标准化plc程序.docx(145页珍藏版)》请在冰豆网上搜索。
世纪星车床标准化plc程序
//世纪星车床标准化plc程序
///版本号:
2.0
//修改记录:
2006年02月08日
/#pragmainline
#include"plc.h"
#include"plc_Map.h"
#definePLC2_TIME(128)
#ifndefMax_Shelves
#defineMax_Shelves
(1)
#endif
#ifndefToolsTotalNum
#defineToolsTotalNum
(1)
#endif
#defineMAX_DA(0x7fff)
#defineout_dac(da)(Y_i[28/2]=da)
#defineplc_ver_no()(G_i[255])
#definemode_selR[0]//模式选择
#definerun_enableR[1]//运行使能
#definesv_statR[2]//伺服上电状态
#defineSV_RESET_OUT(0x01)//伺服电源复位
#defineSV_POWER_OUT(0x04)//伺服上强电
#defineSV_POWER_WAIT(0x05)//等待上强电
#defineSV_ENABLE_OUT(0x08)//伺服使能
#defineSV_ENABLE_WAIT(0x09)//等待伺服使能
#defineSV_BRAKE_OUT(0x10)//开抱闸
#defineSV_OFF_CML(0x20)//关伺服SV-CML
#defineSV_FAILD(0x40)//伺服上电失败
#defineSV_IDLE(0x00)//空状态
#defineAdjustDAR[3]//需要调整DA输出
#definemode_tmpR[4]//临时模式选择
#defineSystem_ModeR[5]//系统当前工作模式
#defineMODE_ESTOP(0x01)//急停
#defineMODE_RESET(0x02)//复位
#defineMODE_NORMAL(0x04)//正常
#defineMODE_SV_POWER(0x08)//伺服上电
#definesv_dwellR_i[6/2]//伺服时延
#definestep_mulR_i[8/2]//步进进给增量倍率
#definejog_speedR_i[10/2]//点动速率
#definerpdfeedoverR_i[12/2]//快进修调
#definefeedoverR_i[14/2]//进给修调
#definespdl_overrideR_i[16/2]//主轴修调
#definespdl_cmdR_ui[18/2]//主轴转数
#definespdl_ctrlR[20]//主轴控制
#definespdl_statR[21]//主轴状态
#definespdl_dwellR_i[22/2]//主轴延时
#defineSpindleSpeedOKR[24]//主轴速度OK
#defineReferenceFindingStatR[25]//回零定位模式
#defineSpdlOutDAR_i[26/2]//当前主轴输出的DA
#defineSpdlCurSpeedR_i[28/2]//当前主轴的速度
#defineSysResetDwellR_i[30/2]//系统复位延时
#defineToolCurPosR[32]//刀具当前位置
#defineToolDesPosR[33]//刀具目的位置
#defineSysNeedStopR[34]//系统需要停止进给轴运动
#defineDoorLockStateR[35]//0:
防护门有效1:
防护门失效
#defineCommandOutSpeedR_ui[36/2]//当前指令输出速度
#defineAdjustOutSpeedR_ui[38/2]//补偿后的指令输出速度
#defineCur_Shelves_PosR[40]//当前使用的挡位
#defineNew_Shelves_PosR[41]//新的主轴挡位
#definePromptTimesR_i[42/2]//记录同一个消息的提示次数
#definePromptMessageMax(100)//定义系统最大的消息提示条数
#defineCH_STATR_i[44/2]//通道的状态
#defineLAST_MODE_SELR[48]//记录上一次选择的模式
#defineSpdlSpeedDAMaxTR_i[50/2]//速度到达的超时时间
#defineAXIS_X_STATR_i[52/2]//X轴的状态
#defineAXIS_Y_STATR_i[54/2]//X轴的状态
#defineAXIS_Z_STATR_i[56/2]//Z轴的状态
#defineZ_lockR[58]//机床Z轴锁住
#defineRISE_ZLockR[59]//取Z轴锁住的上升沿
#definemac_lockR[60]//测试机床是否锁住
#definemst_lockR[61]//测试MST锁住
#defineCurSpldTFenZiR[62]//主轴传动比分子
#defineCurSpldTFenMuR[63]//主轴传动比分母
#defineChange_Tool_DelayR_i[64/2]//换刀时延时间
#defineToolChg_dwellR_i[66/2]//换刀超时控制
#defineToolChangeStateR[68]//刀具换刀状态
#defineToolIdle(0)//非换刀状态
#defineToolRevFwd
(1)//让刀架正、反
#defineToolCheckDest
(2)//检测刀是否到达目的刀位
#defineToolShotPin(3)//打出定位销
#defineCheckToolPin(4)//检测定位销到位
#defineToolMotorStop(5)//刀架电机停(既不正转,也不反转)2005-03-10
#defineToolRev(6)//刀库反转
#defineToolCheckLock(7)//检测锁紧信号
#defineToolTakePin(8)//拔出定位销
#defineToolChgEnd(9)//换刀完成2005-03-10
#defineToolActDirB[69]//刀架开始的运动方向
#defineSToolChgStateR[69]//伺服刀架换刀状态
#defineSToolIdle(0)
#defineZeroSearch
(1)
#defineSToolReset
(2)
#defineSToolChange(3)
#defineSToolMove(4)
#defineSToolCheckIndex(5)
#defineSToolCheckLock(8)
#defineSToolChg_DelayR_i[70/2]
#defineToolCheckDwellR_i[72/2]
#defineSKIP_SWR[76]//跳段功能
#defineRISE_SKIP_SW[77]//取跳段功能上升沿
#defineWaitMSTFinish_MR[78]//M代码执行完毕
#defineWaitMSTFinish_SR[79]//主轴转速到达
#defineWaitMSTFinish_TR[80]//换刀动作完成
#defineHomeAxis_ModeR[81]//是回零模式
#defineGotoZero_FlagsR[82]//移动轴是否回零的标志
#defineRISE_CSpdlFwdR[83]//主轴正点动上升沿
#defineRISE_CSpdlRevR[84]//主轴负点动上升沿
#defineJogDwellR[85]//主轴点动延时的计时器
#defineSpdlJogDelay(1000)//主轴点动延时一秒
#defineAutoDoorStateR[86]//自动门的状态,0为关闭,1为开启
#defineRISE_AutoDoorR[87]//取自动门的上升沿
#defineOver_Step
(2)//系统修调的步距
#defineTEMP_ESTOP_STATR[88]//急停的状态
#defineRISE_ESTOPR[89]//取急停上升沿
#defineRISE_MacLockR[90]//取机床锁住的上升沿
#defineRISE_CoolLockR[91]//取冷却开停的上升沿
#defineRISE_ToolSelectR[92]//取选刀的上升沿
#defineRISE_ToolChangeR[93]//取换刀的上升沿
#defineRISE_DryRunR[94]//取空运行的上升沿
#defineRISE_SelecStopR[95]//取选择停的上升沿
#defineDryRun_StateR[96]//空运行的状态
#defineSpdlMode_StateR[97]//星三角完成的标记
#defineKaPan_ModeR[98]//卡盘方式0:
外卡,1:
内卡
#defineKaPan_StateB[99]//卡盘动作1:
外卡松(内卡紧),2:
外卡紧(内卡松)
#defineFlagKaPanStateR[100]//记录卡盘方式
#defineTaoTong_StateB[101]//套筒方式0:
无动作1:
前伸,2:
后退
#defineYeYa_StateR[102]//液压状态1:
开启,0:
关闭
#defineShelveDwellR[103]//主轴换档延时计时器
#defineShelveChangeDelay(1000)//主轴换档延时时间
#defineRISE_KaPanModeR[104]//取卡盘方式选择的上升沿
#defineRISE_KaPanActR[105]//取卡盘松紧选择的上升沿
#defineRISE_TaoTongR[106]//取套筒的上升沿
#defineRISE_YeYaLockR[107]//取液压的上升沿
#defineSpdlJogSpeedMax(300)//主轴点动的速度
#defineSpdlJogSpeedMin(11)//主轴点动的速度
#defineSpindleOnOffDelayR_i[108/2]//主轴电机接通延时
#defineSpeedOverStepR_i[110/2]//当前输出允许的误差转速
#defineLAST_Mul_SELR_ui[112/2]//记录上一次倍率
#defineSpdlLastSpeedR_i[114/2]//主轴上一次的速度
#defineRISE_ToolIndexR[116]//刀架刀位信号的上升沿
#defineToolHomeFlagR[117]//计数刀塔是否回原位标记
#defineG96Mode
(1)//恒速度切削模式
#defineG97Mode
(2)//非恒速度切削模式
#defineInvarCurZeroR_i[118/2]
#defineInvarCurXPosR_ui[120/2]
#defineInvarRadiusR_i[122/2]
#defineInvarSpeedCut(int)(*ch_var(0,0))//恒速度切削标志
#defineInvarCurCutSpeed(int)(*ch_var(0,1))//恒线速度切削的速度(m/min)
#defineInvarMinSpldSpin(int)(*ch_var(0,2))//恒速度切的最小转速
#defineInvarMaxSpldSpin(int)(*ch_var(0,3))//恒速度切的最大转速
#defineRISE_ABS_XN(x)R[124+x]//取步进+x方向的上升沿//XN:
R[124],YN:
R[125],ZN:
R[126]
#defineRISE_ABS_XP(x)R[128+x]//取步进-x方向的上升沿//XP:
R[128],YP:
R[129],ZP:
R[130]
#defineAbsSpd_StartR(134)
#defineSpdl_Shel_AbsSpeed(x)R_i[(AbsSpd_StartR+x*2)/2]//引用主轴对应档位的设定转速
//注意:
R[134]后的64个R由此宏定义使用,如果还要使用新的R寄存器请从200开始
#defineActSpd_StartR(200)
#defineSpdl_Shel_ActSpeed(x)R_i[(ActSpd_StartR+x*2)/2]//引用主轴对应档位的实测转速
//注意:
R[200]后的64个R由此宏定义使用,如果还要使用新的R寄存器请从268开始
#defineTrans_StartR(268)
#defineSpdl_Shel_TFenZi(x)R[Trans_StartR+x*2]//引用主轴传动比分子
#defineSpdl_Shel_TFenMu(x)R[Trans_StartR+x*2+1]//引用主轴传动比分母
//注意:
R[270]后的32个R由此宏定义使用,如果还要使用新的R寄存器请从310开始
#defineRSpldStopDelayR_ui[300/2]//主轴停止后制动延时时间
#defineRSpldBrakeDelayR_ui[302/2]//主轴持续制动延时时间
#defineDefen_Door_Spd_SpeedR_ui[304/2]//主轴的速度值
#defineDefen_Door_Spd_StatusR[306]//防护门打开后主轴的模态(0:
停1:
正转2:
反转)
#defineSeleStop_StateR[307]//程序选择停的状态0:
无效1:
有效
#defineRISE_DoorLockR[308]//门连锁的上升延
//PLC1中用的临时变量
#defineTEMP_R10R[310]//临时变量
#defineTEMP_R11R[311]//临时变量
#defineTEMP_R12R[312]//临时变量
#defineTEMP_R13R[313]//临时变量
#defineTEMP_R14R[314]//临时变量
#defineTEMP_R15R[315]//临时变量
#defineTEMP_R16R[316]//临时变量
#defineSpdlTimeR_ui[318/2]//临时变量
//PLC2中用的临时变量
#defineTEMP_R20R[320]//临时变量
#defineTEMP_R21R[321]//临时变量
#defineTEMP_R22R[322]//临时变量
#defineTEMP_R23R[323]//临时变量
#defineTEMP_R24R[324]//临时变量
#defineTEMP_R25R[325]//临时变量
#defineTEMP_R26R[326]//临时变量
#defineTEMP_R27R[327]//临时变量
#defineYeYaJumpOutR_ui[332]//临时变量
#defineTempTimeR_ui[334/2]//临时变量
#defineLube_Time1R_ul[336/4]//临时变量
#defineIsLubingR[340]//0:
没有润滑1:
正在润滑
#defineLube_Time2R_ui[342/2]//临时变量
#defineLube_Time3R_ui[344/2]//临时变量
#defineCCoolantDwellR_i[350/2]
#defineLube_dwell1R_ul[352/4]//临时变量
#defineLube_dwell2R_ui[356/2]//临时变量
#defineLube_dwell3R_ui[358/2]//临时变量
#definePLS_MOVE_1UMR_ui[400/2]//移动轴脉冲当量分母由上层系统传递,不能更改
#defineAxisInUseR[507]
#defineSV_Reset_Delay(200)//伺服复位延时(毫秒)
#defineSV_Power_Delay(1000)//伺服上强电延时(毫秒)
#defineSV_Enable_Delay(5000)//伺服使能延时(毫秒)
#defineSV_Brake_Delay(200)//开抱闸延时(毫秒)
#defineXAxis_Home_MSK0x01
#defineYAxis_Home_MSK0x02
#defineZAxis_Home_MSK0x04
#defineSys_Need_GotoZeroP_ui[0]//系统上电是否提示回零
#defineSpdl_Break_SpeedMinP_ui[1]//主轴开抱闸的最小转速
#defineToolChangeTimeMaxP_ui[2]//换刀超时时间=5秒
#defineToolLockTimeP_ui[3]//锁紧时间=1000毫秒
#defineToolFwdTimeP_ui[4]//正转延时时间=1000毫秒
#definePinLockTimeP_ui[5]//打出定位销延时
#defineSpld_CurrentScopeP_ui[6]//指令转速和实际转速之间的误差
#defineSpld_SpeedAgreaMaxTP_ui[7]//主轴速度到达的超时时间5秒
#defineSpldStopDelayBrakeP_ui[8]//主轴停止后制动延时时间
#defineSpldBrakeTimeP_ui[9]//主轴持续制动延时时间
#defineSpldYeYaLube_Time1P_ui[10]//液压泵启动延时
#defineMachLubeLube_Time1P_ui[11]//机床润滑间隔时间[单位:
分钟]
#defineMachLubeLube_Time2P_ui[12]//机床润滑持续时间[单位:
秒]
#defineMachLubeLube_Time3P_ui[13]//机床润滑报警检测时间[单位:
毫秒]
#defineSpldInitSpeedP_ui[14]//主轴启动速度
#defineSpldTriaChangeTimeP_ui[15]//主轴星三角切换延时
#defineHandWheelDirP_ui[16]//手摇脉冲方向(0:
同向1:
反向)
intabs(intn)
{
if(n<0)
n=-n;
returnn;
}
voidSetPLCVer(intNo)//设置PLC版本
{
*plc_ver_no()=No;//PLC版本信息
}
voidSetPrompt(intNo)
{
*message_no()=No;//PLC报警提示信息
PromptTimes=0;
}
//停止所有轴运动(不含主轴)
voidstop_move(void)
{
inti;
for(i=0;i<3;i++)
set_axis_stop(i);
handwheel(0,-1,0);//清手摇
}
//停止所有轴运动(含主轴)
voidstop(void)
{
stop_move();
spdl_ctrl=0;
mod_M_code(0)=-1;
mod_T_code(0)=-1;
mod_S_code(0)=-1;
}
intHydrauPre(void)//液压控制
{
#ifdefIN_GET_YeYaStart
TEMP_R27=IN_GET_YeYaStart;//液压泵启动键按下
#else
TEMP_R27=0;
#endif
if(TEMP_R27==0)
RISE_YeYaLock=0;
else
{
if(RISE_YeYaLock==0)
{
if(YeYa_State==1)
{
#ifdefOUT_LAMP_DN_YeYaStart
OUT_LAMP_DN_YeYaStart
#endif
YeYa_State=0;
}
else
{
#ifdefOUT_LAMP_EN_YeYaStart
OUT_LAMP_EN_YeYaStart
#endif
YeYa_State=1;
}
RISE_YeYaLock=1;
}
}
#ifdefIN_GET_PessureWarning
if(IN_GET_PessureWarning)
{
TempTime++;
if((CH_STAT&CH_CYCLE_LAMP)||(TempTime>(SpldYeYaLube_Time1/plc1_time)))
{
#ifdefOUT_ACT_DN_YeYaBegin
OUT_ACT_DN_YeYaBegin
#endif
SysNeedStop=1;
SetPrompt(14);//压力报警
return1;
}
}
else
{
TempTime=0;
//#ifdefOUT_ACT_DN_YeYaBegin
//OUT_ACT_DN_YeYaBegin
//#endif
//return0;