📄 101.cpp
字号:
pdo(0x10,2);
if(((flag&0x20)==0)&&((flag&0xc0)==0xc0)) pdo(0xab,0);
else pdo(0x8b,0);
pdo(dlmyadd,1);
pdo(sum,2);
pdo(0x16,2);
}//void C101::send_ls()
void C101::send_pack()
{
int i;
if( (port_free(nportno))&&(oque.count>0) )
{
int temp;
if(oque.count>12)temp=12;
else temp=oque.count;
for(i=0;i<temp;i++)
{
if(i==(temp-1))quick_send=TRUE;
comput(oque.buf[oque.start],nportno);
disptbuf(oque.buf[oque.start],nportno);
//if((oque.buf[oque.start]==0x04)||(oque.buf[oque.start]==0x25))
oque.start++;
if(oque.start>=oque.size)oque.start=0;
oque.count--;
}
}
}//void
void C101::dropdata() //for application layer
{
if(ique.count>0)
{
ique.start++;
if(ique.start>=ique.size)ique.start=0;
ique.count--;
}//if(ique.count>0)
}//void C101()
void C101::pdo(unsigned int data,int con)
{
if(con==0)
sum=data&0xff;
else if(con==1)
sum+=(data&0xff);
oque.buf[oque.next++]=data&0xff;
if(oque.next>=oque.size)
oque.next=0;
oque.count++;
if(oque.count>oque.size)
{
oque.count=oque.size;
oque.start++;
if(oque.start>=oque.size)
oque.start=0;
}//if(oque.count>oque.size)
}//void C1dir
void C101::report_count()
{
}
void C101::clear_oque()
{
oqp=0;//clear group send;
oque.start=0;
oque.next=0;
oque.count=0;
oque.size=512;
}//void C101::f()
void C101::clear_ique()
{
ique.start=0;
ique.next=0;
ique.count=0;
ique.size=128;
}//void C101::
void C101::getcmd()
{
int i;
unsigned int result;
while(get_in(nportno))
{
putdi(getchin[nportno]&0xff);
disprbuf(getchin[nportno]&0xff,nportno);
}
while(ique.count<5)
return;
while( (ique.count>=5)
&&(
(ique.buf[qmod(ique.start,ique.size)]!=0x68)
||(ique.buf[qmod(ique.start+1,ique.size)]!=ique.buf[qmod(ique.start+2,ique.size)])
||(ique.buf[qmod(ique.start+3,ique.size)]!=0x68)
||((ique.buf[qmod(ique.start+5,ique.size)]!=dlmyadd)&&(ique.buf[qmod(ique.start+5,ique.size)]!=0xff))
)
&&
(
(ique.buf[qmod(ique.start,ique.size)]!=0x10)
||((ique.buf[qmod(ique.start+1,ique.size)]&0x40)!=0x40)
||(ique.buf[qmod(ique.start+4,ique.size)]!=0x16)
||((ique.buf[qmod(ique.start+2,ique.size)]!=dlmyadd)
&&(ique.buf[qmod(ique.start+5,ique.size)]!=0xff))
)//&&
) dropdata();
if(ique.count<5)return;
if(ique.buf[qmod(ique.start,ique.size)]==0x10)
{
result=ique.buf[qmod(ique.start+1,ique.size)]+ique.buf[qmod(ique.start+2,ique.size)];
result&=0xff;
if(ique.buf[qmod(ique.start+3,ique.size)]==result)
{
clear_oque();
deal_inf(0x10);
}
clear_ique();
}//above is definited long frame.
else//below is variable long frame.
{
unsigned int len=ique.buf[qmod(ique.start+1,ique.size)]&0xff;
if(ique.count<(len+6))
return;
for(i=0,result=0;i<len;i++)
result+=ique.buf[qmod(ique.start+4+i,ique.size)];
result&=0xff;
if((ique.buf[qmod(ique.start+len+5,ique.size)]==0x16)
&&(ique.buf[qmod(ique.start+len+4,ique.size)]==result))
{
clear_oque();
deal_inf(0x68);
}
clear_ique();
}//above is variable long frame.
}//int C101::dl_getcmd()
void C101::put_oth()
{
int i;
if(oqp==0)return;
if(oque.count<255)send_group(oqp++,20);
if(oqp==17)
{
oqp=0;
send_over_call();
}
else if (oqp>17)initial(nportno);
}//void C101::
void C101::send_over_call()
{
putheado(9);
pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(100,1);//biaozhi
pdo(1,1);//num
pdo(10,1);
pdo(dlmyadd,1);
pdo(0,1);//addl
pdo(0,1);//add h
pdo(20,1);
pdo(sum,2);
pdo(0x16,2);
}//void C101::
void C101::send_group(unsigned int num,unsigned int course)
{
int yxg,ycg,modx,modc,i;
unsigned int test,temp;
int temp1;
yxg=datasource.total_yx/127;
modx=datasource.total_yx-yxg*127;
ycg=(datasource.total_yc+2)/120;
modc=(datasource.total_yc+2)-ycg*120;
if(soe_ctl[nportno].count!=0)acd=0x20;
else acd=0;
switch(num)
{
case 1:
if(yxg>=1)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0+1,1);
pdo(0,1);
for(i=0;i<127;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<240;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if(modx>0)
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0+1,1);
pdo(0,1);
for(i=0;i<modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 2:
if(yxg>=2)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(127+1,1);
pdo(0,1);
for(i=127;i<254;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=2)
else if((yxg==1)&&(modx>0))//ycg==1
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(127+1,1);
pdo(0,1);
for(i=127;i<127+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 3:
if(yxg>=3)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0xfe+1,1);
pdo(0,1);//0x0fe=254
for(i=254;i<381;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==2)&&(modx>0))//yxg==2
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0xfe+1,1);//0xfe=254
pdo(0,1);
for(i=254;i<254+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 4:
if(yxg>=4)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x7d+1,1);//0x17d=381
pdo(1,1);
for(i=381;i<508;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==3)&&(modx>0))
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x7d+1,1);//0x17d=381
pdo(1,1);
for(i=381;i<381+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 5:
if(yxg>=5)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0xfc+1,1);//0x1fc=508
pdo(1,1);
for(i=508;i<635;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==4)&&(modx>0))
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x1fc+1,1);//0x1fc=508
pdo(1,1);
for(i=508;i<508+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 6:
if(yxg>=6)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x7b+1,1);//0x27b=635
pdo(2,1);
for(i=635;i<762;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==5)&&(modx>0))
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x7b+1,1);//0x27b=635
pdo(2,1);
for(i=635;i<635+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 7:
if(yxg>=7)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0xfa+1,1);//0x2fa=762
pdo(2,1);
for(i=762;i<889;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==6)&&(modx>0))
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0xfa+1,1);//0x2fa=635
pdo(2,1);
for(i=762;i<762+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
}
else if(course!=20)
send_no_data(acd);
break;
case 8:
if(yxg==8)
{
putheado(135);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(127|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x79+1,1);//0x379=889
pdo(3,1);
for(i=889;i<1016;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=240;i<480;i++)
pdo(sum,2);
pdo(0x16,2);
}//if(yxg>=1)
else if((yxg==7)&&(modx>0))
{
putheado(modx+8);
if(course!=20)pdo(0x80|acd,0);
else pdo(0x80,0);
pdo(dlmyadd,1);//address
pdo(1,1);
pdo(modx|0x80,1);
pdo(course,1);
pdo(dlmyadd,1);//address
pdo(0x79+1,1);//0x379=889
pdo(3,1);
for(i=889;i<889+modx;i++)
{
test=i-(i/16)*16;
test=(((unsigned int)1)<<test);
if((yx_info.yx_value[i/16])&test) pdo(1,1);
else pdo(0,1);
}//for(i=0;i<modxf;i++)
pdo(sum,2);
pdo(0x16,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -