📄 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_
//----------------------------------------------------------------------------------------------//
#include "hardware_reg.h"
#define U8 unsigned char
#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 StatusVarAdd (BOOL *)(0x1fff0000 + 0x400)
#define Channel_AdjustAdd (double *)(0x1fff0000 + 0x600)
extern unsigned long TMD_System_Clock;
/**************************时间节点结构体******************/
typedef struct
{
unsigned long delaytick,holdtick, delaytime,holdtime, lastdelaytick, lastholdtick;
BOOL level;
}TJDTimingNode;
/*------------------------------------------------------------------*/
#define TimingNodePulse(node, in_level) do\
{\
if(in_level >= 1)\
{\
if(((TJDTimingNode *)node)->lastdelaytick == 0) ((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;\
}\
}\
else\
{\
((TJDTimingNode *)node)->lastdelaytick = 0x0;\
((TJDTimingNode *)node)->level = 0;\
}\
}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
{
int
StartSingal,
SaveLoadNum,
ControlWay,
CommunicateAdd,
CheckoutWay;
float
CurrentRating,
VoltageRating,
CT;
int
year;
volatile U8
month,
date,
hour,
minute,
second,
day;
int
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8;
}_SystemSetting;
//********************************************************************
// 输入量结构体
//********************************************************************/
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者之商可求角度*/
int DI[4];
}_JDInputs;
/*------------------------------------------------------------------*/
/********************************************************************
输入结构体中每个量的偏移
********************************************************************/
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者之商可求角度*/
off_DI
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -