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

📄 485.c

📁 以太网103转四方串口103,以太网103转四方串口103
💻 C
📖 第 1 页 / 共 3 页
字号:
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		case 0x06://软压板
			sfc_no = ginh;
			sfc_state = rbuf[20] - 1;
			if (DEV_Check_SFC(dev_id,sfc_no,sfc_state) == 1)
			{
				cot = 44;
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		case 0x03://遥控,3——遥跳,4——遥合
			ctrl_no = ginh;
			if(DEV_Check_Control(dev_id, ctrl_no) ==1)
			{
				cot = 44;
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		}
		break;
	case 250://带执行的写条目
		switch(ginl)
		{
		case 4://定值
			tiaomu = ginh;
			b_set_no = DEV_Get_Zone(dev_id, &set_no);
			b_get_set = DEV_Get_Setting(dev_id,set_no,&wsetbuf);
			if( b_set_no == 1 && b_get_set == 1)
			{
				pt = &rbuf[17];
				gdd = *pt++;
				pt++;//数据宽度
				pt++;//数目及后续状态
				for(i = 0;i < ngd;i ++)
				{
					switch(gdd)//gdd 通用分类数据描述:3——无符号整数,7——短实数
					{
					case 3:
						wsetbuf.set_val[tiaomu - 1].type = SET_T_UINT;
						wsetbuf.set_val[tiaomu - 1].un_val.u_val = MAKEWORD(*pt,*(pt + 1));
						pt += 3;
						tiaomu = *pt;
						pt += 2;
						gdd = *pt++;
						pt ++;
						break;
					case 6:
					case 7:
						wsetbuf.set_val[tiaomu - 1].type = SET_T_FLOAT;
						gen_scan_float(pt, &wsetbuf.set_val[tiaomu - 1].un_val.f_val);
						pt += 5;
						tiaomu = *pt;
						pt += 2;
						gdd = *pt++;
						pt ++;
						break;
					}
				}
				if(DEV_Set_Setting(dev_id,set_no,&wsetbuf) == 1)
				{
					cot = 40;
				}
				else
				{
					cot = 41;
				}
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			return;
		case 0x05:
			set_no = rbuf[20];
			b_set_no = DEV_Set_Zone(dev_id ,set_no);
			if (b_set_no == 1)
			{
				cot = 40;
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		case 0x06://软压板
			sfc_no = ginh;
			sfc_state = rbuf[20] - 1;
			if(DEV_Set_SFC(dev_id,sfc_no,sfc_state) == 1)
			{
				cot = 40;
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		case 0x03://遥控
			ctrl_no = ginh;
			if(DEV_Remote_Control(dev_id, ctrl_no) == 1)
			{
				cot = 40;
			}
			else
			{
				cot = 41;
			}
			wLen = rbuf[1];
			sbuf[0] = 0x68;
			sbuf[1] = (BYTE)wLen;
			sbuf[2] = (BYTE)wLen;
			sbuf[3] = 0x68;
			i= 4;
			memcpy(&sbuf[4] ,&rbuf[4] ,wLen);
			sbuf[4] = 0x00;
			sbuf[8] = cot;
			sbuf[sbuf[1] + 4] = Makecrc(&sbuf[4],sbuf[1]);
			sbuf[sbuf[1] + 5] = 0x16;
			wLen = sbuf[1] + 6;
			tot_leng = wLen;
			UART_Write(uart_port,sbuf,wLen);
			break;
		}
		break;
	}
}

void ReSet(const BYTE *rbuf,BYTE byDevAddr,BYTE uart_port)
{
	DEV_Check_Control(7, 7);
	DEV_Remote_Control(7, 7);

	DEV_Check_Control(7, 8);
	DEV_Remote_Control(7, 8);

	DEV_Check_Control(12, 7);
	DEV_Remote_Control(12, 7);

	DEV_Check_Control(12, 8);
	DEV_Remote_Control(12, 8);
/*	//复归保护信号inf = 19 , cot = 20 
	BYTE cot;
	BYTE inf;
	BYTE i;
	WORD Dev_Num;
	WORD dev_id;

	Dev_Num = Get_Device_Number();
	byDevAddr = rbuf[5];
	cot = rbuf[8];
	inf = rbuf[11];
	if(cot == 20 && inf == 19)
	{
		if(byDevAddr == 0xff)
		{
			for(i = 1;i <= Dev_Num;i ++)
			{
				DEV_Reset_Signal(i);
			}
			return;
		}
		dev_id = Addr_to_ID(byDevAddr);
		DEV_Reset_Signal(dev_id);
	}*/
}

void Lan_edit21(const BYTE* rbuf,BYTE byDevAddr,BYTE uart_port)
{
	BYTE inf;
	BYTE ginl;
	BYTE ginh;
	BYTE ngd;
	BYTE kod;
	WORD wLen;
	WORD dev_id;
	T_SET *p_set;
	WORD set_no;

	inf = rbuf[11];//信息序号
	ngd = rbuf[13];
	ginl = rbuf[14];//组号
	ginh = rbuf[15];//条目号
	kod = rbuf[16];//类型描述
	switch(inf)
	{
	case 241://读一个组的全部条目的值和属性
		switch(kod)
		{
		case 1://实际值
			switch(ginl)
			{
			case 4://定值
				p_set = &rsetbuf;
				dev_id =Addr_to_ID(byDevAddr);
				DEV_Get_Zone(dev_id, &set_no);
				if(DEV_Get_Setting(dev_id,set_no,p_set) == 1)
				{
					dzflg = 0x33;
					dznumber = 0;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					NU_Sleep(20);
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					dzflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			case 1://遥测
				dev_id = Addr_to_ID(byDevAddr);
				if(INF_Get_Measure(dev_id, &measure) == 1)
				{
					measureflg = 0x33;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					measureflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			case 0x06://软压板信息
				dev_id = Addr_to_ID(byDevAddr);
				if(INF_Get_SFC(dev_id,&sfc) == 1)
				{
					sfcflg = 0x33;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					sfcflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			case 0x07://遥信量信息
				dev_id = Addr_to_ID(byDevAddr);
				if(INF_Get_Di(dev_id,&di) == 1)
				{
					diflg = 0x33;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					diflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			}
			break;
		case 10://描述表
			switch(ginl)
			{
			case 1://遥测组
				dev_id = Addr_to_ID(byDevAddr);
				if(DEV_Get_List(dev_id, LIST_T_ANALOG, &list) == 1)
				{
					listflg = 0x33;
					list_num = 0;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					listflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			case 4://定值组
				dev_id = Addr_to_ID(byDevAddr);
				if(DEV_Get_List(dev_id, LIST_T_SET, &list) == 1)
				{
					listflg = 0x33;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					listflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			case 6://软压板
				dev_id = Addr_to_ID(byDevAddr);
				if(DEV_Get_List(dev_id, LIST_T_SFC, &list) == 1)
				{
					listflg = 0x33;
					sbuf[0] = 0x10;
					sbuf[1] = 0x20;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
				else
				{
					listflg = 0x00;
					sbuf[0] = 0x10;
					sbuf[1] = 0x09;
					sbuf[2] = byDevAddr;
					sbuf[3] = Makecrc(&sbuf[1],2);
					sbuf[4] = 0x16;
					wLen = 5;
					tot_leng = wLen;
					UART_Write(uart_port,sbuf,wLen);
					return;
				}
			}
			break;
		}
	}
}
/////////////////////////////////////                                        
BYTE Makecrc(BYTE *str,WORD nSize)
{
	WORD  i;
	BYTE J;
	J=0;
	for(i=0;i < nSize;i++)
	{
		J+=str[i];
	}
	
	return J; 
}

WORD check_packet(const BYTE *p_data, WORD data_len)
{
	if(p_data[0] == 0x10)
	{
		if(data_len == 5 && p_data[4] == 0x16)
		{
			return UART_PKT_FIN;
		}
		return UART_PKT_CON;
	}
	if(p_data[0] == 0x68)
	{
		if(data_len == p_data[1] + 6)
		{
			return UART_PKT_FIN;
		}
		return UART_PKT_CON;
	}
	return UART_PKT_ERR;
}

⌨️ 快捷键说明

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