Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Wincc - Set Bit Di Una Word Con Toggle In Vbscript


Messaggi consigliati

GianMaria Salvetti
Inserito:

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


Inserita:

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

GianMaria Salvetti
Inserita:

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:

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

Inserita:

H0002 è una costante in esadecimale và usata come è scritta.

GianMaria Salvetti
Inserita:

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

Inserita:

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.

Inserita:

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:

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

Inserita:

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: (modificato)

Grazie mille lo stesso Ing.Lelos.. =)

Modificato: da GianMaria Salvetti
Inserita:

ciao

magari qualcuno del forum che usa wincc te lo può convertire, non credo impieghi più di 1 minuto.

  • 2 weeks later...
GianMaria Salvetti
Inserita:

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

=)

Inserita:

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 :thumb_yello:

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