GianMaria Salvetti Inserito: 2 febbraio 2014 Segnala Inserito: 2 febbraio 2014 Buonasera, volevo sapere se qualcuno è in grado di darmi una mano. sto lavorando VBScript e volevo sapere come posso settare e resettare con un comando toggle, vedi qui sotto un bit di una word.. Sub ToggleValue If HMIRuntime.Tags("VIS_TEXT").read = 1 Then HMIRuntime.Tags("VIS_TEXT").Write 0 Else HMIRuntime.Tags("VIS_TEXT").Write 1 End If End Sub volevo implementare questa funzione citata ad un azione, nel caso specifico quando premo il pulsante del mause. qualcuno conosce VBS e saprebbe dirmi qualè il codice script per poter settare e resettare un singolo bit di una word con funzione toggle, cioè commutando ad ogni clic da 1 a 0? GRAZIE =)
lelos Inserita: 2 febbraio 2014 Segnala Inserita: 2 febbraio 2014 ciao per modificare un singolo bit di una word puoi usare la tua word con un "and" per verificare lo stato e sempre usando "and" oppure "or" per modificarlo. esempio if tuavarabile &H0002 (testa il valore del 2° biti) then ..... se valore= 0 per diventare 1 tuavariabile orH0002 , se vale 1 per diventare 0 tuavariabile ¬(H0002) in modo da non modificare gli altri bit
GianMaria Salvetti Inserita: 3 febbraio 2014 Autore Segnala Inserita: 3 febbraio 2014 Ciao Lelos, scusami ma sono un po duro in materia.. ho provato ma non riesco a scrivere una sintassi corretta per lo script con VBScript di Wincc mi da errore, riusciresti a corregermelo? Please (SET_WORK_ACT = Valore a 16Bit senza segno - WordToUnsignedWord) ---------------------------------------------------------------------------------------------------------- Sub Click(Byval Item) If HMIRuntime.Tags("SET_WORK_ACT") And H0002.read = 1 Then HMIRuntime.Tags("SET_WORK_ACT") And Not H0002.Write 0 Else HMIRuntime.Tags("SET_WORK_ACT") Or H0002.Write 1 ---------------------------------------------------------------------------------------------------------- cosè che sbaglio? PS il simbolo "&" in wincc identifica una funzione di concatena se non sbaglio. Grazie del tuo celere aiuto..
GianMaria Salvetti Inserita: 3 febbraio 2014 Autore Segnala Inserita: 3 febbraio 2014 ..poi perchè "H" all'interno della maschera bit? ho provato a toglierla e la risposta è stata: ============Errore di run-time di Microsoft VBScript============ Application : Picture : 03-Page.pdl_Events Function : Sub Control481_Click(Byval Item) Line : 3 Error : Tipo non corrispondente: '[string: "VALVE_WORK_S_01"]' ============Errore di run-time di Microsoft VBScript============
lelos Inserita: 3 febbraio 2014 Segnala Inserita: 3 febbraio 2014 H0002 è una costante in esadecimale và usata come è scritta.
GianMaria Salvetti Inserita: 3 febbraio 2014 Autore Segnala Inserita: 3 febbraio 2014 gentilmnete avresti un codice di esempio.. non riesco a trovare una solzione valida, ho provato vari metodi e varie sintassi ma ogni volta che compilo mi da errore. Grazie
lelos Inserita: 3 febbraio 2014 Segnala Inserita: 3 febbraio 2014 ciao vbscript dovrebbe essere abbastanza standard io non ho esempi fatti con wincc ma in movicon o vb6. comunque If HMIRuntime.Tags("SET_WORK_ACT") And H0002 > 1 Then......(testo il secondo bit della word il risultato sarà uguale a = 0 o maggiore di 1, casualmente =1) HMIRuntime.Tags("SET_WORK_ACT") se questa è la ta word.
lelos Inserita: 3 febbraio 2014 Segnala Inserita: 3 febbraio 2014 HMIRuntime.Tags("SET_WORK_ACT")= HMIRuntime.Tags("SET_WORK_ACT") And Not H0002 Else HMIRuntime.Tags("SET_WORK_ACT")=HMIRuntime.Tags("SET_WORK_ACT") Or H0002 spero che il tuo vb lo accetti perché quelli che uso io si.
GianMaria Salvetti Inserita: 3 febbraio 2014 Autore Segnala Inserita: 3 febbraio 2014 Grazie Lelos.. alla fine ho aperto una chiamta di supporto con Siemens.. vediamo che mi diranno l'oro =) comunque anche questa versione non mi gira.. ------------------------------------------------------------------------------------ Dim VAR Set VAR = HMIRuntime.Tags("SET_WORK_ACT") VAR.Read If (VAR And H0002) = 1 Then VAR.Value = (VAR And Not H0002) VAR.Write Else VAR.Value = (VAR Or H0002) VAR.Write End If End Sub ------------------------------------------------------------------------------------ PS ho provato sia con "H" che senza.. ed ho provato anche con codice semplice, questo sopra è "referenziato" ma non va.. uff
lelos Inserita: 4 febbraio 2014 Segnala Inserita: 4 febbraio 2014 esempio in vb Public Sub Click() Dim risultato As Integer risultato= miaword And &H0002 If risultato> 0 Then miaword=miaword And Not(&H0002) Else miaword=miaword Or &H0002 End If End Sub mi sà che ti mancava il &
GianMaria Salvetti Inserita: 4 febbraio 2014 Autore Segnala Inserita: 4 febbraio 2014 (modificato) Grazie mille lo stesso Ing.Lelos.. =) Modificato: 4 febbraio 2014 da GianMaria Salvetti
lelos Inserita: 4 febbraio 2014 Segnala Inserita: 4 febbraio 2014 ciao magari qualcuno del forum che usa wincc te lo può convertire, non credo impieghi più di 1 minuto.
GianMaria Salvetti Inserita: 16 febbraio 2014 Autore Segnala Inserita: 16 febbraio 2014 alla fine ho utilizzato questo script.. sul singolo comando 1 o 0 o On e Off... script: Sub SetBitOfVar(Byval NomeVariabile, Byval nBit, Byval vBit, Byval nBitVar) 'nBit = numero del bit da settare/resettare con base 0 'vBit = valore da dare al bit 0 oppure 1 'nBitVar = numero di bit della variabile (byte 8, word 16) NO 32bit, perchи si gira i 2 byte 't = valore temporaneo di nomeVariabile 'non serve specificare si intende che vBit = 0 Dim t t = HMIRuntime.Tags(nomeVariabile).Read If vBit = 1 Then t= t Or (2^nBit) Else t = t And (((2^nBitVar)-1) - (2^nBit)) End If HMIRuntime.Tags(nomeVariabile).Write t End Sub =)
lelos Inserita: 16 febbraio 2014 Segnala Inserita: 16 febbraio 2014 ciao come al solito (come dice Livio) UCAS è una dato di fatto. la siemens deve sempre fare a modo suo. comunque ottimo che hai risolto
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