Caricare documenti e articoli online  
INFtube.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.
 
Architettura
Biologia
Diritto
Economia
Educazione fisica
Filosofia
Generale
Geografia
Italiano
Letteratura
Marketing
Medicina
Scienze Chimica Fisica Geometria Informatica Matematica Ricerche Scienze della materia Scienze della terra
Storia
Tecnica
 



 
 
Meneame
 
Non ricordi la password?  ››  Iscriviti gratis
 

software

ricerche

Inviare l'articolo a Facebook Inviala documento ad un amico Appunto e analisi gratis - tweeter Scheda libro l'a yahoo - corso di


ALTRI DOCUMENTI

LE RISORSE UMANE NELL'ORGANIZZAZIONE DELL'IMPRESA
Pagina normale senza titolo
Analisi del Testo
LE CERAMICHE
La coscienza di Zeno
LE ARMI ATOMICHE
IL PROBLEMA DEL LAVORO
Introduzione al Brano
L'ETA' DI GIOLITTI

software
Entrambi i programmi sono scritti in Delphi (il Pascal visuale), e la comunicazione
tra i due avviene tramite Udp (User Datagram Protocol).
La scelta del linguaggio non e' casuale, in quanto molti credono che il pascal sia
da relegare nelle soffitte informatiche, in quanto ormai "linguaggio didattico", cioe' 
senza nessuna funzione pratica, utile solamente agli studenti per capire le basi della 
programmazione. Io non credo sia cosi'. I linguaggi di programmazione sono un po' come le 
lingue (l'italiano per esempio), ognuno 818g68i  ha delle sfumature che lo rendono unico, inimitabile.
Lingue scarne come l'inglese non sono per nulla paragonabili all'italiano od al francese, ma
cio' non toglie che in alcuni casi l'inglese e' preferibile. Questo almeno e' quello che 
penso io, ognuno la pensi come meglio crede (o e' meglio ognuno programmi come vuole?).

Client:

Composto da una parte che serve per il controllo dello stato dei sensori (tramite una 
in sulla porta parallela), ed una per la comunicazione dello stato dell'allarme, che avviene
trasmettendo un dato di un byte, in cui i primi 5 bit
rappresentano ognuno un tipo di emergenza, il valore del sesto indica se l'allarme per le 
intrusioni deve scattare,mentre gli altri sono riservati per sviluppi futuri.


Questa e' la tabella degli eventi assegnati ad ogni bit:
  
bit 0: isolamento elettrico;
bit 1: emergenza sanitaria;
bit 2: incendio;
bit 3: effrazione;
bit 4: AAIUUUUUUTO, POOLIZZIIIIAA...

(l'allarme e' attivo quando uno di questi valori si porta a zero; es: i sensori
- o l'utente - rilevano un'incendio, l'allarme viene attivato e viente mandata al
server la parola 1Bh [nel caso ci sia solo quell'emergenza, in quanto equivale 
alla parola binaria 00011011])


unit Client;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, NMUDP, ScktComp, Db, DBTables, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    NMUDP1: TNMUDP;         
    Edit1: TEdit;
    Label1: TLabel;
    Timer2: TTimer;         

    procedure Button1Click(Sender: TObject);
    procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure Timer2Timer(Sender: TObject);
  private
    
  public
    
  end;

var
  Form1: TForm1;

implementation



procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  C: String;
  MyStream: TMemoryStream;
  i,r:integer;
begin
  MyStream := TMemoryStream.Create;   
  try                                 
    NMUDP1.ReadStream(MyStream);      
    SetLength(C, NumberBytes);        
    MyStream.Read(C[1], NumberBytes); 
    StatusBar1.Panels[0].Text:='Ricevuto';
  finally
    MyStream.Free;                    
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
  MyStream: TMemoryStream;
  C: String;
begin
  asm
    mov Dx,0378h
    in c,Dx
  end;
  NMUDP1.RemoteHost := '127.0.0.1';   
  NMUDP1.ReportLevel := Status_Basic; 
  NMUDP1.RemotePort := 6000;          
  MyStream := TMemoryStream.Create;
  try
    MyStream.Write(C[1], Length(C));  
    NMUDP1.SendStream(MyStream);      
  finally
    MyStream.Free;
  end;
end;

end.


Server:

Il server in sostanza effettua queste operazioni:

	1: Attesa di connessioni;
	2: Ricerca dati relativi all'ip connesso;
	3: stampa dei dati relativi all'emergenza;
	4: Torna al punto 1.

per quanto riguarda il punto 2 utilizziamo un tabella Acces, che ha come campi Ip 
(chiave primaria), Nome e Indirizzo.

Es.     _________________________________________________________________________
       |_Ip__________|_Nome_______________|_Indirizzo____________________________|
       | 192.168.0.2 | Cavallo_DeCavallis | Via_Guglielmino_34_Trecastagni_Etneo |
       | 192.168.0.3 | Erik_Draven        | Via_Di_Qua_1_Gravina_di_Trento       |
       | 192.168.0.4 | Telnet_Unghio      | Via_Di_Gitale_101_Cybercity          |
             :               :                           :

Detto in Delphi:


unit UDP;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, NMUDP, ScktComp, Db, DBTables, ExtCtrls, DBCtrls, Mask;

type
  TForm1 = class(TForm)
    NMUDP2: TNMUDP;
    Memo1: TMemo;
    P1: TCheckBox;
    P2: TCheckBox;
    P3: TCheckBox;
    P4: TCheckBox;
    P5: TCheckBox;
    Button1: TButton;
    Query1: TQuery;
    Database1: TDatabase;
    DataSource1: TDataSource;
    procedure Button1Click(Sender: TObject);
    procedure NMUDP2DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
  private
    
  public
    
  end;

var
  Form1: TForm1;

implementation



procedure TForm1.Button1Click(Sender: TObject);
var
  MyStream: TMemoryStream;
  C: String;
begin
c:='comunicazione_ok';
  NMUDP2.RemoteHost := '127.0.0.1';
  NMUDP2.ReportLevel := Status_Basic;
  NMUDP2.RemotePort := 5000;
  MyStream := TMemoryStream.Create;
  try
    MyStream.Write(C[1], Length(C));
    NMUDP2.SendStream(MyStream);
  finally
    MyStream.Free;
  end;
end;



procedure TForm1.NMUDP2DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  C,b: String;
  MyStream: TMemoryStream;
  i,j,r:integer;
  tec,pol,pom,amb,nome,ind:string;
begin
  MyStream := TMemoryStream.Create;
  try
    NMUDP2.ReadStream(MyStream);
    SetLength(C, NumberBytes);
    MyStream.Read(C[1], NumberBytes);
  finally
    MyStream.Free;
  end;
  i:=StrToInt(c);
  SetLength(b,5);
  j:=6;
  repeat
    j:=j-1;
    r:=(i mod 2)+48;
    i:=i div 2;
    b[j]:=chr(r);
  until i=0;
  j:=j-1;
  while j>0 do
  begin
    b[j]:='0';
    j:=j-1;
  end;
  if (b[5]='0') then p1.checked:=true
    else p1.checked:=false;
  if (b[4]='0') then p2.checked:=true
    else p2.checked:=false;
  if (b[3]='0') then p3.checked:=true
    else p3.checked:=false;
  if (b[2]='0') then p4.checked:=true
    else p4.checked:=false;
  if (b[1]='0') then p5.checked:=true
    else p5.checked:=false;
  if (P4.Checked=true) or (P5.checked=true) then
    pol:='polizia'
  else
    pol:='';
  if (P2.Checked=true) then
    amb:='ambulanza'
  else
    amb:='';
  if (P1.Checked=true) then
    tec:='tecnico'
  else
    tec:='';
  if (P3.Checked=true) then
    pom:='pompieri'
  else
    pom:='';
  i:=15;
  try
    Query1.Params[0].AsString:=FromIp;
    Query1.Active:=true;
    nome:=query1.Fields[0].AsString;
    ind:=query1.Fields[1].AsString;
  finally
    Query1.Active:=False;
  end;
  Memo1.Lines.Add('Mandare '+ pol+' '+ amb +' '+ pom +' '+ tec +' da '+ nome +' '+ ind);
  Button1.Click;
end;

end.




Articolo informazione


Hits: 919
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI

E 'stato utile?



Copiare il codice

nella pagina web del tuo sito.