📄 台达协议-程序.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 + -