📄 di_do_func.c
字号:
#include "hardware_reg.h"
#include "mototype.h"
#include "def.h"
extern int Alarm_flag;
extern int Break_flag;
int Start_Enable_Signal = 0; //允许启动信号
int Start_Signal = 0; //启动信号
int Break_Signal = 0; //跳闸信号
int Reset_Signal = 0; //复位信号
void DI_DO_Func(void)
{
int i = 0;
int j = 0;
int DI_Temp = 0;
int ii;
unsigned long datatemp;
/***************************判断开入量状态*******************************************/
static int DI_Enable_Sample[4] ; //有高电平置一
static int DI_Disable_Sample[4] ; //有低电平置一
datatemp = *(volatile unsigned long *)PORTF_DATA;
for( i= 0; i <4; i++ )
{
if( (datatemp >>i)& 0x1)
{
DI_Disable_Sample[i]++;
}
else
{
DI_Enable_Sample[i] ++;
DI_Disable_Sample[i] = 0;
}
if( DI_Disable_Sample[i] > 10)
{
JDInputs->DI[i] = 0;
DI_Enable_Sample[i] = 0;
DI_Disable_Sample[i] = 0;
}
ii = DI_Enable_Sample[i];
if( DI_Enable_Sample[i] > 10)
{
JDInputs->DI[i] = 1;
DI_Enable_Sample[i] = 1;
}
} //end for( i= 0; i <4; i++ )
/*------------------end 判断开入量状态--------------------------------------*/
//JDInputs->DI[0] = 1;
/***************************判断开入量设定值*******************************************/
for( i= 0; i<4; i++)
{
switch (*((int *)&SystemSetting.D1 + i))
{
case 0: //锁闭
break;
case 1: //允许启动
if( JDInputs->DI[i] == 1 )
Start_Enable_Signal = 1;
else
Start_Enable_Signal = -1;
break;
case 2: //启动
if( JDInputs->DI[i] == 1 )
{
Start_Signal = 1;
Break_Signal = 0;
}
break;
case 3: // 跳闸
if( JDInputs->DI[i] == 1 )
{
Break_Signal = 1;
Start_Signal = 0;
}
break;
case 4: //复位
if( JDInputs->DI[i] == 1 )
{
Reset_Signal = 1;
}
break;
case 5: //控制转换
break;
case 6: //直接控制开出量DO1
if( SystemSetting.D5 == 6) //开入量直接控制功能
{
if( JDInputs->DI[i] == 1 )
{
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
}
else
{
*(volatile unsigned long *)PORTG_DATA |= 0x10;
}
}
break;
case 7: //:直接控制开出量DO2
if( SystemSetting.D6 == 6) //开入量直接控制功能
{
if( JDInputs->DI[i] == 1 )
{
*(volatile unsigned long *)PORTG_DATA |= 0x4;
}
else
{
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
}
}
break;
case 8: //:直接控制开出量DO3
if( SystemSetting.D7 == 6) //开入量直接控制功能
{
if( JDInputs->DI[i] == 1 )
{
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
}
else
{
*(volatile unsigned long *)PORTG_DATA |= 0x2;
}
}
break;
case 9: //:直接控制开出量DO4
if( SystemSetting.D8 == 6) //开入量直接控制功能
{
if( JDInputs->DI[i] == 1 )
{
*(volatile unsigned long *)PORTG_DATA &= ~0x1 ;
}
else
{
*(volatile unsigned long *)PORTG_DATA |= 0x1;
}
}
break;
default:
break;
} //end switch ( (*(int *)&SystemSetting.D1) + i )
} //end for( i= 0; i <4; i++ )
/*-------------------------判断开入量设定值--------------------------------------*/
/***************************判断开出量设定值*******************************************/
for( i= 0; i<4; i++)
{
ii = *((int *)&SystemSetting.D5 + i);
switch (*((int *)&SystemSetting.D5 + i))
{
case 0: //闭锁
break;
case 1://故障报警输出
if( Alarm_flag )
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA |= 0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA &= ~0x1;
break;
default:
break;
} // end switch
}
else
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA |= 0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA |= 0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA |= 0x1;
break;
default:
break;
} // end switch
}
break;
case 2://故障跳闸输出
if( Break_flag || Break_Signal )
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA |= 0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA &= ~0x1;
break;
default:
break;
} // end switch
}
else
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA |= 0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA |= 0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA |= 0x1;
break;
default:
break;
} // end switch
}
break;
case 3://启动/停止控制
if( Start_Signal )
{
Start_Signal = 0;
SystemSetting.StartSingal = 0;
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
*(RP)(PWM2_C) = 0 ;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Start_Signal = 1;
SystemSetting.StartSingal = 1;
}
}
break;
case 1:
*(volatile unsigned long *)PORTG_DATA |= 0x4;
*(RP)(PWM2_C) = 0 ;
SystemSetting.StartSingal = 0;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Start_Signal = 1;
SystemSetting.StartSingal = 1;
}
}
break;
case 2:
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
*(RP)(PWM2_C) = 0 ;
SystemSetting.StartSingal = 0;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Start_Signal = 1;
SystemSetting.StartSingal = 1;
}
}
break;
case 3:
*(volatile unsigned long *)PORTG_DATA &= ~0x1;
*(RP)(PWM2_C) = 0 ;
SystemSetting.StartSingal = 0;
break;
default:
break;
} // end switch
} //end if( Start_Signal )
if( Break_Signal || Break_flag )
{
Break_Signal = 0;
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA |=0x10;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Break_Signal = 1;
}
}
break;
case 1:
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Break_Signal = 1;
}
}
break;
case 2:
*(volatile unsigned long *)PORTG_DATA |= 0x2;
for(j=i;j<3; j++)
{
if( *((int *)&SystemSetting.D5 + j+1) == 3)
{
Break_Signal = 1;
}
}
break;
case 3:
*(volatile unsigned long *)PORTG_DATA |= 0x1;
break;
default:
break;
} // end switch
} //end if( Break_Signal )
break;
case 4://正在运行信号输出
if( Running )
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA |= 0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA &= ~0x1;
break;
default:
break;
}
}
else
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA |=0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA |= 0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA |= 0x1;
break;
default:
break;
} // end switch
}
break;
case 5://允许启动信号输出 此信号只对应热容量
if( Restart_Permit )
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA &= ~0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA |= 0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA &= ~0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA &= ~0x1;
break;
default:
break;
}
}
else
{
switch( i )
{
case 0:
*(volatile unsigned long *)PORTG_DATA |=0x10;
break;
case 1:
*(volatile unsigned long *)PORTG_DATA &= ~0x4;
break;
case 2:
*(volatile unsigned long *)PORTG_DATA |= 0x2;
break;
case 3:
*(volatile unsigned long *)PORTG_DATA |= 0x1;
break;
default:
break;
} // end switch
}
break;
case 6://开入量控制
//上面开入量判断里已经完成控制
break;
case 7://直接输出
break;
default:
break;
}
} //end for( i= 0; i <4; i++ )
/*-------------------------判断开出量设定值--------------------------------------*/
}// end DI_DO_Func(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -