mattia237 Inserito: 26 ottobre 2022 Segnala Share Inserito: 26 ottobre 2022 Ciao a tutti, ho il seguente problema. Vorrei tramite uno script cambiare colore ad un testo presente nella pagina 3. Ho utilizzato il seguente codice: Hmiruntime.screens("3").items(oggetto).forecolor="Red" Il problema è che funziona solo se la pagina 3 è attiva, come posso fare a risolvere il problema ? Grazie a tutti. Link al commento Condividi su altri siti More sharing options...
84paolo Inserita: 27 ottobre 2022 Segnala Share Inserita: 27 ottobre 2022 Al posto di cambiare colore con lo script, prova ad aggiungere una variabile interna all'HMI che la valorizzi dallo script e sulla pagina metti l'animazione del testo con il valore della tag. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 27 ottobre 2022 Segnala Share Inserita: 27 ottobre 2022 (modificato) Consiglio anch'io la soluzione proposta da Paolo, che è più semplice. Dal tuo codice, manca un ELSE. Tu gli dici solo quando deve diventare rosso. Ma, una volta che l'hai fatto diventare rosso, chi lo fa tornare al colore originale? Quote Il problema è che funziona solo se la pagina 3 è attiva, come posso fare a risolvere il problema ? Qui non ho capito cosa intendi. Se è un oggetto della pagina 3, ti accorgi se cambia colore solo quando sei in pagina 3. Modificato: 27 ottobre 2022 da batta Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 27 ottobre 2022 Autore Segnala Share Inserita: 27 ottobre 2022 Ciao a tutti. Il codice è un po' complesso vengono cambiati i colori in base alla differenza tra alcuni parametri. Esempio, se il risultato è compreso tra 2 valori viene assegnato un colore se il valore è compreso tra altri 2 un altro colore e così via. Nemmeno con i limiti posso risolvere anche perché i colori dei limiti di un campo i/o colorano lo sfondo e non il testo. Per quanto riguarda la pagina il sistema mi restituisce un errore fino a che non sono in quella pagina. Il mio script viene eseguito ogni secondo aggiornando circa 50 campi di varie pagine. Nessun problema ma se cambio colore ad un testo con lo script mentre non sono nella pagina dove è il parametro da modificare da errore. Praticamente quando lo script viene eseguito, devo essere fisicamente nella pagina dove risiede l'oggetto altrimenti restituisce errore. Non riesco a capire il motivo per cui debba essere così complesso cambiare una proprietà come il colore tramite script. Credo di non conoscere io la soluzione e non che non sia possibile.... A qualcuno è già successo? Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 27 ottobre 2022 Autore Segnala Share Inserita: 27 ottobre 2022 Scusate non avevo risposto ad una domanda. Ho solo scritto il codice per farlo diventare rosso, ovviamente se questo funziona poi il mio script assegnerà valori diversi in funzione dei vari parametri. Se volete posto il codice ma saranno 150 righe, non vorrei fare confusione visto che il problema è semplicemente come variare il colore di un campo i/o da uno script di di una pagina a mia scelta pur essendo in un'altra. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 27 ottobre 2022 Segnala Share Inserita: 27 ottobre 2022 6 ore fa, mattia237 ha scritto: Esempio, se il risultato è compreso tra 2 valori viene assegnato un colore se il valore è compreso tra altri 2 un altro colore e così via. Ma nelle proprietà dellìoggetto puoi scegliere il colore in base al valore assunto da una variabile in modo molto articolato. Probabilmente, quello che stai facendo nello script lo puoi fare direttamente nelle proprietà dellìoggetto. Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 27 ottobre 2022 Autore Segnala Share Inserita: 27 ottobre 2022 Ho provato a guardare nelle proprietà della casella i/o che possano gestire il colore in base a differenza tra valori riferiti ad altre variabili ma non ho trovato nulla che possa lavorare come specificato. In tutti i casi, oltre a soluzionare il problema mi piacerebbe sapere come poter gestire la cosa da script. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 28 ottobre 2022 Segnala Share Inserita: 28 ottobre 2022 19 ore fa, mattia237 ha scritto: Esempio, se il risultato è compreso tra 2 valori viene assegnato un colore se il valore è compreso tra altri 2 un altro colore e così Ma hai provato in "Animazioni" --> "Vista" --> "Conformazione"? Esempio: Se poi lo vuoi fare per forza con un o script, anziché agire direttamente sull'oggetto, imposta il valore di una variabile che, nell'animazione dell'oggetto, farà assumere il colore desiderato. Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 28 ottobre 2022 Autore Segnala Share Inserita: 28 ottobre 2022 Si , ho provato ma io devo discriminare dei valori con 2 cifre decimali esempio : tra 0.25 e 0.55 colore verde, tra -0.15 e -0.45 colore rosso etc... posso riuscire anche generando una variabile con un moltiplicatore 100 e usare la funzione di conformazione ma mi sembra iper macchinoso per un semplice cambio colore....possibile che sia solo questa soluzione ? Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 31 ottobre 2022 Autore Segnala Share Inserita: 31 ottobre 2022 Ciao a tutti, provo a postare una soluzione che magari possa essere di aiuto o possa essere approfondita e migliorata da chi ne sa più di me. Dim objc_1,var,x,var2 For x=1 To 19 var="Delta_Assorbimento_1_c" var2="Ass1_" Set objc_1 = HmiRuntime.Screens("Work 1.2").ScreenItems(var2&x+39) If SmartTags(var&x)=0 Then objc_1.ForeColor = RGB(0,0,0) Else If SmartTags("Delta_Assorbimento_1_c1")>0.6 Then objc_1.ForeColor = RGB(0,0,255) Else If SmartTags("Delta_Assorbimento_1_c1")>0.1 Then objc_1.ForeColor = RGB(0,255,0) Else If SmartTags("Delta_Assorbimento_1_c1")>-0.6 Then objc_1.ForeColor = RGB(0,255,0) Else If SmartTags("Delta_Assorbimento_1_c1")<-0.6 Then objc_1.ForeColor = RGB(255,0,0) End If End If End If End If End If Next Ovviamente funziona solo se si è dentro la pagina Work 1.2 (dove risiede l'oggetto di cui si vuole modificare la proprietà. Al di la della parte if che si poteva scrivere con and oppure or, così funziona. Lo script viene richiamato all'attivazione della pagina. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 31 ottobre 2022 Segnala Share Inserita: 31 ottobre 2022 Il 28/10/2022 alle 14:35 , mattia237 ha scritto: tra 0.25 e 0.55 colore verde, tra -0.15 e -0.45 colore rosso etc... posso riuscire anche generando una variabile con un moltiplicatore 100 e usare la funzione di conformazione ma mi sembra iper macchinoso per un semplice cambio colore Purtroppo, accetta solo valori interi. Però, una cosa mi devi spiegare: moltiplicare x100 una variabile ti sembra più macchinoso di quel codice? Tra l'altro, è uso abbastanza comune gestire da PLC una variabile di stato dell'oggetto, quando questo oggetto deve essere in qualche modo animato. La strada che stai seguendo non mi entusiasma ma, chiaramente, si tratta di una mia personale opinione. Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 31 ottobre 2022 Autore Segnala Share Inserita: 31 ottobre 2022 In questo modo gestisco 19 variabili senza crearne nessuna, se devo fare una variazione tocco 1 riga di codice.... Vedo molto più semplice gestire un codice come questo che usare tante variabili dove se devo modificare qualcosa devo prenderle in mano tutte. In più riesco a gestire tutto da pannello, non passo nemmeno per il PLC. Ovviamente anche la mia è una semplice opinione personale. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 31 ottobre 2022 Segnala Share Inserita: 31 ottobre 2022 4 ore fa, mattia237 ha scritto: In questo modo gestisco 19 variabili senza crearne nessuna, se devo fare una variazione tocco 1 riga di codice Sì, capisco, ma stai parlando di 19 variabili, non di 1900. E, come rovescio della medaglia, non hai un cross reference. Nel tempo che hai perso per trovare la soluzione, avresti già fatto tutto 10 volte. Ma è una tua scelta. Adesso, se non ho capito male, lo script viene lanciato all'apertura della pagina. E se la situazione cambia a pagina già aperta, chi fa cambiare colore all'oggetto? Potresti lanciare lo script al cambio di valore di una variabile. Per risolvere il problema dell'errore causato dalla pagina aperta non corrispondente, puoi usare: HmiRuntime.ActiveScreen al posto di: HmiRuntime.Screens Link al commento Condividi su altri siti More sharing options...
mattia237 Inserita: 31 ottobre 2022 Autore Segnala Share Inserita: 31 ottobre 2022 Si, realmente sono 19x2 38 variabili ma la cosa non cambia molto. Il fatto più che altro è imperniato sul non voler modificare 38 variabili se voglio fare una semplice modifica, magari perché mi rendo conto che è meglio usare un colore piuttosto che un altro, hai pienamente ragione, avrei fatto prima ma non avrei imparato nulla di nuovo. La prossima volta sarà know-how acquisto che mi permetterà di essere decisamente più rapido. Grazie per il consiglio, realmente per l'aggiornamento ho messo in semplice if dove se si è nella pagina al cambio variabile viene lanciato lo script che aggiorna i colori.... Grazie per il confronto. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 1 novembre 2022 Segnala Share Inserita: 1 novembre 2022 16 ore fa, mattia237 ha scritto: è imperniato sul non voler modificare 38 variabili se voglio fare una semplice modifica Non so se la soluzione fa al tuo caso ma, per non modificare manualmente ogni singolo oggetto (o le variabili ad esso collegate), potresti creare un Faceplate. Link al commento Condividi su altri siti More sharing options...
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