📄 mototype.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 + -