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

📄 cjq.h

📁 电力载波抄表系统里的电力载波采集器,采集数据再通过RS485向主站发送.
💻 H
📖 第 1 页 / 共 2 页
字号:
//*[]======================================================
//Copyright(c)2007, 青岛东软电脑技术有限公司电子产品事业部
//All rights reserved
//
//文件名称:	plc485m.h
//文件标识:
//摘要:		定义变量,引脚、划分内存
//[]=======================================================
		
//1. Port Define
//;    Notes:                                              *
//;					 ----------\/-----------               *
//;				  --|1:VPP        PGD/RB7:28|--            *
//;				  --|2:RA0        PGC/RB6:27|--            *
//;	  _Show485(O) --|3:RA1    	      RB5:26|-- RXD(I)	   *
//;	   _OnOff(I)  --|4:RA2            RB4:25|-- IrfTXD(I)  *
//;	        	  --|5:RA3	    	  RB3:24|-- BATT(I)    *
//;	              --|6:RA4	    	  RB2:23|-- SDA(X)     *
//;	        	  --|7:RA5   16F76 	  RB1:22|-- SCL(O)     *
//;	          	  --|8:VSS	    	  RB0:21|-- WP(O)      * 
//;	        	  --|9:CLKIN          VDD:20|--            *
//;	        	  --|10:CLIOUT   	  VSS:19|--            *
//;	    PLCRXD(O) --|11:RC0           RC7:18|-- _485RXD(I) *
//;	   _IrfRXD(O) --|12:RC1           RC6:17|-- _485TXD(O) *  
//;	 _Irf38KHz(O) --|13:RC2     	  RC5:16|-- SET(I)     *
//;	   RTCSCL(O)  --|14:RC3    	      RC4:15|-- RTCFMSDA(X)*
//;		         	 -----------------------		       *
//;	                                        		       *
//**********************************************************

//	#define			DEBUG		ON


//限定性常量定义
	#define		c_AmrSpaceTime		0xff	//默认抄表时间间隔10分钟,只能取值10,15,30,60,0xff
	#define		c_FreezeData		0x25	//BCD码,默认例日25号零点
	#define		c_VER				0x50u	//版本号50
    #define		c_FalseCont			0x03u	//多次抄表循环不成功删除该表,c_FalseCont*c_AmrReCont
	#define		c_AmrReCont			0x02u	//单次抄读失败重复次数!!
	#define		c_DataFCont			20		//内存数据有效时间 单位S
	#define		c_FrameOutT			80u		//等待帧超时,80*10=800ms秒
	#define		c_ByteOutT			20u		//字节间超时,20*10=200ms
	#define		c_BuffClrT			250u	//只要2.5秒钟内没有动作就清485缓冲区,并停止所有任务
	#define		c_MaxMeterAmount	32		//最大不能超32只表
	#define		c_RetCont			0x02	//内存数据可直接上传次数
	#define		c_eepage			32		//EEPROM page页大小

// 1.1: PORTA
#define			_Show485	RA1	
#define			_OnOff		RA2

//	1.2: PORTB
#define         _TRISFMSDA	TRISB2

#define			_RXD		RB5		//PLC TO MCU
#define			_IrfTXD		RB4		//infrared to mcu
#define			_BattLvp	RB3
#define			_FMSDA		RB2
#define			_FMSCL		RB1
#define			_FMWP		RB0

//	1.3: PORTC
#define			_RTCTRISSCL	TRISC3
#define			_RTCTRISSDA	TRISC4

#define			_PLCRXD		RC0		//MCU TO PLC	
#define			_IrfRXD		RC1		//mcu to infrared
#define			_Irf38KHz	RC2
#define			_RTCSCL		RC3
#define			_RTCFMSDA	RC4
#define			_Set		RC5
#define			_485RXD		RC6		//mcu to 485
#define			_485TXD		RC7		//485 to mcu

//2. 全局变量,bank0
unsigned char		v_IntRunFlag;
unsigned char		v_ExtRunFlag;
unsigned char		v_frame_mark;

unsigned char		v_msCont;		//10ms计数器
unsigned char		v_ssCont;		//秒计数器
unsigned char		v_mmCont;		//分
unsigned char		v_AmrSpace;		//抄表间隔

unsigned char		v_DirRetCont;	//暂存数据计数器,10后销毁
unsigned char		v_hhTask;		//开始小时任务标志,0~23表示开始对应小时任务,0xff没有任务
unsigned char		v_FreezeTask;	//开始冻结任务标志,1~31对应天,0为没有任务
unsigned char		v_RecPort;
unsigned char		v_FrameC;
unsigned char		v_RetCback;		//暂存直接上传数据控制字
unsigned char		v_FrameL;
unsigned char		v_DI0;			//DI0 DI1前后位置不能颠倒
unsigned char		v_DI1;

unsigned char		v_FrameC485;
unsigned char		v_FrameL485;
unsigned char		v_DI0485;		//DI0 DI1前后位置不能颠倒
unsigned char		v_DI1485;
unsigned char		v_485len;		//485接收专用
unsigned char		v_PLClen;		//载波接收专用

unsigned char		v_OnOffSta;		//开盖状态 1:开箱,0:关闭
#define	c_OnSta		0x01
#define	c_OffSta	0x00

bit					_SysCheck;		//系统检测标志

bank1	unsigned char	*p_BuffPLC;
bank2	unsigned char	*p_Buff485;	

//结构体定义
typedef struct testtask				//测试指令
{	
	unsigned char	start;			//开始自动测试任务
	unsigned char	Sta;			//任务状态,完成,进行中,空闲
									//测试类任务要抄读多次,所以有任务状态: 执行中
	unsigned char	serial;			//当前任务电表序号,序号达到最大,任务结束
	unsigned char	MeterMark;		//表类型
	unsigned char	MeterMarkSr;	//表类型序号
	unsigned char	ReadItem;		//抄读项
	unsigned char	DI0;			//DI0, DI1
	unsigned char	DI1;
	unsigned char	reCont;			//失败时重复次数	
};
	
typedef struct amrtask				//自动抄表指令
{
	unsigned char	start;			//开始自动抄表任务
	unsigned char	Sta;			//单只表的任务状态, 进行中,空闲
									// 以上两字节结合判断是否开始下一字节抄读
	unsigned char	serial;			//当前任务电表序号,序号达到最大,抄表任务结束
	unsigned char	DI0;			//DI0, DI1,由表特征字得到											// 
	unsigned char	DI1;			
	unsigned char	reCont;			//失败重复次数
	unsigned char	MeterMark;
	unsigned char	ReadItem;		//抄读项,主要是不支持集合命令时
									// 标示出需要抄读的分项,位定义同特征字
									//抄完一项,该位清零,字节==0,完成
	bank2 unsigned char	*p_consume;	//保存电量指针,分项抄读时会用到
};	

typedef	struct rt_task				//实时任务,主要是指令透传
{
	unsigned char	Sta;			//是否有实时任务c_Free:没有,c_TaskRun:有
	unsigned char	Port;			//回应端口
	unsigned char	Ctr;
	unsigned char	len;
	unsigned char	DI0;
	unsigned char	DI1;
	unsigned char	FeCont;			//fe个数
};	

typedef struct upBuffMark			//上行缓冲区状态结构
{
	unsigned char	RetCont;		//标示直接上传次数
	unsigned char	otc;			//字节超时记数器out time cont
	unsigned char	len;			//当前缓冲区中数据长度
	unsigned char	Sta;			//标示当前缓冲区状态,空闲,接受指令中,接收完成,发送指令中
	bank1 unsigned char	*ptr;		//指向当前操作字节地址(发送接收时有效)
};

typedef  struct downBuffmark		//下行缓冲区状态
{
	unsigned char	feCont;			//485发送前导符的个数
	unsigned char	otc;			//485接收超时记数器out time cont
	unsigned char	goal;			//标示当前缓冲区数据用途:透传,测试,抄表,交互命令
	unsigned char	len;			//当前缓冲区中数据长度
	unsigned char	Sta;			//标示当前缓冲区状态,空闲,接受指令中,接收完成,发送指令中
	bank2 unsigned char	*ptr;		//指向当前操作字节地址(发送接收时有效)
};

bank1	struct testtask		TestTask;		//测试表类型
		struct rt_task		RtTask;			//实时抄表任务	
		struct amrtask		AmrTask;		//自动抄表任务,优先级低	
		struct upBuffMark	BuffPLCMark;
		struct downBuffmark	Buff485Mark;
	
//结构参量常量取值定义
#define		c_Free			0x00u	//空闲,任务空闲,缓冲区空闲

//Buff...Sta,缓冲区状态
#define		c_Send			0x11u	//发送中
#define		c_WaitRec		0x12u	//等待接收
#define		c_RecNow		0x13u	//接收中
#define		c_RecEnd		0x14u	//接收完成
#define		c_RecOutT		0x15u	//超时无数据

//Buff485Mark.goal,缓冲区使用目的
#define		c_Test			0x21u	//485表类型测试
#define		c_DirReturn		0x22u	//透传
#define		c_AMR			0x23u	//抄表

//任务常量
#define		c_TaskFree		0x00	//任务空闲

//..Tast.Start 自动任务任务性质,单只还是全部
//测试任务:	只对全部电表,因为一次可能填加多只电表
// 			单只:	删除一只电表时可能开始单只表的测试任务,特征字序号不从零开始
// 					测试完序号不加,完成整个测试任务

⌨️ 快捷键说明

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