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