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

📄 mototype.h

📁 基于c的电动机保护程序
💻 H
字号:
/*************************************************************************************
* Copyright  2006 National ASIC Center, All right Reserved			         
*                                                                            
* FILE NAME:			MOTOType.h										         
* AUTHOR:				Steny.yz.X                                           
* Date of Creation:		2006/07/25                                        
*                                                                            
* DESCRIPTION:			基本类型及关键宏
*						                                                     
* NOTE:						 		                                         
*                                                                            
* FUNCTIONS LIST:       
*                       
*                       
*                       
*
* ----------------------------------------------------------------------------------- 
*                                                                            
* -----------------------------------------------------------------------------------       
*                                                                            
* MODIFICATION HISTORY                                                       
*     LastModify  2006/09/20                                                 
*************************************************************************************/ 
#ifndef _JD_TYPE_
#define _JD_TYPE_
//----------------------------------------------------------------------------------------------//

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif
//#define SwitchValue(sel,  in,  a,  b, c)  (((sel) == (a)) ? (in) : (c))  //开关选择宏
#define MAX(a, b, c) (((((a) > (b)) ? (a) : (b)) ) > (c) ? ((((a) > (b)) ? (a) : (b)) ) : (c))
#define MIN(a, b, c) ((((a) < (b)) ? (a) : (b)) < (c) ? (((a) < (b)) ? (a) : (b)) : (c))
//#define PHASE_CMP(a) (((a) < 0) ? ((a) + 6.2831853071) : (a))
#define  Voltage_Average (*(JDInputsAdd+off_UA )+*(JDInputsAdd+off_UB )+*(JDInputsAdd+off_UC ))*0.333333333
 #define  Voltage_Max MAX(*(JDInputsAdd+off_UA ),*(JDInputsAdd+off_UB ),*(JDInputsAdd+off_UC ))
 #define  Voltage_Min MIN(*(JDInputsAdd+off_UA ),*(JDInputsAdd+off_UB ),*(JDInputsAdd+off_UC ))

 #define  Current_Average (*(JDInputsAdd+off_IA )+*(JDInputsAdd+off_IB )+*(JDInputsAdd+off_IC ))* 0.333333333
 #define  Current_Max MAX(*(JDInputsAdd+off_IA ),*(JDInputsAdd+off_IB ),*(JDInputsAdd+off_IC ))
 #define  Current_Min MIN(*(JDInputsAdd+off_IA ),*(JDInputsAdd+off_IB ),*(JDInputsAdd+off_IC ))


/****************无双口RAM测试模式*****************/
//#define DOUBLE_RAM_BASE 0x30100000
/*************************************************/

/****************正常模式*****************/
#define DOUBLE_RAM_BASE 0x24000000
/*****************************************/


#define DATASTAT_ADRESS (DOUBLE_RAM_BASE + 0x20)//状态寄存器地址,存放数据编号和校验和
#define INVERTIME_FLAG (DOUBLE_RAM_BASE + 0x40)//反时限是否计算标志
#define DOUBLE_RAM_INT_IN (DOUBLE_RAM_BASE + 0x7ffc)//双口RAM到CPU中断产生位
#define DOUBLE_RAM_INT_OUT (DOUBLE_RAM_BASE + 0x7ffe)//CPU到双口RAM中断产生位

#define SAMPLE_TICK 0.001//采样时间间隔
#define RECIPROCAL_SAMPLE_TICK 1000//采样时间间隔倒数

#define DATABAK_GROUP_COUNT	1920//采样数据的备份组数, 供画波形用

#ifndef __BOOL__INT__
#define __BOOL__INT__
typedef int BOOL;
#endif
		
#define     JDInputsAdd 	(float *)0x1fff0000
#define	  JDSettingAdd	    (float *)(0x1fff0000 + 0x200)
#define     StateVarAdd	(BOOL *)(0x1fff0000 + 0x400)

extern unsigned long        TMD_System_Clock;
/**************************时间节点结构体******************/
typedef struct
{
	unsigned long delaytick,holdtick, delaytime,holdtime, lastdelaytick, lastholdtick;
	BOOL  level;
}TJDTimingNode;
/*------------------------------------------------------------------*/


///********************************************************************
 //*					保护动作
// ********************************************************************/

#define Break_Action(flag) do\
{\
	if(flag)\
	{\
		*(volatile unsigned long *)PORTG_DATA |= (0x1 << 3);\
		*(volatile unsigned long *)PORTB_DATA &= ~(0x1 << 1);\
		*(volatile unsigned long *)PORTF_DATA |= 0x1;\
	}\
	else\
	{\
		*(volatile unsigned long *)PORTF_DATA &= ~0x1;\
	}\
}while(0)




#define Alarm_Action(flag)





/********************************************************************
 *						时间节点计时宏
 ********************************************************************/
#define TimingNodePulse(node, in_level)  do\
{\
	     if (in_level == 1 )\
         {\
			 if (((TJDTimingNode *)node)->level == 1)\
			 {\
				 if ((((TJDTimingNode *)node)->holdtime) != 0x0)\
				 {\
					((TJDTimingNode *)node)->lastholdtick = TMD_System_Clock;\
				 }\
				 break;\
			 }\
			 else\
			 {\
           		if ((((TJDTimingNode *)node))->lastdelaytick == 0x0)\
				{\
					((TJDTimingNode *)node)->lastdelaytick = TMD_System_Clock;\
				}\
				((TJDTimingNode *)node)->delaytick = TMD_System_Clock - ((TJDTimingNode *)node)->lastdelaytick ;\
				if (((TJDTimingNode *)node)->delaytick  >= ((TJDTimingNode *)node)->delaytime)\
				{\
					((TJDTimingNode *)node)->level = 1;\
					((TJDTimingNode *)node)->lastdelaytick = 0x0;\
					 if ((((TJDTimingNode *)node)->holdtime) != 0x0)\
					 {\
						((TJDTimingNode *)node)->lastholdtick = TMD_System_Clock;\
					 }\
				}\
			 }\
			break;\
		 }\
		else\
		{\
			if (((TJDTimingNode *)node)->lastholdtick > 0)\
			{\
				((TJDTimingNode *)node)->level = 1;\
				((TJDTimingNode *)node)->holdtick = TMD_System_Clock - ((TJDTimingNode *)node)->lastholdtick;\
				if (((TJDTimingNode *)node)->holdtick >= ((TJDTimingNode *)node)->holdtime)\
				{\
					((TJDTimingNode *)node)->level = 0;\
					((TJDTimingNode *)node)->lastdelaytick = 0x0;\
					((TJDTimingNode *)node)->lastholdtick = 0x0;\
				}\
			}\
			else \
			{\
				((TJDTimingNode *)node)->level = 0;\
				((TJDTimingNode *)node)->lastdelaytick = 0x0;\
			}\
			break;\
		}\
}while(0)
/*------------------------------------------------------------------*/


/********************************************************************
 *				反时限中计算剩余时间宏
 ********************************************************************/
#define CovertTimeRemain(new_settingtime, node)  do\
	{\
		if (((TJDTimingNode *)node)->delaytime != 0)\
		{\
			((TJDTimingNode *)node)->delaytime = (1.0 - (((TJDTimingNode *)node)->delaytick / ((TJDTimingNode *)node)->delaytime)\
										* new_settingtime);\
		}\
		else\
		{\
			((TJDTimingNode *)node)->delaytime = new_settingtime;\
		}\
	}while(0)
/*------------------------------------------------------------------*/

/********************************************************************
 *				报告输出宏				add by Steny.Yz.X 2007-1-12
 ********************************************************************/
#define ReportOut(errnum) do\
{\
		if (errorlinker.last_error == errnum)\
		{\
			errorlinker.tailIndex--;\
		}\
		read_time(&RrrTime[errorlinker.tailIndex]);\
		errorlinker.last_error = errorlinker.KeepTable[errorlinker.tailIndex].error = errnum;\
		errorlinker.tailIndex = (errorlinker.tailIndex + 1) % 100;\
		if ((errorlinker.tailIndex) == errorlinker.headIndex)\
		{\
			errorlinker.headIndex = (errorlinker.headIndex + 1) % 100;\
		}\
}while(0)
/*------------------------------------------------------------------*/

//********************************************************************
 //					输入量结构体
 //********************************************************************/
typedef struct
{
float		 

/***************abc三相I、U保护***************************/
                 IA,                                    /*有效值,根据Real ^2+ Imag ^2计算 */
                 IA_Real,                               /*fft的一次谐波,实部为有效值在X轴上投影,*/
                 IA_Imag,                               /*fft的一次谐波,虚部为有效值在Y轴上投影,2者之商可求角度*/
                 UA,
                 UA_Real,
                 UA_Imag,
                 IA_Phase,
                 UA_Phase,

                 IB,                                    /*同IA*/
                 IB_Real,
                 IB_Imag,
                 UB,
                 UB_Real,
                 UB_Imag,
                 IB_Phase,
                 UB_Phase,

                 IC,                                    /*同IA*/
                 IC_Real,
                 IC_Imag,
                 UC,
                 UC_Real,
                 UC_Imag,
                 IC_Phase,
                 UC_Phase,

                 
/*************************零序*****************************/
                 I0,                                    /*同Ia*/
                 I0_Real,
                 I0_Imag,
                
                 

/*************************负序*******************************/
                 I2,                                    /*SQRT(Re^2+Im^2)*/
                 I2_Real,                               /*(Ia+alpha^2*Ib+alpha*Ic)*/
                 I2_Imag,
                 

/************************************************************/
                

                                            /*Ia频率*/

                 InverTime_Setting_K,                  /*反时限整定系数K*/
                 ZeroSeq_InverTime_Setting_K,           /*零序反时限整定系数K*/

/*****************正序***************************************************************/

                 I1,                               //     /*有效值,根据Real ^2+ Imag ^2计算 */
                 I1_Real,                               /*fft的一次谐波,实部为有效值在X轴上投影,*/
                 I1_Imag;                               /*fft的一次谐波,虚部为有效值在Y轴上投影,2者之商可求角度*/
                

}TSampleInputs;
/*------------------------------------------------------------------*/

/********************************************************************
					输入结构体中每个量的偏移
 ********************************************************************/
enum		
{
				 
/***************abc三相I、U保护***************************/
                 off_IA,                                    /*有效值,根据Real ^2+ Imag ^2计算 */
                 off_IA_Real,                               /*fft的一次谐波,实部为有效值在X轴上投影,*/
                 off_IA_Imag,                               /*fft的一次谐波,虚部为有效值在Y轴上投影,2者之商可求角度*/
                 off_UA,
                 off_UA_Real,
                 off_UA_Imag,
                 off_IA_Phase,
                 off_UA_Phase,

                 off_IB,                                    /*同IA*/
                 off_IB_Real,
                 off_IB_Imag,
                 off_UB,
                 off_UB_Real,
                 off_UB_Imag,
                 off_IB_Phase,
                 off_UB_Phase,

                 off_IC,                                    /*同IA*/
                 off_IC_Real,
                 off_IC_Imag,
                 off_UC,
                 off_UC_Real,
                 off_UC_Imag,
                 off_IC_Phase,
                 off_UC_Phase,

                 
/*************************零序*****************************/
                 off_I0,                                    /*同Ia*/
                 off_I0_Real,
                 off_I0_Imag,
                 
/*************************负序*******************************/
                 off_I2,                                    /*SQRT(Re^2+Im^2)*/
                 off_I2_Real,                               /*(Ia+alpha^2*Ib+alpha*Ic)*/
                 off_I2_Imag,
                 
/************************************************************/
                 
                 
                 off_InverTime_Setting_K,                  /*反时限整定系数K*/
                 off_ZeroSeq_InverTime_Setting_K,           /*零序反时限整定系数K*/
/*****************正序***************************************************************/

                 off_I1,                                    /*有效值,根据Real ^2+ Imag ^2计算 */
                 off_I1_Real,                               /*fft的一次谐波,实部为有效值在X轴上投影,*/
                 off_I1_Imag                               /*fft的一次谐波,虚部为有效值在Y轴上投影,2者之商可求角度*/
                 
};

/********************************************************************
 *					整定值结构体
 ********************************************************************/
typedef struct
{
	float
		Current_Rating  ,//额定电流 Ie
		Voltage_Rating  ,//额定电压Ue
	 	OverLoad_Current,
	 	

		Block_Current,
		
		ShortCircuit_CurrentI  ,      //速断一段
	
		ShortCircuit_CurrentII ,         //速断二段
		
		Current_Unbalance_SettingI,   //不平衡报警
		Current_Unbalance_SettingII,    //不平衡跳闸
		
		Current_Unbalance_SettingIII ,//断相

		I0,             //零序电流

		Voltage_Low_Setting ,       //欠电压(晃电开始)
		
		Voltage_Over_Setting  ,    //过电压定值  

		Current_Low_Setting  ,   //欠电流定值
		Voltage_ShakingOver_Setting, //晃电恢复电压

		PTBroken_Voltage_Setting ,      //PT断线电压定值
		PTBroken_Current_Setting ,       //PT断线电流定值

		Current_Stop_Setting,   //认为电动机停机的电流定值 

		Current_StartFinish_Setting ,//启动完毕电流定值

		OverLoad_Limit,  //过负荷电流系数 k  (IB= K*Ie )
		//Current_Before_OverLoad,   //过负荷前电流   简化程序,设定为 0.8Ie  (待验证)

		OverLoad_TeValue ,//发热时间常数定值
		OverHeat_Current ,//过热保护动作定值
		ColdVsHeat_Ratio , //冷热曲线比

		OverHeat_Alarm_Setting,  //过热报警定值
		OverHeat_Break_Setting,   //过热跳闸定值
		Restart_Permit_Setting;     //过热允许重启定值

	int
		OverLoad_Time,         //过载时间定值
		Block_TimeI,          //堵转一段时间定值
		Block_TimeII,        //堵转二段时间定值
		ShortCircuit_TimeII ,   //过电流二段时间定值
		Current_Unbalance_SettingII_Time ,    //不平衡二段时间定值
		I0_Time,         //零序时间定值
		Voltage_Low_Setting_Time ,  //欠电压时间定值 
		Voltage_Over_Setting_Time , //过电压时间定值 
		Current_Low_Setting_Time , //欠电流时间定值
		VoltageShaking_Time ,    //晃电允许时间
              PT_Broken_Time,   //PT断线时间定值  
              
		PhaseReversedTime  ,          //逆相时间定值
		Start_Setting_Time ; //启动时间定

⌨️ 快捷键说明

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