华中系统PLC高级语言Word文档下载推荐.docx
《华中系统PLC高级语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华中系统PLC高级语言Word文档下载推荐.docx(128页珍藏版)》请在冰豆网上搜索。
#defineSV_IDLE(0x00)//空状态
#defineSV_Reset_Delay(200)//伺服复位延时(ms)
#defineSV_Power_Delay(1000)//伺服上强电延时(ms)
#defineSV_Ready_Delay(50)//伺服准备好延时(毫秒)
#defineSV_Enable_Delay(5000)//伺服模块准备好超时时间(ms)
#defineSV_Brake_Delay(200)//开抱闸延时(ms)
#defineMODE_ESTOP(0x01)//急停
#defineMODE_RESET(0x02)//复位
#defineMODE_AXIS_READY(0x04)//轴准备好
#defineMODE_NORMAL(0x10)//正常
#defineMODE_SV_POWER(0x20)//伺服上电
#defineToolIdle(0x00)//非换刀状态
#defineToolRevFwd(0x01)//刀架准备
#defineToolStartUp(0x02)//刀架启动
#defineToolCheckDest(0x04)//检测刀是否到达目的刀位
#defineToolShotPin(0x08)//打出定位销
#defineCheckToolPin(0x0f)//检测定位销到位
#defineToolMotorStop(0x10)//刀架电机停
#defineToolRev(0x20)//刀库反转
#defineToolCheckLock(0x40)//检测锁紧信号
#defineToolTakePin(0x80)//拔出定位销
#defineToolChgEnd(0xf0)//换刀完成
#defineOver_Step(10)//系统修调的步距
#defineG96Mode
(1)//恒速度切削模式
#defineG97Mode
(2)//非恒速度切削模式
#definemode_selR[0]//模式选择
#definerun_enableR[1]//运行使能
#definesv_statR[2]//伺服上电状态
#defineaxis_disableR[3]//轴就绪
#defineLAST_MODE_SELR[4]//记录上一次选择的模式
#defineSystem_ModeR[5]//系统当前工作模式
#definereset_onemoreR[6]
#defineauto_enableR[7]//自动运行允许
#definestep_mulR_i[8/2]//步进倍率
#definehand_mulR_i[10/2]//手摇倍率
#defineaxis_selR_c[12]//手摇轴号
#defineFinding_Axis_ZeroR[13]//进给轴正在找Z脉冲
#definemdi_stateR[14]//系统为MDI状态
#defineAxisOverstepR[15]
#definesv_almR[16]//伺服报警
#definespdl_cmdR_ui[18/2]//主轴转数
#definespdl_ctrlR[20]//主轴控制
#definespdl_statR[21]//主轴状态
#definespdl_last_speedR_ui[22/2]//保存主轴的速度(防护门打开时、自动换档时需要)
#definespdl_last_ctrlR[24]//保存主轴的状态(防护门打开时、自动换档时需要)
#definealm_cancelR[25]
#defineSpdOutDAR_i[28/2]//当前主轴输出的DA
#definetool_ctrlR[30]//刀具换刀状态
#defineToolCurPosR[31]//刀具当前位置
#defineToolDesPosR[32]//刀具目的位置
#defineToolAlarmR[33]//刀具报警
#defineATC_StepR_c[34]
#defineATC_DirB[35]//刀架开始的运动方向
#defineCommandOutSpeedR_ui[36/2]//当前指令输出速度
#defineAdjustOutSpeedR_ui[38/2]//补偿后的指令输出速度
#defineCur_Shelves_PosR_c[40]//当前使用的挡位
#defineNew_Shelves_PosB[41]//新的主轴挡位
#defineshv_stageR[42]//换档的步骤状态
#defineAutoShelvesR[43]
#definejog_speedR_i[48/2]//点动速率
#definerpdfeedoverR_i[54/2]//快进修调
#definefeedoverR_i[56/2]//进给修调
#definespdl_overR_i[58/2]//主轴修调
#defineDoorCloseFlagR[60]//0:
防护门打开1:
防护门关闭
#defineDoorLockStateR[61]//0:
防护门有效1:
防护门失效
#defineHome_Finish_FlagR[65]//轴回零完成标记
#defineZ_lockR[66]//机床Z轴锁住
#definemac_lockR[67]//机床是否锁住
#definecoolant_ctrlR[69]//冷却状态
#defineCurSpldTFenZiR[70]//主轴传动比分子
#defineCurSpldTFenMuR[71]//主轴传动比分母
#defineCYCLE_STATR[72]//系统正在加工
#defineLubeStateR[73]//0:
无润滑1:
正在润滑
#defineRISE_HandWheelR[76]//记录手摇单元的状态
#defineSKIP_SWR[77]//跳段功能
#defineWaitMSTFinish_MR[78]//M代码执行完毕
#defineWaitMSTFinish_SR[79]//主轴转速到达
#defineWaitMSTFinish_TR[80]//换刀动作完成
#defineTestSpdlDaFlagR[81]//测试主轴DA标记
#defineAutoDoorStateR[93]//自动门的状态,0为关闭,1为开启
#defineCur_EStop_StateR[94]//外部运行允许的状态(0:
急停1:
运行允许)
#defineLast_EStop_StateR[95]//取外部运行允许上升沿
#defineDryRun_StateR[96]//空运行的状态
#defineSpdlBrakeFinishR[97]//主轴抱闸完成状态
#defineSpdlTriModeR[98]//星三角完成的标记
#defineTStock_ctrlB[98]//尾座控制0:
无动作1:
前伸2:
后退
#definechuck_modeR[99]//卡盘方式0:
外卡1:
内卡
#definechuck_ctrlB[100]//卡盘动作1:
外卡紧(内卡松)2:
外卡松(内卡紧)
#definechuck_statR[101]
#defineYeYa_StateR[102]//液压状态1:
开启,0:
关闭
#defineGPre_AlarmR[103]//液压报警
#defineSpdlInitSpinR_ui[104/2]//主轴初始速度
#defineSpdlCurSpeedR_i[106/2]//当前主轴的速度
#defineSpeedOverStepR_i[110/2]//当前输出允许的误差转速
#defineSeleStop_StateR[112]//程序选择停的状态0:
无效1:
有效
#defineStepOrHandwheelR[113]//步进还是手摇0:
步进1:
手摇
#definespdl_jogR[114]//主轴冲动
#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))//恒速度切的最大转速
#defineAbsSpd_StartR(294)
#defineSpdl_Shel_AbsSpeed(x)R_ui[(AbsSpd_StartR+x*2)/2]//主轴档位的设定转速5unit(from294to303)
#defineActSpd_StartR(304)
#defineSpdl_Shel_ActSpeed(x)R_ui[(ActSpd_StartR+x*2)/2]//主轴档位的实测转速5unit(from304to313)
#defineTrans_StartR(314)
#defineSpdl_Shel_TFenZi(x)R[Trans_StartR+x*2]//主轴传动比分子5unit(314-316-318-320-322)
#defineSpdl_Shel_TFenMu(x)R[Trans_StartR+x*2+1]//主轴传动比分母5unit(315-317-319-321-323)
#defineTM1_MAXR[326]//短时定时器的总个数
#defineTM2_MAXR[327]//长时定时器的总个数
#defineTM(x)R[328+x]//15unit(from328to342)
#definesys_timer(x)R_ui[(344+x*2)/2]//短计时器100unit(from344to543)
#definesys_timer2(x)R_ul[(544+x*4)/4]//长计时器14unit(from544to599)
/////////////R600到R699用作保存触发器的状态/////////////////////////
#definetest_c_dwellR[670]//刚性攻丝
#definetest_c_prosR_ul[676/4]//刚性攻丝
#definealm_msg(x)R_ui[(720+2*x)/2]//4个PLC报警信息存储器(可以同时输出64个报警)
#definePLC_PERIODR[730]
////////////////////////////////////////////
#defineGS_MarkR[737]//攻丝标记0:
非攻丝1:
正向2:
反向
#defineGS_Spdl_Com_SpeedR_i[738/2]//攻丝主轴速度
#defineGS_Spdl_Yuting_PosR_l[740/4]//攻丝主轴预停角度
#defineGS_Spdl_Yuting_Pos_uR_ul[740/4]
#defineGS_Z_Tmp_PosR_l[744/4]
#defineGS_Spdl_Old_DirR[748]//攻丝前主轴状态
#defineGS_Spdl_Yuting_ktempB[30]//攻丝预停调节临时分子
#defineSys_Need_GotoZeroP_i[0]//系统上电是否提示回零
#defineSp_Shelves_SpeedP_i[1]//主轴换档时的指定转速[单位:
转/分钟]
#defineToolChangeTimeMaxP_i[2]//换刀超时时间
#defineToolLockTimeP_i[3]//锁紧时间
#defineToolFwdTimeP_i[4]//正转延时时间
#defineSysChuckTypeP_i[5]//卡盘类型[0:
手动;
1:
持续式;
2:
脉冲式]
#defineSpld_CurrentScopeP_i[6]//指令转速和实际转速之间的误差
#defineSpdl_SpeedOverTimeP_i[7]//主轴速度到达的超时时间
#defineSpldBrakeWaitTMaxP_i[8]//主轴停止后制动延时时间
#defineSpldBrakeDelayTMaxP_i[9]//主轴持续制动延时时间
#defineMachHomeBlockP_i[10]//机床是否有回零开关[0:
否;
是]
#defineMachLube_CTMaxP_i[11]//机床润滑间隔时间[单位:
分钟]
#defineMachLube_OTMaxP_i[12]//机床润滑持续时间[单位:
秒]
#defineMachLube_ATMaxP_i[13]//机床润滑报警检测时间[单位:
毫秒]
#defineSpldInitSpeedP_i[14]//主轴启动速度
#defineMac_Lock_MSTP_i[15]//机床锁住是否包含MST[0:
是]
#defineHandWheelDirP_i[16]//手摇脉冲方向(0:
同向1:
反向)
#defineGS_Spdl_Speed_MaxP_i[17]//攻丝主轴允许最高速度
#defineGS_Spdl_Speed_MinP_i[18]//攻丝主轴允许最低速度
#defineGS_Spdl_Yuting_k1P_i[19]//攻丝预停调节分子
#defineSpldTriaChangeTimeP_i[20]//主轴星三角切换延时
#defineYeYaAlarmMaxTP_i[21]//液压报警检测延时时间
#defineProDoor_Open_SpeedP_i[22]//防护门打开后的主轴转速(手动方式下有效)[单位:
转/分钟](出厂值50)
#defineSpdl_Rev_ModeP_i[23]//主轴反转方式[0:
Y输出;
模拟量极性]
#defineHandw_Use_StepLampP_i[24]//用面板倍率灯指示手摇倍率[0:
否1:
voidclr_tt(inti)
{
if(i<
0||i>
=114)
return;
clr_bit(TM(i/8),i%8);
100)
sys_timer(i)=0;
else
{
i=i-100;
sys_timer2(i)=0;
}
}
//////定时器的功能较特殊,建议不要进行&
&
和||的复合判断,使用时最好另起一行////////
intrun_tt(inti,longt)
return0;
set_bit(TM(i/8),i%8);
if(TM1_MAX<
i)
TM1_MAX=i;
if(sys_timer(i)>
t/PLC_PERIOD)
return1;
else
sys_timer(i)++;
if(TM2_MAX<
TM2_MAX=i;
if(sys_timer2(i)>
sys_timer2(i)++;
return0;
intget_tri_raise(intreg,intvalue)//取上升沿
intv;
v=X[reg]&
value;
if(v)
if(R[600+reg]&
value)
v=0;
R[600+reg]|=value;
R[600+reg]&
=~value;
returnv;
intget_tri_fall(intreg,intvalue)//取下降沿
R[600+reg]|=value;
v=0;
{
v=1;
R[600+reg]&
}
voidSetPrompt(intNo)//输出PLC提示
clr_tt(100);
*message_no()=No+1;
#ifndef_OLD_CNC_SYS_//7.09版(含)以前的上层
voidset_alm(intNo)//输出PLC报警
auto_enable=0;
set_bit(alm_msg(No/16),No%16);
#else
voidclr_alm(intNo)//清除PLC报警
clr_bit(alm_msg(No/16),No%16);
voidCncStop(void)
handwheel(0,-1,0);
//清手摇
run_enable=0;
spdl_ctrl=0;
spdl_stat=0;
AutoShelves=0;
spdl_last_ctrl=0;
tool_ctrl=ToolIdle;
coolant_ctrl=0;
LubeState=0;
YeYa_State=0;
TestSpdlDaFlag=0;
#ifdef_AxisMotor_Brake_
#ifdefOUT_ACT_DN_MotorBrake
OUT_ACT_DN_MotorBrake;
//抱闸
#endif
#ifdefOut_SpdlGroup
Out_SpdlGroup
voidMachLube_Fun(void)//机床润滑
longt1=(long)MachLube_OTMax*1000;
longt2=(long)MachLube_CTMax*1000*60;
if(LubeState)
#ifdefOUT_ACT_EN_MCLubeStart
OUT_ACT_EN_MCLubeStart
#ifdefOUT_LAMP_EN_KBLubeStart
OUT_LAMP_EN_KBLubeStart
if(run_tt(101,t1))
clr_tt(101);
LubeState=0;
#ifdefOUT_ACT_DN_MCLubeStart
OUT_ACT_DN_MCLubeStart
#ifdefOUT_LAMP_DN_KBLubeStart
OUT_LAMP_DN_KBLubeStart
if(run_tt(102,t2))
clr_tt(10