936 lines
36 KiB
C
936 lines
36 KiB
C
#include "..\h\predefine.h"
|
||
#ifdef _tyck_c_
|
||
#undef _tyck_c_
|
||
/*SYS relational*/
|
||
#include <math.h>
|
||
|
||
#include "stdio.h"
|
||
|
||
#include "..\h\lib.h"
|
||
#include "..\h\variable.h"
|
||
#include "..\h\tyck.h"
|
||
#include "..\h\predefine.h"
|
||
#include "..\h\com_lib.h"
|
||
#include ".\inc\analog_tyck.h"
|
||
#include ".\inc\parameter_tyck.h"
|
||
|
||
extern void Reset_Init(void);
|
||
extern void PowerInitData(void);
|
||
|
||
void timer_interrupt(void);
|
||
void tyck_main(void);
|
||
|
||
void TimerManage(void);
|
||
|
||
void JiSuanUI(void); //计算电流电压
|
||
void ComputeTemperature(); //计算温度
|
||
void JiSuanMeasureValue(void); //计算测量值
|
||
void CWWDProtectUnit(NoDirectProtectItemType *CWWDYJ); //温度告警
|
||
void CheckQDKC();
|
||
void SaveLoadWave_tyck(void);
|
||
|
||
unsigned int TestCount = 0; //
|
||
extern void digit_Polling(void);//luoyang add
|
||
void TestShow(void); //
|
||
extern void gse_handle();
|
||
extern void SendGetTimeCommand();
|
||
extern void block_CheckYaoXin();
|
||
extern void CopyYaoXinBianWei();
|
||
extern void digit_mainTask();
|
||
extern void CWWDProtectUnit(NoDirectProtectItemType *CWWDYJ);
|
||
extern void CheckIOYaoXinEx(unsigned char IOType,unsigned char Index,unsigned int yxStart);
|
||
|
||
|
||
/**************************************************
|
||
* void timer_interrupt(void)
|
||
* 描述:保护中断服务程序,中断时间间隔为:20ms/24=5ms/6
|
||
* 历史:
|
||
*************************************************/
|
||
void timer_interrupt(void)
|
||
{
|
||
static volatile int intFlag = 0;
|
||
|
||
ClockTick(&SysTime);
|
||
ModiClock();
|
||
|
||
if(0 != intFlag)
|
||
{
|
||
printf("ms int is not return\n");
|
||
return;
|
||
}
|
||
intFlag = 1;
|
||
#ifdef CCES_ADI
|
||
execute_as_subscriber();
|
||
#endif
|
||
if(Init_IP == TEST_START) //屏蔽采样中断服务程序
|
||
{
|
||
|
||
//TimerManage(); //定时器管理
|
||
//checkYaoXinObject(); //
|
||
digit_Polling(); // luoyang add
|
||
//changeFourierVarType();//
|
||
CheckAnalogZcp(&ZcpSet);
|
||
SaveWave(); //保存4周波实时波形数据
|
||
SaveLoadWave_tyck(); //负荷录波
|
||
CheckChuanDongTest(); //传动试验
|
||
//JiSuanUI(); //计算电流电压
|
||
#ifdef DEVICE_TYPE_CONVENTIONAL
|
||
ComputeTemperature(); //计算温度
|
||
#endif
|
||
if(LS_TR == TYCK_LS)
|
||
{
|
||
block_CheckYaoXin();
|
||
}
|
||
if(!(CheckValue & SET_ERROR_BIT))
|
||
{
|
||
CheckRmote();
|
||
#ifdef TYCK_HK_FUNC
|
||
CheckQDKC();
|
||
#endif
|
||
CWWDProtectUnit(&TYCK_CWWD1YJ); //温度1告警元件
|
||
CWWDProtectUnit(&TYCK_CWWD2YJ); //温度2告警元件
|
||
CWWDProtectUnit(&TYCK_CWWD3YJ); //温度3告警元件
|
||
CWWDProtectUnit(&TYCK_CWWD4YJ); //温度4告警元件
|
||
}
|
||
TimerManage(); //定时器管理
|
||
//计算发送测量值放到保护任务中,原来的发命令方式改为查标志方式,脱离通信任务
|
||
} //end of if(Init_IP==TEST_START)
|
||
|
||
//gse_handle();
|
||
intFlag = 0;
|
||
|
||
}
|
||
|
||
|
||
|
||
void SaveLoadWave_tyck(void)
|
||
{
|
||
//功能说明:负荷录波功能实现
|
||
|
||
unsigned int i, j;
|
||
unsigned int SampleIP,digitalData;
|
||
unsigned char Ch;
|
||
|
||
int readIP;
|
||
|
||
switch(LuBoValue.LB_IP)
|
||
{
|
||
case LB_LOAD_WAVE_START: //负荷录波开始
|
||
|
||
if(DigitalWaveChannelSet.Number > 0)
|
||
{
|
||
digitalData = GetDigitalWaveData();
|
||
//printf("pDigitalWave->Buffer[Key] = %d",pDigitalWave->Buffer[Key].Number);
|
||
}
|
||
if(LuBoValue.Count < LuBoValue.Length)
|
||
{
|
||
//负荷录波未完,保存波形数据
|
||
SampleIP = LuBoValue.Count;
|
||
//for(i = 0; i < 4; i++)
|
||
for(i = 0; i < LoadWave.LengthOfNewData; i++)
|
||
{
|
||
readIP = (LoadWave.IP_last + i) % (REALWAVE_LEN);
|
||
for(j = 0; j < MemPtrSet.pWave->ChannelNum; j++)
|
||
{
|
||
MemPtrSet.pWave->ChannelData[j].Data[SampleIP] = LoadWave.Buffer[j][readIP]; //保存波形数据
|
||
|
||
if(AD_MODE_I ==TYCK_ADType)
|
||
{
|
||
if((j==TYCK_I7_WAVE)||(j==TYCK_I8_WAVE)||(j==TYCK_I9_WAVE)||(j==TYCK_I10_WAVE))
|
||
{
|
||
MemPtrSet.pWave->ChannelData[j].Data[SampleIP]=0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if((j==TYCK_U1_WAVE)||(j==TYCK_U2_WAVE))
|
||
{
|
||
MemPtrSet.pWave->ChannelData[j].Data[SampleIP]=0;
|
||
}
|
||
}
|
||
|
||
MemPtrSet.pWave->ChannelData[j].Length = SampleIP + 1;
|
||
}
|
||
|
||
//数字量录波
|
||
if(DigitalWaveChannelSet.Number > 0)
|
||
{
|
||
//pDigitalWave->Data[SampleIP] = digitalData;
|
||
MemPtrSet.pWave->DigitalData.Data[SampleIP] = digitalData;
|
||
}
|
||
|
||
SampleIP++;
|
||
LuBoValue.Count = SampleIP;
|
||
if(SampleIP >= LuBoValue.Length) //录波缓冲区满
|
||
{
|
||
//处理无模拟量录波,只有数字量录波的情况
|
||
if(0 == MemPtrSet.pWave->ChannelNum && DigitalWaveChannelSet.Number > 0)
|
||
{
|
||
MemPtrSet.pWave->ChannelData[0].Length = LuBoValue.Length; //负荷录波长度
|
||
}
|
||
LuBoValue.LB_IP = LB_LOAD_WAVE_END; //设置负荷录波结束标志
|
||
|
||
return;
|
||
}
|
||
} //end for(i=0;i<4;i++)
|
||
} //end if(.....
|
||
else
|
||
{
|
||
//设置每个通道录波数据长度
|
||
for(j = 0; j < MemPtrSet.pWave->ChannelNum; j++) MemPtrSet.pWave->ChannelData[j].Length = LuBoValue.Length; //负荷录波长度
|
||
|
||
//处理无模拟量录波,只有数字量录波的情况
|
||
if(0 == MemPtrSet.pWave->ChannelNum && DigitalWaveChannelSet.Number > 0)
|
||
{
|
||
MemPtrSet.pWave->ChannelData[0].Length = LuBoValue.Length; //负荷录波长度
|
||
}
|
||
LuBoValue.LB_IP = LB_LOAD_WAVE_END; //设置负荷录波结束标志
|
||
|
||
}
|
||
break;
|
||
case LB_LOAD_WAVE_END: //负荷录波结束
|
||
//等待录波数据发送,当录波数据发送完成后,将负荷录波标志LuBoValue.LB_IP的值修改为LB_LOAD_WAVE_CLOSE
|
||
|
||
if(MovDataToASDU(&Ch, 0, PROTOCOL_DATA_TYPE_LOADWAVE, LuBoValue.SourceAdd) == SUCCESS) LuBoValue.LB_IP = LB_LOAD_WAVE_CLOSE;
|
||
break;
|
||
case LB_LOAD_WAVE_CLOSE: //负荷录波数据处理完成
|
||
break;
|
||
default:
|
||
break;
|
||
}//endcase
|
||
}
|
||
|
||
void JiSuanUI(void)
|
||
{
|
||
//功能说明:有效值、谐波含量、差动电流、制动电流
|
||
|
||
float FS_temp, FC_temp;
|
||
|
||
//计算基波有效值
|
||
//电流1
|
||
FS_temp = ChannelValue[CH_TYCK_I1].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I1].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I1].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流2
|
||
FS_temp = ChannelValue[CH_TYCK_I2].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I2].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I2].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流3
|
||
FS_temp = ChannelValue[CH_TYCK_I3].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I3].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I3].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流4
|
||
FS_temp = ChannelValue[CH_TYCK_I4].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I4].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I4].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流5
|
||
FS_temp = ChannelValue[CH_TYCK_I5].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I5].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I5].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流6
|
||
FS_temp = ChannelValue[CH_TYCK_I6].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I6].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I6].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电压1
|
||
FS_temp = ChannelValue[CH_TYCK_U1].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_U1].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_U1].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电压2
|
||
FS_temp = ChannelValue[CH_TYCK_U2].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_U2].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_U2].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
|
||
|
||
//20200305 add by linwei 增加4路电流
|
||
//电流7
|
||
FS_temp = ChannelValue[CH_TYCK_I7].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I7].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I7].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流8
|
||
FS_temp = ChannelValue[CH_TYCK_I8].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I8].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I8].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流9
|
||
FS_temp = ChannelValue[CH_TYCK_I9].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I9].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I9].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
//电流10
|
||
FS_temp = ChannelValue[CH_TYCK_I10].YouXiaoZhi[JiBo].FS;
|
||
FC_temp = ChannelValue[CH_TYCK_I10].YouXiaoZhi[JiBo].FC;
|
||
ChannelValue[CH_TYCK_I10].YouXiaoZhi[JiBo].Analog.Value = sqrt(FS_temp * FS_temp + FC_temp * FC_temp);
|
||
}
|
||
|
||
|
||
void ComputeTemperature()
|
||
{
|
||
//功能说明:计算温度
|
||
|
||
float I1, T1, K1; //温度1 温度基准 电流基准 曲线斜率
|
||
float I2, T2, K2; //温度2 温度基准 电流基准 曲线斜率
|
||
float I3, T3, K3; //温度3 温度基准 电流基准 曲线斜率
|
||
float I4, T4, K4; //温度4 温度基准 电流基准 曲线斜率
|
||
|
||
float Itemp1, Itemp2 ,Itemp3, Itemp4;
|
||
|
||
I1 = TYCK_WD1ISet;
|
||
T1 = TYCK_WD1TSet;
|
||
K1 = TYCK_WD1KSet;
|
||
I2 = TYCK_WD2ISet;
|
||
T2 = TYCK_WD2TSet;
|
||
K2 = TYCK_WD2KSet;
|
||
|
||
I3 = TYCK_WD3ISet;
|
||
T3 = TYCK_WD3TSet;
|
||
K3 = TYCK_WD3KSet;
|
||
I4 = TYCK_WD4ISet;
|
||
T4 = TYCK_WD4TSet;
|
||
K4 = TYCK_WD4KSet;
|
||
|
||
//20150416 luoyang modi 温度采样点取平均值
|
||
//Itemp1 = (float)ChannelValue[CH_TYCK_WD1].SampleValue_Digit[ChannelValue[CH_TYCK_WD1].FSCount];
|
||
//Itemp2 = (float)ChannelValue[CH_TYCK_WD2].SampleValue_Digit[ChannelValue[CH_TYCK_WD2].FSCount];
|
||
//Itemp3 = (float)ChannelValue[CH_TYCK_WD3].SampleValue_Digit[ChannelValue[CH_TYCK_WD3].FSCount];
|
||
//Itemp4 = (float)ChannelValue[CH_TYCK_WD4].SampleValue_Digit[ChannelValue[CH_TYCK_WD4].FSCount];
|
||
|
||
|
||
//printf("WD1 smp val = %d\n",ChannelValue[CH_TYCK_WD1].SampleValue_Digit[ChannelValue[CH_TYCK_WD1].FSCount]);
|
||
//printf("WD2 smp va2 = %d\n",ChannelValue[CH_TYCK_WD2].SampleValue_Digit[ChannelValue[CH_TYCK_WD2].FSCount]);
|
||
|
||
//printf("WD3 smp va3 = %d\n",ChannelValue[CH_TYCK_WD3].SampleValue_Digit[ChannelValue[CH_TYCK_WD3].FSCount]);
|
||
//printf("WD4 smp va4 = %d\n",ChannelValue[CH_TYCK_WD4].SampleValue_Digit[ChannelValue[CH_TYCK_WD4].FSCount]);
|
||
|
||
if(WD_SOURCE_GSE != ChannelValue[CH_TYCK_WD1].source)
|
||
{
|
||
//printf("ChannelValue[CH_TYCK_WD1].source=%d",ChannelValue[CH_TYCK_WD1].source);
|
||
Itemp1 = SmpValueSet[CH_TYCK_WD1].averageValue;
|
||
//printf("Itemp1=%f",Itemp1);
|
||
ChannelValue[CH_TYCK_WD1].YouXiaoZhi[JiBo].Analog.Value = K1 * (Itemp1 - I1) + T1; //温度1
|
||
}
|
||
|
||
if(WD_SOURCE_GSE != ChannelValue[CH_TYCK_WD2].source)
|
||
{
|
||
Itemp2 = SmpValueSet[CH_TYCK_WD2].averageValue;
|
||
ChannelValue[CH_TYCK_WD2].YouXiaoZhi[JiBo].Analog.Value = K2 * (Itemp2 - I2) + T2; //温度2
|
||
}
|
||
|
||
if(WD_SOURCE_GSE != ChannelValue[CH_TYCK_WD3].source)
|
||
{
|
||
Itemp3 = SmpValueSet[CH_TYCK_WD3].averageValue;
|
||
ChannelValue[CH_TYCK_WD3].YouXiaoZhi[JiBo].Analog.Value = K3 * (Itemp3 - I3) + T3; //温度3
|
||
}
|
||
|
||
if(WD_SOURCE_GSE != ChannelValue[CH_TYCK_WD4].source)
|
||
{
|
||
Itemp4 = SmpValueSet[CH_TYCK_WD4].averageValue;
|
||
ChannelValue[CH_TYCK_WD4].YouXiaoZhi[JiBo].Analog.Value = K4 * (Itemp4 - I4) + T4; //温度4
|
||
}
|
||
}
|
||
|
||
|
||
void TimerManage(void)
|
||
{
|
||
//功能说明:定时器管理
|
||
|
||
MeasureSendDelay++;
|
||
|
||
if(DelayTime != 0) DelayTime++; //延时计数器
|
||
if(RemoteValue.DelayTime != 0) RemoteValue.DelayTime++; //遥控计时器
|
||
if(ChuanDongTest.TestDelay!=0) ChuanDongTest.TestDelay++;
|
||
RecordChuKouSoe2(&TYCK_CWWD1YJ, 1);
|
||
RecordChuKouSoe2(&TYCK_CWWD2YJ, 1);
|
||
RecordChuKouSoe2(&TYCK_CWWD3YJ, 1);
|
||
RecordChuKouSoe2(&TYCK_CWWD4YJ, 1);
|
||
}
|
||
|
||
|
||
|
||
|
||
void JiSuanMeasureValue(void)
|
||
{
|
||
//功能说明:测量值处理
|
||
unsigned int i;
|
||
|
||
//Buffer[0...9]:为一次值,Buffer[10...19]:为二次值
|
||
|
||
if(DisplayMode == SETVALUE_MODE_1)
|
||
{
|
||
//显示模式为一次值
|
||
//一次值
|
||
//电流1
|
||
//MeasureValue.Buffer[0].Value = ChannelValue[CH_TYCK_I1].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[0].Value = ChannelValue[CH_TYCK_I1].rms.Value;
|
||
MeasureValue.Buffer[0].Quality = ChannelValue[CH_TYCK_I1].Quality;
|
||
//电流2
|
||
//MeasureValue.Buffer[1].Value = ChannelValue[CH_TYCK_I2].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[1].Value = ChannelValue[CH_TYCK_I2].rms.Value;
|
||
MeasureValue.Buffer[1].Quality = ChannelValue[CH_TYCK_I2].Quality;
|
||
//电流3
|
||
//MeasureValue.Buffer[2].Value = ChannelValue[CH_TYCK_I3].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[2].Value = ChannelValue[CH_TYCK_I3].rms.Value;
|
||
MeasureValue.Buffer[2].Quality = ChannelValue[CH_TYCK_I3].Quality;
|
||
//电流4
|
||
//MeasureValue.Buffer[3].Value = ChannelValue[CH_TYCK_I4].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[3].Value = ChannelValue[CH_TYCK_I4].rms.Value;
|
||
MeasureValue.Buffer[3].Quality = ChannelValue[CH_TYCK_I4].Quality;
|
||
//电流5
|
||
//MeasureValue.Buffer[4].Value = ChannelValue[CH_TYCK_I5].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[4].Value = ChannelValue[CH_TYCK_I5].rms.Value;
|
||
MeasureValue.Buffer[4].Quality = ChannelValue[CH_TYCK_I5].Quality;
|
||
//电流6
|
||
//MeasureValue.Buffer[5].Value = ChannelValue[CH_TYCK_I6].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[5].Value = ChannelValue[CH_TYCK_I6].rms.Value;
|
||
MeasureValue.Buffer[5].Quality = ChannelValue[CH_TYCK_I6].Quality;
|
||
|
||
//20200305 add by linwei 增加4路电流
|
||
//电流7
|
||
//MeasureValue.Buffer[6].Value = ChannelValue[CH_TYCK_I7].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[6].Value = ChannelValue[CH_TYCK_I7].rms.Value;
|
||
MeasureValue.Buffer[6].Quality = ChannelValue[CH_TYCK_I7].Quality;
|
||
//电流8
|
||
//MeasureValue.Buffer[7].Value = ChannelValue[CH_TYCK_I8].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[7].Value = ChannelValue[CH_TYCK_I8].rms.Value;
|
||
MeasureValue.Buffer[7].Quality = ChannelValue[CH_TYCK_I8].Quality;
|
||
//电流9
|
||
//MeasureValue.Buffer[8].Value = ChannelValue[CH_TYCK_I9].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[8].Value = ChannelValue[CH_TYCK_I9].rms.Value;
|
||
MeasureValue.Buffer[8].Quality = ChannelValue[CH_TYCK_I9].Quality;
|
||
//电流10
|
||
//MeasureValue.Buffer[9].Value = ChannelValue[CH_TYCK_I10].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[9].Value = ChannelValue[CH_TYCK_I10].rms.Value;
|
||
MeasureValue.Buffer[9].Quality = ChannelValue[CH_TYCK_I10].Quality;
|
||
|
||
|
||
//电压1
|
||
//MeasureValue.Buffer[10].Value = ChannelValue[CH_TYCK_U1].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[10].Value = ChannelValue[CH_TYCK_U1].rms.Value;
|
||
MeasureValue.Buffer[10].Quality = ChannelValue[CH_TYCK_U1].Quality;
|
||
//电压2
|
||
//MeasureValue.Buffer[11].Value = ChannelValue[CH_TYCK_U2].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[11].Value = ChannelValue[CH_TYCK_U2].rms.Value;
|
||
MeasureValue.Buffer[11].Quality = ChannelValue[CH_TYCK_U2].Quality;
|
||
|
||
//温度1
|
||
MeasureValue.Buffer[12].Value = ChannelValue[CH_TYCK_WD1].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度2
|
||
MeasureValue.Buffer[13].Value = ChannelValue[CH_TYCK_WD2].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度3
|
||
MeasureValue.Buffer[14].Value = ChannelValue[CH_TYCK_WD3].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度4
|
||
MeasureValue.Buffer[15].Value = ChannelValue[CH_TYCK_WD4].YouXiaoZhi[JiBo].Analog.Value;
|
||
|
||
|
||
if(AD_MODE_I ==TYCK_ADType)
|
||
{
|
||
MeasureValue.Buffer[6].Value = 0;
|
||
MeasureValue.Buffer[7].Value = 0;
|
||
MeasureValue.Buffer[8].Value = 0;
|
||
MeasureValue.Buffer[9].Value = 0;
|
||
}
|
||
else
|
||
{
|
||
MeasureValue.Buffer[10].Value=0;
|
||
MeasureValue.Buffer[11].Value=0;
|
||
MeasureValue.Buffer[12].Value=0;
|
||
MeasureValue.Buffer[13].Value=0;
|
||
MeasureValue.Buffer[14].Value=0;
|
||
MeasureValue.Buffer[15].Value=0;
|
||
}
|
||
|
||
//二次值
|
||
|
||
//电流1
|
||
MeasureValue.Buffer[16].Value = MeasureValue.Buffer[0].Value / ChannelValue[CH_TYCK_I1].BianBi;
|
||
MeasureValue.Buffer[16].Quality = MeasureValue.Buffer[0].Quality;
|
||
//电流2
|
||
MeasureValue.Buffer[17].Value = MeasureValue.Buffer[1].Value / ChannelValue[CH_TYCK_I2].BianBi;
|
||
MeasureValue.Buffer[17].Quality = MeasureValue.Buffer[1].Quality;
|
||
//电流3
|
||
MeasureValue.Buffer[18].Value = MeasureValue.Buffer[2].Value / ChannelValue[CH_TYCK_I3].BianBi;
|
||
MeasureValue.Buffer[18].Quality = MeasureValue.Buffer[2].Quality;
|
||
//电流4
|
||
MeasureValue.Buffer[19].Value = MeasureValue.Buffer[3].Value / ChannelValue[CH_TYCK_I4].BianBi;
|
||
MeasureValue.Buffer[19].Quality = MeasureValue.Buffer[3].Quality;
|
||
//电流5
|
||
MeasureValue.Buffer[20].Value = MeasureValue.Buffer[4].Value / ChannelValue[CH_TYCK_I5].BianBi;
|
||
MeasureValue.Buffer[20].Quality = MeasureValue.Buffer[4].Quality;
|
||
//电流6
|
||
MeasureValue.Buffer[21].Value = MeasureValue.Buffer[5].Value / ChannelValue[CH_TYCK_I6].BianBi;
|
||
MeasureValue.Buffer[21].Quality = MeasureValue.Buffer[5].Quality;
|
||
|
||
//20200305 add by linwei 增加4路电流
|
||
//电流7
|
||
MeasureValue.Buffer[22].Value = MeasureValue.Buffer[6].Value / ChannelValue[CH_TYCK_I7].BianBi;
|
||
MeasureValue.Buffer[22].Quality = MeasureValue.Buffer[6].Quality;
|
||
//电流8
|
||
MeasureValue.Buffer[23].Value = MeasureValue.Buffer[7].Value / ChannelValue[CH_TYCK_I8].BianBi;
|
||
MeasureValue.Buffer[23].Quality = MeasureValue.Buffer[7].Quality;
|
||
//电流9
|
||
MeasureValue.Buffer[24].Value = MeasureValue.Buffer[8].Value / ChannelValue[CH_TYCK_I9].BianBi;
|
||
MeasureValue.Buffer[24].Quality = MeasureValue.Buffer[8].Quality;
|
||
//电流10
|
||
MeasureValue.Buffer[25].Value = MeasureValue.Buffer[9].Value / ChannelValue[CH_TYCK_I10].BianBi;
|
||
MeasureValue.Buffer[25].Quality = MeasureValue.Buffer[9].Quality;
|
||
|
||
|
||
//电压1
|
||
MeasureValue.Buffer[26].Value = MeasureValue.Buffer[10].Value * 1000 / ChannelValue[CH_TYCK_U1].BianBi;
|
||
MeasureValue.Buffer[26].Quality = MeasureValue.Buffer[10].Quality;
|
||
//电压2
|
||
MeasureValue.Buffer[27].Value = MeasureValue.Buffer[11].Value * 1000 / ChannelValue[CH_TYCK_U2].BianBi;
|
||
MeasureValue.Buffer[27].Quality = MeasureValue.Buffer[11].Quality;
|
||
|
||
//温度1
|
||
MeasureValue.Buffer[28].Value = MeasureValue.Buffer[12].Value;
|
||
//温度2
|
||
MeasureValue.Buffer[29].Value = MeasureValue.Buffer[13].Value;
|
||
//温度3
|
||
MeasureValue.Buffer[30].Value = MeasureValue.Buffer[14].Value;
|
||
//温度4
|
||
MeasureValue.Buffer[31].Value = MeasureValue.Buffer[15].Value;
|
||
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
//显示模式为二次值
|
||
//二次值
|
||
//电流1
|
||
//MeasureValue.Buffer[16].Value = ChannelValue[CH_TYCK_I1].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[16].Value = ChannelValue[CH_TYCK_I1].rms.Value;
|
||
MeasureValue.Buffer[16].Quality = ChannelValue[CH_TYCK_I1].Quality;
|
||
//电流2
|
||
//MeasureValue.Buffer[17].Value = ChannelValue[CH_TYCK_I2].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[17].Value = ChannelValue[CH_TYCK_I2].rms.Value;
|
||
MeasureValue.Buffer[17].Quality = ChannelValue[CH_TYCK_I2].Quality;
|
||
//电流3
|
||
//MeasureValue.Buffer[18].Value = ChannelValue[CH_TYCK_I3].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[18].Value = ChannelValue[CH_TYCK_I3].rms.Value;
|
||
MeasureValue.Buffer[18].Quality = ChannelValue[CH_TYCK_I3].Quality;
|
||
//电流4
|
||
//MeasureValue.Buffer[19].Value = ChannelValue[CH_TYCK_I4].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[19].Value = ChannelValue[CH_TYCK_I4].rms.Value;
|
||
MeasureValue.Buffer[19].Quality = ChannelValue[CH_TYCK_I4].Quality;
|
||
//电流5
|
||
//MeasureValue.Buffer[20].Value = ChannelValue[CH_TYCK_I5].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[20].Value = ChannelValue[CH_TYCK_I5].rms.Value;
|
||
MeasureValue.Buffer[20].Quality = ChannelValue[CH_TYCK_I5].Quality;
|
||
//电流6
|
||
//MeasureValue.Buffer[21].Value = ChannelValue[CH_TYCK_I6].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[21].Value = ChannelValue[CH_TYCK_I6].rms.Value;
|
||
MeasureValue.Buffer[21].Quality = ChannelValue[CH_TYCK_I6].Quality;
|
||
|
||
//20200305 add by linwei 增加4路电流
|
||
//电流7
|
||
//MeasureValue.Buffer[22].Value = ChannelValue[CH_TYCK_I7].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[22].Value = ChannelValue[CH_TYCK_I7].rms.Value;
|
||
MeasureValue.Buffer[22].Quality = ChannelValue[CH_TYCK_I7].Quality;
|
||
//电流8
|
||
//MeasureValue.Buffer[23].Value = ChannelValue[CH_TYCK_I8].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[23].Value = ChannelValue[CH_TYCK_I8].rms.Value;
|
||
MeasureValue.Buffer[23].Quality = ChannelValue[CH_TYCK_I8].Quality;
|
||
//电流9
|
||
//MeasureValue.Buffer[24].Value = ChannelValue[CH_TYCK_I9].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[24].Value = ChannelValue[CH_TYCK_I9].rms.Value;
|
||
MeasureValue.Buffer[24].Quality = ChannelValue[CH_TYCK_I9].Quality;
|
||
//电流10
|
||
//MeasureValue.Buffer[25].Value = ChannelValue[CH_TYCK_I10].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[25].Value = ChannelValue[CH_TYCK_I10].rms.Value;
|
||
MeasureValue.Buffer[25].Quality = ChannelValue[CH_TYCK_I10].Quality;
|
||
|
||
|
||
//电压1
|
||
//MeasureValue.Buffer[26].Value = ChannelValue[CH_TYCK_U1].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[26].Value = ChannelValue[CH_TYCK_U1].rms.Value;
|
||
MeasureValue.Buffer[26].Quality = ChannelValue[CH_TYCK_U1].Quality;
|
||
//电压2
|
||
//MeasureValue.Buffer[27].Value = ChannelValue[CH_TYCK_U2].YouXiaoZhi[JiBo].Analog.Value;
|
||
MeasureValue.Buffer[27].Value = ChannelValue[CH_TYCK_U2].rms.Value;
|
||
MeasureValue.Buffer[27].Quality = ChannelValue[CH_TYCK_U2].Quality;
|
||
|
||
//温度1
|
||
MeasureValue.Buffer[28].Value = ChannelValue[CH_TYCK_WD1].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度2
|
||
MeasureValue.Buffer[29].Value = ChannelValue[CH_TYCK_WD2].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度1
|
||
MeasureValue.Buffer[30].Value = ChannelValue[CH_TYCK_WD3].YouXiaoZhi[JiBo].Analog.Value;
|
||
//温度2
|
||
MeasureValue.Buffer[31].Value = ChannelValue[CH_TYCK_WD4].YouXiaoZhi[JiBo].Analog.Value;
|
||
|
||
if(AD_MODE_I ==TYCK_ADType)
|
||
{
|
||
MeasureValue.Buffer[22].Value = 0;
|
||
MeasureValue.Buffer[23].Value = 0;
|
||
MeasureValue.Buffer[24].Value = 0;
|
||
MeasureValue.Buffer[25].Value = 0;
|
||
}
|
||
else
|
||
{
|
||
MeasureValue.Buffer[26].Value=0;
|
||
MeasureValue.Buffer[27].Value=0;
|
||
MeasureValue.Buffer[28].Value=0;
|
||
MeasureValue.Buffer[29].Value=0;
|
||
MeasureValue.Buffer[30].Value=0;
|
||
MeasureValue.Buffer[31].Value=0;
|
||
}
|
||
|
||
|
||
//一次值
|
||
|
||
//电流1
|
||
MeasureValue.Buffer[0].Value = MeasureValue.Buffer[16].Value * ChannelValue[CH_TYCK_I1].BianBi;
|
||
MeasureValue.Buffer[0].Quality = MeasureValue.Buffer[16].Quality;
|
||
//电流2
|
||
MeasureValue.Buffer[1].Value = MeasureValue.Buffer[17].Value * ChannelValue[CH_TYCK_I2].BianBi;
|
||
MeasureValue.Buffer[1].Quality = MeasureValue.Buffer[17].Quality;
|
||
//电流3
|
||
MeasureValue.Buffer[2].Value = MeasureValue.Buffer[18].Value * ChannelValue[CH_TYCK_I3].BianBi;
|
||
MeasureValue.Buffer[2].Quality = MeasureValue.Buffer[18].Quality;
|
||
//电流4
|
||
MeasureValue.Buffer[3].Value = MeasureValue.Buffer[19].Value * ChannelValue[CH_TYCK_I4].BianBi;
|
||
MeasureValue.Buffer[3].Quality = MeasureValue.Buffer[19].Quality;
|
||
//电流5
|
||
MeasureValue.Buffer[4].Value = MeasureValue.Buffer[20].Value * ChannelValue[CH_TYCK_I5].BianBi;
|
||
MeasureValue.Buffer[4].Quality = MeasureValue.Buffer[20].Quality;
|
||
//电流6
|
||
MeasureValue.Buffer[5].Value = MeasureValue.Buffer[21].Value * ChannelValue[CH_TYCK_I6].BianBi;
|
||
MeasureValue.Buffer[5].Quality = MeasureValue.Buffer[21].Quality;
|
||
|
||
//20200305 add by linwei 增加4路电流
|
||
//电流7
|
||
MeasureValue.Buffer[6].Value = MeasureValue.Buffer[22].Value * ChannelValue[CH_TYCK_I7].BianBi;
|
||
MeasureValue.Buffer[6].Quality = MeasureValue.Buffer[22].Quality;
|
||
//电流8
|
||
MeasureValue.Buffer[7].Value = MeasureValue.Buffer[23].Value * ChannelValue[CH_TYCK_I8].BianBi;
|
||
MeasureValue.Buffer[7].Quality = MeasureValue.Buffer[23].Quality;
|
||
//电流9
|
||
MeasureValue.Buffer[8].Value = MeasureValue.Buffer[24].Value * ChannelValue[CH_TYCK_I9].BianBi;
|
||
MeasureValue.Buffer[8].Quality = MeasureValue.Buffer[24].Quality;
|
||
//电流10
|
||
MeasureValue.Buffer[9].Value = MeasureValue.Buffer[25].Value * ChannelValue[CH_TYCK_I10].BianBi;
|
||
MeasureValue.Buffer[9].Quality = MeasureValue.Buffer[25].Quality;
|
||
|
||
|
||
//电压1
|
||
MeasureValue.Buffer[10].Value = MeasureValue.Buffer[26].Value * ChannelValue[CH_TYCK_U1].BianBi / 1000;
|
||
MeasureValue.Buffer[10].Quality = MeasureValue.Buffer[26].Quality;
|
||
//电压2
|
||
MeasureValue.Buffer[11].Value = MeasureValue.Buffer[27].Value * ChannelValue[CH_TYCK_U2].BianBi / 1000;
|
||
MeasureValue.Buffer[11].Quality = MeasureValue.Buffer[27].Quality;
|
||
|
||
//温度1
|
||
MeasureValue.Buffer[12].Value = MeasureValue.Buffer[28].Value;
|
||
//温度2
|
||
MeasureValue.Buffer[13].Value = MeasureValue.Buffer[29].Value;
|
||
//温度3
|
||
MeasureValue.Buffer[14].Value = MeasureValue.Buffer[30].Value;
|
||
//温度4
|
||
MeasureValue.Buffer[15].Value = MeasureValue.Buffer[31].Value;
|
||
|
||
|
||
}
|
||
//装置时间
|
||
MeasureValue.Time.Msecond = Clock.Msecond; //毫秒,2字节,范围:0~59999
|
||
MeasureValue.Time.Minute = Clock.Minute; //分,1字节,范围:0~59
|
||
MeasureValue.Time.Hour = Clock.Hour; //小时,1字节,范围:0~23
|
||
MeasureValue.Time.Date = Clock.Date; //日期,1字节,范围:1~31
|
||
MeasureValue.Time.Month = Clock.Month; //月,1字节,范围:1~12
|
||
MeasureValue.Time.Year = Clock.Year; //年,2字节,范围:2000~2099
|
||
}
|
||
|
||
void maintask(void)
|
||
{
|
||
//功能说明:馈线保护主任务
|
||
|
||
SysResetSoeRecord(); //系统复位事件记录
|
||
CopyYaoXinBianWei();
|
||
digit_mainTask();
|
||
|
||
//计算有效值
|
||
ComputeAnalogTrueRms(&ZcpSet);
|
||
if(YCThresholdSet.avail == 0)
|
||
{
|
||
JiSuanMeasureValue(); //计算测量值
|
||
SendMeasureValue(); //发送测量值 测量值改为队列,就不需要给接口发命令,这个函数就没必要使用了
|
||
}
|
||
SendGetTimeCommand();
|
||
ReceiveData(); //接收数据
|
||
ProcessASDU(); //处理接收数据
|
||
//SendData(); //发送数据
|
||
setValueSelfCheck(); //定值自检
|
||
//软压板投退 20200313 添加软压板处理
|
||
CheckSoftStrapCtrl();
|
||
#ifdef DEVICE_TYPE_DIGITAL
|
||
CheckIOYaoXin(IO_TYPE_IN20_OUT6,0); //检测记录IO自检软遥信
|
||
CheckIOYaoXin(IO_TYPE_IN20_OUT6,1); //检测记录IO自检软遥信
|
||
CheckIOYaoXin(IO_TYPE_IN20_OUT6,2); //检测记录IO自检软遥信
|
||
#else
|
||
/*
|
||
CheckIOYaoXin(IO_TYPE_IN20_OUT6,0); //检测记录IO自检软遥信
|
||
CheckIOYaoXin(IO_TYPE_IN20_OUT6,1); //检测记录IO自检软遥信
|
||
CheckIOYaoXin(IO_TYPE_IN15_OUT10,2); //检测记录IO自检软遥信
|
||
CheckIOYaoXin(IO_TYPE_IN15_OUT10,3); //检测记录IO自检软遥信
|
||
*/
|
||
//20150803 luoyang modi
|
||
CheckIOYaoXinEx(IO_TYPE_IN0_OUT16,0,TYCK_YAOXIN_ZJ_IO1_START); //检测记录IO自检软遥信
|
||
CheckIOYaoXinEx(IO_TYPE_IN0_OUT16,1,TYCK_YAOXIN_ZJ_IO2_START); //检测记录IO自检软遥信
|
||
CheckIOYaoXinEx(IO_TYPE_IN30_OUT0,2,TYCK_YAOXIN_ZJ_IO3_START); //检测记录IO自检软遥信
|
||
CheckIOYaoXinEx(IO_TYPE_IN30_OUT0,3,TYCK_YAOXIN_ZJ_IO4_START); //检测记录IO自检软遥信
|
||
#endif
|
||
CheckRemote_ryb();
|
||
|
||
if(LS_TR == TYCK_LS)
|
||
{
|
||
block_CalcStatus();
|
||
}
|
||
}
|
||
|
||
/******************************************************************************
|
||
* Function: SoftReset
|
||
* Description:软件复归,遥控、复归按钮等
|
||
* Calls: none
|
||
* Called By:
|
||
* Input: RstMode复归方式 FG_MODE_YK-遥控复归 FG_MODE_AN-按钮复归
|
||
* Ouput:
|
||
* Return:
|
||
* others:
|
||
* History:
|
||
* 1.luoyang created
|
||
*
|
||
*******************************************************************************/
|
||
void SoftReset(unsigned char RstMode)
|
||
{
|
||
CanShuType CanShuValue;
|
||
CanShuValue.Number = 0;
|
||
|
||
//遥控复归
|
||
if(FG_MODE_YK == RstMode)
|
||
{
|
||
RecordSOE(FG_YK, CanShuValue);
|
||
}
|
||
//手动复归
|
||
else if(FG_MODE_SD == RstMode)
|
||
{
|
||
RecordSOE(FG_AN, CanShuValue);
|
||
}
|
||
|
||
//printf("len = %d",sizeof(YaoXinSet) / sizeof(YaoXinObjectType));
|
||
|
||
FGIP = TEST_START;
|
||
//开出复归信号,用于IO板灭跳闸白灯
|
||
//D_OUT(FGQ_KC,ON);
|
||
//启动复归信号保持计数器
|
||
//FGKeepTimer = 1;
|
||
|
||
}
|
||
/******************************************************************************
|
||
* Function: KCHandle
|
||
* Description:检测驱动开出
|
||
* Calls: none
|
||
* Called By:
|
||
* Input:
|
||
* Ouput:
|
||
* Return:
|
||
* others:
|
||
* History:
|
||
* 1.luoyang created
|
||
*
|
||
*******************************************************************************/
|
||
void RemoteKCHandle()
|
||
{
|
||
int KCObjectNo;
|
||
int KCNo;
|
||
|
||
KCObjectNo = RemoteObject.Object[RemoteValue.ObjectNo].Out_On_No;
|
||
|
||
if(KCObjectNo > TYCK_KC_NUM)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//上次还未执行完
|
||
if(TEST_CLOSE != TYCK_QDKCSet[KCObjectNo].Status)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//没有反馈并且无操作时间
|
||
if(KC_TYPE_WFK == TYCK_KCTXSet[KCObjectNo].Type && 0 == TYCK_KCTXSet[KCObjectNo].Time)
|
||
{
|
||
TYCK_QDKCSet[KCObjectNo].StatusNext = RemoteValue.Property;
|
||
}
|
||
else
|
||
{
|
||
if(ON != RemoteValue.Property)
|
||
{
|
||
return;
|
||
}
|
||
TYCK_QDKCSet[KCObjectNo].StatusNext = ON;
|
||
}
|
||
|
||
TYCK_QDKCSet[KCObjectNo].Status = TEST_START;
|
||
|
||
}
|
||
|
||
/******************************************************************************
|
||
* Function: CheckQDKC
|
||
* Description:检测驱动开出
|
||
* Calls: none
|
||
* Called By:
|
||
* Input:
|
||
* Ouput:
|
||
* Return:
|
||
* others:
|
||
* History:
|
||
* 1.luoyang created 20140618
|
||
*
|
||
*******************************************************************************/
|
||
void CheckQDKC()
|
||
{
|
||
int i;
|
||
CanShuType CanShu;
|
||
unsigned int Temp[2],Temp1[2];
|
||
|
||
CanShu.Number = 0;
|
||
|
||
for(i = 0;i < TYCK_KC_NUM;i++)
|
||
{
|
||
if(KC_TYPE_QDQS == TYCK_KCTXSet[i].Type)
|
||
{
|
||
continue;
|
||
}
|
||
switch(TYCK_QDKCSet[i].Status)
|
||
{
|
||
//启动开出
|
||
case TEST_START:
|
||
D_OUT(TYCK_QDKCSet[i].KCNo,TYCK_QDKCSet[i].StatusNext);
|
||
|
||
if(ON == TYCK_QDKCSet[i].StatusNext)
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_DELAY;
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart,CanShu);
|
||
if(KC_TYPE_WFK != TYCK_KCTXSet[i].Type && 0 != TYCK_KCTXSet[i].Time)
|
||
{
|
||
//启动定时器
|
||
TYCK_QDKCSet[i].Timer = 1;
|
||
}
|
||
}
|
||
else if(OFF == TYCK_QDKCSet[i].StatusNext)
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_CLOSE;
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 1,CanShu);
|
||
}
|
||
|
||
TYCK_QDKCSet[i].CFKRBak[0] = TYCK_QDKCSet[i].KRMask[0] & InPort.PortStatus[0];
|
||
TYCK_QDKCSet[i].CFKRBak[1] = TYCK_QDKCSet[i].KRMask[1] & InPort.PortStatus[1];
|
||
break;
|
||
case TEST_DELAY:
|
||
//无反馈开出
|
||
if(KC_TYPE_WFK == TYCK_KCTXSet[i].Type)
|
||
{
|
||
if(0 == TYCK_KCTXSet[i].Time)
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_CLOSE;
|
||
}
|
||
else
|
||
{
|
||
TYCK_QDKCSet[i].Timer++;
|
||
//操作时间到,收回
|
||
if(TYCK_QDKCSet[i].Timer >= TYCK_KCTXSet[i].Time)
|
||
{
|
||
D_OUT(TYCK_QDKCSet[i].KCNo,OFF);
|
||
TYCK_QDKCSet[i].Status = TEST_CLOSE;
|
||
TYCK_QDKCSet[i].StatusNext = OFF;
|
||
TYCK_QDKCSet[i].Timer = 0;
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 1,CanShu);
|
||
}
|
||
}
|
||
}
|
||
//有反馈
|
||
else if(KC_TYPE_FK == TYCK_KCTXSet[i].Type)
|
||
{
|
||
//反馈信号到位
|
||
if(YaoXinStatus[TYCK_QDKCSet[i].FKYaoXinNo] == TYCK_QDKCSet[i].StatusNext)
|
||
{
|
||
D_OUT(TYCK_QDKCSet[i].KCNo,OFF);
|
||
TYCK_QDKCSet[i].Status = TEST_CLOSE;
|
||
TYCK_QDKCSet[i].StatusNext = OFF;
|
||
TYCK_QDKCSet[i].Timer = 0;
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 2,CanShu);
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 1,CanShu);
|
||
}
|
||
else
|
||
{
|
||
TYCK_QDKCSet[i].Timer++;
|
||
if(TYCK_QDKCSet[i].Timer >= TYCK_KCTXSet[i].Time)
|
||
{
|
||
D_OUT(TYCK_QDKCSet[i].KCNo,OFF);
|
||
TYCK_QDKCSet[i].Status = TEST_CLOSE;
|
||
TYCK_QDKCSet[i].StatusNext = OFF;
|
||
TYCK_QDKCSet[i].Timer = 0;
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 3,CanShu);
|
||
RecordSOE(TYCK_QDKCSet[i].SOECodeStart + 1,CanShu);
|
||
}
|
||
}
|
||
}
|
||
TYCK_QDKCSet[i].CFKRBak[0] = TYCK_QDKCSet[i].KRMask[0] & InPort.PortStatus[0];
|
||
TYCK_QDKCSet[i].CFKRBak[1] = TYCK_QDKCSet[i].KRMask[1] & InPort.PortStatus[1];
|
||
break;
|
||
case TEST_CLOSE:
|
||
Temp[0] = TYCK_QDKCSet[i].KRMask[0] & InPort.PortStatus[0];
|
||
Temp[1] = TYCK_QDKCSet[i].KRMask[1] & InPort.PortStatus[1];
|
||
//无反馈开出且时限为0
|
||
if(KC_TYPE_WFK == TYCK_KCTXSet[i].Type && 0 == TYCK_KCTXSet[i].Time)
|
||
{
|
||
//关联开入全部无效且有变位,或者装置复归,收回
|
||
if(ON == TYCK_QDKCSet[i].StatusNext)
|
||
{
|
||
if((!(Temp[0] || Temp[1]) && (TYCK_QDKCSet[i].CFKRBak[0] || TYCK_QDKCSet[i].CFKRBak[1])) || TEST_START == FGIP)
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_START;
|
||
TYCK_QDKCSet[i].StatusNext = OFF;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//判断是否有开入状态从无效变为有效
|
||
Temp1[0] = (Temp[0] ^ TYCK_QDKCSet[i].CFKRBak[0]) & InPort.PortStatus[0];
|
||
Temp1[1] = (Temp[1] ^ TYCK_QDKCSet[i].CFKRBak[1]) & InPort.PortStatus[1];
|
||
//关联的开入有效,开出
|
||
if(Temp1[0] || Temp1[1])
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_START;
|
||
TYCK_QDKCSet[i].StatusNext = ON;
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
//判断是否有开入状态从无效变为有效
|
||
Temp1[0] = (Temp[0] ^ TYCK_QDKCSet[i].CFKRBak[0]) & InPort.PortStatus[0];
|
||
Temp1[1] = (Temp[1] ^ TYCK_QDKCSet[i].CFKRBak[1]) & InPort.PortStatus[1];
|
||
//关联的开入有效,开出
|
||
if(Temp1[0] || Temp1[1])
|
||
{
|
||
TYCK_QDKCSet[i].Status = TEST_START;
|
||
TYCK_QDKCSet[i].StatusNext = ON;
|
||
}
|
||
}
|
||
TYCK_QDKCSet[i].CFKRBak[0] = Temp[0];
|
||
TYCK_QDKCSet[i].CFKRBak[1] = Temp[1];
|
||
break;
|
||
default:
|
||
break;
|
||
|
||
}
|
||
|
||
|
||
}
|
||
if(TEST_START == FGIP)
|
||
{
|
||
FGIP = TEST_CLOSE;
|
||
}
|
||
}
|
||
#endif
|