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

📄 znet.c

📁 采用MPS430控制的项目
💻 C
📖 第 1 页 / 共 2 页
字号:
		STR1_Rec[i*8+15]=ASCII[(ADAlarm_para[0][i]>>12)&0x000f]; 
		STR1_Rec[i*8+16]=ASCII[(ADAlarm_para[0][i]>>8) &0x000f]; 
		STR1_Rec[i*8+17]=ASCII[(ADAlarm_para[0][i]>>4) &0x000f]; 
		STR1_Rec[i*8+18]=ASCII[(ADAlarm_para[0][i]>>0) &0x000f]; 
		
		STR1_Rec[i*8+19]=ASCII[(ADAlarm_para[1][i]>>12)&0x000f]; 
		STR1_Rec[i*8+20]=ASCII[(ADAlarm_para[1][i]>>8) &0x000f]; 
		STR1_Rec[i*8+21]=ASCII[(ADAlarm_para[1][i]>>4) &0x000f]; 
		STR1_Rec[i*8+22]=ASCII[(ADAlarm_para[1][i]>>0) &0x000f]; 
	}
	i = 15*8+22;
	GetCheckSum(STR1_Rec,i);			//数据包和校验
	STR1_Rec[i+5]= EOI;
	SendStrlenToCom1(STR1_Rec,i+6);	
}
/*********************************************************************************************************
* 函数名称:SetXiTongData
*
* 功能描述:设置系统参数,上限、下限
*
* 说明:
* 
********************************************************************************************************/
void SetXiTongData(void)
{
	Uint16 tongdao, command, data,i,x1;
	tongdao = Combine(STR1_Rec[13],STR1_Rec[14]);
	command = Combine(STR1_Rec[15],STR1_Rec[16]);
	data = (Combine(STR1_Rec[17],STR1_Rec[18]))>>8;
	data = data + Combine(STR1_Rec[19],STR1_Rec[20]);
	if(tongdao>=1 && tongdao<=16)								  //通道有效
	{
		i = 0;
		if(command==0x80)		ADAlarm_para[0][tongdao-1] = data;//设置上限
		else if(command==0x81)	ADAlarm_para[1][tongdao-1] = data;//设置下限
		else i = 0x06;
		if(i==0)
		{
			x1 = I2C_UP+32*(command-0x80)+(tongdao-1)*2;
			II3WR(AT24C256,x1,data>>8);
			II3WR(AT24C256,x1+1,data&0x00ff);
		}
	}
	else i = 0x06;
	ErrorDeal(i,ADR,CID10,COM1);
}
/*********************************************************************************************************
* 函数名称:SendOldData
*
* 功能描述:上传历史数据
*
* 说明:
* 
********************************************************************************************************/
void SendOldData(void)
{
	static Uint16 OldData_count=1;	
	Uint16 i,count,sum=0;					
	i = Combine(STR1_Rec[13],STR1_Rec[14]);		//COMMAND TYPE
	if(i==0x00)			
	{
		if(OldData_Now==OldData_Sum)	
				OldData_count = 1;				//发送第一条历史数据
		else	OldData_count = OldData_Now+1;
	}
	else if(i==0x01)
	{
		OldData_count +=1;						//接收正确,发送下一条历史数据
	}
	else if(i==0x02)	;						//接受错误,重发.
	else {ErrorDeal(0x06,ADR,CID10,COM1);return;}
	
	if(OldData_Now==OldData_Sum)
	{
		if(OldData_count>=OldData_Sum)	{OldData_count = OldData_Sum;i=1;}else i=0;
	}
	else
	{
		if(OldData_count>OldData_Sum) 	OldData_count = 1;
		i = 0;
		if(OldData_count==OldData_Now)	i=1;
	}
	
	count = I2C_OldDataByte*2;
	ReadOldData(&STR1_Rec[380],OldData_count-1);
	
	if(i==1)	OldData_count -= 1;

	STR1_Rec[0] = SOI;
	STR1_Rec[1] = ASCII[VER>>4];
	STR1_Rec[2] = ASCII[VER&0x0f];
	STR1_Rec[3] = ASCII[ADR>>4];
	STR1_Rec[4] = ASCII[ADR&0x0f];
	STR1_Rec[5] = ASCII[CID10>>4];
	STR1_Rec[6] = ASCII[CID10&0x0f];
	STR1_Rec[7] = ASCII[0];				//正常响应
	STR1_Rec[8] = ASCII[0];
	
	GetCheckLength(STR1_Rec,count+4);		//数据长度校验
	
	STR1_Rec[13] = ASCII[0];
	STR1_Rec[14] = ASCII[i&0x0f];
	STR1_Rec[15] = ASCII[DATAFLAG>>4];
	STR1_Rec[16] = ASCII[DATAFLAG&0x0f];
	
	for(i=1; i<17; i++)	sum += STR1_Rec[i];
	for(i=0; i<count; i++)
	{
		STR1_Rec[17+i] = ASCII[STR1_Rec[380+i]>>4];
		STR1_Rec[18+i] = ASCII[STR1_Rec[381+i]&0x0f];
		sum = sum + STR1_Rec[17+i] + STR1_Rec[18+i];
	}
	sum = ((~sum)+1);
	STR1_Rec[count+18] = ASCII[sum>>12];
	STR1_Rec[count+19] = ASCII[(sum>>8)&0x000f];
	STR1_Rec[count+20] = ASCII[(sum>>4)&0x000f];
	STR1_Rec[count+21] = ASCII[sum&0x000f];
	STR1_Rec[count+22] = EOI;
	SendStrlenToCom1(STR1_Rec,count+23);	
}
/*********************************************************************************************************
* 函数名称:SendOldGaoJing
*
* 功能描述:上传历史告警
*
* 说明:
* 
********************************************************************************************************/
void SendOldGaoJing(void)
{
	static Uint16 OldGaoJing_count=1;
	Uint16 i,count,sum=0;
	i = Combine(STR1_Rec[13],STR1_Rec[14]);			//COMMAND TYPE
	if(i==0x00)			
	{
		if(Alarm_Now==Alarm_Sum)	OldGaoJing_count = 1;		//发送第一条告警数据
		else						OldGaoJing_count = Alarm_Now+1;
	}
	else if(i==0x01)	
	{
		OldGaoJing_count +=1;		//接收正确,发送下一条历史告警
	}
	else if(i==0x02)	;			//接受错误,重发.
	else {ErrorDeal(0x06,ADR,CID10,COM1);return;}

	if(Alarm_Sum == Alarm_Now) 
	{
		if(OldGaoJing_count>=Alarm_Sum)	{OldGaoJing_count=Alarm_Sum;i=1;}else i=0;
	}  
	else
	{
		if(OldGaoJing_count>Alarm_Sum)	OldGaoJing_count = 1;
		i=0;
		if(OldGaoJing_count==Alarm_Now) i=1;
	}
	count = I2C_GaoJingByte*2;
	ReadOldAlarm(&STR1_Rec[380],OldGaoJing_count-1);
	if(i==1)	OldGaoJing_count -= 1;
	
	STR1_Rec[0] = SOI;
	STR1_Rec[1] = ASCII[VER>>4];
	STR1_Rec[2] = ASCII[VER&0x0f];
	STR1_Rec[3] = ASCII[ADR>>4];
	STR1_Rec[4] = ASCII[ADR&0x0f];
	STR1_Rec[5] = ASCII[CID10>>4];
	STR1_Rec[6] = ASCII[CID10&0x0f];
	STR1_Rec[7] = ASCII[0];				//正常响应
	STR1_Rec[8] = ASCII[0];
	
	GetCheckLength(STR1_Rec,count+4);		//数据长度校验
	
	STR1_Rec[13] = ASCII[0];
	STR1_Rec[14] = ASCII[i&0x0f];
	STR1_Rec[15] = ASCII[DATAFLAG>>4];
	STR1_Rec[16] = ASCII[DATAFLAG&0x0f];
	for(i=1; i<17; i++)	sum += STR1_Rec[i];
	for(i=0; i<count; i++)
	{
		STR1_Rec[17+i] = ASCII[STR1_Rec[380+i]>>4];
		STR1_Rec[18+i] = ASCII[STR1_Rec[381+i]&0x0f];
		sum = sum + STR1_Rec[17+i] + STR1_Rec[18+i];
	}
	sum = ((~sum)+1);
	STR1_Rec[count+18] = ASCII[sum>>12];
	STR1_Rec[count+19] = ASCII[(sum>>8)&0x000f];
	STR1_Rec[count+20] = ASCII[(sum>>4)&0x000f];
	STR1_Rec[count+21] = ASCII[sum&0x000f];
	STR1_Rec[count+22] = EOI;
	SendStrlenToCom1(STR1_Rec,count+23);		
	
}	
/*********************************************************************************************************
* 函数名称:SendTime
*
* 功能描述:发送系统时间
*
* 说明:
* 
********************************************************************************************************/
void SendTime(void)
{
	Uint16 i;
	STR1_Rec[0] = SOI;
	STR1_Rec[1] = ASCII[VER>>4];
	STR1_Rec[2] = ASCII[VER&0x0f];
	STR1_Rec[3] = ASCII[ADR>>4];
	STR1_Rec[4] = ASCII[ADR&0x0f];
	STR1_Rec[5] = ASCII[CID10>>4];
	STR1_Rec[6] = ASCII[CID10&0x0f];
	STR1_Rec[7] = ASCII[0];				//正常响应
	STR1_Rec[8] = ASCII[0];
	GetCheckLength(STR1_Rec,14);		//数据长度校验 12
	STR1_Rec[13] = ASCII[2];
	STR1_Rec[14] = ASCII[0];
	
	for(i=0; i<6; i++)
	{		
		STR1_Rec[i*2+15]=ASCII[(Time_now[i]>>4)];
		STR1_Rec[i*2+16]=ASCII[(Time_now[i]&0x0f)];
	}
	i = 5*2+16;
	GetCheckSum(STR1_Rec,i);			//数据包和校验
	STR1_Rec[i+5]= EOI;
	SendStrlenToCom1(STR1_Rec,i+6);	
}
/*********************************************************************************************************
* 函数名称:SetTime
*
* 功能描述:设置系统时间
*
* 说明:
* 
********************************************************************************************************/
void SetTime(void)
{
	Uint8 temp[6];
	Uint8 timeformat[6][2]={{0,99},{1,12},{1,31},{0,23,},{0,59},{0,59}};
	Uint16 i,flag;

	for(i=0; i<6; i++)
	{
		temp[i] = Combine(STR1_Rec[i*2+15],STR1_Rec[i*2+16]);
		if(temp[i]>=timeformat[i][0]&&temp[i]<=timeformat[i][1])	flag = 0x0;
		else {flag = 0x06;break;}
	}
	if(flag==0x0)
	{
		for(i=0; i<6; i++)	Time_now[i] = temp[i];
		NowTime_wr_data(Time_now);
	}
	ErrorDeal(flag,ADR,CID10,COM1);
}
/*********************************************************************************************************
* 函数名称:SendChangJiaInfo
*
* 功能描述:上传厂家信息
*
* 说明:
* 
********************************************************************************************************/
void SendChangJiaInfo(void)
{
	ErrorDeal(0x04,ADR,CID10,COM1);
}
/*********************************************************************************************************
* 函数名称:SendDefine
*
* 功能描述:上传检测量定义表
*
* 说明:
* 
********************************************************************************************************/
void SendDefine(Uint16 k)
{
	Uint16 i;
	STR1_Rec[0] = SOI;
	STR1_Rec[1] = ASCII[VER>>4];
	STR1_Rec[2] = ASCII[VER&0x0f];
	STR1_Rec[3] = ASCII[ADR>>4];
	STR1_Rec[4] = ASCII[ADR&0x0f];
	STR1_Rec[5] = ASCII[CID10>>4];
	STR1_Rec[6] = ASCII[CID10&0x0f];
	STR1_Rec[7] = ASCII[k>>4];			//用K区分是获取还是主动上传
	STR1_Rec[8] = ASCII[k&0x0f];
	GetCheckLength(STR1_Rec,6+40*4);	//数据长度校验 12
	
	STR1_Rec[13] = ASCII[16>>4];		//模拟量输入定义
	STR1_Rec[14] = ASCII[16&0x0f];
	for(i=0; i<16; i++)
	{		
		STR1_Rec[i*4+15]=ASCII[(i+1)>>4]; 
		STR1_Rec[i*4+16]=ASCII[(i+1)&0x0f]; 
		STR1_Rec[i*4+17]=ASCII[ADSam_Code[i]>>4]; 
		STR1_Rec[i*4+18]=ASCII[ADSam_Code[i]&0x0f]; 
	}
	
	STR1_Rec[15*4+19] = ASCII[16>>4];	//开关量输入定义
	STR1_Rec[15*4+20] = ASCII[16&0x0f];
	for(i=0; i<16; i++)
	{		
		STR1_Rec[(15+i)*4+21]=ASCII[(i+1)>>4]; 
		STR1_Rec[(15+i)*4+22]=ASCII[(i+1)&0x0f]; 
		STR1_Rec[(15+i)*4+23]=ASCII[DISam_Code[i]>>4]; 
		STR1_Rec[(15+i)*4+24]=ASCII[DISam_Code[i]&0x0f]; 
	}

	STR1_Rec[30*4+25] = ASCII[8>>4];	//开关量输出定义
	STR1_Rec[30*4+26] = ASCII[8&0x0f];
	for(i=0; i<8; i++)
	{		
		STR1_Rec[(30+i)*4+27]=ASCII[(i+1)>>4]; 
		STR1_Rec[(30+i)*4+28]=ASCII[(i+1)&0x0f]; 
		STR1_Rec[(30+i)*4+29]=ASCII[DOSam_Code[i]>>4]; 
		STR1_Rec[(30+i)*4+30]=ASCII[DOSam_Code[i]&0x0f]; 
	}
	
	i = 37*4+30;
	GetCheckSum(STR1_Rec,i);			//数据包和校验
	STR1_Rec[i+5]= EOI;
	SendStrlenToCom1(STR1_Rec,i+6);	
}
/*********************************************************************************************************
* 函数名称:SetInterval
*
* 功能描述:设定监控主机上传数据时间间隔
*
* 说明:
* 
********************************************************************************************************/
void SetInterval(void)
{
	Time_interval = (Combine(STR1_Rec[13],STR1_Rec[14])<<8) + Combine(STR1_Rec[15],STR1_Rec[16]);
	ErrorDeal(0,ADR,CID10,COM1);
}
/*********************************************************************************************************
* 函数名称:SendAllAdr
*
* 功能描述:上传所有智能设备的地址 ADR 和设备类型 CID1
*
* 说明:
* 
********************************************************************************************************/
void SendAllAdr(Uint16 k)
{
	Uint16 i;
	STR1_Rec[0] = SOI;
	STR1_Rec[1] = ASCII[VER>>4];
	STR1_Rec[2] = ASCII[VER&0x0f];
	STR1_Rec[3] = ASCII[ADR>>4];
	STR1_Rec[4] = ASCII[ADR&0x0f];
	STR1_Rec[5] = ASCII[CID10>>4];
	STR1_Rec[6] = ASCII[CID10&0x0f];
	STR1_Rec[7] = ASCII[k>>4];				//用K区分是获取还是主动上传
	STR1_Rec[8] = ASCII[k&0x0f];
	GetCheckLength(STR1_Rec,2+Adr_sum*4);	//数据长度校验 12
	
	STR1_Rec[13] = ASCII[Adr_sum>>4];		//模拟量输入定义
	STR1_Rec[14] = ASCII[Adr_sum&0x0f];
	for(i=0; i<Adr_sum; i++)
	{		
		STR1_Rec[i*4+15]=ASCII[Adr[i][0]>>4]; 
		STR1_Rec[i*4+16]=ASCII[Adr[i][0]&0x0f]; 
		STR1_Rec[i*4+17]=ASCII[Adr[i][1]>>4]; 
		STR1_Rec[i*4+18]=ASCII[Adr[i][1]&0x0f]; 
	}
	i = (Adr_sum-1)*4+18;
	GetCheckSum(STR1_Rec,i);			//数据包和校验
	STR1_Rec[i+5]= EOI;
	SendStrlenToCom1(STR1_Rec,i+6);	
}
/*********************************************************************************************************
* 函数名称:SendBigData
*
* 功能描述:批量上传数据
*
* 说明:(未完成)
* 
********************************************************************************************************/
void SendBigData(void)
{
	ErrorDeal(0x04,ADR,CID10,COM1);
}
/*********************************************************************************************************
* 函数名称:ErrorDeal
*
* 功能描述:错误消息响应
*
* 说明:
* 
********************************************************************************************************/
void ErrorDeal(Uint8 Rtn,Uint8 adr,Uint8 cid1,Uint8 dir)
{
	Uint8 *p;
	if(dir==COM1) p=STR1_Rec; else p=STR0_Rec;
	GetCommandPackage(p,adr,cid1,Rtn);				//发送本机地址
	if(COM1==1)	SendStrlenToCom1(p,Com_Long);		//发给计算机
	else		SendStrlenToCom0(p,Com_Long);		//发给智能设备
}

⌨️ 快捷键说明

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