loveplc 2008-12-11 23:51:00 | 显示全部楼层 | 阅读模式
抖音粉丝群1
『7x24小时有问必答』

AI浪潮下的计算机行业——从业者现状与未来展望

fxnew.h

#define DELAY_TIMES 30000L

#define TRUE 1
#define FALSE 0

#define TRUE 1
#define FALSE 0

#define FORCE_ON 0x37
#define FORCE_OFF 0x38

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);

int TESTING=0;

unsigned int uRead_value[25];
unsigned int uWrite_value[25];

unsigned int COMM_PORT=1;
unsigned int STATS_PORT=0x2fd;
unsigned int DATA_PORT=0x2f8;

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=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;
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);
}
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=inportb(DATA_PORT);
}
enable();
uSum=0;
for(i=1;i<number*4+2;i++)
uSum=uSum+(unsigned int)uReceive;
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=(uReceive>0x39)?uReceive-0x41+0xa:uReceive-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=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;
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);
}
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=inportb(DATA_PORT);
}
enable();
uSum=0;
for(i=1;i<number*4+2;i++)
uSum=uSum+(unsigned int)uReceive;
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=(uReceive>0x39)?uReceive-0x41+0xa:uReceive-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&0x000f;
uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value>>4)&0x000f;
uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value>>8)&0x000f;
uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
uTmp=(uWrite_value>>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;
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);
}
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;
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);
}
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=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;
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);
}
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=inportb(DATA_PORT);
}
enable();

uSum=0;
for(i=1;i<number*2+2;i++)
uSum=uSum+(unsigned int)uReceive;
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=(uReceive>0x39)?uReceive-0x41+0xa:uReceive-0x30;
uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];
}
return TRUE;
}

主题回复
倒序浏览

2974查看7回复

LZH2008 2008-12-12 16:27:00
不明
xianqiquan 2009-1-10 21:13:00

看不明白

bkkman 2009-5-9 19:26:00
对程序结构和数据结构作一些简略说明,就更好了.
chenwei040417 2009-6-18 14:26:00
看不懂
lsccls 2009-7-21 10:41:00
谢谢,楼主的无私奉献!这种贴我喜欢~!~顶
lsccls 2009-7-21 10:42:00
当然,我也顺带赚点钱了~!~
cqtzj 2010-1-23 13:10:00
学习了,谢谢
发新帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码