Vai al contenuto
PLC Forum


Selezione Multipla


Messaggi consigliati

Inserito:

Ciao a tutti, sto creando una piccola interfaccia grafica per comandare degli attuatori con valori in percentuale (0-100%).

Sto utilizzando wincc flexible 2008 sp3.

Per ogni casella è associata una variabile INT. I valori per ora si possono cambiare uno alla volta selezionando la casella ed imettendo il valore.


post-95661-0-55371600-1373985628_thumb.j

Supponiamo ora che le caselle fossero un centinaio, ed io avessi la necessità di selezionare da 2 a 'x' caselle per comandarle col medesimo valore, senza doverlo fare una alla volta. Credo servirà uno script VBA, ma non ne ho mai usati.

Come si può fare?

Grazie

Luca


Inserita:

ti crei uno script che ha l'istruzione FOR - NEXT con dei puntatori variabili che saranno i tuoi limiti.

dall'aiuto in linea fai una piccola prova dell'istruzione con puntatori fissi, quindi la rendi dinamica.

pigroplc

Inserita: (modificato)

Ciao Pigroplc grazie della risposta, ci sto provando, ma non ho mai usato vb e penso di avere problemi di sintassi.
Ho in testa quello che va fatto, ma non riesco a metterlo in pratica.
Ti posto qui il codice.

Dim counter
Dim counter1
Dim Rsval
Dim rs_sel

rs_sel=CStr(SmartTags("DB1.Bit")) // ho dovuto usare smarttag perchè non mi accettava le variabili
Rsval=CStr(SmartTags("DB1.DB_VAR"))
If SmartTags("SEL_Multi")=1 Then
For counter = 1 To 12
If rs_sel(counter)=1 Then
counter1=counter+10
Rsval(counter1)=Set_val
End If
Next
Else
For counter = 1 To 12
rs_sel(counter)=0
Next
End If

Non mi da nessun errore di compilazione ne errori nello script.

Per puntare alle variabili col ciclo for next ho creato degli array nel plc, perchè direttamente interne con wincc non so come si fa.

DB1.Bit è un array di 50 bit (sono i bit che si abilitano quando attivo il campo I/O)

DB1.DB_VAR è un array di 50 interi (sono i valori per gli attuatori)

SEL_Multi è la variabile booleana che mi abilita la multiselezione.

Set_val è la variabile per trasferire alle caselle selezionate il valore di comando.

counter e counter1 sono locali create direttamente nello script.

Ciao e grazie

Luca

Modificato: da Liuk78
Inserita:

Ho provato a rimuovere tutti gli smarttags e a rinominare tutte le variabili in modo che l'editor di script me le riconosce senza errori.

Dim counter


Dim counter1
If Mulsel=1 Then
For counter = 1 To 12
If Selcas(counter)=1 Then
counter1=counter+10
Valcas(counter1)=Set_val
End If
counter=counter+1
Next
End If

Ma non funziona comunque, a sto punto credo che sia il ciclo for next oppure i puntatori che, nonostante non ci sono errori di compilazione, siano impostati male.

Ciao

Inserita:

per esperienza personale il ciclo FOR NEXT funziona di suo, la funzione che tu cerchi di fare è l'aggiornamento dei tag in funzione della presenza di un bit di validità:

dal sito Siemens per la gestione di tag array:

Come si può in uno script accedere ai singoli elementi di un array?

L'accesso ai singoli elementi di un array avviene tramite il nome dell'array e l'indicazione del campo array.
Esempio
nTag = nArray(10)
nTag = SmartTags("nArray")(10)
Script-array locali possono essere selezionati secondo lo stesso principio. In caso di array locali multidimensionali, le singole dimensioni dell'array possono essere separate da una virgola.
Esempio
Dim Field(10,10) 'local tag - Variabile locale
nTag = Field(0, 5)

adesso veniamo al tuo esempio: potrebbe funzionare questo?

Dim puntatore_bit(100) ' puntatore del bit che dovrebbe essere un tag array
Dim puntatore_int(100) ' puntatore del valore che dovrebbe essere un tag array
Dim a

puntatore_bit(1)= 1 ' forzo a 1 questo per esempio

For a = 0 To 99
If puntatore_bit(a) = 1 Then
puntatore_int(a)= 100 ' forzo un valore qualsiasi, per esempio 100
End If
Next

io adesso non ho la possibilità di testarlo ma il compilatore non restituisce errori.

il risultato è che dovresti trovarti solamente un valore forzato a 100 mentre gli altri restano invariati

fai qualche prova

pigroplc

Inserita:

Grazie mille delle risposte pigroplc, ho fatto parecchie prove, ma non riesco ad uscirne.... :(:toobad:

Ciao

Luca

Inserita:

Per esempio, ora non riesco più a dichiarare smarttags me le segnala sempre in rosso; ho creato un array di bit per la selezione casella, ma quando sull'evento "imposta bit" cerco l'array non me lo da disponibile. Quello che mi hai scritto non fa una piega, ma credo di avere parecchi problemi di sintassi. :(<_<

Ciao :smile: :smile:

Luca

Inserita:

non mescoliamo cose che non c'entrano nulla:

la funzione imposta bit NON è una funzione per array, punto!

imposta i bit in un tag singolo formato word o doppia word se non erro.

Se vuoi fare un po di palestra con VBS devi partire dalle funzioni semplici e poi aggiungere di volta in volta delle difficoltà:

  1. metti lo script di prima nel tuo progetto. Se lo compila senza errori lo mandi in esecuzione con un tasto qualsiasi e vedi se non hai errori di esecuzione.
  2. se non hai errori di esecuzione è già un buon punto, NON sarai in grado di vedere il risultato della funzione in quanto si tratta di variabili interne dello script, ma almeno non si inchioda!
  3. passi alla dichiarazione dei tag array presi dal PLC magari chiamandoli proprio come nello script
  4. prova l'esempio di sotto:

Dim a

SmartTags(puntatore_bit)(1)= 1 ' confronti 1 o true adesso è notte e non ricordo

For a = 0 To 99
If SmartTags(puntatore_bit)(a) = 1 Then
SmartTags(puntatore_int)(a)= 100 ' forzo un valore qualsiasi, per esempio 100
End If
Next

funzionaaaaa?

fammi sapere

pigroplc

Inserita:

Grazie pigroplc ho risolto usando registri e puntatori facendo un loop in awl... Ma visto che m'interessa particolarmente imparare il vb ho archiviato il programa vecchio pronto per fare prove!! Quindi a breve lo riprovo usando i tuoi consigli!!!

Quello che voglio fare è quello di questo video.

https://www.youtube.com/watch?feature=player_detailpage&v=Ll4dlqv8kzY&list=UUG5mF_YsUbO5aCsFOYDMgLA

E vorrei assolutamente riuscire anche con vb script!

Ti farò sapere

Ciao ciao

Inserita:

Ciao Pigroplc funziona tutto, anche con vb script!!! :thumb_yello:

Ho capito dove sbagliavo, lo script di per se era già giusto, il problema era qui:

non mescoliamo cose che non c'entrano nulla:

la funzione imposta bit NON è una funzione per array, punto!

imposta i bit in un tag singolo formato word o doppia word se non erro.

Quella funzione "impostabit" è da usare per bit, quella che dici tu è impostabitnellavariabile. In pratica ora ho dovuto fare delle variabili doppie, l'array di selezione caselle per lavorare coi puntatori in vb script e bit singoli col medesimo indirizzo per poter utilizzare la funzione imposta bit quando attivo la casella.

Il codice è diventato questo:

Dim a


If SmartTags("Multisel_on_off")=True Then
For a = 0 To 11
If SmartTags("Puntatore_bit")(a)=True Then
SmartTags("Puntatore_int")(a)=SmartTags("Puntatore_int")(15) 'ho usato una variabile che c'era già anche se non è bello da vedere :P
End If
Next
Else
For a = 0 To 11
SmartTags("Puntatore_bit")(a)=False
Next
End If

Una domanda mi è rimasta, da bambino col commodore 16 usavo il basic, se non ricordo male le variabili contatore andavano incrementate manualmente nei cicli for next (a=a+1). Ora non serve più. E' molto che è così o mi ricordo male io?

Ciao ciao e grazie :thumb_yello:

Luca

Inserita:

Quando ero bambino io c'erano gli indiani, altro che commodore16 .........

Tieni conto che le versioni di basic cambiano, cambia quindi la sintassi.

Questo è VBS, quindi comincia a leggere l'aiuto in linea di VB che ti compare premendo F1 dall'ambiente dello script.

Se invece sei goloso di informazioni basta andare in rete o comprarsi dei libri.

Tieni conto che se pensi di sviluppare su pannelli equipaggiati con WinCE devi scordarti delle funzioni e soprattutto devi fare i conti con tempi di esecuzione biblici.

pigroplc

Inserita:

OK grazie di tutto pigroplc, mi sono preso un libro di vb... solo che tra lavoro trasferte e stanchezza, non ho ancora iniziato a leggerlo.

Ciao ciao

Luca

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