附件为程序工程文件,在keil V4下编译;
void PLC_Task(void)
{
/* X0按下:Y0输出1个脉冲
X1按下:Y0输出2个脉冲
X2按下:紧急停止,复位功能
D[0]是输出脉冲数;
D[1]是定时器设定时间
*/
D[1]=10;//10=1秒,如果要脉冲间隔3秒,设定30;
if((X0==1||X1==1) && M0==0 && M1==0) //X0或者X1按下输出脉冲
{
M0=1; //脉冲输出起动
if(X0==1)D[0]=1; //X0按下输出1个脉冲
if(X1==1)D[0]=2; //X0按下输出2个脉冲
}
if(X0==0 && X1==0 && M0==1){M0=0;M1=1;} //X0或者X1按下松开后起动输出脉冲
//起动脉冲
if((M1==1 || M2==1) && Y0==0 && T_100MS_Bit[0]==0)
{
T100MS_Set(0,D[1]); //打开定时器0,定时值为D[1]值
SET(Y0); //Y0为低,输出脉冲
C_T(0, D[0]); //计数器0计数一次,设定值为D[0];
}
if(T_100MS_Bit[0]==1) //定时器0时间到
{
M1=0;
T100MS_Rst(0); //复位定时器0
RST(Y0); //脉冲为高,停止;
M2=0; //二次脉冲起动复位
if(C_Bit[0]==1) //判断输出脉冲是否等于设定数量 ,
{C_T_Rst(0);} //脉冲输出达设定量,清计数器,清起动标志
else T100MS_Set(1,D[1]);//脉冲没有到,打开定时器1,设定二次脉冲间隔时间
}
if(T_100MS_Bit[1]==1) //二次脉冲间隔时间到
{
T100MS_Rst(1); //复位定时器1
M2=1; //二次脉二次脉冲驱动标志
}
//紧急停止,按下脉冲停止,复位定时器、计数器与各标志
if(X2==1)
{
M0=0;M1=0;M2=0;RST(Y0); //复位起动标志与脉冲停止
T100MS_Rst(0); //复位定时器0
T100MS_Rst(1); //复位定时器1
C_T_Rst(0);
}
}
最后修改:2011/4/18 9:33:35