Vai al contenuto
PLC Forum


Tia portal 15 hmiruntime


mattia237

Messaggi consigliati

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


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

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: da batta
Link al commento
Condividi su altri siti

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

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

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

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

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:

image.png.61baefda800b7c07f8dc95df86f9919b.png

 

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

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

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

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

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

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

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

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

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