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

📄 module.h

📁 Keil平台
💻 H
字号:
/*
* Filename     : module.h
* Author       : Li Dawen
* Copyright (c): Coslight Group .co
* Create Date  : 2002.04.27
* Version      : 0.1.0

PID算法

PID是比例,积分,微分的缩写,
Uo(N)=P*E(N)+I*[E(N)+E(N-1)+...+E(0)]+D*[E(N)-E(N-1)]

E-误差
P--改变P可提高响应速度,减小静态误差,但太大会增大超调量和稳定时间。
I--与P的作用基本相似,但要使静态误差为0,必须使用积分。
D--与P,I的作用相反,主要是为了减小超调,减小稳定时间。

三个参数要综合考虑,一般先将I,D设为0,调好P,达到基本的响应速度和误差,再加上I,使误差为0,这时再加入D,三个参数要反复调试,最终达到较好的结果。不同的控制对象,调试的难度相差很大,祝好运!
*/
#ifndef MODULE_H
#define MODULE_H


#define MAX_DC_FILTER_BUF_SIZE      8       /* 直流滤波缓冲大小              */
#define MAX_AC_FILTER_BUF_SIZE      8       /* 交流滤波缓冲大小              */
#define MAX_ADVALUE                 0x1FFF  /* AD满度值 14位AD 8191          */
#define MAX_DAVALUE                 0x0FFF  /* DA满度值 12位DA 4096          */

#define MAX_DIFF_CAPAC      (long)1000000

#define MAX_NEWALARM        100
#define MAX_OLDALARM        50

#define MAX_RALAY           8

#ifdef HARD_GP
    #define MAX_ALARM_RALAY     8
#else
    #define MAX_ALARM_RALAY     4
#endif

#define MAX_JKMK            1
#define MAX_CDMK            1
#define MAX_JYMK            1
#define MAX_DDMK            1
#define MAX_KRMK            1   //4->16
#define MAX_COMMK           1


#define  ADDR_JKMKBAK_OFFSET  3000



#define  ADDR_JKMK          1000
#define  SIZE_JKMK          800

#define  ADDR_CDMK          ADDR_JKMK+SIZE_JKMK*MAX_JKMK
#define  SIZE_CDMK          20

#define  ADDR_JYMK          ADDR_CDMK+SIZE_CDMK*MAX_CDMK
#define  SIZE_JYMK          40

#define  ADDR_DDMK          ADDR_JYMK+SIZE_JYMK*MAX_JYMK
#define  SIZE_DDMK          40

#define  ADDR_KRMK          ADDR_DDMK+SIZE_DDMK*MAX_DDMK
#define  SIZE_KRMK          20

#define  ADDR_COMMK         ADDR_KRMK+SIZE_KRMK*MAX_KRMK
#define  SIZE_COMMK         40

#define  MASK_MODULE        0xF0<<1
#define  MODULE_JKMK        0x00<<1
#define  MODULE_CDMK        0x10<<1
#define  MODULE_JYMK        0x20<<1
#define  MODULE_DDMK        0x30<<1
#define  MODULE_KRMK        0x40<<1
#define  MODULE_COMMK       0x50<<1

#define  MASK_DATA_TYPE     0x1F
#define  DATA_AI            0x01
#define  DATA_AO            0x02
#define  DATA_DI            0x03
#define  DATA_DO            0x04
#define  DATA_TM            0x05
#define  DATA_ALM           0x06
#define  DATA_ALMOUT        0x07

#define  DATA_MKCFG         0x08
#define  DATA_AICFG         0x09
#define  DATA_AOCFG         0x0A
#define  DATA_DICFG         0x0B
#define  DATA_DOCFG         0x0C
#define  DATA_TMCFG         0x0D
#define  DATA_ALMCFG        0x0E

#define  DATA_ALMMAP        0x11
#define  DATA_TEMP          0x12

#define  JK_ADDR_AICFG       200
#define  JK_ADDR_AOCFG       400
#define  JK_ADDR_ALMCFG      420
#define  JK_ADDR_TMCFG       500
#define  JK_ADDR_TMV         520

#define  JK_ADDR_DICFG       580
#define  JK_ADDR_DOCFG       600
#define  JK_ADDR_ALMMAP      620
/* communication *//* connect */

typedef struct JKMKINFO
{
    int   mk_cfg[100];      //0
    int   ai_cfg[100];      //200
    int   ao_cfg[10];       //400
    int   alm_cfg[40];      //420
    int   tm_cfg[10];       //500
    int   tm_v[10];         //520

    uchar di_cfg[20];       //580
    uchar do_cfg[20];       //600
    uchar alm_map[40];      //620

    int   ai_v[30];         //
    int   ao_v[10];         //
    uchar di_v[20];         //
    uchar do_v[20];         //
    uchar alm_v[50];        //
    uchar alm_out[40];
    int   temp[40];         //
    int   alm_wait[50];
}JKMK;
/*
ao_v 
0~5 date time 
6~9
BASE_VADCONFIG  range limitup limitdown
*/
typedef struct CDMKINFO
{
    int   mk_cfg[10];

    int   ai_v[4];
    int   ao_v[2];
    uchar di_v[4];
    uchar do_v[4];
    uchar alm_v[5];
    int   alm_wait[5];
}CDMK;

typedef struct JYMKINFO
{
    int   mk_cfg[20];
    int   ai_v[200];
    uchar alm_v[200];
    uchar di_v[200];
    int   alm_wait[200];
}JYMK;

typedef struct DDMKINFO
{
    int   mk_cfg[20];
    int   ai_v[80];
    uchar alm_v[40];
    int   alm_wait[40];
}DDMK;

typedef struct KRMKINFO
{
    int   mk_cfg[10];
    int   temp[32];
    uchar di_v[32];
    uchar alm_v[36];
    int   alm_wait[40];

}KRMK;

typedef struct COMMKINFO
{
    int mk_cfg[20];
    uchar alm_v[10];
}COMMK;

typedef struct LDMKINFO
{
    int   mk_cfg[20];
    int   ai_v[8];
    int   di_v[8];
    uchar alm_v[8];
}LDMK;

typedef struct ALARMINFO
{
    uchar type;     /* MODULE|VALUE_TYPE */
    uchar module;   /* MODULE_INDEX */
    uchar index;    /* VALUE_INDEX */
    uchar flag;      /* FLAG        */
    int   value;    /* VALUE*/
    uchar time1[6]; /* BEGIN_TIME*/
    uchar time2[6]; /* END_TIME */
}ALARM;

typedef struct ADCFGINFO
{
    long adv, range, high, low, base, high2, low2;
}ADCFG;

#define  AC1_VA     0
#define  AC1_VB     1
#define  AC1_VC     2
#define  AC2_VA     3
#define  AC2_VB     4
#define  AC2_VC     5

#define  DC2_V      6
#define  HM2_V      7
#define  KM2_V      8
#define  BATT2_V    9
#define  HM1_V      10
#define  KM1_V      11
#define  BATT2_I    12
#define  DC1_V      13
#define  MX2_I      14
#define  MX1_I      15
#define  DC1_I      16
#define  BATT1_I    17
#define  DC2_I      18

#define  BATT1_V    19
#define  AD_B1      20
#define  AD_B4      21
#define  AD_B2      22
#define  AD_B3      23

#define  TMP_1      24
#define  TMP_2      25

#define  ALM_NONE   0
#define  ALM_HIGH   1
#define  ALM_LOW    2
#define  ALM_PHASE  3
#define  ALM_ACCUT  4
#define  ALM_ALM    1

#define  ALM_SORT_NULL  0  /*正常*/
#define  ALM_SORT_AC    1  /*交流故障*/
#define  ALM_SORT_BATT  2  /*电池组故障*/
#define  ALM_SORT_DC    3  /*馈出故障*/
#define  ALM_SORT_CDMK  4  /*充电模块故障*/
#define  ALM_SORT_JYMK  5  /*绝缘模块故障*/
#define  ALM_SORT_DDMK  6  /*电导模块故障*/
#define  ALM_SORT_KRMK  7  /*开入模块故障*/
#define  ALM_SORT_CELL  8  /*电池单体故障*/

#ifdef MODULE_MODULE
JKMK Jkmk;
CDMK Cdmk[MAX_CDMK];
JYMK Jymk[MAX_JYMK];
DDMK Ddmk[MAX_DDMK];
KRMK Krmk[MAX_KRMK];
COMMK Commk[MAX_COMMK];
//int run_flag = 0;
#else
extern JKMK Jkmk;
extern CDMK Cdmk[MAX_CDMK];
extern JYMK Jymk[MAX_JYMK];
extern DDMK Ddmk[MAX_DDMK];
extern KRMK Krmk[MAX_KRMK];
extern COMMK Commk[MAX_COMMK];
#endif

/****************************************************************************/
int  GetAddrOffset(uchar type, uchar index, uchar module);
int  GetModuleData(uchar type, uchar index, uchar module);
void SetModuleData(uchar type, uchar index, uchar module, int value);

void LoadModule(void);
void SaveModule(void);
void LoadModuleData(uchar type, uchar index, uchar module);
void SaveModuleData(uchar type, uchar index, uchar module);

void LoadModuleBak(void);
void SaveModuleBak(void);
void LoadModuleDataBak(uchar type, uchar index, uchar module);
void SaveModuleDataBak(uchar type, uchar index, uchar module);

void ModuleUpdataTime(char *buf);

//uchar GetModuleStatus(uchar type, uchar module);
uchar GetModuleIndex(uchar type, uchar addr);
int GetModuleCount(uchar type);
int RatingCurrent(void);

int ModuleLocate(uchar type, uchar index, uchar module);

int Index2Num(uchar type, uchar index, uchar module);   /*转换信号序号*/
/*如各模块电池序号到组电池序号  开入模块支路序号到母线支路序号 绝缘模块支路序号到母线支路序号*/


/****************************************************************************/
char* GetAlarmStr(char *s, uchar type, uchar index, uchar module, uchar flag);
char* NewAlarmStr(char *buf, uchar index, uchar style);
char *OldAlarmStr(char *buf, uchar index, uchar style);
/****************************************************************************/
int  DcAvg(int *dcchan, int count);             /* 计算直流平均值 有滤波 */
int  AcRms(int *buf, int count);
int  AdFilter(int *buf, int count);
void DataRead(void);
void AdRead(void);
void AdFormat(void);
void AdLimit(void);
void AcLimit(void);

void DiFormat(void);
void DoForamt(void);
void AlarmProc(void);
void AlarmWork(int cfg_index, uchar type, uchar index, uchar module, uchar flag);

int  AlarmSearth(uchar type, uchar index, uchar module, uchar flag);
void AlarmNew(uchar type, uchar index, uchar module, uchar flag);
void AlarmOld(int index);
void AlarmDel(int index);

int AlarmSort(int cfg_index);


void AlarmLoad(void);
void AlarmSave(int index);
void AlarmClear(void);

int GetHigh2(int high);
int GetLow2(int low);

/****************************************************************************/
void SaveCharge24(void);
void ReadCharge24(int index);
void SaveCharge72(void);
void ReadCharge72(int index);
void SaveRunData(void);
void ReadRunData(int index);

/****************************************************************************/
void InitModule(void);
void LoadModule(void);
void SaveModule(void);

void DefaultConfig(void);
/****************************************************************************/
void ClearNewAlarmFlag(void);
void SetNewAlarmFlag(void);
int  GetNewAlarmFlag(void);

void SetOldAlarmCount(int value);
int  GetOldAlarmCount(void);
void SetNewAlarmCount(int value);
int  GetNewAlarmCount(void);
void PTAlarmPlay(void);
void PTAlarmOff(void);

/****************************************************************************/
/****************************************************************************/
#endif


/**
千万次地问 - 刘欢 
千万次的问
北京人在纽约主题歌
冯小刚郑晓龙李晓明词
刘欢曲
刘欢演唱

千万里我追着你
可是你却并不在意
你不象是在我梦里
在梦里你是我的唯一
time and time again you ask me
问我到底爱不爱你
time and time again i ask myself
问自己是否离得开你
我今生看来注定要独行
热情已被你耗尽
我已经变得不再是我
可是你却依然是你
time and time again you ask me
问我到底恨不恨你
time and time again i ask myself
问自己你到底好在哪在哪里
好在哪里


无所谓 - 杨坤 - 无所谓 
xiekefeng@sina.com
无所谓
谁会爱上谁
无所谓
谁让谁憔悴
流过的幸福
是短暂的美
幸福过后
才会来受罪
错与对
再不说的那么绝对
是与非
再不说我的后悔
破碎就破碎
要什么完美
放过了自己
我才能高飞
无所谓无所谓
原谅这世界所有的不对
无所谓
我无所谓
何必让自己痛苦的轮回
我无所谓
enahahah...
yeahli

*/

⌨️ 快捷键说明

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