Vai al contenuto
PLC Forum


Modificare Script Per Indicazione Ore Trascorse - Chiedo conferma correttezza mie considerazioni


fabiospark

Messaggi consigliati

Salve.

Non sono uno sviluppatore professionista ma mi viene chiesto di modificare l'indicazione

del tempo di funzionamento di un motore dalle sole ore a ore e minuti.

Il campo in oggetto è un semplice indicatore numerico in un sinottico di Movicon X e non

ha associato né registrazioni su database né altro.

Dopo qualche ricerca all'interno dell'applicazione (che non ho sviluppato io) ho visto

che la variabile associata all'indicatore suddetto si chiama MP_1001_hACT_Temp

ed è di tipo 32 bits unsigned.

Cercando nella cartella "Scripts" dell'applicazione ho trovato lo script che vedete nel box qui sotto (i trattini ce li ho messi io)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<MovResource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<scriptCode StartSel="2082" SelLength="0" OutStatusBar="true" OutLog="true" OutPrinter="true">'Questa routine viene richiamata ogni minuto e aggiorna i minuti di funzionamento dei componenti
'che sono in funzione - Durante il collaudo è stato richiesto di avere dei contatori per le ore di funzionamento
'e la loro gestione è stata implementata in questa routine

Sub Main
    Dim intArrayIndice As Integer
    Dim strNomeDev As String
    Dim lngMinDev As Long
    Dim lngHdev As Long
    Dim booModdifica As Boolean

    On Error GoTo Err_CalcoloManutenzione
    '#Uses "*fncDBdettaglio"
    booModdifica = False
    For intArrayIndice = 1 To 100
        strNomeDev = CStr(GetVariableValue("ArrayStrDev:" &amp; Format(intArrayIndice,"000")))
        'Se la posizione nell'array è vuota vuol dire che non ci sono più componenti da controllare
        If strNomeDev = "" Then Exit For
        'Se il motore è in marcia ed è abilitata la funzione di controllo ore aggiorno i minuti di funzionamento
        If CBool(GetVariableValue(strNomeDev &amp; "_EnManu")) And CBool(GetVariableValue(strNomeDev &amp; "_Start")) Then
            lngMinDev = GetVariableValue("ArrayDwDevMin:" &amp; Format(intArrayIndice,"000"))
            lngMinDev = lngMinDev + 1
            SetVariableValue("ArrayDwDevMin:" &amp; Format(intArrayIndice,"000"),lngMinDev)
        'Se è trascorsa un'ora di funzionamento aggiorno il valore delle ore
            If lngMinDev = 60 Then
                lngHdev = GetVariableValue(strNomeDev &amp; "_hManuACT")
                lngHdev = lngHdev + 1
        'Controllo l'overflow della variabile
                If CLng(GetVariableValue(strNomeDev &amp; "_hManuACT")) = 4294967295 Then
                    SetVariableValue(strNomeDev &amp; "_hManuACT",0)
                Else
                    SetVariableValue(strNomeDev &amp; "_hManuACT",lngHdev)
                End If
                booModdifica = True
                SetVariableValue("ArrayDwDevMin:" &amp; Format(intArrayIndice,"000"),0)
            End If
        'Se le ore di funzionamento sono = o &gt; di quelle impostate setto il bit di richiesta manutenzione
            If lngHdev &gt;= CLng(GetVariableValue(strNomeDev &amp; "_hManuSet")) Then
                SetVariableValue(strNomeDev &amp; "_Manu",True)
            End If
        End If
        '*** Gestione dei contaore dei motori - Aggiunta in fase di collaudo
        If CBool(GetVariableValue(strNomeDev &amp; "_Start")) Then
            lngMinDev = GetVariableValue("ArrayDwMin_Contaore:" &amp; Format(intArrayIndice,"000"))
            lngMinDev = lngMinDev + 1
            SetVariableValue("ArrayDwMin_Contaore:" &amp; Format(intArrayIndice,"000"),lngMinDev)
            If lngMinDev &gt;= 60 Then
        'Contaore assoluto
                lngHdev = GetVariableValue(strNomeDev &amp; "_hACT")
                lngHdev = lngHdev + 1
        'Controllo l'overflow della variabile
                If CLng(GetVariableValue(strNomeDev &amp; "_hACT")) = 4294967295 Then
                    SetVariableValue(strNomeDev &amp; "_hACT",0)
                Else
                    SetVariableValue(strNomeDev &amp; "_hACT",lngHdev)
                End If
                lngHdev = GetVariableValue(strNomeDev &amp; "_hACT_Temp")
                lngHdev = lngHdev + 1
        'Contaore temporaneo
                lngHdev = GetVariableValue(strNomeDev &amp; "_hACT_Temp")
                lngHdev = lngHdev + 1
        'Controllo l'overflow della variabile
                If CLng(GetVariableValue(strNomeDev &amp; "_hACT_Temp")) = 4294967295 Then
                    SetVariableValue(strNomeDev &amp; "_hACT_Temp",0)
                Else
--------------------------------SetVariableValue(strNomeDev &amp; "_hACT_Temp",lngHdev)
                End If
        'Resetto il valore della variabile minuti
                SetVariableValue("ArrayDwMin_Contaore:" &amp; Format(intArrayIndice,"000"),0)
            End If
        End If
    Next
    'Se una delle variabili del DB è stata vaiata aggiorno tutto il DB
    If booModdifica Then fncDBdettaglio(True,"")

Exit_CalcoloManutenzione :
    On Error Resume Next
    Exit Sub

Err_CalcoloManutenzione :
    MsgBox ("Warning !!! One error was detected" &amp; Err.Number &amp; vbCrLf &amp; Err.Description, _
    vbCritical, "CalcoloManutenzione - Error mesage")
    Resume Exit_CalcoloManutenzione

End Sub
</ScriptCode>
<Mode RunAtServer="true" UseUIInterface="true" SeparateThread="false" UseItsTrace="false" ModalDialogs="false"/>
<Execution ThreadPriority="0" StatusVariable="" MaxInstances="1" SleepExecution="0" SyncroScriptTimeout="5000"/>
</MovResource>
Con le mie scarse conoscenze di programmazione, ho pensato di creare una nuova variabile stringa che contenga la concatenazione del valore delle ore + un punto + il valore dei minuti. Per l'implementazione ho quindi pensato di: 1) Aggiungere all'inizio la dichiarazione di una nuova variabile come segue:
      Dim strHminDev As String
2) Aggiungere, prima della riga evidenziata con i trattini, il set della nuova variabile come segue:
       strHminDev = lngHdev & "." & lngMinDev
3) Modificare la riga suddetta sostituendo l'attuale
lngHdev
con il nuovo
strHminDev
4) In alternativa alla 3), invece della modifica penso di aggiungere una nuova riga con il set di una variabile con un nome leggermente diverso da quella esistente (_hmACT_temp invecedi _hACT_Temp) e cioè questo:
   SetVariableValue(strNomeDev &amp; "_hmACT_Temp",lngHminDev)

Naturalmente, in questo caso dovrò poi andare a modificare l'associazione della variabile all'indicatore in Movicon e il suo formato da numerico a stringa.

Non avendo la piena conoscenza di quello che sto per fare, vi chiedo se tutto ciò può avere senso

e se le regole usate per la concatenazione dei valori che ho indicato nella 2) sono corrette o no.

Ovviamente non mancherò di fare un backup totale prima di modificare alcunchè.

Grazie per l'attenzione.

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