Vai al contenuto
PLC Forum


Ricerca Valore Nelle DB


jisba

Messaggi consigliati

Salve tutti, sto cercando il sistema per ottimizzare e velocizzare il confronto di una variabile esterna (word) , con i valori contenuti nel primo rigo delle db( ne ho 200), senza dover fare il confronto punto punto.

grazie

Link al commento
Condividi su altri siti


se hai una db solo con array puoi fare un ciclo for con indice. se hai più db consecutive e la word da cercare è sempre nella stessa posizione puoi dichiarare le db non ottimizzate e usare un ciclo for in cui carichi il numero db come puntatore. ma se non dai maggiori aiuti non possiamo sapere come hai il programma

Link al commento
Condividi su altri siti

Scusa, per mia curiosità, a cosa ti serve? Io programmo PLC da oltre trent'anni, e non ho mai sentito questa necessità.

Link al commento
Condividi su altri siti

buongiorno e grazie per l'interessamento

Betta: vorrei creare un sistema di ricette, ma con uno scanner (bar code), che interroghi le mie db, e se riconosce la prima stringa nella db, carica quella ricetta direttamente.

84paolo: non ho ben capito come, mi spiego meglio: creo una ricetta con il nome definito da un codice a barre, questo nome sarà sempre la prima stringa di ogni db creata per i prodotti.

ogni qual volta scannerizzo un codice a barre, devo scansionare tutte le db e vedere a quale rivetta appartiene.

avrei fatto anche un confronto uno ad uno, ma l'ipotesi è che siano più di 100 ricette. 

Link al commento
Condividi su altri siti

7 minuti fa, jisba ha scritto:

vorrei creare un sistema di ricette, ma con uno scanner (bar code), che interroghi le mie db, e se riconosce la prima stringa nella db, carica quella ricetta direttamente.

Premetto che non mi piace gestire le ricette nel PLC (questo è un compito da HMI/SCADA), ma hai un DB per ogni ricetta?

 

Link al commento
Condividi su altri siti

Ma quanto sono grandi questi DB? 

Non è possibile farne uno solo costruito a vettori che punti con degli indici?

Comunque le ricette come dice @batta sono un lavoro del pannello....

Link al commento
Condividi su altri siti

Se proprio vuoi usare le DB del PLC fai una struttura dati che comprende tutta la ricetta a partire dal nome per finire con tutti i tag. Una volta fatta la struttura crei la DB con un array di struttura-ricetta per poi far la ricerca con un for-next.

 

Nel caso di progetti in cui le ricette sono poche con pochi tag (tipo 10-20) la cosa può aver senso, ma se per tipologia di macchina potrebbe avere millemila ricette con millemila tag allora il senso logico impone lo stesso lavoro fatto sul pannello.

Link al commento
Condividi su altri siti

Scusami... ma 100 dati come li chiami tu, ipotizzo 100 word, quindi 200 ricette * 100 word * 2 bytes = 40.000 bytes .

Ci stanno in un solo DB del 1200 , che ne permette 64KB (nella 1215)

Quindi il problema non esiste.

Modificato: da drn5
Link al commento
Condividi su altri siti

1 ora fa, jisba ha scritto:

sicuramente li gestirei con degli arrey, ma la struttura che dice @pigroplc e @84paolo non la conosco

Ti crei un "Tipo di dati" con le variabili della ricetta. Poi, in un solo DB, crei un array con il tipo di dati della ricetta.
Fatto questo, con un semplice ciclo FOR cerchi il nome della ricetta.

 

Esempio sorgente:

TYPE "UDT_Ricetta"
VERSION : 0.1
   STRUCT
      Nome : WString[32];
      Farina : Real;
      Zucchero : Real;
      Acqua : Real;
      TempoMescolazione : Time;
      TempoCottura : Time;
      TemperaturaCottura : Real;
   END_STRUCT;

END_TYPE

DATA_BLOCK "DB_Ricetta"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
   VAR RETAIN
      Ricetta { S7_SetPoint := 'False'} : Array[0..15] of "UDT_Ricetta";
   END_VAR


BEGIN

END_DATA_BLOCK

Crea un file di testo "DB_Ricetta.db" e mettici dentro il codice di esempio.

Importa il file nella cartella "Sorgenti esterne" dell'albero del progetto.
Tasto destro --> Genera blocchi dalla sorgente.
ATTENZIONE!!! Eventuali blocchi con lo stesso numero/nome verranno sovrascritti.

Modificato: da batta
Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...