ccarafa Inserito: 24 agosto 2005 Segnala Inserito: 24 agosto 2005 (modificato) Ciao a tutti! Sono alle prese con il seguente problema: sto lavorando con un plc S7-300 e devo memorizzare all'interno di una DB i valori provenienti da una sonda NTC opportunamente scalati. La memorizzazione avviene in un array di 100 elementi prelevando un dato ogni 10 sec.La domanda che vi pongo è la seguente: che procedura devo seguire per effettuare la memorizzazione ad intervalli prefissati di tempo della variabile acquisita? Grazie! Modificato: 24 agosto 2005 da ccarafa
RickyM Inserita: 24 agosto 2005 Segnala Inserita: 24 agosto 2005 Dovresti creare un puntatore, puntare una dbw scrivere il valore e incrementare il puntatore ogni 10s.C'è una discussione con qualcosa di simile:Puntare Una Db Ciao
Eddyn°1 Inserita: 25 agosto 2005 Segnala Inserita: 25 agosto 2005 Ciao Ricky, dai un a questo file sorgente!!!!!!!!!!!!!!Puoi usarlo per "n" schedulazioni!!!!!Mi sembra quello che cerchi !!!!!DATA_BLOCK "Data base" TITLE = AUTHOR : Eddy VERSION : 0.1 STRUCT Dati : ARRAY [0 .. 9 ] OF WORD; END_STRUCT; BEGIN Dati[0] := W#16#0; Dati[1] := W#16#0; Dati[2] := W#16#0; Dati[3] := W#16#0; Dati[4] := W#16#0; Dati[5] := W#16#0; Dati[6] := W#16#0; Dati[7] := W#16#0; Dati[8] := W#16#0; Dati[9] := W#16#0; END_DATA_BLOCK FUNCTION_BLOCK "Prg" TITLE = AUTHOR : Eddy VERSION : 0.1 VAR_INPUT NumeroDB : INT; //Numero DB dove voglio salvare i dati NumeroSchedulazioni : INT; //Numero schedulazioni da eseguire InizioArray : INT; //W inizio Array VariabileDaSalvare : WORD; //Indirizzo variabile da schedulare TempoSchedulazione : S5TIME; //Tempo di schedulazione TimerPerSchedulazione : TIMER; //Timer usato per schedulazione StartSchedulazione : BOOL; //Bit abilita schedulazione END_VAR VAR_IN_OUT FineSchedulazione : BOOL; //Schedulazione terminata END_VAR VAR DatoAttuale : DWORD; AntiRepeat : BOOL; END_VAR VAR_TEMP PuntatoreDB : INT; PuntatoreW : DWORD; END_VAR BEGIN NETWORK TITLE = UN #StartSchedulazione; SPBN END; L 0; T #DatoAttuale; END: NOP 0; U #StartSchedulazione; SPBN end2; //apertura DB dove eseguire schedulazione L #NumeroDB; T #PuntatoreDB; AUF DB [#PuntatoreDB]; //-------------------------------------- //clok di schedulazione UN #AntiRepeat; L #TempoSchedulazione; SE #TimerPerSchedulazione; U #AntiRepeat; R #AntiRepeat; //--------------------- //copia dato su Array U #TimerPerSchedulazione; SPBN end2; S #AntiRepeat; L #InizioArray; ITD ; L #DatoAttuale; +D ; L 2; *D ; SLD 3; T #PuntatoreW; L #VariabileDaSalvare; T DBW [#PuntatoreW]; L #NumeroSchedulazioni; L 1; -I ; L #DatoAttuale; >I ; SPBN end1; L #DatoAttuale; L 1; +I ; T #DatoAttuale; SPA end2; end1: L 0; T #DatoAttuale; S #FineSchedulazione; end2: NOP 0; //------------------- END_FUNCTION_BLOCK DATA_BLOCK "DBistanzaFB1" TITLE = AUTHOR : Eddy VERSION : 0.1 "Prg" BEGIN NumeroDB := 0; NumeroSchedulazioni := 0; InizioArray := 0; VariabileDaSalvare := W#16#0; TempoSchedulazione := S5T#0MS; TimerPerSchedulazione := T 0; StartSchedulazione := FALSE; FineSchedulazione := FALSE; DatoAttuale := DW#16#0; AntiRepeat := FALSE; END_DATA_BLOCK ORGANIZATION_BLOCK "Cycle Execution" TITLE = "Main Program Sweep (Cycle)" VERSION : 0.1 VAR_TEMP OB1_EV_CLASS : BYTE; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 : BYTE; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1) OB1_PRIORITY : BYTE; //Priority of OB Execution OB1_OB_NUMBR : BYTE; //1 (Organization block 1, OB1) OB1_RESERVED_1 : BYTE; //Reserved for system OB1_RESERVED_2 : BYTE; //Reserved for system OB1_PREV_CYCLE : INT; //Cycle time of previous OB1 scan (milliseconds) OB1_MIN_CYCLE : INT; //Minimum cycle time of OB1 (milliseconds) OB1_MAX_CYCLE : INT; //Maximum cycle time of OB1 (milliseconds) OB1_DATE_TIME : DATE_AND_TIME; //Date and time OB1 started END_VAR BEGIN NETWORK TITLE = CALL "Prg" , "DBistanzaFB1" ( NumeroDB := 1,//numero DB dove salvare i dati NumeroSchedulazioni := 10,//numero schedulazioni da fare InizioArray := 0,//indirizzo inizio Array VariabileDaSalvare := MW 10,//variabile da schedulare TempoSchedulazione := S5T#10S,//tempo di schedulazione TimerPerSchedulazione := T 0,//timer usato StartSchedulazione := M 0.0,//bit abilitazione schedulazione FineSchedulazione := M 0.1);//bit scedulazione avvenuta END_ORGANIZATION_BLOCKBuon lavoro!Ciao.
ccarafa Inserita: 1 settembre 2005 Autore Segnala Inserita: 1 settembre 2005 Grazie per le soluzioni proposte, ho risolto il problema con una struttura simile a quella che mi hai proposto!
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora