linwei_sources 7ca6df9e6a 标准版
2025-06-26 15:28:05 +08:00

936 lines
36 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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字节范围059999
MeasureValue.Time.Minute = Clock.Minute; //分1字节范围059
MeasureValue.Time.Hour = Clock.Hour; //小时1字节范围023
MeasureValue.Time.Date = Clock.Date; //日期1字节范围131
MeasureValue.Time.Month = Clock.Month; //月1字节范围112
MeasureValue.Time.Year = Clock.Year; //年2字节范围20002099
}
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