Vai al contenuto
PLC Forum


Eseguire debug comando FOR linguaggio SQL


Michele88pp

Messaggi consigliati

Buonasera a tutti, sto eseguendo all'interno di un FC un'istruzione:

"FOR #Long := 0 TO 49 DO

.....

END_FOR;"

dove #Long è una variabile INT di tipo Temp.

Vado online, tasto destro su FOR, CONTROLLA, CONTROLLA LOOP. Nello stato delle variabili contenute all'interno del FOR vengono visualizzati i valori relativi a  #Long con valore uguale a 0.

Come posso controllare anche gli altri valori di #Long?

 

 

Link al commento
Condividi su altri siti


1 ora fa, Michele88pp ha scritto:

Come posso controllare anche gli altri valori di #Long?

cosa vuoi dire?

 

Mettere degli IF potrebbe andarti bene?

 

procedere step by step non è possibile , quindi devi mettere delle condizioni dentro il FOR che puoi visualizzare .

 

Poi Io personalmente non userei variabili con nomi dedicati al linguaggio, ma questa è un'altra storia...

Link al commento
Condividi su altri siti

Come puoi vedere, controllando il loop, vengono visualizzati solo i valori relativi al valore #Long 0, nonostante la funzione FOR cicili fino al valore di #Long:=4.

 

image.thumb.png.b94f4bfd5446516659dd043c594dd889.png

Link al commento
Condividi su altri siti

in 10 millisecondi di scansione di 1 ciclo plc o anche meno non ti puoi aspettare niente altro. Quel IF che hai messo non viene soddisfatto sennò vedresti il valore in LongErr

Link al commento
Condividi su altri siti

49 minuti fa, acquaman ha scritto:

Perché il loop viene eseguito in una sola scansione, quindi ti da uno solo stato.

E non posso selezionare quale stato controllare? un po' come si fa con gli FB con il comando apri e controlla?

Link al commento
Condividi su altri siti

22 minuti fa, Michele88pp ha scritto:

un po' come si fa con gli FB con il comando apri e controlla?

Lo trovo un esempio poco calzante.
Nell'SCL ci sono i punti di interruzione:

Io che sono più pratico mi creerei una DB con un array da 0 a 49 con tutti i dati che voglio vedere, nel ciclo metto dei mov dove carico i dati che mi interessano indicizzati, cosi mi restano tutti memorizzati.
 

Link al commento
Condividi su altri siti

dina_supertramp
24 minuti fa, Michele88pp ha scritto:

E non posso selezionare quale stato controllare? un po' come si fa con gli FB con il comando apri e controlla?

mi sa che non ti è chiaro il concetto di FOR.
Se entri in un loop devi uscirne, se non ne esci la CPU va in errore.

 

Se devi testare la cosa sequenzialmente non usare FOR, testala prima a mano con sequenze "comandabili" (controllo di word, s/r o altro) e poi fai il FOR.

 

Altrimenti, usa la funzione del TIA di eseguire il ciclo step by step

Link al commento
Condividi su altri siti

2 ore fa, dina_supertramp ha scritto:

la funzione del TIA di eseguire il ciclo step by step

Sul serio esiste? Mai neanche vista...

e cosa fa? ferma il ciclo del plc in attesa che fai "Step Avanti" ? Quindi crolla tutto. Il ciclo macchina va a ramengo.... o no?

o è solo per didattica col simulatore?

 

Link al commento
Condividi su altri siti

dina_supertramp
1 minuto fa, drn5 ha scritto:

Sul serio esiste? Mai neanche vista...

e cosa fa? ferma il ciclo del plc in attesa che fai "Step Avanti" ? Quindi crolla tutto. Il ciclo macchina va a ramengo.... o no?

o è solo per didattica col simulatore?

Ho fatto casino tra tool...il TIA non te lo fa fare online, dici giusto!!

Ti fa fare i cicli "a step" col simulatore (single scan mode).

Le logiche del SICAM invece ti danno la possibilità di farlo online (SICAM Device Manager: ambiente di programmazione RTU A8000 per telecontrollo, usato soprattutto nelle sottostazioni elettriche) ma perché di base l'RTU non elabora come un PLC...

Link al commento
Condividi su altri siti

se la tua necessità è visualizzare cosa succede nel ciclo FOR ti consiglio di provare una ricorsione singola cioè 

FOR #Long := 1 to 1 DO

poi ti metti in visualizzazione dinamica

se hai la necessità di far girare tutti 50 i valori per un debug efficace fai 50 regioni o segmenti qualsivoglia. Una volta risolto riporti il tutto con ciclo FOR univoco

 

 

 

Link al commento
Condividi su altri siti

17 ore fa, pigroplc ha scritto:

se la tua necessità è visualizzare cosa succede nel ciclo FOR ti consiglio di provare una ricorsione singola cioè 

FOR #Long := 1 to 1 DO

poi ti metti in visualizzazione dinamica

se hai la necessità di far girare tutti 50 i valori per un debug efficace fai 50 regioni o segmenti qualsivoglia. Una volta risolto riporti il tutto con ciclo FOR univoco

 

 

 

Avevo già pensato questa soluzione, che effettivamente mi risolve il problema. Speravo solo che esistesse un modo meno macchinoso.

Grazie mille comunque!

Link al commento
Condividi su altri siti

Secondo me i cicli di ricorsione dovrebbero essere circoscritti a semplici operazioni che non richiedono poi troppa fatica nel debug. Un paio d'anni fa dovetti mettere mano ad un software fatto da un concorrente dove 18 stazioni della macchina erano richiamate da un puntatore di array con un ciclo FOR. Ogni stazione aveva quindi una struttura di scambio i/o in modo da rendere vana qualsiasi lista incrociata.

Ho pesantemente maledetto la genitrice del concorrente che per fare una modifica da mezz'ora mi ha fatto penare 2 giorni. bastava fare 18 richiami in modo almeno da avere la possibilità di aprire il menu contestuale con open and control.

Esorto quindi tutti a fare SOFTWARE COMPRENSIBILI E COMMENTATI! Non abbiate paura di perdere il cliente, se siete professionali ed efficaci non vi abbandona!

 

 

 

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...