200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > FX-3U PLC串口与PC通信调试

FX-3U PLC串口与PC通信调试

时间:2023-10-19 14:07:40

相关推荐

FX-3U  PLC串口与PC通信调试

最近开发的完成的手机摄像头测试系统需要挂接在客户的自动化机械手臂上,以达到自动完成取放料的动作。

客户新来的工程师对PLC也不是很熟悉,导致在调试的过程中也碰到了些问题,特地为其写了个联机串口调试FX-3U程序。

今天得到消息,现在整个联机功能已经全部OK.了。

cpp File:

int TESTING=0;

unsigned int uRead_value[25];

unsigned int uWrite_value[25];

unsigned int COMM_PORT=8;

unsigned int STATS_PORT=0x02;

unsigned int DATA_PORT=0x03;

void init_plc(void)

{

_AX=0xfa;

_DX=COMM_PORT;

geninterrupt(0x14);

while((inportb(STATS_PORT)&1)!=0) inportb(DATA_PORT);

}

int check_plc(void)

{

long lTmp;

if(TESTING==1)return TRUE;

init_plc();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

return(FALSE);

outportb(DATA_PORT,5);

disable();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

if((lTmp=inportb(DATA_PORT))==6)

{

enable();

return(TRUE);

}

else

{

enable();

return(FALSE);

}

}

int read_data_register(unsigned int uAddress,unsigned int number)

{

int i;

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

if(_read_data_register(uAddress,number)==TRUE)

return TRUE;

return FALSE;

}

int _read_data_register(unsigned int uAddress,unsigned int number)

{

unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};

unsigned char uReceive[104];

unsigned int uTmp;

unsigned int uSum;

unsigned int num;

long lTmp;

int i,j;

if(TESTING==1)

{

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

uRead_value[i]=0;

return TRUE;

}

init_plc();

num=number*2;

if((num/16)>=10)

uSend[6]=(unsigned char)(num/16+0x41-10);

else

uSend[6]=(unsigned char)(num/16+0x30);

if((num%16)>=10)

uSend[7]=(unsigned char)((num%16)+0x41-10);

else

uSend[7]=(unsigned char)((num%16)+0x30);

uAddress=uAddress*2+0x1000;

uTmp=uAddress & 0x000f;

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>4) & 0x000f;

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>8) & 0x000f;

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>12)&0x000f;

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;

for(i=1;i<9;i++)

uSum=uSum+(unsigned char)uSend[i];

uTmp=uSum&0x000f;

uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uSum>>4)&0x000f;

uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

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

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

return(FALSE);

}

outportb(DATA_PORT,uSend[i]);

}

disable();

for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[0]=inportb(DATA_PORT);

if(uReceive[0]!=2)

{

enable();

return(FALSE);

}

for(i=1;i<number*4+4;i++)

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[i]=inportb(DATA_PORT);

}

enable();

uSum=0;

for(i=1;i<number*4+2;i++)

uSum=uSum+(unsigned int)uReceive[i];

uTmp=uSum&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*4+3]) return(FALSE);

uTmp=(uSum>>4)&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*4+2]) return(FALSE);

for(j=0;j<number;j++)

{

for(i=j*4+1;i<j*4+5;i++)

uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;

uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];

}

return TRUE;

}

int read_mdata_register(unsigned int uAddress,unsigned int number)

{

int i;

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

if(_read_mdata_register(uAddress,number)==TRUE)

return TRUE;

return FALSE;

}

int _read_mdata_register(unsigned int uAddress,unsigned int number)

{

unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};

unsigned char uReceive[104];

unsigned int uTmp;

unsigned int uSum;

unsigned int num;

long lTmp;

int i,j;

if(TESTING==1)

{

for(i=0;i<number;i++)uRead_value[i]=0;

return TRUE;

}

init_plc();

num=number*2;

if((num/16)>=10)

uSend[6]=(unsigned char)(num/16+0x41-10);

else

uSend[6]=(unsigned char)(num/16+0x30);

if((num%16)>=10)

uSend[7]=(unsigned char)((num%16)+0x41-10);

else

uSend[7]=(unsigned char)((num%16)+0x30);

/*uAddress=uAddress*2+0x1000;*/

uTmp=uAddress & 0x000f;

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>4) & 0x000f;

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>8) & 0x000f;

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>12)&0x000f;

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;

for(i=1;i<9;i++)

uSum=uSum+(unsigned char)uSend[i];

uTmp=uSum&0x000f;

uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uSum>>4)&0x000f;

uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

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

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

return(FALSE);

}

outportb(DATA_PORT,uSend[i]);

}

disable();

for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[0]=inportb(DATA_PORT);

if(uReceive[0]!=2)

{

enable();

return(FALSE);

}

for(i=1;i<number*4+4;i++)

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[i]=inportb(DATA_PORT);

}

enable();

uSum=0;

for(i=1;i<number*4+2;i++)

uSum=uSum+(unsigned int)uReceive[i];

uTmp=uSum&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);

uTmp=(uSum>>4)&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);

for(j=0;j<number;j++)

{

for(i=j*4+1;i<j*4+5;i++)

uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;

uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];

}

return TRUE;

}

int write_data_register(unsigned int uAddress,unsigned int number)

{

int i;

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

if(_write_data_register(uAddress,number)==TRUE)

return TRUE;

return FALSE;

}

int _write_data_register(unsigned int uAddress,unsigned int number)

{

unsigned char uSend[111];

unsigned int uTmp,uSum,num;

long lTmp;

int i;

if(TESTING==1)return TRUE;

init_plc();

uSend[0]=2;

uSend[1]=0x31;

uSend[number*4+8]=3;

num=(number*2)/16;

if(num>=10)

uSend[6]=num+0x41-10;

else

uSend[6]=num+0x30;

num=(number*2)%16;

if(num>=10)

uSend[7]=num+0x41-10;

else

uSend[7]=num+0x30;

uAddress=0x1000+2*uAddress;

uTmp=uAddress&0x000f;

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>4)&0x000f;

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>8)&0x000f;

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>12)&0x000f;

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

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

{

uTmp=uWrite_value[i]&0x000f;

uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uWrite_value[i]>>4)&0x000f;

uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uWrite_value[i]>>8)&0x000f;

uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uWrite_value[i]>>12)&0x000f;

uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

}

uSum=0;

for(i=1;i<9+number*4;i++)

uSum+=uSend[i];

uTmp=uSum&0x000f;

uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uSum>>4)&0x000f;

uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

for(i=0;i<11+number*4;i++)

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

/*enable();*/

return(FALSE);

}

outportb(DATA_PORT,uSend[i]);

}

disable();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

if(inportb(DATA_PORT)!=6)

{

enable();

return(FALSE);

}

else

{

enable();

return(TRUE);

}

}

int force_m_contact(unsigned uAddress,unsigned char ucOn_off)

{

int i;

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

if(_force_m_contact(uAddress,ucOn_off)==TRUE)

return TRUE;

return FALSE;

}

int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)

{

unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};

unsigned uTmp,uSum,i;

long lTmp;

if(TESTING==1)return TRUE;

init_plc();

uAddress=uAddress+0x800;

uSend[1]=ucOn_off;

uTmp=uAddress&0x000f;

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>4)&0x000f;

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>8)&0x000f;

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>12)&0x000f;

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;

for(i=1;i<7;i++)

uSum+=uSend[i];

uTmp=uSum&0x000f;

uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uSum>>4)&0x000f;

uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

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

{

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

outportb(DATA_PORT,uSend[i]);

}

disable();

for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{

if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

if(inportb(DATA_PORT)!=6)

{

enable();

return(FALSE);

}

else

{

enable();

return(TRUE);

}

}

int read_m_register(unsigned int uAddress,unsigned int number)

{ int i;

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

if(_read_m_register(uAddress,number)==TRUE)

return TRUE;

return FALSE;

}

int _read_m_register(unsigned int uAddress,unsigned int number)

{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};

unsigned char uReceive[54];

unsigned int uTmp;

unsigned int uSum;

unsigned int num;

long lTmp;

int i,j;

if(TESTING==1)

{ for(i=0;i<number;i++)uRead_value[i]=0;

return TRUE;

}

init_plc();

num=number;

if((num/16)>=10)

uSend[6]=(unsigned char)(num/16+0x41-10);

else

uSend[6]=(unsigned char)(num/16+0x30);

if((num%16)>=10)

uSend[7]=(unsigned char)((num%16)+0x41-10);

else

uSend[7]=(unsigned char)((num%16)+0x30);

uAddress=uAddress/8+0x100;

uTmp=uAddress & 0x000f;

uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>4) & 0x000f;

uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>8) & 0x000f;

uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uAddress>>12)&0x000f;

uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uSum=0;

for(i=1;i<9;i++)

uSum=uSum+(unsigned char)uSend[i];

uTmp=uSum&0x000f;

uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

uTmp=(uSum>>4)&0x000f;

uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

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

{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{ if((inportb(STATS_PORT)&0x20)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

/*enable();*/

return(FALSE);

}

outportb(DATA_PORT,uSend[i]);

}

disable();

for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)

{ if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[0]=inportb(DATA_PORT);

if(uReceive[0]!=2)

{

enable();

return(FALSE);

}

for(i=1;i<number*2+4;i++)

{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)

{ if((inportb(STATS_PORT)&1)!=0)

break;

}

if(lTmp>=DELAY_TIMES)

{

enable();

return(FALSE);

}

uReceive[i]=inportb(DATA_PORT);

}

enable();

uSum=0;

for(i=1;i<number*2+2;i++)

uSum=uSum+(unsigned int)uReceive[i];

uTmp=uSum&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*2+3]) return(FALSE);

uTmp=(uSum>>4)&0xf;

uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

if((unsigned char)uTmp!=uReceive[number*2+2]) return(FALSE);

for(j=0;j<number;j++)

{ for(i=j*2+1;i<j*2+3;i++)

uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;

uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];

}

return TRUE;

}

.h FILE:

void init_plc(void);

int check_plc(void);

int _read_data_register(unsigned int uAddress,unsigned int number);

int _read_mdata_register(unsigned int uAddress,unsigned int number);

int _write_data_register(unsigned int uAddress,unsigned int number);

int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);

int read_data_register(unsigned int uAddress,unsigned int number);

int read_mdata_register(unsigned int uAddress,unsigned int number);

int write data register(unsigned int uAddress,unsigned int number);

int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);

int _read_m_register(unsigned int uAddress,unsigned int number);

int read_m_register(unsigned int uAddress,unsigned int number);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。