三菱PLC编程口通信C语言源代码三菱plc.docx
- 文档编号:25877969
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:20
- 大小:15.70KB
三菱PLC编程口通信C语言源代码三菱plc.docx
《三菱PLC编程口通信C语言源代码三菱plc.docx》由会员分享,可在线阅读,更多相关《三菱PLC编程口通信C语言源代码三菱plc.docx(20页珍藏版)》请在冰豆网上搜索。
三菱PLC编程口通信C语言源代码三菱plc
三菱PLC编程口通信C语言源代码-三菱plc
fxnew.h
#defineDELAY_TIMES30000L
#defineTRUE1
#defineFALSE0
#defineTRUE1
#defineFALSE0
#defineFORCE_ON0x37
#defineFORCE_OFF0x38
voidinit_plc(void);
intcheck_plc(void);
int_read_data_register(unsignedintuAddress,unsignedintnumber);
int_read_mdata_register(unsignedintuAddress,unsignedintnumber);
int_write_data_register(unsignedintuAddress,unsignedintnumber);
int_force_m_contact(unsignedintuAddress,unsignedcharucOn_off);
intread_data_register(unsignedintuAddress,unsignedintnumber);
intread_mdata_register(unsignedintuAddress,unsignedintnumber);
intwrite_data_register(unsignedintuAddress,unsignedintnumber);
intforce_m_contact(unsignedintuAddress,unsignedcharucOn_off);
int_read_m_register(unsignedintuAddress,unsignedintnumber);
intread_m_register(unsignedintuAddress,unsignedintnumber);
intTESTING=0;
unsignedintuRead_value[25];
unsignedintuWrite_value[25];
unsignedintCOMM_PORT=1;
unsignedintSTATS_PORT=0x2fd;
unsignedintDATA_PORT=0x2f8;
voidinit_plc(void)
{_AX=0xfa;
_DX=COMM_PORT;
geninterrupt(0x14);
while((inportb(STATS_PORT)1)!
=0)inportb(DATA_PORT);
}
intcheck_plc(void)
{longlTmp;
if(TESTING==1)returnTRUE;
init_plc();
for(lTmp=0L;lTmpDELAY_TIMES;lTmp++)
{if((inportb(STATS_PORT)0x20)!
=0)
break;
}
if(lTmp=DELAY_TIMES)
return(FALSE);
outportb(DATA_PORT,5);
disable();
for(lTmp=0L;lTmpDELAY_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);
}
}
intread_data_register(unsignedintuAddress,unsignedintnumber)
{inti;
for(i=0;i3;i++)
if(_read_data_register(uAddress,number)==TRUE)
returnTRUE;
returnFALSE;
}
int_read_data_register(unsignedintuAddress,unsignedintnumber)
{unsignedcharuSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
unsignedcharuReceive[104];
unsignedintuTmp;
unsignedintuSum;
unsignedintnum;
longlTmp;
inti,j;
if(TESTING==1)
{for(i=0;inumber;i++)uRead_value[i]=0;
returnTRUE;
}
init_plc();
num=number*2;
if((num/16)=10)
uSend[6]=(unsignedchar)(num/16+0x41-10);
else
uSend[6]=(unsignedchar)(num/16+0x30);
if((num%16)=10)
uSend[7]=(unsignedchar)((num%16)+0x41-10);
else
uSend[7]=(unsignedchar)((num%16)+0x30);
uAddress=uAddress*2+0x1000;
uTmp=uAddress0x000f;
uSend[5]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress4)0x000f;
uSend[4]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress8)0x000f;
uSend[3]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress12)0x000f;
uSend[2]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uSum=0;
for(i=1;i9;i++)
uSum=uSum+(unsignedchar)uSend[i];
uTmp=uSum0x000f;
uSend[10]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uSum4)0x000f;
uSend[9]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
for(i=0;i11;i++)
{for(lTmp=0L;lTmpDELAY_TIMES;lTmp++)
{if((inportb(STATS_PORT)0x20)!
=0)
break;
}
if(lTmp=DELAY_TIMES)
{
return(FALSE);
}
outportb(DATA_PORT,uSend[i]);
}
disable();
for(lTmp=0;lTmpDELAY_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;inumber*4+4;i++)
{for(lTmp=0L;lTmpDELAY_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;inumber*4+2;i++)
uSum=uSum+(unsignedint)uReceive[i];
uTmp=uSum0xf;
uTmp=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
if((unsignedchar)uTmp!
=uReceive[number*4+3])return(FALSE);
uTmp=(uSum4)0xf;
uTmp=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
if((unsignedchar)uTmp!
=uReceive[number*4+2])return(FALSE);
for(j=0;jnumber;j++)
{for(i=j*4+1;ij*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];
}
returnTRUE;
}
intread_mdata_register(unsignedintuAddress,unsignedintnumber)
{inti;
for(i=0;i3;i++)
if(_read_mdata_register(uAddress,number)==TRUE)
returnTRUE;
returnFALSE;
}
int_read_mdata_register(unsignedintuAddress,unsignedintnumber)
{unsignedcharuSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
unsignedcharuReceive[104];
unsignedintuTmp;
unsignedintuSum;
unsignedintnum;
longlTmp;
inti,j;
if(TESTING==1)
{for(i=0;inumber;i++)uRead_value[i]=0;
returnTRUE;
}
init_plc();
num=number*2;
if((num/16)=10)
uSend[6]=(unsignedchar)(num/16+0x41-10);
else
uSend[6]=(unsignedchar)(num/16+0x30);
if((num%16)=10)
uSend[7]=(unsignedchar)((num%16)+0x41-10);
else
uSend[7]=(unsignedchar)((num%16)+0x30);
/*uAddress=uAddress*2+0x1000;*/
uTmp=uAddress0x000f;
uSend[5]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress4)0x000f;
uSend[4]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress8)0x000f;
uSend[3]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress12)0x000f;
uSend[2]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uSum=0;
for(i=1;i9;i++)
uSum=uSum+(unsignedchar)uSend[i];
uTmp=uSum0x000f;
uSend[10]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uSum4)0x000f;
uSend[9]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
for(i=0;i11;i++)
{for(lTmp=0L;lTmpDELAY_TIMES;lTmp++)
{if((inportb(STATS_PORT)0x20)!
=0)
break;
}
if(lTmp=DELAY_TIMES)
{
return(FALSE);
}
outportb(DATA_PORT,uSend[i]);
}
disable();
for(lTmp=0;lTmpDELAY_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;inumber*4+4;i++)
{for(lTmp=0L;lTmpDELAY_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;inumber*4+2;i++)
uSum=uSum+(unsignedint)uReceive[i];
uTmp=uSum0xf;
uTmp=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
if((unsignedchar)uTmp!
=uReceive[number*4+3])return(FALSE);
uTmp=(uSum4)0xf;
uTmp=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
if((unsignedchar)uTmp!
=uReceive[number*4+2])return(FALSE);
for(j=0;jnumber;j++)
{for(i=j*4+1;ij*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];
}
returnTRUE;
}
intwrite_data_register(unsignedintuAddress,unsignedintnumber)
{inti;
for(i=0;i3;i++)
if(_write_data_register(uAddress,number)==TRUE)
returnTRUE;
returnFALSE;
}
int_write_data_register(unsignedintuAddress,unsignedintnumber)
{unsignedcharuSend[111];
unsignedintuTmp,uSum,num;
longlTmp;
inti;
if(TESTING==1)returnTRUE;
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;
elseuSend[6]=num+0x30;
num=(number*2)%16;
if(num=10)uSend[7]=num+0x41-10;
elseuSend[7]=num+0x30;
uAddress=0x1000+2*uAddress;
uTmp=uAddress0x000f;
uSend[5]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress4)0x000f;
uSend[4]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress8)0x000f;
uSend[3]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress12)0x000f;
uSend[2]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
for(i=0;inumber;i++)
{
uTmp=uWrite_value[i]0x000f;
uSend[i*4+9]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]4)0x000f;
uSend[i*4+8]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]8)0x000f;
uSend[i*4+11]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uWrite_value[i]12)0x000f;
uSend[i*4+10]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
}
uSum=0;
for(i=1;i9+number*4;i++)
uSum+=uSend[i];
uTmp=uSum0x000f;
uSend[number*4+10]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uSum4)0x000f;
uSend[number*4+9]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
for(i=0;i11+number*4;i++)
{for(lTmp=0L;lTmpDELAY_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;lTmpDELAY_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);
}
}
intforce_m_contact(unsigneduAddress,unsignedcharucOn_off)
{inti;
for(i=0;i3;i++)
if(_force_m_contact(uAddress,ucOn_off)==TRUE)
returnTRUE;
returnFALSE;
}
int_force_m_contact(unsigneduAddress,unsignedcharucOn_off)
{unsigneduSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};
unsigneduTmp,uSum,i;
longlTmp;
if(TESTING==1)returnTRUE;
init_plc();
uAddress=uAddress+0x800;
uSend[1]=ucOn_off;
uTmp=uAddress0x000f;
uSend[3]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress4)0x000f;
uSend[2]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress8)0x000f;
uSend[5]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uAddress12)0x000f;
uSend[4]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uSum=0;
for(i=1;i7;i++)
uSum+=uSend[i];
uTmp=uSum0x000f;
uSend[8]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
uTmp=(uSum4)0x000f;
uSend[7]=(uTmp10)?
(uTmp+0x30):
(uTmp+0x41-0xa);
for(i=0;i9;i++)
{for(lTmp=0L;lTmpDELAY_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;lTmpDELAY_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);
}
}
intread_m_register(unsignedintuAddress,unsignedintnumber)
{i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三菱 PLC 编程 通信 语言 源代码