Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Приложение. uses CRT,Graph,var_u,kadrOLT,kadrONT;




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.

 

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 67; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты