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

📄 cjq.h

📁 电力载波抄表系统里的电力载波采集器,采集数据再通过RS485向主站发送.
💻 H
📖 第 1 页 / 共 2 页
字号:
// 			全部:	测试全部,特征字序号从零开始,表序号加1,继续下个
//抄表任务:	可能对单只,也可能对全部
// 			单只:	一只电表测试完成后开始此电表的单只抄读任务
// 					即使有连续多只电表也没有关系,但是必须保证抄表任务优先级高于测试任务
// 			全部:	到达抄表时间
#define		c_TaskAllStart	0x31	//全部电表任务
#define		c_TaskOneStart	0x32	//单表任务

//...Task.Sta	自动任务状态
#define		c_TaskRun	0x41		//任务开始
	
//2。常数数组定义
//用来判断存储器是否初始化,长度不能大于7
const unsigned char RomFMMark[]	= "CJQ_50";
#define		l_FMMark	6u
//广播地址
const unsigned char RomBroadID[]	= {0x99,0x99,0x99,0x99,0x99,0x99};
//存储器内空表号		
//const unsigned char RomFreeID[]		= {0xff,0xff,0xff,0xff,0xff,0xff};
	//;[]-------------------------------------
	//;	电表特征字表
	//;	7	对901F的支持,	1:表示支持,	0:不支持
	//;	6	支持分量抄读9010
	//;	5	9011	需要测试才能确定
	//;	4	9012	需要测试才能确定
	//;	3	9013	需要测试才能确定
	//;	2	9014	需要测试才能确定
	//;	1,0	支持前导符的个数 00:不需要 	01:需要一个	10需要两个
	//;[]-------------------------------------
	#define		bsf_901f		0b10000000			//设置时用
	#define		bsf_9010		0b01000000
	#define		bsf_9011		0b00100000
	#define		bsf_9012		0b00010000
	#define		bsf_9013		0b00001000
	#define		bsf_9014		0b00000100
	
	#define		bcf_901f		0b01111111			//判断用
	#define		bcf_9010		0b10111111
	#define		bcf_9011		0b11011111
	#define		bcf_9012		0b11101111
	#define		bcf_9013		0b11110111
	#define		bcf_9014		0b11111011

	#define		bsf_9011_4		0b00111100			//获取11~14支持项

//	const unsigned char	RomMeterMark[]	= {
//		0b10000010,			//2FE, 901F
//		0b10000000,			//0FE, 901F
//		0b01111110,			//2FE, 9010
//		0b01111100,			//0FE, 9010
//		0b01111101,			//1FE, 9010		
//		0b10000001};		//1FE, 901F				//必须放到最后!!
//	#define		c_DefaltMark	0b100000010
//	#define		c_MarkAmount	0x06u

	const unsigned char	RomMeterMark[]	= {
		0b10000010,			//2FE, 901F
		0b01111110			//2FE, 9010
	};
		
	#define		c_DefaltMark	0b100000010
	#define		c_MarkAmount	0x02u
		
//3. 常量定义
//645规约常量定义
#define		c_Offset68_1	0x00u
#define		c_Offset68_2	0x07u
#define		c_OffsetC		0x08u
#define		c_OffsetL		0x09u
#define		c_OffsetDI0		0x0au
#define		c_OffsetDI1		0x0bu
#define		c_OffsetData	0x0cu
#define		c_DefaltLen		12u		//645规约除了数据域以外所有字节长度,包括CS 16
									//68 ID 68 C L (DI0 DI1 data) CS 16
//普通常量
#define		c_Baud_9600		0x11	//11.0592M,标准串口波特率
#define		c_Baud_4800		0x23	//
#define		c_Baud_2400		0x47	//
#define		c_Baud_1200		0x8F	//

#define		c_BaudMark12	0x00	//485口波特率标志, 1200
#define		c_BaudMark24	0x10	//2400
#define		c_BaudMark48	0x20	//4800

#define		_frame_97		0x00	//97版645规约
#define		_frame_07		0x55	//07版645规约

#define		c_SimBaud		0x47	//11.0592M模拟波特率,配合T2CON 实现1200和9600

#define		c_Port_Plc		0x11
#define		c_Port_485		0x22
#define		c_Port_Irf		0x33

#define		c_10MsTimeH		0x94	//用于10ms定时,Timer1定时器

#define		c_RTCSlaveAddr	0b01100101	//最后一位0:写, 1:读
#define		c_RTCINTA1Hz	0b00100011	//INTA 输出1Hz, 24小时制
#define		c_RTCINTAOFF	0b00100000	//INTA 无输出, 24小时制
#define		c_RTCINTB		0b10100000	//1.3V复位

#define		_TRUE			0x01u
#define		_FALSE			0x00u

//5. 程序运行标识
#define		c_putStrFM		0x01
#define		c_FMInit		0x02
#define		c_FMSet			0x03
#define		c_putStrRTC		0x04

//6. 寄存器初始化常量
#define		c_Pcon			0x03
#define		c_ADcon0		0x00
#define		c_ADcon1		0x06
#define		c_TrisA			0x04
#define		c_TrisB			0x38
#define		c_TrisC			0xA0
#define		c_TrisD			0x00
#define		c_Option		0x0F	//分频器分配给WDT,最大分频。128*18ms
#define		c_INTcon		0xc8	//使能B口电平变化中断		
#define		c_Pie1			0x01	//使能timer1中断,10ms一次
#define		c_Pie2			0x00
#define		c_T1con			0x01	//使能timer1, 10ms基数计数用
#define		c_T2con9600		0x01	//00000001=1:4(9600, used PLCI36M)
#define		c_T2con1200		0x0A	//00001010=0AH=1:32(1200 used PLCI36C, infrared)
#define		c_T2con38kHz	0x04	//pwm 38kHz 输出用到
#define		c_SSPcon		0x00
#define		c_SSPcon2		0x00
#define		c_CCP2con		0x00
#define		c_TXsta			0x62
#define		c_RCsta			0xD0
#define		c_CCP1con		0x3C	//pwm out PORTC2
#define		c_PR2			0x47	//pwm 38KHz
#define		c_CCPR1L		0x23	//50%


//7. 内存划分
#define		c_BuffMax		57				//帧最大长度,数据域长度要小于57-18=39字节

//所有通信数据都放在高两BANK
bank1	unsigned char	BuffPLC[c_BuffMax];	//载波通信
bank1	unsigned char	lastCommBack[10];	//只备份DI0 DI1 ID(6),每次485通信不成功必须清零!!

bank2	unsigned char	TestMeterID[6];		//测试表类型存放表号
bank2	unsigned char	MeterID[6];			//指令处理中使用表号
bank2	unsigned char	RtMeterID[6];		//实时抄表使用表号
bank2	unsigned char	AmrMeterID[6];		//自动抄表流程中存放表号
bank2	unsigned char	CollectorID[6];		//采集器号
bank2	unsigned char	Consume[21];		//暂存电量
bank2	unsigned char	tempBuff[24];		//不能设置小于24

bank3	unsigned char	Buff485[c_BuffMax-10];//抄读485表
bank3	unsigned char	timerBuff[7];		//ss mm hh dd ww mm yy => s m h d m y
	#define	ss	0
	#define	min	1
	#define	hh	2
	#define	dd	3
	#define	mon	4
	#define	yy	5
bank3	unsigned char	tempBuff1[6];		//临时缓冲区
bank3	unsigned char	RtData[24];			//透传指令数据域,并作为上次通信返回数据的备份
											//从DI0,DI1开始备份
	#define c_DownData	0x55				//数据下发标志
	#define c_UpData	0xaa				//数据上传标志		
											
//8. 外存划分,使用AT24C64共8K字节
#define		a_FMMark		0x0000				//7,标识铁电是否初始化	
#define		a_AmrSpace		0x0007				//1,抄表间隔
#define		a_CollecterID	0x0008				//6,采集器地址, 6字节
#define		a_FreezeTime	0x000e				//2,冻结日时,(时在低位)
#define		a_24ConMark		0x0010				//2,两块24点电量区域对应日期
#define		a_OnOffSta		0x0012				//7,时间+状态
#define		a_baud			0x0020				//1, 485通信速率标示
#define		a_MeterID		0x0040				//连续存储32只电表表号,共192字节(0x0040~0x00FF)

//0x0100开始存放每只电表相关信息
#define		c_OneSize		248					//每只表占用248字节存储空间
#define		a_FalseNO		0x0100				//1,第一只表失败次数,
#define		a_protocol_mark	a_FalseNO+1			//_frame_97 or _frame_07
#define		a_MeterMark		a_protocol_mark+1	//1,
#define		a_Consume		a_MeterMark+1		//21,第一只表电量起始地址,21字节,首字节为长度
#define		a_FzConsume		a_Consume+21		//22,第一只表冻结电量起始地址,首字节日期,次字节长度
												// 日期可作有效判断
#define		a_24Consume0	a_FzConsume+22		//4*24=96,24点电量
#define		a_24Consume1	a_24Consume0+96		//4*24=96,必须相连!!
#define		c_24ConLen		96					//重点数据长度

//常数数组定义
#define		Reset()		asm("goto	$")
#define		ClrWdt()	asm("clrwdt")
#define		Nop()		asm("nop")
#define		uc			unsigned char
#define		ui			unsigned int






⌨️ 快捷键说明

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