Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




ciclo for in scl


Messaggi consigliati

Inserito:

ciao a tutti ho provato a fare questo esempio di for trovato su  un manuale si scl per s7300

FUNCTION_BLOCK FOR_BSP
VAR
    INDICE: INT ;
    PASSWORD: ARRAY [1..50] OF STRING;
END_VAR
BEGIN
FOR INDICE := 1 TO 50 BY 2 DO
    IF PASSWORD [INDICE] = 'KEY' THEN
         EXIT;
    END_IF;
END_FOR;

END_FUNCTION_BLOCK

 ma non funziona !!!!! come Mai?

un saluto a tutti  e spero che qualcuno mi aiutim sono ore che cerco di capire ma..


Inserita:

Cosa intendi per "non funziona"?

Hai ben presente cosa deve fare questa funzione?

In teoria dovrebbe controllare tutte le stringhe dispari dell'array chiamato password finché non trova la parola KEY quindi abbandona la ricorsione.

Quello che non mi suona è il fatto di controllare il 50 quando dovrebbe fare tutti i numeri dispari 1;3;5 ecc quindi metterei 49 o 51 e non 50

 

Inserita:
2 ore fa, ottoz ha scritto:

quindi devo scrivere  key nell array

Prima dovresti chiarire cosa vuoi ottenere.
Il codice, in pratica, così com'è non fa assolutamente nulla.
Se nessuna delle stringhe dispari da 1 a 49 dell'array è uguale a "KEY", il ciclo FOR termina senza fare nulla.
Se, invece, trova una stringa uguale a "KEY, esce dal ciclo FOR senza completarlo, e non fa nulla.

In entrambi i casi, non fa assolutamente nulla.

 

Inserita:

avete ragione  sono io che ho interpretato male la funzione ero io che sbagliavo,  la funzione e OK  pensavo che doveva scrivere KEY nell array invece è un IF

grazie per la pazienza e per la vostra presenza

ciao

Inserita:


VAR
    INDICE: INT ;
    PASSWORD: ARRAY [1..50] OF STRING ;
END_VAR
BEGIN
INDICE := 1 ;
WHILE INDICE <= 50 AND PASSWORD[INDICE] <> 'KEY' DO
    INDICE := INDICE + 2;
END_WHILE ;
 ditemi se sbaglio   parte da indice =1 e lui cerca  quando trova che indice è minore di 50 e  PASSWORD[INDICE] arriva a 1 vede che non ce KEY

si ferma a INDICE=3 ?

giusto??

Inserita:

primo giro INDICE = 1 quindi se PASSWORD[1] è diversa da 'KEY' incrementa INDICE di 2 unità e riprende il controllo.

Se incontra che PASSWORD[1] o PASSWORD[3] o PASSWORD[5] ecc. sono uguali a  'KEY' si ferma, altrimenti li spazzola fino a 49 compreso.

La ricorsione serve a capire in che posizione dell'array si trova una determinata stringa.

 

 

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