Vai al contenuto
PLC Forum


Wincc - Set Bit Di Una Word Con Toggle In Vbscript


GianMaria Salvetti

Messaggi consigliati

GianMaria Salvetti

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 =)

Link al commento
Condividi su altri siti


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 &not(H0002) in modo da non modificare gli altri bit

Link al commento
Condividi su altri siti

GianMaria Salvetti

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

Link al commento
Condividi su altri siti

GianMaria Salvetti

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

Link al commento
Condividi su altri siti

GianMaria Salvetti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

GianMaria Salvetti

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

Link al commento
Condividi su altri siti

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 &

Link al commento
Condividi su altri siti

  • 2 weeks later...
GianMaria Salvetti

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

=)

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