КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Приложение. uses CRT,Graph,var_u,kadrOLT,kadrONT;⇐ ПредыдущаяСтр 15 из 15 Program Graf; uses CRT,Graph,var_u,kadrOLT,kadrONT; procedure oshibka; begin for io:=1 to 2*d do begin jo:=random(abs(jj-2)); if jo=0 then jo:=1; oshibka2:=random(n-1); {номер байта} if oshibka2=22 then oshibka2:=oshibka2-1; oshibka1:=random(7); {номер бита} seek(f,(jo-1)*n+oshibka2); blockread (f,h,1,result); m:=ioresult; h.mean:=h.mean xor trunc(exp(oshibka1*ln(2))); seek(f,(jo-1)*n+oshibka2); blockwrite(f,h,1,result); m:=ioresult; end; end; {--------------------------} procedure decod2(ao:byte); begin xo:=0; for ko:=0 to 7 do if ao>=int(exp((7-ko)*ln(2))) then begin xoo:=xoo+1; ao:=ao-trunc(exp((7-ko)*ln(2))); end; end; {----------------------------} procedure inicial; begin assign(f,'d:\am\kol_onu'); reset(f,sizeof(x1)); blockread(f,x1,1,result); m:=ioresult; close(f); if x1<>0 then begin assign(f,'d:\am\kol_cont'); reset(f,sizeof(x1)); blockread(f,x1,1,result); m:=ioresult; close(f); end; CONT:=x1; ATM:=0; ploamu1:=2; r1:=1; kadr_n; end; {------------------------------------------------------} procedure otvet; begin assign(f,'d:\am\kadr-n'); reset(f,sizeof(h)); ONU_ID:=zs[i15].id; SN:=ys[i15]; seek(f,8); {широковещат} blockread (f,h,1,result); m:=ioresult; if h.mean=255 then begin seek(f,9); blockread (f,h,1,result); m:=ioresult; case h.mean of 1: if ONU_ID=255 then begin seek(f,10); blockread (f,h,1,result); m:=ioresult; zaschita:=h.mean; seek(f,11); blockread (f,h,1,result); m:=ioresult; pream1:=h.mean; seek(f,12); blockread (f,h,1,result); m:=ioresult; pream2:=h.mean; seek(f,13); blockread (f,h,1,result); m:=ioresult; pream3:=h.mean; for i:=1 to 3 do begin seek(f,13+i); blockread (f,h,1,result); m:=ioresult; razdel[i]:=h.mean; end; seek(f,22); blockread (f,h,1,result); m:=ioresult; CONT1:=h.mean*16; seek(f,23); blockread (f,h,1,result); m:=ioresult; CONT1:=CONT1+trunc((h.mean and 240)/16); end; end; end; close(f); kadr_v;
assign(f,'d:\am\kadr-v'); reset(f,sizeof(h)); seek(f,12); blockread (f,h,1,result); m:=ioresult; if h.mean=255 then begin seek(f,13); blockread (f,h,1,result); m:=ioresult; if h.mean=1 then begin seek(f,20); blockread (f,h,1,result); m:=ioresult; seek(f,21); blockread (f,h,1,result); m:=ioresult; SN:=h.mean; close(f); assign(f,'d:\am\kol_onu'); reset(f,sizeof(x1)); blockread(f,x1,1,result); m:=ioresult; seek(f,0); x1:=x1+1; ONU_ID:=x1; blockwrite(f,x1,1,result); m:=ioresult; close(f); assign(f,'d:\am\kol_cont'); reset(f,sizeof(x1)); blockread(f,x1,1,result); m:=ioresult; seek(f,0); x1:=x1+1; CONT:=x1; blockwrite(f,x1,1,result); m:=ioresult; close(f); end; end; r1:=2; kadr_n; assign(f,'d:\am\kadr-n'); reset(f,sizeof(h)); seek(f,10); blockread (f,h,1,result); m:=ioresult; zs[i15].ID:=h.mean; for r:=1 to CONT do begin seek(f,33+8*(r-1));
blockread (f,h,1,result); m:=ioresult; x1:=h.mean; seek(f,34+8*(r-1)); blockread (f,h,1,result); m:=ioresult; zs1[r]:=x1*256+h.mean; seek(f,35+8*(r-1)); blockread (f,h,1,result); m:=ioresult; x1:=h.mean; seek(f,36+8*(r-1)); blockread (f,h,1,result); m:=ioresult; zs2[r]:=x1*256+h.mean; end; r2:=1; for r:=1 to s0 do if zs[r].id=255 then continue else begin zs[r].start:=zs1[r2]; zs[r].stop:=zs2[r2]; r2:=r2+1; if r2>cont then break; end; end; {------------------------------------------------------} procedure Setka; begin setbkcolor(15); cleardevice; setcolor(1); SetLineStyle(SolidLn,0,ThickWidth); Rectangle(Round((GetMaxX*0.5+GetMaxY*0.5-70)*yasp/xasp),round(GetMaxY/2- 40), Round((GetMaxX*0.5+GetMaxY*0.5-30)*yasp/xasp),round(GetMaxY/2+40)); line(Round((GetMaxX*0.5+GetMaxY*0.5-70)*yasp/xasp),round(GetMaxY/2), Round((GetMaxX*0.5-40)*yasp/xasp),round(GetMaxY/2)); settextstyle(0,0,2); settextjustify(centertext,centertext); outtextxy(Round((GetMaxX*0.5+GetMaxY*0.5-50)*yasp/xasp), round(GetMaxY/2),'OLT'); settextstyle(0,0,1); SetLineStyle(SolidLn,0,NormWidth); for i1:=1 to s0 do line(zs[i1].ex,zs[i1].ey,Round((GetMaxX*0.5- 50)*yasp/xasp),round(GetMaxY/2)); SetFillStyle(1,15); Bar(Round((GetMaxX*0.5-60)*yasp/xasp),round(GetMaxY/2-5), Round((GetMaxX*0.5-40)*yasp/xasp),round(GetMaxY/2+5)); SetLineStyle(SolidLn,0,ThickWidth); Rectangle(Round((GetMaxX*0.5-60)*yasp/xasp),round(GetMaxY/2-5), Round((GetMaxX*0.5-40)*yasp/xasp),round(GetMaxY/2+5)); str(s0,w1); textw:=textwidth('ONU'+w1); for i1:=1 to s0 do begin SetFillStyle(1,15); Bar(zs[i1].ex-round(textw/2)-4,zs[i1].ey-10,zs[i1].ex+round(textw/2)+4, zs[i1].ey+10); SetColor(zs[i1].col); Rectangle(zs[i1].ex-round(textw/2)-4,zs[i1].ey-10,zs[i1].ex+round(textw/2)+4, zs[i1].ey+10); end; setcolor(1); settextjustify(centertext,centertext); for i1:=1 to s0 do begin str(i1,w1); outtextxy(zs[i1].ex,zs[i1].ey,'ONU'+w1); end;
end; {-----------------------------------} procedure generator; begin setka; setcolor(s5); settextjustify(centertext,centertext); str(ys[i15],w1); if sv1=1 then begin w1:='данный ONU уже идентифицирован'; sv1:=0; end; outtextxy(4+round(textwidth(w1)/2),getmaxy-30,w1); str(i15,w1); w3:='серийный номер ONU '+w1; outtextxy(4+round(textwidth(w3)/2),getmaxy-50,w3); if zs[i15].id<>255 then begin str(zs[i15].id,w1); w3:='ONU_ID '+w1; outtextxy(4+round(textwidth(w3)/2),getmaxy-70,w3); str(zs[i15].stop,w1);
w3:='SSTOP '+w1; outtextxy(4+round(textwidth(w3)/2),getmaxy-85,w3); str(zs[i15].start,w1); w3:='SSTART '+w1; outtextxy(4+round(textwidth(w3)/2),getmaxy-100,w3); end; zs[i15].col:=z3; end; {-----------------------------------} procedure vibor; begin i15:=1; k:=0; z3:=zs[i15].col; zs[i15].col:=s3; generator; repeat if keypressed then begin ch:=readkey; if ch=#0 then begin ch:=readkey; case ord(ch) of 72:begin {if y[i15]=2 then begin k:=i15; for j:=1 to s0 do x[j,i15]:=0; end;} if i15=s0 then i15:=1 else i15:=i15+1; z3:=zs[i15].col; zs[i15].col:=s3; generator; end; 80: begin {if y[i15]=2 then begin k:=i15; for j:=1 to s0 do x[j,i15]:=0; end;} if i15=1 then i15:=s0 else i15:=i15-1; z3:=zs[i15].col; zs[i15].col:=s3; generator; end; end; end else begin if ch=#9 then if zs[i15].sv=0 then begin inicial; otvet; zs[i15].sv:=1; end else begin sv1:=1; zs[i15].col:=s3; generator; end;
z[i15].col:=s3; case y[i15] of 0: if k=0 then y[i15]:=2 else y[i15]:=4; 2: begin if i15=k then begin k:=0; for j:=1 to s0 do x[j,i15]:=x2[j,i15]; end; y[i15]:=4; end; 4: y[i15]:=11; 11: y[i15]:=0; end; generator; end;} if ch=#13 then begin zs[i15].col:=z3; break; end; if ch=#27 then halt; end; end; until(1=2); end; {-----------------------------------} begin textbackground(1); textcolor(14); clrscr; jj:=1; writeln('введите кол-во ONU'); readln(s0); writeln('введите серийные номера ONU'); for i15:=1 to s0 do begin readln(ys[i15]); zs[i15].id:=255; end; assign(f,'d:\am\kol_onu'); rewrite(f,sizeof(x1)); x1:=0; blockwrite(f,x1,1,result); m:=ioresult; close(f); assign(f,'d:\am\kol_cont'); rewrite(f,sizeof(x1)); x1:=0; blockwrite(f,x1,1,result); m:=ioresult; close(f); assign(f,'d:\am\oltO_ID'); rewrite(f,sizeof(h1)); h1.kcont:=0; h1.snum:=0; h1.onu:=0; blockwrite(f,h1,1,result); m:=ioresult; close(f); assign(f,'d:\am\kadr-n'); rewrite(f,sizeof(h)); close(f); assign(f,'d:\am\kadr-v'); rewrite(f,sizeof(h)); close(f); {inicial;} repeat
Gd:=9; gm:=1; pgd:='d:\BP\BGI'; InitGraph(Gd,Gm,pgd); str(s0,w1); rd:=textwidth(w1)-6*(s00-1); getaspectratio(xasp,yasp); for i15:=1 to s0 do begin zs[i15].ex:=Round(GetMaxX*0.5+((GetMaxY*0.5-25)*cos(pi/2+pi*(i15-1)/(s0-1)))*yasp/xasp); zs[i15].ey:=Round(GetMaxY*0.5-(GetMaxY*0.5-25)*sin(pi/2+pi*(i15-1)/(s0-1))); zs[i15].ox:=Round(GetMaxX*0.5+((GetMaxY*0.5-25+rd+14)*cos(pi/2+pi*(i15-1)/(s0-1)))*yasp/xasp); zs[i15].oy:=Round(GetMaxY*0.5-(GetMaxY*0.5-25+rd+6)*sin(pi/2+pi*(i15-1)/(s0-1))); end; p4:=0; for j:=1 to s0 do zs[j].col:=s5; setka; vibor; restorecrtmode; textbackground(1); textcolor(14); clrscr; po1:=0.00001; po2:=0.005; d:=1; po:=po1; jj:=round(d/(4*n*po))+1; s11:=0; r5:=0; yo:=0; xoo:=0; for eo:=1 to 5 do begin
r1:=1; kadr_n;
assign(f,'d:\am\kadr-n'); reset(f,sizeof(h)); Oshibka; seek(f,0); repeat blockread (f,h,1,result); m:=ioresult; if h.name=22 then begin ao:=s11 XOR h.mean; decod2(ao); yo:=yo+xoo; s11:=0; end else s11:=s11 XOR h.mean; until(eof(f)); {---------------------------------------------------------------------} writeln('{--------------------------------------}'); writeln('вероятность ошибки ',po); writeln('общее число обнаруженных ошибок ',yo); writeln('общее число внесенных ошибок ',2*d); textcolor(15); writeln('{--------------------------------------}'); writeln(' Enter - продолжение; Esc - выход '); writeln('{--------------------------------------}'); xo1[r5]:=po; yo1[r5]:=100*yo/(2*d); po:=po+(po2-po1)/(5-1); d:=round(4*n*jj*po); r5:=r5+1; repeat ch:=readkey; if ch=#27 then halt; until(ch=#13); end;
m1:=5; fmax:=100; mn2:=1; mn1:=0; Kn:=300/fmax; dx:=xo1[1]-xo1[0]; { Вычисление производных } for i:=1 to m1-3 do begin df0:=yo1[i-1]-yo1[i]; df1:=yo1[i+1]-yo1[i]; df2:=yo1[i+2]-yo1[i]; kf1[i]:=(6*df1-df2-2*df0)/(6*dx); kf2[i]:=(df1+df0)/(2*Sqr(dx)); kf3[i]:=(df2-3*df1-df0)/(6*Sqr(dx)*dx); end; kf1[0]:=kf1[1]-2*kf2[1]*dx+3*kf3[1]*Sqr(dx); kf1[m1-2]:=kf1[m1-3]+2*kf2[m1-3]*dx+3*kf3[m1-3]*Sqr(dx); kf1[m1-1]:=kf1[m1-3]+4*kf2[m1-3]*dx+12*kf3[m1-3]*Sqr(dx);
for i:=0 to m1-2 do begin v0[i]:=yo1[i]; v1[i]:=kf1[i]; v2[i]:=(3*(yo1[i+1]-yo1[i])-(kf1[i+1]+2*kf1[i])*dx)/Sqr(dx); v3[i]:=(kf1[i+1]-v1[i]-2*v2[i]*dx)/(3*Sqr(dx)); end; xo:=po1; l:=0; deltaX:=(xo1[1]-xo1[0])/no; for i:=0 to m1-2 do begin for k:=0 to no-1 do begin fm[l]:=v0[i]+v1[i]*(xo-xo1[i])+v2[i]*Sqr(xo-xo1[i])+v3[i]*(xo-xo1[i])* Sqr(xo-xo1[i]); xo:=xo+deltax; l:=l+1; end; end; GD := Detect; InitGraph(GD, GM, 'd:\bp\bgi'); if GraphResult <> grOk then Halt(1); setbkcolor(15); setcolor(1); setlinestyle(0,0,3); for i:=0 to 10 do begin Line(80,90+i*30,560,90+i*30); end; for i:=0 to m1-1 do begin Line(80+i*120,90,80+i*120,390); end; OutTextXY(85,75,'K ,%'); OutTextXY(93,80,'osh'); for i:=1 to 10 do begin Str(i*10,v); OutTextXY(50,390-i*30,v); end; OutTextXY(75,400,'1'); for i:=1 to m1-1 do begin Str(trunc(xo1[i]/xo1[0]),v); OutTextXY(75+i*120,400,v); end; repeat if round(xo1[0]*mn2)<1 then begin mn2:=mn2*10; mn1:=mn1+1; end else break; until(1=2); str(trunc(mn2*xo1[0]),v); str(mn1,vv); v:='1'; OutTextXY(90+(m1-1)*120,385,'p*1-E'+vv); SetColor(1); mashtabx:=120*(m1-1)/(l-1);
for i:=0 to l-2 do begin yp:=Round(fm[i]*Kn); yn:=Round(fm[i+1]*Kn); Line(round(80+i*mashtabx),390-yp,round(80+(i+1)*mashtabx),390-yn); end; readln; halt; CloseGraph; until(1=2); end. ----------------------------------------------------------------------------- unit var_u; {$N+} interface uses CRT,DOS; type signal = record num_tc:longint; num:word; name:byte; mean:byte; end; signal1 = record snum:integer; onu:byte; kcont:integer; end; elips=record ex:integer; ey:integer; ox:integer; oy:integer; col:byte; sv:byte; ID:byte; start:integer; stop:integer;
end;const n=19440; {кол. байт в нисходящем/восходящем кадре} s7=3;{число сплитеров} s00=1;{количество цифр в s0} s3=4;{цвет аварийных узлов} s4=0;{номер узла} s5=1;{цвет узлов с обрывом} s6=5; no=50; var fm:array[0..5*no] of real; x2:array[1..13] of byte; razdel:array[1..3] of byte; crc,rez:array[1..8] of byte; v0,v1,v2,v3,kf0,kf1,kf2,kf3,yo1,xo1:array[0..5] of real; result:word; io,oshibka2,oshibka1:word; f:file; h:signal; h1:signal1; mask,sp,s1,s2,s11,fl1,x,z,xoo,ko,ao:byte; po,po1,po2,kn,xo,dx,deltax,df0,df1,df2,df3,mashtabx:real; cht,textw,rd,p4,xasp,yasp:word; j,jo,d,yo,mn2:longint; m,r,r1,r2,r10,r11,r12,IND,zaschita,Pls,DBR,pream1,pream2,pream3, x1,Ploamu,Ploamu1,SN,ONU_ID,CONT,CONT1,A_ID,ATM,xb,xf:integer; ys,zs1,zs2:array[1..100] of integer; zs:array[1..100] of elips; s0,gd,gm,i,l,i1,r5,j1,yp,yn,k,i15,jj,eo,m1,fmax,mn1:integer; ch:char; pgd,w1,w2,w3,v,vv:string; z3,t,t1,sv1:byte; implementation
{-----------------------------------------------------------------------} end. unit kadrOLT; {$N+} interface uses CRT,DOS,var_u; procedure kadr_n; implementation const n=19440; {кол. байт в нисходящем/восходящем кадре} {-----------------------------------------------------------------------} procedure chtenie; begin case cht of 0: writeln('информация'); 1: writeln('заголовок 1 байт Psync B6 '); 2: writeln('заголовок 2 байт Psync AB '); 3: writeln('заголовок 3 байт Psync 31 ');
4: writeln('заголовок 4 байт Psync E0 '); 5: writeln('заголовок 1 байт Ident '); 6: writeln('заголовок 2 байт Ident '); 7: writeln('заголовок 3 байт Ident '); 8: writeln('заголовок 4 байт Ident '); 9: writeln('широковещательная передача '); 10: writeln('ID сообщения '); 11: writeln('число защитных блоков '); 12: writeln('число битов преамбулы 1 '); 13: writeln('число битов преамбулы 2 '); 14: writeln('биты преамбулы 3 '); 15: writeln('байт 1 разделителя '); 16: writeln('байт 2 разделителя '); 17: writeln('байт 3 разделителя '); 18: writeln('режим Up_Ov '); 19: writeln('задержка 1 для предв. выравнивания '); 20: writeln('задержка 2 для предв. выравнивания '); 21: writeln('CRC-8 заголовка '); 22: writeln('заголовок байт ПЧБ BIP-8 '); 23: writeln('заголовок 1 байт Plend1 кол-во T-CONT '); 24: writeln('заголовок 2 байт Plend1 кол-во T-CONT+сегмент ATM '); 25: writeln('заголовок 3 байт Plend1 сегмент ATM '); 26: writeln('заголовок 4 байт Plend1 CRC-8 '); 27: writeln('заголовок 1 байт Plend2 кол-во T-CONT '); 28: writeln('заголовок 2 байт Plend2 кол-во T-CONT+сегмент ATM '); 29: writeln('заголовок 3 байт Plend2 сегмент ATM '); 30: writeln('заголовок 4 байт Plend2 CRC-8 '); 31: writeln('заголовок 1 байт AllocID '); 32: writeln('заголовок 2 байт AllocID+Flag '); 33: writeln('заголовок 3 байт Flag '); 34: writeln('заголовок 1 байт Start '); 35: writeln('заголовок 2 байт Start '); 36: writeln('заголовок 1 байт Stop '); 37: writeln('заголовок 2 байт Stop '); 38: writeln('заголовок байт CRC-8 '); 39: writeln('преамбула типа1 '); 40: writeln('преамбула типа2 '); end; readln; halt; end; {-----------------------------------------------------------------------} procedure CRC_8; begin x2[13]:=0; x:=0; z:=0; for r10:=1 to 8 do begin CRC[r10]:=0; rez[r10]:=0; end; rez[1]:=1; rez[2]:=1; rez[3]:=1; for r12:=1 to 12 do begin for r11:=1 to 8 do begin x:=trunc((x2[r12] and trunc(exp((8-r11)*ln(2))))/trunc(exp((8-r11)*ln(2)))); z:=crc[8]; for r10:=0 to 6 do crc[8-r10]:=crc[7-r10]; crc[1]:=x; if z=1 then for r10:=1 to 8 do crc[r10]:=crc[r10] XOR rez[r10]; end; end; for r10:=1 to 8 do x2[13]:=x2[13]+crc[r10]*trunc(exp((r10-1)*ln(2))); end; {-----------------------------------------------------------------------} procedure Up_Ov; begin x2[1]:=255; x2[2]:=1; x2[3]:=8; x2[4]:=8; x2[5]:=8; x2[6]:=170; x2[7]:=133; x2[8]:=179; x2[9]:=0; x2[10]:=2; x2[11]:=0; x2[12]:=0; CRC_8;{результат процедуры CRC-8 в x2[13]} end; {--------------------------} procedure As_ONU_ID; begin x2[1]:=255; x2[2]:=3; x2[3]:=ONU_ID; x2[4]:=0; x2[5]:=0; x2[6]:=0; x2[7]:=0; x2[8]:=0; x2[9]:=SN and 65280; x2[10]:=SN and 255; x2[11]:=0; x2[12]:=0; CRC_8;{результат процедуры CRC-8 в x2[13]} end; {--------------------------} procedure As_All_ID; begin x2[1]:=ONU_ID; x2[2]:=10; x2[3]:=ONU_ID; x2[4]:=0; x2[5]:=1; x2[6]:=0; x2[7]:=0; x2[8]:=0; x2[9]:=0; x2[10]:=0; x2[11]:=0; x2[12]:=0; CRC_8;{результат процедуры CRC-8 в x2[13]} end; {--------------------------} {--------------------------} procedure kadr_n; begin assign(f,'d:\am\kadr-n'); r:=0; reset(f,sizeof(h)); s1:=0; sp:=0; for j:=1 to jj do begin for i:=1 to n do begin h.num_tc:=j; h.num:=i; h.mean:=random(255); case i of 1: begin h.name:=1{заголовок 1 байт Psync B6 }; h.mean:=182; end; 2: begin h.name:=2{заголовок 2 байт Psync AB};
h.mean:=171; end; 3: begin h.name:=3{заголовок 3 байт Psync 31}; h.mean:=49; end; 4: begin h.name:=4{заголовок 4 байт Psync E0}; h.mean:=224; end; 5: begin h.name:=5{заголовок 1 байт Ident}; h.mean:=64; end; 6: begin h.name:=6{заголовок 2 байт Ident}; h.mean:=0; end; 7: begin h.name:=7{заголовок 3 байт Ident}; h.mean:=0; end; 8: begin h.name:=8{заголовок 4 байт Ident}; h.mean:=0; end; 9: case r1 of 1: begin fl1:=1; {флаг включения Alloc_ID=254 и запрос SN } Up_Ov; for r2:=1 to 13 do begin h.name:=8+r2; {заголовок Ploam} h.num:=8+r2; h.mean:=x2[r2]; s1:=s1 XOR h.mean; blockwrite(f,h,1,result); m:=ioresult;
end; i:=h.num; sp:=1; end; 2: begin As_ONU_ID; for r2:=1 to 13 do begin h.name:=8+r2; {заголовок Ploam} h.num:=8+r2; h.mean:=x2[r2]; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 XOR h.mean; end; i:=h.num; sp:=1; end; end; 22: begin h.name:=22{заголовок байт ПЧБ BIP-8}; h.mean:=s1; s1:=0; blockwrite(f,h,1,result); m:=ioresult; sp:=1; end; 23: begin h.name:=23{заголовок 1 байт Plend1 кол-во T-CONT}; h.mean:=trunc(((fl1+CONT) and 4080)/16); for r2:=1 to 13 do x2[r2]:=0; x2[10]:=h.mean; end; 24: begin h.name:=24{заголовок 2 байт Plend1 кол-во T-CONT+сегмент ATM}; h.mean:=16*((fl1+CONT) and 15)+trunc((ATM and 3840)/256); x2[10]:=h.mean; end; 25: begin h.name:=25{заголовок 3 байт Plend1 сегмент ATM}; h.mean:=ATM and 255; x2[10]:=h.mean; end; 26: begin h.name:=26{заголовок 4 байт Plend1 CRC-8}; CRC_8; h.mean:=x2[13]; end; 27: begin h.name:=27{заголовок 1 байт Plend2 кол-во T-CONT}; h.mean:=trunc(((fl1+CONT) and 4080)/16); for r2:=1 to 13 do x2[r2]:=0; x2[10]:=h.mean; end; 28: begin h.name:=28{заголовок 2 байт Plend2 кол-во T-CONT+сегмент ATM}; h.mean:=16*((fl1+CONT) and 15)+trunc((ATM and 3840)/256); x2[11]:=h.mean; end; 29: begin h.name:=29{заголовок 3 байт Plend2 сегмент ATM}; h.mean:=ATM and 255; x2[12]:=h.mean; end; 30: begin h.name:=30{заголовок 4 байт Plend2 CRC-8}; CRC_8; h.mean:=x2[13]; end; 31: begin for r:=1 to CONT+fl1 do begin
h.num:=31+(r-1)*8; h.name:=31{заголовок 1 байт AllocID}; if r<254 then h.mean:=trunc((r and 4080)/16) else h.mean:=trunc(((r+2) and 4080)/16); if (fl1=1) and (r=CONT+fl1) then h.mean:=trunc((254 and 4080)/16); for r2:=1 to 13 do x2[r2]:=0; x2[6]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=32+(r-1)*8; h.name:=32{заголовок 2 байт AllocID+Flag}; if r<254 then h.mean:=(r and 15)*16 else h.mean:=((r+2) and 15)*16; if (fl1=1) and (r=CONT+fl1) then h.mean:=(254 and 15)*16; x2[7]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=33+(r-1)*8; h.name:=33{заголовок 3 байт Flag}; h.mean:=Ploamu; {флаг ответа на запрос S_N} if (fl1=1) and (r=CONT+fl1) then h.mean:=Ploamu1;{флаг ответа на запрос S_N при обнаружении} x2[8]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=34+(r-1)*8; h.name:=34{заголовок 1 байт Start}; xb:=trunc((((r-1)*(round(19440/(CONT+fl1)))) and 65280)/256); h.mean:=xb; x2[9]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=35+(r-1)*8; h.name:=35{заголовок 2 байт Start}; xf:=trunc(((r-1)*(round(19440/(CONT+fl1)))) and 255); h.mean:=xf; x2[10]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=36+(r-1)*8; h.name:=36{заголовок 1 байт Stop}; if r=CONT+fl1 then xb:=trunc((19440 and 65280)/256) else xb:=trunc(((r*(round(19440/(CONT+fl1))))and 65280)/256); h.mean:=xb; x2[11]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=37+(r-1)*8; h.name:=37{заголовок 2 байт Stop}; if r=CONT+fl1 then xf:=19440 and 255 else xf:=trunc((r*(round(19440/(CONT+fl1)))) and 255); h.mean:=xf; x2[12]:=h.mean; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean;
h.num:=38+(r-1)*8; h.name:=38{заголовок байт CRC-8}; CRC_8; h.mean:=x2[13]; blockwrite(f,h,1,result); m:=ioresult; s1:=s1 xor h.mean; sp:=1; end; i:=h.num; fl1:=0; end;
else h.name:=0{информация}; end; if sp=0 then begin s1:=s1 xor h.mean;
blockwrite(f,h,1,result); m:=ioresult; end; sp:=0; end; end; close(f); end; {--------------------------} end. unit kadrONT; {$N+} interface uses CRT,DOS,Graph,kadrOLT,var_u; procedure kadr_v; implementation {-----------------------------------------------------------------------} procedure chtenie; begin case cht of 0: writeln('информация'); 1: writeln('заголовок 1 байт Psync B6 '); 2: writeln('заголовок 2 байт Psync AB '); 3: writeln('заголовок 3 байт Psync 31 '); 4: writeln('заголовок 4 байт Psync E0 '); 5: writeln('заголовок 1 байт Ident '); 6: writeln('заголовок 2 байт Ident '); 7: writeln('заголовок 3 байт Ident '); 8: writeln('заголовок 4 байт Ident '); 9: writeln(' '); 10: writeln(' '); 11: writeln(' '); 12: writeln(' '); 13: writeln(' '); 14: writeln(' '); 15: writeln(' '); 16: writeln(' '); 17: writeln(' '); 18: writeln(' '); 19: writeln(' '); 20: writeln(' '); 21: writeln(' '); 22: writeln('заголовок байт ПЧБ BIP-8 '); 23: writeln('заголовок 1 байт Plend1 кол-во T-CONT '); 24: writeln('заголовок 2 байт Plend1 кол-во T-CONT+сегмент ATM '); 25: writeln('заголовок 3 байт Plend1 сегмент ATM '); 26: writeln('заголовок 4 байт Plend1 CRC-8 '); 27: writeln('заголовок 1 байт Plend2 кол-во T-CONT '); 28: writeln('заголовок 2 байт Plend2 кол-во T-CONT+сегмент ATM '); 29: writeln('заголовок 3 байт Plend2 сегмент ATM '); 30: writeln('заголовок 4 байт Plend2 CRC-8 '); 31: writeln('заголовок 1 байт AllocID '); 32: writeln('заголовок 2 байт AllocID+Flag '); 33: writeln('заголовок 3 байт Flag '); 34: writeln('заголовок 1 байт Start '); 35: writeln('заголовок 2 байт Start '); 36: writeln('заголовок 1 байт Stop '); 37: writeln('заголовок 2 байт Stop '); 38: writeln('заголовок байт CRC-8 '); 39: writeln('преамбула типа1 '); 40: writeln('преамбула типа2 '); 41: writeln('заголовок Ploam '); end; readln; halt; end; {-----------------------------------------------------------------------} procedure CRC_8; begin x2[13]:=0; for r10:=1 to 8 do begin CRC[r10]:=0; rez[r10]:=0; end; rez[1]:=1; rez[2]:=1; rez[3]:=1; for r12:=1 to 12 do begin for r11:=1 to 8 do begin x:=trunc((x2[r12] and trunc(exp((8-r11)*ln(2))))/trunc(exp((8-r11)*ln(2)))); z:=crc[8]; for r10:=0 to 6 do crc[8-r10]:=crc[7-r10]; crc[1]:=x; if z=1 then for r10:=1 to 8 do crc[r10]:=crc[r10] XOR rez[r10]; end; end; for r10:=1 to 8 do x2[13]:=x2[13]+crc[r10]*trunc(exp((r10-1)*ln(2))); end; {-----------------------------------------------------------------------} procedure Up_Ov; begin x2[1]:=255; x2[2]:=1; x2[3]:=128; x2[4]:=128; x2[5]:=128; x2[6]:=170; x2[7]:=133; x2[8]:=179; x2[9]:=0; x2[10]:=16; x2[11]:=0; x2[12]:=0; CRC_8;{результат процедуры CRC-8 в x2[13]} end; {--------------------------} procedure S_N_ONU; begin x2[1]:=ONU_ID; x2[2]:=1; x2[3]:=0; x2[4]:=0; x2[5]:=0; x2[6]:=0; x2[7]:=0; x2[8]:=0; x2[9]:=SN and 65280; x2[10]:=SN and 255; x2[11]:=0; x2[12]:=5; CRC_8;{результат процедуры CRC-8 в x2[13]} end; {--------------------------} procedure kadr_v; begin assign(f,'d:\am\kadr-v'); reset(f,sizeof(h)); s1:=0; sp:=0; for i:=1 to n do begin h.num_tc:=j; h.num:=i; h.mean:=random(255); case i of
1: begin for r:=1 to trunc(zaschita/8) do begin h.num:=i; h.name:=11 { защитные биты }; h.mean:=0; i:=i+1; blockwrite(f,h,1,result); m:=ioresult; end; for r:=1 to trunc(pream1/8) do begin h.num:=i; h.name:=12 { преамбула типа1 }; h.mean:=255; i:=i+1; blockwrite(f,h,1,result); m:=ioresult; end;
for r:=1 to trunc(pream2/8) do begin h.num:=i; h.name:=13 { преамбула типа2 }; h.mean:=0; i:=i+1; blockwrite(f,h,1,result); m:=ioresult; end; for r:=1 to trunc((48-zaschita-pream1-pream2)/8) do begin h.num:=i; h.name:=14 { преамбула типа3 }; h.mean:=pream3; i:=i+1; blockwrite(f,h,1,result); m:=ioresult; end; for r:=1 to 3 do begin h.num:=i; h.name:=14+i { разделитель };
h.mean:=razdel[i]; i:=i+1; blockwrite(f,h,1,result); m:=ioresult; end; i:=h.num; sp:=1; end; 10: begin h.name:=22{заголовок байт ПЧБ BIP-8}; h.mean:=s1; s1:=0; blockwrite(f,h,1,result); m:=ioresult; sp:=1; end; 11: begin h.name:=10{заголовок ONU_ID}; h.mean:=ONU_ID; end; 12: begin h.name:=42; {заголовок IND} h.mean:=IND;
end; 13: case r1 of 1: begin S_N_ONU; for r2:=1 to 13 do begin h.name:=8+r2; {заголовок Ploam} h.num:=12+r2; h.mean:=x2[r2]; s1:=s1 xor h.mean; blockwrite(f,h,1,result); m:=ioresult; end; i:=h.num; sp:=1; end; end;
else h.name:=0{информация}; end; if sp=0 then begin s1:=s1 xor h.mean; blockwrite(f,h,1,result); m:=ioresult; end; sp:=0; end; close(f); end; {--------------------------} end.
Литература 1. И.И. Петренко, Р.Р.Убайдуллаев «Оптические сети PON».//Lightwave. Russian edition. - №1, 2004, с.22-28 2. ITU-T Recommendation G.983.1. 3. http://www.fotonexpress.ru/pdf/PE_3(51).pdf 4. http://www.cisco.com/web/RU/downloads/Cisco_FTTH_architecture.pdf 5. http://www.teralink.ru/ 6. http://www.tls-group.ru/doc/2005/nets/prozr/prozr.html 7. http://www.tssonline.ru/articles2/Oborandteh/med-ili-optika-chto-luchshe-oper-shpd 8. http://www.deps.ua/tehnicheskaya-informatsiya/stati/praktika-vnedreniya-passivnyih-opticheskih-setey-pon.html 9. Кирби Р. «Новый отсчет времени для пассивных оптических сетей» LAN Журнал Сетевых Решений, № 9, 2001, с. 50–55. Гаскевич Е., Убайдуллаев Р. «PON – широкополосная мультисервисная сеть доступа», ТелеМультиМедиа, № 2(12), 2002, с. 29–32. 10. Орлов С. «Оптика вплотную к клиентам» LAN Журнал сетевых решений, №5, 2003, с. 50-60.
|