fabiospark Inserito: 16 febbraio 2008 Segnala Share Inserito: 16 febbraio 2008 Salve.Non sono uno sviluppatore professionista ma mi viene chiesto di modificare l'indicazionedel 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 nonha associato né registrazioni su database né altro.Dopo qualche ricerca all'interno dell'applicazione (che non ho sviluppato io) ho vistoche la variabile associata all'indicatore suddetto si chiama MP_1001_hACT_Temped è 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:" & 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 & "_EnManu")) And CBool(GetVariableValue(strNomeDev & "_Start")) Then lngMinDev = GetVariableValue("ArrayDwDevMin:" & Format(intArrayIndice,"000")) lngMinDev = lngMinDev + 1 SetVariableValue("ArrayDwDevMin:" & Format(intArrayIndice,"000"),lngMinDev) 'Se è trascorsa un'ora di funzionamento aggiorno il valore delle ore If lngMinDev = 60 Then lngHdev = GetVariableValue(strNomeDev & "_hManuACT") lngHdev = lngHdev + 1 'Controllo l'overflow della variabile If CLng(GetVariableValue(strNomeDev & "_hManuACT")) = 4294967295 Then SetVariableValue(strNomeDev & "_hManuACT",0) Else SetVariableValue(strNomeDev & "_hManuACT",lngHdev) End If booModdifica = True SetVariableValue("ArrayDwDevMin:" & Format(intArrayIndice,"000"),0) End If 'Se le ore di funzionamento sono = o > di quelle impostate setto il bit di richiesta manutenzione If lngHdev >= CLng(GetVariableValue(strNomeDev & "_hManuSet")) Then SetVariableValue(strNomeDev & "_Manu",True) End If End If '*** Gestione dei contaore dei motori - Aggiunta in fase di collaudo If CBool(GetVariableValue(strNomeDev & "_Start")) Then lngMinDev = GetVariableValue("ArrayDwMin_Contaore:" & Format(intArrayIndice,"000")) lngMinDev = lngMinDev + 1 SetVariableValue("ArrayDwMin_Contaore:" & Format(intArrayIndice,"000"),lngMinDev) If lngMinDev >= 60 Then 'Contaore assoluto lngHdev = GetVariableValue(strNomeDev & "_hACT") lngHdev = lngHdev + 1 'Controllo l'overflow della variabile If CLng(GetVariableValue(strNomeDev & "_hACT")) = 4294967295 Then SetVariableValue(strNomeDev & "_hACT",0) Else SetVariableValue(strNomeDev & "_hACT",lngHdev) End If lngHdev = GetVariableValue(strNomeDev & "_hACT_Temp") lngHdev = lngHdev + 1 'Contaore temporaneo lngHdev = GetVariableValue(strNomeDev & "_hACT_Temp") lngHdev = lngHdev + 1 'Controllo l'overflow della variabile If CLng(GetVariableValue(strNomeDev & "_hACT_Temp")) = 4294967295 Then SetVariableValue(strNomeDev & "_hACT_Temp",0) Else --------------------------------SetVariableValue(strNomeDev & "_hACT_Temp",lngHdev) End If 'Resetto il valore della variabile minuti SetVariableValue("ArrayDwMin_Contaore:" & 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" & Err.Number & vbCrLf & 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 & "_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 sensoe 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 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