📄 xdata.h
字号:
/* XData.h */
/*
*
* 王占成
* zcwang@mail.ustc.edu.cn
* 2003.4.29
* 宏定义和外部变量定义
*
*
*/
#ifndef _XDATA_H_
#define _XDATA_H_
#include <absacc.h>
/****************************************************************/
/* 宏定义 */
/****************************************************************/
#define TRUE 1
#define FALSE 0
#define QD 0 /*驱动模块*/
#define AD 1 /*AD模块*/
#define DA 2 /*DA模块*/
#define DI 3 /*DI模块*/
#define JS 4 /*JS模块*/
#define BYTE unsigned char /*BYTE型变量*/
#define UINT unsigned int /*UINT型变量*/
/***定义相应键的扫描码***/
#define K_Sys 0x00
#define K_Enter 0x01
#define K_Cancel 0x09
#define K_Led0 0x0A
#define K_Led1 0x12
#define K_Led2 0x13
#define K_Led3 0x1B
#define K_Back 0x18
#define K_NULL 0xFF
/***LEDStatus的状态***/
#define S_NULL 0x00
#define S_P 0x01
#define S_I 0x02
#define S_D 0x03
#define S_SP 0x04
#define S_P_Val 0x05
#define S_I_Val 0x06
#define S_D_Val 0x07
#define S_SP_Val 0x08
#define S_F 0x09
#define S_F_Val 0x0a
/***8279地址定义***/
#define CMD8279 XBYTE[0x6C00] /*8279控制字地址*/
#define DATA8279 XBYTE[0x6800] /*8279数据地址*/
/***编码设置***/
/*
LED共阴极
输出 A3 A2 A1 A0 B3 B2 B1 B0
段码 h g f e d c b a
*/
/***数字对应的段码***/
#define Num0 0x3F
#define Num1 0x06
#define Num2 0x5B
#define Num3 0x4F
#define Num4 0x66
#define Num5 0x6D
#define Num6 0x7D
#define Num7 0x07
#define Num8 0x7F
#define Num9 0x6F
/***字符对应的段码***/
#define CharP 0x73
#define CharI 0x30
#define CharD 0x5E
#define CharS 0x6D
#define CharE 0x79
#define CharT 0x07
#define CharF 0x71
/***PID参数***/
#define PIDLEN 18 /*PID参数的长度*/
#define Vmin 0 /*最小阀位反馈电压*/
#define Vmax 300 /*最大阀位反馈电压*/
#define Ymin 1100 /*温度归一化时的最小温度*/
#define Ymax 1300 /*温度归一化时的最大温度*/
#define Umax 90 /*控制量上限幅*/
#define Umin 10 /*控制量下限幅*/
/****************************************************************/
/* 外部变量定义 */
/****************************************************************/
/****************************************************************/
/* 片内RAM */
/****************************************************************/
/***TXdata和RXdata***/
extern BYTE TXdata[11]; /*发送缓冲区 */
extern BYTE RXdata[11]; /*接收缓冲区 */
/***一些外部变量***/
extern idata BYTE nr_frame;
extern idata BYTE TempTimes;
extern idata BYTE PIDTimes;
extern idata BYTE OnNewData;
extern idata BYTE NewLEDStatus;
extern idata BYTE LEDStatus;
extern idata BYTE KeyCode;
extern idata BYTE TFlag;
extern idata BYTE DispTFlag;
extern idata BYTE DispTtime;
extern idata UINT cool_temp;
extern idata UINT cool_temp_bk;
extern idata UINT ad_val_bk[2];
extern idata UINT SP_nCount;
/****************************************************************/
/* 片外RAM */
/****************************************************************/
/*外部存储区总共512 byte,地址分别为:
/* 1: 0x4800L~0x48FFL
/* 2: 0x5800L~0x58FFL
/* 其中:0x4800~0x48FF用作PID参数和R,C和S存储区。
/* 0x5800~0x58FF用来存放一些其他的外部变量。
/* 剩下的保留。
*/
/*
1: 0x4800L~0x48FFL
*/
#define XAD0 0x24840L /*AD7703数据采集存放区*/
#define XAD1 0x24840L
#define YWORD0 ((unsigned int volatile*)(XAD0))
#define ad_val00 YWORD0[0]
#define ad_val01 YWORD0[1]
#define ad_val02 YWORD0[2]
#define ad_val03 YWORD0[3]
#define ad_val10 YWORD0[4]
#define ad_val11 YWORD0[5]
#define ad_val12 YWORD0[6]
#define ad_val13 YWORD0[7]
#define XGLOBALINT 0x24850L
#define YWORD1 ((UINT volatile*)(XGLOBALINT))/*双字节存储区*/
#define Yk YWORD1[0] /*温度检测值Y(k)*/
#define Rk YWORD1[1] /*温度设定值R(k)*/
#define p YWORD1[2] /*PID参数*/
#define I YWORD1[3]
#define D YWORD1[4]
#define XGLOBALBYTE 0x24860L
#define YBYTE ((BYTE volatile*)(XGLOBALBYTE))/*单字节存储区*/
#define Ts YBYTE[0] /*采样周期*/
#define DataFrame YBYTE[1] /*更新PID参数对应帧编号*/
#define MotorDir YBYTE[2] /*电机转动方向0停1反2正*/
#define ResetFlag YBYTE[3] /*复位标志*/
#define EnablePID YBYTE[4] /*是否由模块进行控制*/
#define PIDIni YBYTE[5] /*PID参数初始化标志*/
#define TempFlag YBYTE[6] /*计算温度角度标志*/
#define PIDFlag YBYTE[7] /*计算PID标志*/
/***==++++++++==***/
#define AlarmFlag YBYTE[8] /*报警标志*/
#define AlarmTime YBYTE[9] /*用于计算报警时间*/
#define AutoFlag YBYTE[10] /*自动/手动转换标志*/
#define RFlag YBYTE[11] /**用于区分看门狗复位和上电复位**/
#define XGLOBALFLOAT 0x24870L
#define YFLOAT (( float volatile*)(XGLOBALFLOAT))/*4字节存储区*/
#define U YFLOAT[0] /*控制量*/
#define Angle YFLOAT[1] /*电机角度值*/
#define DeltU YFLOAT[2] /*控制量变化量*/
#define Sens YFLOAT[4] /*灵敏度*/
#define XPIDLONG ((signed long volatile*)0x24890)
#define Ek XPIDLONG[0]
#define DeltEk XPIDLONG[1]
#define Ek1 XPIDLONG[2]
#define DeltEk1 XPIDLONG[3]
#define Yk1 XPIDLONG[4]
#define DeltYk XPIDLONG[5]
#define DeltYk1 XPIDLONG[6]
#define XPIDULONG ((unsigned long volatile*)0x248b0)
#define Kp XPIDULONG[0]
#define Ki XPIDULONG[1]
#define Kd XPIDULONG[2]
/*开辟接收、计算、 发送3个缓冲区,每个30字节*/
#define XRAMBASE 0x24800L
#define XPID ((struct PID volatile *) XRAMBASE)
#define sPID XPID[0]/*存放PID参数。在内存中*/
/*2003-4-17,wzc,压缩传输帧。*/
union uValue
{
struct{
/*总共5帧数据,每帧6字节*/
/*1*/
UINT _P; /* 参数P */
UINT _I; /* 参数I */
UINT _D; /* 参数D */
/*2*/
UINT SetPoint; /* 温度设定值 */
BYTE _UH; /* 控制量 */
BYTE _UL;
BYTE SensitiveH; /*控制电机正反转的灵敏度*/
BYTE SensitiveL;
/*3*/
BYTE _AngleH; /*阀位反馈,角度*/
BYTE _AngleL;
struct
{
BYTE Tsample:8;
BYTE MotorDirec:2; /*电机正反停转,0停1反2正*/
BYTE PIDNorP:1; /*PID正作用P,1或负作用N,0*/
BYTE Feedback:1; /*判断有无阀位反馈*/
BYTE PIDModel:2; /*不同PID选择*/
BYTE EnPID:2; /*PID开断*/
}CMod; /*用来存放PID控制得一些参数*/
UINT Temperature; /*温度检测值*/
} sValue;
BYTE bValue[PIDLEN];
};
struct PID {
union uValue ReceiveValue; /*从上位机获取数据的接收缓冲区*/
union uValue CalValue; /*计算时使用数据的计算缓冲区*/
union uValue SendValue; /*向上位机发送数据的发送缓冲区*/
};
/*
2: 0x5800L~0x58FFL
*/
#define XSPBYTE ((BYTE volatile*)0x25800)
#define SPOneStepValSign XSPBYTE[0] /*每30s设定值的增加量的符号*/
#define XSPWORD ((UINT volatile*)0x25810)
#define SP2 XSPWORD[0] /*设定值*/
#define SP1toSP2Time XSPWORD[1] /*设定值1到设定值2之间的时间*/
#define XSPFLOAT ((float volatile*)0x25820)
#define SPOneStepVal XSPFLOAT[0] /*每10s设定值的增加量*/
#define SP_temp XSPFLOAT[1] /*存放设定值的实数型*/
/*总共可以计时 65536 次,如果PID的计算周期是4秒的话,
大概是:72 小时,足够了*/
#define TempPIDUINT XSPWORD[2]
#endif /*_XDATA_H_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -