Mirco Tirrezzi Inserito: 22 giugno 2004 Segnala Inserito: 22 giugno 2004 Salve a tutti,Mi è stato chiesto d'inserire all'interno di un programma una ricerca indicizzata su DataBase,via rete mi viene trasmesso un codice e devo ricercare all'interno di un DB locale quali parametri corrispondono al codice trasmesso.Il tutto dovrebbe essere realizzato su S7 300 in awl, avete qualche consiglio su come poterlo fare ?Non avedo esperienza con S7 sulla gestione dei DB mi chiedevo se ci fosse qualche esempio...., sapete consigliari qualche sito ?
walterword Inserita: 22 giugno 2004 Segnala Inserita: 22 giugno 2004 dunque il tuo codice , che potrebbe derivare dallo scorporo del buffer di ricezione di un pacchetto Tcp\Ippuoi utilizzarlo come indice quindi al plc viene richiesto di leggere o restituire un valore di una variabile letta da una richiesta di rete dati :array[0..1000] of int;codice:int;output:int;//restituisco dati[codice]output:=dati[codice];leggi i post sopra al tuo ciao walter
Talor Inserita: 23 giugno 2004 Segnala Inserita: 23 giugno 2004 In AWL io faccio così:devi scorrere la DB con un puntatore usando la sintassi :AUF DB3 (volendo puoi indicizzare anche la DB)L DBW[MD15] (dove MD15 è il puntatore)poi confronti il valore con quello ricevuto....Mi creo il puntatore da una INT (es MW10) che incremento ad ogni giro:L MW10 SLW3T MD15Mi sa che se non hai l'SCL devi usare i puntatori S7.A proposito anche dell'altro thread sugli array: anche in AWL, oltre che in Kop non puoi usarli indicizzati (utilissimi !!!)ciaoLorenzo
walterword Inserita: 23 giugno 2004 Segnala Inserita: 23 giugno 2004 (modificato) si concordo pienamente in awl bisogna progettare per bene i puntatori si puo indicizzare come dici tu e anche con i registri Ar1 e Ar2 la tua operazione di shiftare di 3 bit per caricare il formato pointerpuo essere sostituito da p#m0.0P#... non e' altro che una funzione che incorpora lo ** dei 3 bit (che vengono usati per l'indirizzo bit a bit )per il formato dei puntatori l'unica cosa bisogna stare attenti a non sforare le aree di memoria , penalty stop della cpu .se si usano i registri bisogna , all'uscita del blocco che esegue , salvare in una doppia word il puntatore e ricaricarlo all'inizioquesto perche , se non erro da prove fatte , il registro lavora un po come una local durante alcune prove notavo questo e percio attribuisco quanto detto sopra , ed avevo trovato soluzione nel salvataggio in un aDWxxx.Chiedo conferma ciao walter Modificato: 23 giugno 2004 da walterword
beppeconti Inserita: 23 giugno 2004 Segnala Inserita: 23 giugno 2004 Concordo anch'io sul fatto che ti conviene scriverti una routine ad hoc utilizzando i puntatori di AWL o utilizzando l'SCL (molto più semplice di AWL).Se però non puoi o non vuoi farti la routine c'è un blocco Siemens che fa la stessa operazione.Il blocco è FC86 "TBL_FIND", lo puoi recuperare dalla 'Standard Library' di Siemens selezionando la biblioteca 'TI-S7 Converting Blocks'. Se premi 'F1" dopo aver selezionato il blocco ti compare l'. del blocco con esempio.CIAO
walterword Inserita: 23 giugno 2004 Segnala Inserita: 23 giugno 2004 ci sono anche i LIFO e FIFO e FUFA solo che sono limitati per il tipo di dati ero rimasto che potevano gestire solo i tipi interi e da allora mi son creato io il mio LIFO e FUFO e FIFO e FIFA ? ciao walter
beppeconti Inserita: 24 giugno 2004 Segnala Inserita: 24 giugno 2004 "TBL_FIND" non ha limitazioni per quanto concerne il tipo di dati, è solo un pò macchinoso da usare.CIAO
Federico Milan Inserita: 24 giugno 2004 Segnala Inserita: 24 giugno 2004 Ciao, io lo faccio abitualmente, anzi sempre ... banale banale ... è una scanzione di una DB ... Penso che se usi AWL la cosa è immediata con un po' di codice del tipoMW 0 : indice di scansione MW 2 : Dimensione in byte della struttura MW 4 : Word da ricercare MW 6 : Numero elementi da scansionare ... Si preusme che la DB inizia da DBB0 ... AUF "DB_CODICE" L 0 unt: T MW 0 L MW 2 *D SLD 4 LAR1 L DBW[AR1,P#0.0] L MW 4 ==I Spb Ok L MW 6 L MW 0 + 1 >=I spb unt OK: Qui ha i tutto :) il necessario, su AR1 il puntatore, su MW0 l'indice, ... cosa vuoi di più?ciao
Mirco Tirrezzi Inserita: 22 agosto 2004 Autore Segnala Inserita: 22 agosto 2004 Ho provato.., e funziona.Grazie
ricki Inserita: 23 agosto 2004 Segnala Inserita: 23 agosto 2004 Scusa Federico, ma se il DB codice fosse molto lungo, non corri il rischio di non eseguire il codice plc e quindi andare in stop per tempo ciclo troppo lungo ?CiaoRiccardo
rddiego Inserita: 23 agosto 2004 Segnala Inserita: 23 agosto 2004 Ricky, questo è uno dei grossi limiti delle cpu siemens. Se il tempo ciclo diventasse troppo lungo, la ricerca è sempre possibile farla in più scansioni..
walterword Inserita: 24 agosto 2004 Segnala Inserita: 24 agosto 2004 esatto bravo rddiego invece di "spazzolare" 30.000 dati tutti in un ciclo , lo fai in piu cicli limitanto il puntatore e facendolo ripartire da dove si era fermato e cosi via
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