Mister_X_ Inserito: 30 dicembre 2021 Segnala Inserito: 30 dicembre 2021 Buonasera, sto lavorando ad un vecchio progetto scritto in awl piattaforma Siemens Ho una funzione che voglio trascrivere in scl (eliminando i puntatori) Praticamente la funzione ha un array di 6 ingressi (real) e 6 uscite (real), un ingresso input (real), un uscita output (real) e un uscita error (bool) La funzione confronta l’array e controlla che il primo valore sia inferiore al secondo valore, che il secondo sia inferiore al terzo, ecc Poi fa lo stesso controllo con l’array di uscite Se ci sono incongruenze l’uscita error si alza Dopodiché prende il valore input e cerca tra quali valori dell’array ingressi è compreso (esempio tra il 2 e 3) A questo punto fa una scalatura tra le uscite 2 e 3 dell’array delle uscite e mi restituisce il valore nell’uscita output Presumo di usare qualche ciclo for però vorrei qualche idea più chiara per iniziare. Grazie. P.S. Ho il codice in awl, potrei postarlo qui
drn5 Inserita: 30 dicembre 2021 Segnala Inserita: 30 dicembre 2021 (modificato) #errore := FALSE; FOR #x := 1 TO 5 DO IF #arr_in[#x] >= #arr_in[#x + 1] THEN #errore := TRUE; END_IF; IF #arr_out[#x] >= #arr_out[#x + 1] THEN #errore := TRUE; END_IF; END_FOR; arr_in e arr_out sono definiti come array di real in InOut errore come bool in Out x come int in Temp Modificato: 30 dicembre 2021 da drn5
Mister_X_ Inserita: 30 dicembre 2021 Autore Segnala Inserita: 30 dicembre 2021 La seconda parte invece come la faresti?
drn5 Inserita: 30 dicembre 2021 Segnala Inserita: 30 dicembre 2021 Natale è passato. 😀 Il resto lo lascio a te.😁
Lucky67 Inserita: 31 dicembre 2021 Segnala Inserita: 31 dicembre 2021 4 ore fa, Mister_X_ ha scritto: Fatto grazie 😁 Meravigliosa conclusione del post...grazie per il tuo apporto costruttivo al forum!
Mister_X_ Inserita: 1 gennaio 2022 Autore Segnala Inserita: 1 gennaio 2022 Giusto, scusate Di seguito il codice funzionante. Input InIst Real Output SP Real InOut In Array[0..5] of Real Out Array[0..5] of Real Errore Bool Temp x Int Valore Int InMin Real InMax Real OutMin Real OutMax Real //controllo che i valori In e Out siano uno di seguito all'altro #Errore := FALSE; FOR #x := 0 TO 4 DO IF #In[#x] >= #In[#x + 1] THEN #Errore := TRUE; END_IF; IF #Out[#x] >= #Out[#x + 1] THEN #Errore := TRUE; END_IF; END_FOR; //trovo tra quali valori è compreso l'ingresso istantaneo IF NOT #Errore THEN FOR #x := 0 TO 4 DO IF #InIst >= #In[#x] THEN #Valore := #x; END_IF; END_FOR; //trovo valori min e max #InMin := #In[#Valore]; #InMax := #In[#Valore + 1]; #OutMin := #Out[#Valore]; #OutMax := #Out[#Valore + 1]; //scalatura per trovare SP #SP := ((#InIst - #InMin) * ((#OutMax - #OutMin) / (#InMax - #InMin))) + #OutMin; END_IF;
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