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

📄 103.c

📁 标准103规约的说明和在mc68332开发环境下的详细程序
💻 C
📖 第 1 页 / 共 4 页
字号:
				return;
			case 0x0f:
				//调试及操作消息类
				return;
			}
			return;
		case 0x02:
			//读一个组的全部条目的缺损值
			switch(ginh)
			{
			case 0x00:
				//系统类
				return;
			case 0x01:
				//系统类
				return;
			case 0x02:
				//定值类
				Get103_setquesheng( buff103,commaddress);
				send_quesheng(ginh,buff103,sbuf,id,commaddress,rii);
				return;
			case 0x03:
				//定值类
				Get103_setquesheng( buff103,commaddress);
				send_quesheng(ginh,buff103,sbuf,id,commaddress,rii);
				return;
			case 0x04:
				//事件类(动作及状态事件)
				return;
			case 0x05:
				//事件类(告警)
				return;
			case 0x06:
				//遥测类(保护遥测)
				return;
			case 0x07:
				//遥测类(动作及状态事件)
				return;
			case 0x08:
				//摇信类
				return;
			case 0x09:
				//摇信类
				return;
			case 0x0a:
				//电量类
				return;
			case 0x0b:
				//遥控开关类
				return;
			case 0x0c:
				//遥控分头类
				return;
			case 0x0d:
				//遥调类
				return;
			case 0x0e:
				//遥控压板类
				return;
			case 0x0f:
				//调试及操作消息类
				return;
			}
			return;
		}
		return;

	case 0xf3:
		//读单个条目的目录
		i=7;
		*apack =10;
		*apack =0x81;
		*apack =0x2a;
		*apack =commaddress;
		*apack =0xfe;
		*apack =0xf3;
		*apack =0;
		C103_Send( id, sbuf, i );//
		return;
	case 0xf4:
		//读单个条目的值
		switch(ginh)
		{
		case 0x20:
			switch(ginl)
			{
			case 0x00://读组的标题
				i=7;
				*apack =10;
				*apack =0x81;
				*apack =0x2a;
				*apack =commaddress;
				*apack =0xfe;
				*apack =0xf4;
				*apack =0;
				C103_Send( id, sbuf, i );//
				return;
			case 0x01://读小电流的数据表
				return;
			case 0x02://读带标志的状态变位
				i=7;
				*apack =10;
				*apack =0x81;
				*apack =0x2a;
				*apack =commaddress;
				*apack =0xfe;
				*apack =0xf4;
				*apack =0;
				C103_Send( id, sbuf, i );
				return;
			default:
				i = Get103_JieDiXuanXian_data( ginl-2,buff103,commaddress);
				Send_current_table(ginh,buff103,sbuf,id,commaddress,rii,i);
				return;
			}
			return;
		default:
			break;
		}
		return;
	case 0xf5:
		//对通用分类数据的总查询
		i=7;
		*apack =10;
		*apack =0x81;
		*apack =0x2a;
		*apack =commaddress;
		*apack =0xfe;
		*apack =0xf5;
		*apack =0;
		C103_Send( id, sbuf, i );
		return;
	default:
		break;
	}
}	
////
void Lan_edit24(BYTE *rbuf,WORD wLen,BYTE *sbuf,WORD id,BYTE *buff103)
{
	//扰动数据传输的命令
	BYTE *pt;//接受报文缓冲区
	BYTE *apack;//回答报文缓冲区
	BYTE commaddress;//公共地址
	BYTE fun;//功能类型
	BYTE woo;//命令类型
	BYTE tov;//扰动值类型
	BYTE counter;
	BYTE fan0;//故障序号
	BYTE fan1;//故障序号
	BYTE acc;//实际通道号
	BYTE too;//
	WORD fan = 0;//故障序号
	pt = rbuf + 3;
	commaddress = *pt++;
	fun = *pt;
	pt = rbuf + 6;
	woo = *pt++;
	tov = *pt++;
	fan0 = *pt++;
	fan1 = *pt++;
	acc = *pt++;
	//命令类型	1 ==故障的选择
    //          2 ==请求扰动数据
    //          3 ==终止扰动数据
    //			8 ==通道的请求
    //			9 ==通道的终止
    //			16==请求带标志的状态变位
    //			17==终止带标志的状态变位
    //			24==请求被记录的扰动表
	//
	//实际的通道序号  0====全局
    //				  1====I(L1)
    //				  2====I(L2)
    //				  3====I(L3)
    //				  4====I(N)
    //				  5====U(L1E)
    //				  6====U(L2E)
    //				  7====U(L3E)
    //				  8====U(EN)
	switch (woo)
	{
	case 0x18:	//请求被记录的扰动表
	//向保护请求被记录的扰动表
	Get103_fault_table(buff103,commaddress);
	send_fault_table(buff103,sbuf,id,commaddress,fun);
		return;
	case 0x01:	//故障的选择
		//根据被记录的扰动表,主站选择被请求的扰动数据
		Get103_data_ready(buff103,commaddress,fan0,fan1);
		send_data_ready(buff103,sbuf,id,commaddress,fun);
		return;
	case 0x02:	//请求扰动数据
		send_Cstatus_ready(sbuf,id,commaddress,fun,tov,fan0,fan1);
		return;
	case 0x10:	//请求带标志的状态变位
		apack = lastcommaddbuf+id;
		if (*apack == 0x00)
		{
			//发送原始状态
			*apack = 0x33;
			Get103_status_originality(buff103,commaddress,fan0,fan1);
			send_status_originality( buff103,sbuf,id,commaddress,fun,fan0,fan1);
		}
		else
		{
			if (*apack == 0x33)
			{
				//发送变位状态
				*apack = 0x55;
				Get103_status_nonce(buff103,commaddress,fan0,fan1);
				send_status_originality( buff103,sbuf,id,commaddress,fun,fan0,fan1);
			}
			else
			{
				//发送空
				*apack = 0x00;
				too = 40;
				send_status_empty( sbuf,id,commaddress,fun,too,tov,fan0,fan1,acc);
			}
		}
		return;
//**************************************************************
	case 0x03:	//终止扰动数据(不处理)
		return;
	case 0x08:	//通道的请求
		counter = read_default_counter[id];
		counter++;
		if (Get103_channel_data(buff103,commaddress,fan0,fan1,acc,counter) == true)
		{
			read_default_counter[id] = read_default_counter[id] + 1;
			send_channel_data(buff103,sbuf,id,commaddress,fun,too,tov,fan0,fan1,acc);
		}
		else
		{
			read_default_counter[id] = 0;
			too = 37;
			send_status_empty( sbuf,id,commaddress,fun,too,tov,fan0,fan1,acc);
		}
		return;
	case 0x09:	//通道的终止(不处理)
		return;
	case 0x11:	//终止带标志的状态变位(不处理)
		return;
		default:
		break;		
	}
}	
////
void Lan_edit25(BYTE *rbuf,WORD wLen,BYTE *sbuf,WORD id,BYTE *buff103)
{
	//扰动数据传输的认可
	BYTE *pt;//接受报文缓冲区
	BYTE commaddress;//公共地址
	BYTE fun;//功能类型
	BYTE woo;//命令类型
	BYTE tov;//扰动值类型
	BYTE fan0;//故障序号
	BYTE fan1;//故障序号
	BYTE acc;//实际通道号
	BYTE too;//
	pt = rbuf + 3;
	commaddress = *pt++;
	fun = *pt;
	pt = rbuf + 6;
	woo = *pt++;
	tov = *pt++;
	fan0 = *pt++;
	fan1 = *pt++;
	acc = *pt++;
	//
	switch (woo)	
	{
	case 68:
		//成功的带标志的状态变位传输
		Get103_default_channel(buff103,commaddress,acc);
		send_default_channel(buff103,sbuf,id,commaddress,fun,too,tov,fan0,fan1,acc);
		return;
	case 64:
		//成功的扰动数据传输
		return;
	case 65:
		//不成功的扰动数据传输
		return;
	case 66:
		//成功的通道传输
		return;
	case 67:
		//不成功的通道传输
		return;
	case 69:
		//不成功的带标志的状态变位传输
		return;
	default:
		break;
	}
}
//
void send_status_originality( BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun,BYTE fan0,BYTE fan1)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE j;
	BYTE k;
	pt = buff103;
	apack = sbuf;
	*apack++ = 29;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = fan0;
	*apack++ = fan1;
	j = *pt++;//带状态变位的数目
	*apack++ = j;
	i = 9;
	while (j > 0,j--)
	{
		k = 5;
		while (k > 0,k--)
		{
		*apack++ =*pt++;
		i++;
		}
	}
	C103_Send( id, sbuf, i );
}
//
void send_status_empty( BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun,BYTE too,BYTE tov,BYTE fan0,BYTE fan1,BYTE acc)
{
	BYTE *apack;
	WORD i;
	apack = sbuf;
	*apack++ = 31;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = too;//命令类型
	*apack++ = tov;
	*apack++ = fan0;
	*apack++ = fan1;
	*apack++ = acc;
	i = 11;
	C103_Send( id, sbuf, i );
}
//
void send_channel_data(BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun,BYTE too,BYTE tov,BYTE fan0,BYTE fan1,BYTE acc)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE j;
	BYTE k;
	WORD l = 0;
	pt = buff103;
	apack = sbuf;
	*apack++ =	30;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = 0x00;
	*apack++ = tov;
	*apack++ = fan0;
	*apack++ = fan1;
	*apack++ = acc;
	i = 11;
	j = *pt++;
	k = *pt++;
	l = k;
	l = l << 8;
	l = l | j;
	*apack++ = j;
	i++;
	*apack++ = k;
	i++;
	*apack++ = *pt++;
	i++;
	*apack++ = *pt++;
	i++;
	l *=2;
	while (l > 0,l--)
	{
		*apack++ = *pt++;
		i++;
	}
	C103_Send( id, sbuf, i );
}
//
void send_default_channel(BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun,BYTE too,BYTE tov,BYTE fan0,BYTE fan1,BYTE acc)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE j;
	apack = sbuf;
	pt = buff103;
	*apack++ = 27;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = 0x00;
	*apack++ = tov;
	*apack++ = fan0;
	*apack++ = fan1;
	*apack++ = acc;
	i = 11;
	j = 12;
	while (j > 0,j--)
	{
		*apack++ = *pt++;
		i++;
	}
	C103_Send( id, sbuf, i );
}
//
void send_Cstatus_ready(BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun,BYTE tov,BYTE fan0,BYTE fan1)
{
	BYTE *apack;
	WORD i;
	apack = sbuf;
	*apack++ = 0x1c;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = 0x00;
	*apack++ = 0x00;
	*apack = fan0;
	*apack = fan1;
	i = 10;
	C103_Send( id, sbuf, i );
}
//
void send_data_ready(BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE j;
	pt = buff103;
	apack = sbuf;
	*apack++ = 0x1a;
	*apack++ = 0x81;
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	*apack++ = 0x00;
	i = 7;
	j =14;
	while (j > 0,j--)
	{
		*apack++ = *pt++;
		i++;
	}
	C103_Send( id, sbuf, i );
}
//
void send_fault_table(BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE fun)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE k;
	BYTE j;
	pt = buff103;
	apack = sbuf;
	k = *pt++;
	    //类型表示         type = 17h
		//可变结构限定词   VSQ  = 扰动表的数目
		//传送原因         COT  = 31
		//公共地址         
		//功能类型
		//未用
		//故障序号         FAN(WORD)
		//故障状态
		//7个字节的时间
	*apack++ = 0x17;
	*apack++ = k;//扰动数据的数目
	*apack++ = 0x1f;
	*apack++ = commaddress;
	*apack++ = fun;
	*apack++ = 0x00;
	i = 6;
	while (k > 0,k--)
	{
		j = 10;
		while (j > 0,j--)
		{
			*apack++ = *pt++;
			i++;
		}
	}
	C103_Send( id, sbuf, i );
}
//
//
void send_write(BYTE *sbuf,BYTE *rbuf,WORD id,BYTE cot,BYTE commaddress,BYTE inf,BYTE rii)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE l;//通用分类数目
	BYTE k;//数据宽度
	BYTE j;//数目
	BYTE kb;
	pt =rbuf+7;
	apack =sbuf;
	*apack++ =10;
	*apack++ =0x81;
	*apack++ =cot;
	*apack++ =commaddress;
	*apack++ =254;
	*apack++ =inf;
	*apack++ =rii;
	i = 8;
	l =*pt++;
	*apack++ =l;
	while(l > 0,l--)
	{
		*apack++ =*pt++;
		i++;
		*apack++ =*pt++;
		i++;
		*apack++ =*pt++;
		i++;
		*apack++ =*pt++;
		i++;
		k =*pt++;
		kb = k;
		*apack++ =k;
		i++;
		j =*pt++;
		*apack++ =j;
		i++;
		while(j > 0,j--)
		{
			k = kb;
			while(k > 0,k--)
			{
				*apack++ =*pt++;
				i++;
			}
		}	
	}
	C103_Send( id, sbuf, i );
		return;
}
////
void send_miaoshu(BYTE ginh,BYTE *buff103,BYTE *sbuf,WORD id,BYTE commaddress,BYTE rii)
{
	BYTE *pt;
	BYTE *apack;
	WORD i;
	BYTE k;
	BYTE j;
	BYTE l;
	
    pt =buff103;
	apack =sbuf;
	i=7;
	*apack++ =10;
	*apack++ =0x81;
	*apack++ =0x2a;
	*apack++ =commaddress;
	*apack++ =0xfe;
	*apack++ =0xf1;
	*apack++ =rii;
	j=1;//条目号
	k =*pt;
	*apack++ =*pt++;//数目
	i++;
	while(k > 0,k--)
	{
		*apack++ =ginh;
		*apack++ =j;
		*apack++ =0x0a;
		*apack++ =*pt++;
		i =i+4;
		l =*pt;
		*apack++ =*pt++;
		i++;
		*apack++ =*pt++;
		i++;
		while (l>0,l--)
		{

⌨️ 快捷键说明

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