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

📄 xdata.h

📁 一个锅炉温度控制程序
💻 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 + -