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

📄 台达协议-程序.txt

📁 台达PLC通讯协议
💻 TXT
字号:
 
/*******************************************************************************************/
/************************  	DVP___PLC 	*****************************/
/*******************************************************************************************/  
int DVP_ReadWord(char DevChar,INT16U DevNumber)
{
		unsigned short num;
		U8 auchMsg[7],SendArray[16],RecArray[15];  
        int Result=0;
		U8 Count; 
		int i;
	
		auchMsg[0]=1;   
		auchMsg[1]=3;  
		
		num=DVP_Device(DevChar,DevNumber,0);

		if(num==0xffff)
			return(Result);
		
		auchMsg[2]=num/256;
		auchMsg[3]=num%256;
		auchMsg[4]=0;
		auchMsg[5]=1;

		auchMsg[6]=LRC(auchMsg,6);		//

		
		SendArray[0]=0x3a; 
		for(Count=0;Count<7;Count++) 
		{
			SendArray[Count*2+1]=(DataToChar(auchMsg[Count]/16));
			SendArray[Count*2+2]=(DataToChar(auchMsg[Count] % 16));
		}
		SendArray[15]=0x0A;
		
		rINTMSK |=BIT_GLOBAL;
	
		for(Count=0;Count<16;Count++)         
		{
			Uart_SendByte(SendArray[Count]);
		}

		for(i=0;i<1000;i++);

		Count = 0;
		while((RecArray[0]=Uart_Getch())!=':' && Count<=20) Count++;
		
		if(RecArray[0]==':')
		{
			for(Count=1;Count<15;Count++)          
			{
				RecArray[Count]=Uart_Getch();
			}

			if(RecArray[1]=='0'&&RecArray[2]=='1'&&RecArray[3]=='0'&&RecArray[4]=='3')
			{
				if((RecArray[6])=='2')                      //16bit
				{
					for(i=7;i<11;i++)
						Result=Result*16+CharToData(RecArray[i]);
				}
				else if((RecArray[6])=='4')    //32bit
				{
					for(i=7;i<15;i++)
						Result=Result*16+CharToData(RecArray[i]);
				}

			}
			else
 				Result=-1;	
		}
		else
 			Result=-1;

		rINTMSK &=~(BIT_GLOBAL|BIT_EINT1);
		return Result ;
	
}


U8 DVP_WriteWord(char DevChar,INT16U DevNumber,int Value)
{
		unsigned short num;
		U8 auchMsg[7],SendArray[18],RecArray[15];  
		U8 BoolSucceed=0;
   		U8 Count; 
		int i;

		auchMsg[0]=1;
		auchMsg[1]=6;

		num=DVP_Device(DevChar,DevNumber,0);

		if(num==0xffff)
			return(BoolSucceed);
		
		auchMsg[2]=num/256;
		auchMsg[3]=num % 256;
		
		if(DevChar=='c' ||DevChar=='C')                       //  写C232---C255时
		{
			if(DevNumber<232 && DevNumber<=255)
			{
				auchMsg[4]=(Value/65536)/256;
				auchMsg[5]=(Value/65536)%256;
				auchMsg[6]=(Value%65536)/256;
				auchMsg[7]=(Value%65536)%256;

				auchMsg[8]=LRC(auchMsg,8);

				SendArray[0]=0x3a; 
				for(Count=0;Count<9;Count++) 
				{
					SendArray[Count*2+1]=(DataToChar(auchMsg[Count]/16));
					SendArray[Count*2+2]=(DataToChar(auchMsg[Count] % 16));
				}
				SendArray[17]=0x0A;
				
				rINTMSK |=BIT_GLOBAL;
			
				for(Count=0;Count<18;Count++)         
				{
					Uart_SendByte(SendArray[Count]);
				}

				for(i=0;i<1000;i++);

				Count = 0;
				while((RecArray[0]=Uart_Getch())!=':' && Count<=20) Count++;
				
				if(RecArray[0]==':')
				{
					for(Count=1;Count<15;Count++)          
					{
						RecArray[Count]=Uart_Getch();
					}

					if(RecArray[1]=='0'&&RecArray[2]=='1'&&RecArray[3]=='0'&&RecArray[4]=='6')
					{
						BoolSucceed=1;	
					}
				}
				rINTMSK &=~(BIT_GLOBAL|BIT_EINT1);
				return BoolSucceed;
			}
		}
		
		auchMsg[4]=Value/256;
		auchMsg[5]=Value % 256;

		auchMsg[6]=LRC(auchMsg,6);
		
		SendArray[0]=0x3a; 
		for(Count=0;Count<7;Count++) 
		{
			SendArray[Count*2+1]=(DataToChar(auchMsg[Count]/16));
			SendArray[Count*2+2]=(DataToChar(auchMsg[Count] % 16));
		}
		SendArray[15]=0x0A;
		
		rINTMSK |=BIT_GLOBAL;
	
		for(Count=0;Count<16;Count++)         
		{
			Uart_SendByte(SendArray[Count]);
		}

		for(i=0;i<1000;i++);

		Count = 0;
		while((RecArray[0]=Uart_Getch())!=':' && Count<=20) Count++;
		
		if(RecArray[0]==':')
		{
			for(Count=1;Count<15;Count++)          
			{
				RecArray[Count]=Uart_Getch();
			}

			if(RecArray[1]=='0'&&RecArray[2]=='1'&&RecArray[3]=='0'&&RecArray[4]=='6')
			{
				BoolSucceed=1;	
			}
		}
		rINTMSK &=~(BIT_GLOBAL|BIT_EINT1);
		return BoolSucceed;

}



U8 DVP_ReadBit(char DevChar,INT16U DevNumber)
{
		unsigned short num;
		U8 auchMsg[7],SendArray[16],RecArray[15];  
		U8 BoolSucceed=3;
   		U8 Count; 
		int i;
	
		auchMsg[0]=1;   
		auchMsg[1]=2;  
		
		num=DVP_Device(DevChar,DevNumber,1);
		if(num==0xffff)
			return(BoolSucceed);
		
		auchMsg[2]=num/256;
		auchMsg[3]=num%256;
		auchMsg[4]=0;
		auchMsg[5]=8;

		auchMsg[6]=LRC(auchMsg,6);		//???

		SendArray[0]=0x3a; 
		for(Count=0;Count<7;Count++) 
		{
			SendArray[Count*2+1]=(DataToChar(auchMsg[Count]/16));
			SendArray[Count*2+2]=(DataToChar(auchMsg[Count] % 16));
		}
		SendArray[15]=0x0A;
		
		rINTMSK |=BIT_GLOBAL;
	
		for(Count=0;Count<16;Count++)         
		{
			Uart_SendByte(SendArray[Count]);
		}

		for(i=0;i<1000;i++);

		Count = 0;
		while((RecArray[0]=Uart_Getch())!=':' && Count<=20) Count++;
		
		if(RecArray[0]==':')
		{
			for(Count=1;Count<11;Count++)          
			{
				RecArray[Count]=Uart_Getch();
			}

			if(RecArray[1]=='0'&&RecArray[2]=='1'&&RecArray[3]=='0'&&RecArray[4]=='2'&&RecArray[5]=='0'&&RecArray[6]=='1')
			{
				BoolSucceed=Fx_BitValue(DevChar,DevNumber,RecArray[7],RecArray[8]);	
			}
		}

		rINTMSK &=~(BIT_GLOBAL|BIT_EINT1);
		return BoolSucceed;

}



U8 DVP_WriteBit(char DevChar,INT16U DevNumber,U8 Value)
{
		unsigned short num;
		U8 auchMsg[7],SendArray[16],RecArray[15];  
		U8 BoolSucceed=0;
   		U8 Count; 
		int i;
		
		auchMsg[0]=1;
		auchMsg[1]=5;

		num=DVP_Device(DevChar,DevNumber,0);
		if(num==0xffff)
			return(BoolSucceed);
		
		auchMsg[2]=num/256;
		auchMsg[3]=num % 256;
		if(Value==0)
		{
			auchMsg[4]=0;
			auchMsg[5]=0;
		}
		else
		{
			auchMsg[4]=255;
			auchMsg[5]=0;
		}
				
		auchMsg[6]=LRC(auchMsg,6);		//???


		SendArray[0]=0x3a; 
		for(Count=0;Count<7;Count++) 
		{
			SendArray[Count*2+1]=(DataToChar(auchMsg[Count]/16));
			SendArray[Count*2+2]=(DataToChar(auchMsg[Count] % 16));
		}
		SendArray[15]=0x0A;
		
		rINTMSK |=BIT_GLOBAL;
	
		for(Count=0;Count<16;Count++)         
		{
			Uart_SendByte(SendArray[Count]);
		}

		for(i=0;i<1000;i++);

		Count = 0;
		while((RecArray[0]=Uart_Getch())!=':' && Count<=20) Count++;
		
		if(RecArray[0]==':')
		{
			for(Count=1;Count<15;Count++)          
			{
				RecArray[Count]=Uart_Getch();
			}

			if(RecArray[3]=='0'&&RecArray[4]=='5')
			{
				BoolSucceed=1;
			}
		}
	
		rINTMSK &=~(BIT_GLOBAL|BIT_EINT1);
		return BoolSucceed;

}




/////////////////////////////////////////////////////////
////           DVP_PLC                        ////////////////
/////////////////////////////////////////////////////////
unsigned short DVP_Device(char DevChar,short DevNumber,U8 flag)  
{
	unsigned short num,error;
	char str[5]={'\0'};
	error=0;

	num=DevNumber;

	if(DevChar>=0x61&&DevChar<=0x7a)
		DevChar-=0x20;
	if(DevChar<0x41||DevChar>0x5a)
		return(0xffff);
   
	
	if(DevChar=='X'||DevChar=='Y')
	{
		sprintf(str,"%d",DevNumber);
		sscanf(str,"%o",&num);
		 
	}

	if(flag==1)                     //flag==1 ??ReadBit??? ???
		num/=8; 
  
	switch(DevChar)
	{
		case 'S':
			if(num>127)
				error=0xffff;
			else if(flag==1)
				num=0x0000+num*8;
			else
				num+=0x0000;
			break;
		case 'X':
			if(DevNumber>177)
				error=0xffff;
			else if(flag==1)
				num=0x0400+num*8;
			else
				num+=0x0400;
			break;
		case 'Y':
			if(DevNumber>177)
				error=0xffff;
			else if(flag==1)
				num=0x0500+num*8;
			else
				num+=0x0500;
			break;
		case 'T':
			if(num>127)
				error=0xffff;
			else if(flag==1)
				num=0x0600+num*8;
			else
				num+=0x0600;
			break;
		case 'M':
			if(num>1279)
				error=0xffff;
			else if(flag==1)
				num=0x0800+num*8;
			else
				num+=0x0800;
			break;
		case 'C':
			if(num>=256||(num>=128&&num<=231))
				error=0xffff;
			else if(flag==1)
				num=0x0e00+num*8;
			else
				num+=0x0800;
			break;
		default:         //  D元件
			if(num>=1144||(num>=600&&num<=999))
			error=0xffff;
			num+=0x1000;
	}

	if(error==0xffff)
		return(0xffff);
	else
		return(num);
}



⌨️ 快捷键说明

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