#include "..\h\predefine.h" #ifdef _tyck_c_ #undef _tyck_c_ /*SYS relational*/ #include #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