⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mototype.c

📁 基于c的电动机保护程序
💻 C
字号:
/*************************************************************************************
* Copyright  2006 National ASIC Center, All right Reserved			
*
* FILE NAME:			JDType.c										
* AUTHOR:				Steny.yz.X
* Date of Creation:		2006/07/25
*
* DESCRIPTION:			基本函数
*						
* NOTE:						 		
*
* FUNCTIONS LIST:       CovertTimeRemain			计算剩余时间
*                       GlobalVarInit				全局量初始化	
*                       TimeInitial					时间节点初始化函数
*
*
* -----------------------------------------------------------------------------------
*
* -----------------------------------------------------------------------------------
*
* MODIFICATION HISTORY
*     LastModify  2006/09/20
*************************************************************************************/
#include "MOTOType.h"
#include "UIType.h"
//#include "NUCLEUS.H"
#include "Applications/inlcudes/hardware_reg.h"
#include "Applications/inlcudes/hardware_intc.h"
#include "flash_extr.h"
#include "test.h"
extern int Alarm_flag;
extern int Start_Signal;
extern int Break_Signal;
extern int ErrRecWave_flag;
//TSampleInputs JDInputs;
_JDInputs *JDInputs = (_JDInputs *)0x1fff0000;
_JDSetting *JDSetting = (_JDSetting *)(0x1fff0000 + 0x200);
_StatusVar	  *StatusVar = (_StatusVar *)(0x1fff0000 + 0x400);
_Channel_Adjust *Channel_Adjust =(_Channel_Adjust *)(0x1fff0000 + 0x600);
_SystemSetting  SystemSetting;
_DIO_Setting *DIO_Setting ;
extern TJDTimingNode VoltageShakingRecloseTn;
extern _Value_Parameter Value_Parameter;
//RTC_TIME		RrrTime[100];

void StateVarInit(void)
{
		
		     OverLoad = FALSE;                  //过负载
         Block_Break = FALSE;
         Block_Alarm = FALSE;                   //堵转
         Short_Circuit = FALSE;             //短路
         Current_Unbalance_Alarm = FALSE;   //不平衡报警
         Current_Unbalance_Break = FALSE;   //不平衡报警跳闸
         Line_Broken = FALSE;               //断相
         Grounding = FALSE;                 //接地
         Phase_Reversed = FALSE;            //逆向
         Voltage_Low = FALSE;               //欠电压
         Voltage_Shaking = FALSE;           //晃电
	       Voltage_Shaking_Over = FALSE;      //晃电结束
	       PT_Broken = FALSE;                 //pt断线
	       Voltage_Over = FALSE;              //过压
	       Current_Low = FALSE;               //欠电流
         Running = FALSE;                   //运行中
         Start_TimeUp = FALSE;           //启动超时
         Starting = FALSE;                     //启动中
         Stop = FALSE; 
         Running = FALSE;                     //停机
         OverHeat_Alarm = FALSE;           //过热报警
         OverHeat_Break = FALSE;            //过热跳闸
         Restart_Permit = FALSE;            //允许重启
        // Reclose_Action = FALSE;          //合闸
        // Break_Action = FALSE;          //跳闸
        // Alarm_Action = FALSE;          //报警
        OverCurrent_Ratio = 0;
		HeatOver_Ratio= 0;           // 热容量
	       Unbalance_Current_Value = 0;    //   电流不平衡度
}

		

//通道系数调整


void Initial_Channel_Adjust()
{
	IA_AD_Channel = 1.00;
	IB_AD_Channel = 1.00;
	IC_AD_Channel = 1.00;
	UA_AD_Channel = 1.0;
	UB_AD_Channel = 1.0;
	UC_AD_Channel = 1.0;
	I0_AD_Channel = 1.04;
	
	
	/*
	 	  IA_linerAdjust = 27.3179  ;
		  IB_linerAdjust = 27.402179  ;
		  IC_linerAdjust = 27.4044  ;
		  I0_linerAdjust = 14.53279  ;
		  */
		  
		  IA_linerAdjust = 190.4114724;
		  IB_linerAdjust = 188.2488289  ;
		  IC_linerAdjust = 190.3883512  ;
		  I0_linerAdjust = 0.71464  ;
		  
		  UA_linerAdjust_I  = 310.6255862 ;
		  UA_linerAdjust_II = 310.6255862 ;
		  UB_linerAdjust_I  = 308.6255862  ;
		  UB_linerAdjust_II = 308.6255862 ;
		  UC_linerAdjust_I  = 308.6255862 ;
		  UC_linerAdjust_II = 308.6255862 ;
		  
		  I1_linerAdjust = I2_linerAdjust =(IA_linerAdjust+IB_linerAdjust+IC_linerAdjust)*0.333333333 ;
		 
     

}


void TimeInitial(TJDTimingNode * node , int delaytime ,int holdtime)
{
	node->delaytime = delaytime;
	node->holdtime = holdtime;
	node->holdtick = 0x0;
	node->delaytick = 0x0;
	node->level = 0x0;
	node->lastdelaytick = 0x0;
	node->lastholdtick = 0x0;
}

/*float CovertTimeRemain(float new_settingtime,TJDTimingNode * node)
{
	if (last_settingtime != 0)
	{
		float cur_remaintick = (1.0 - (node->delaytick / node->delaytime)) * new_settingtime;
		return cur_remaintick;
	}
	return new_settingtime;
}*/

void GPIO_Init()
{
	*(volatile unsigned long *)PORTG_DIR &= ~(0x1f);
	*(volatile unsigned long *)PORTG_SEL |= 0x1f;
	
	/****************************************************
	 *			初始化开入量
	 *			
	 ****************************************************/
	*(volatile unsigned long *)PORTF_SEL |= 0xF;            //for common use
	*(volatile unsigned long *)PORTF_DIR |= 0xF; 		//intput	
	
	/****************************************************
	 *			初始化开出量
	 *			
	 ****************************************************/
	*(volatile unsigned long *)PORTG_SEL |= 0x17;            //for common use
	*(volatile unsigned long *)PORTG_DIR &= ~0x17; 		//output	
	
	
	/******************开出量动作  自检结束后恢复******/
	//*(volatile unsigned long *)PORTG_DATA |= 0x10;
	//*(volatile unsigned long *)PORTG_DATA &= ~0x4;
	//*(volatile unsigned long *)PORTG_DATA |= 0x2;
	//*(volatile unsigned long *)PORTG_DATA |= 0x1;
	
	*(volatile unsigned long *)PORTG_DATA |= 0x10;
	*(volatile unsigned long *)PORTG_DATA &= ~0x4;
	*(volatile unsigned long *)PORTG_DATA |= 0x2;
	*(volatile unsigned long *)PORTG_DATA |= 0x1;
							
	
}

void Protect_Init()
{
	U32 sizetemp;
	int SaveLoadNumtemp = -1;
	
	
	SaveLoadNumtemp = *((int *)0x20030000);
	
	
	
	
	Initial_Channel_Adjust();
	//Load_LinerAdjust();
	SystemPara_Initialize();
	DataSection_Initialize();
	
	#ifdef yxjtest
	
	memset(&SystemSetting,0, sizeof(_SystemSetting));//调试添加
	memset(JDSetting ,    0,sizeof(_JDSetting));
	memset(&Value_Parameter , 0,   sizeof(_Value_Parameter));
			 
	#endif
	
	if( (SaveLoadNumtemp==0) ||(SaveLoadNumtemp==1)||(SaveLoadNumtemp==2) )//有记录就读取
	{
		//LoadFromFlash(SaveLoadNumtemp);
	}
	else
	{
		SaveValue(0); //调试屏蔽  //无记录就存
	}
	
	TimeNode_Initialize();
	StateVarInit();
	InitCalculate();
	GPIO_Init();
}



int Break_flag = 0;

void Break_Action(flag)
{
	int i;
	if(flag)
	{
		
		Break_flag = 1;
		Alarm_flag = 0;
		Start_Signal = 0;
		Break_Signal = 0;
		ErrRecWave_flag = 1; //在录波函数最后清零
		//Break_flag = 0;
	}
	
	
}

int Alarm_flag = 0;
void Alarm_Action(flag)
{
	if(flag)
	{
		Alarm_flag = 1;
	}
}

void Reclose_Action(flag)
{
	if(flag)
	{
		Start_Signal  =  1;
	
		Break_Signal = 0;
		Break_flag = 0;
		VoltageShakingRecloseTn.level = 0;
		VoltageShakingRecloseTn.lastdelaytick = 0x0;
	}
	
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -