Liuk78 Inserito: 16 luglio 2013 Segnala Inserito: 16 luglio 2013 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. 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
pigroplc Inserita: 17 luglio 2013 Segnala Inserita: 17 luglio 2013 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
Liuk78 Inserita: 17 luglio 2013 Autore Segnala Inserita: 17 luglio 2013 (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: 17 luglio 2013 da Liuk78
Liuk78 Inserita: 18 luglio 2013 Autore Segnala Inserita: 18 luglio 2013 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
pigroplc Inserita: 18 luglio 2013 Segnala Inserita: 18 luglio 2013 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
Liuk78 Inserita: 18 luglio 2013 Autore Segnala Inserita: 18 luglio 2013 Grazie mille delle risposte pigroplc, ho fatto parecchie prove, ma non riesco ad uscirne.... Ciao Luca
Liuk78 Inserita: 18 luglio 2013 Autore Segnala Inserita: 18 luglio 2013 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: Luca
pigroplc Inserita: 19 luglio 2013 Segnala Inserita: 19 luglio 2013 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à: 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. 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! passi alla dichiarazione dei tag array presi dal PLC magari chiamandoli proprio come nello script 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
Liuk78 Inserita: 19 luglio 2013 Autore Segnala Inserita: 19 luglio 2013 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
Liuk78 Inserita: 21 luglio 2013 Autore Segnala Inserita: 21 luglio 2013 Ciao Pigroplc funziona tutto, anche con vb script!!! 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 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 Luca
pigroplc Inserita: 22 luglio 2013 Segnala Inserita: 22 luglio 2013 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
Liuk78 Inserita: 22 luglio 2013 Autore Segnala Inserita: 22 luglio 2013 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
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