trentaluca Inserito: 10 aprile 2003 Segnala Share Inserito: 10 aprile 2003 Premettendo che uso da poco visual basic avrei bisogno delle dritte sulla memorizzazione dadi e più precisamente:-Ho dei segnali di allarme(bit)che prelevo dal plc(0,1) e dovrei assegnare a ciascun bit una segnalazione di allarmi..in pratica vorrei riuscire a fare un listato allarmi in un form in cui appaiano solo gli allarmi presenti e se la condizione di attivazione non è più presente scompaiano di conseguenza..-Se pretendo troppo vorrei fare anche uno storico in cui leggo ora e data in cui si è verificato un cambiamento di stato del segnale.Grazie a tutti Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 10 aprile 2003 Segnala Share Inserita: 10 aprile 2003 Prova così, supponiamo che Allarme(bit) va da 1 a 100'Apri il file log allarmi, con Append i nuovi eventi verranno aggiunti sempre alla'fine del file. Dim NumFileAllarmi as Integer NumFileAllarmi = FreeFile Open App.Path + "Allarmi.log" For Append As NumFileAllarmi'Ricordati di chiudere il file con la chiusura dell'applicazione Dim ConfrontoBit(1 To 100) As Integer Dim DescrizioneAllarme(1 to 100) As String For Indice = 1 To 100 'Controlla se lo stato del bit è diverso dalla precedente lettura If ConfrontoBit(Indice) <> Allarme(Indice) Then 'Quindi se è diverso ed è uguale a zero(0) allora l'allarme è rientrato 'In questo modo puoi salvare in che momento è rientrato If StatoBit(Indice) = 0 Then Write #NumeroFileAllarmi, Indice, "Allarme Rientrato", Format$(Date, "dd/mm/yy"), Format$(Time, "hh:mm:ss"), DescrizioneAllarme(indice) 'Se invece è diverso ma uguale a uno(1) allora è un allarme attivo If StatoBit(Indice) = 1 Then Write #NumFileAllarmi, Indice, "Allarme Attivo", Format$(Date, "dd/mm/yy"), Format$(Time, "hh:mm:ss"), DescrizioneAllarme(indice) 'Qui volendo puoi mettere qualcosa che indica l'arrivo di un nuovo allarme NuovoAllarmeAttivo = True End If 'Adesso salviamo lo stato del bit per il successivo confronto ConfrontoBit(Indice) = StatoBit(Indice) End If 'Qui trasferiamo ancora tanto per esagerare ConfrontoBit(Indice) = StatoBit(Indice)Next Indice'In questo modo gli allarmi vengono registrati così:'52,"Allarme Attivo","06/12/63","14.12.25","Anomalia Movimento Chiusura Modulo"'52,"Allarme Rientrato","06/12/63","14.15.01","Anomalia Movimento Chiusura Modulo"Questo più o meno dovrebbe andare bene come esempio, inutile dire che questo esempiopotrebbe non funzionare al primo colpo ma in ogni caso dovrebbe rendere l'idea diun modo come tanti altri per fare quello che ti serve. Link al commento Condividi su altri siti More sharing options...
trentaluca Inserita: 10 aprile 2003 Autore Segnala Share Inserita: 10 aprile 2003 GRAZIE DAGO ADESSO VADO A SMANETTARCI UN PO... Link al commento Condividi su altri siti More sharing options...
trentaluca Inserita: 11 aprile 2003 Autore Segnala Share Inserita: 11 aprile 2003 la parte di codice che mi hai dato l'ho messa in un form chiamata da un timer da100msho riscontrato dei problemi nella parte di codice:open app.path+"allarmi.log"for append as numfileallarmimi da un errore di tipo 52...(nome o numero di file non valido)...domande...1)ma il file allarmi.log si crea in quella riga o deve già preesistere nella cartella del programma.2)Le stringhe di allarmi(descrizione allarmi) le memorizzo in un modulo?ciao e grazie.. Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 11 aprile 2003 Segnala Share Inserita: 11 aprile 2003 (modificato) manca la sbagia "\" ,deve essere cosiopen app.path+"\allarmi.log"for append as numfileallarmiperle descriziome per adessp fai cosi nel modulo, poi si possono caricare da un file txt o inf.DescrizioneAllarme(1)="Allarme 1 fijdoijfjdoi"DescrizioneAllarme(2)="Allarme 2 skkjfjkskfjkjdsfkjkdjf"DescrizioneAllarme(3)="Allarme 3fdkfkdlkfòldkfklòdkfldlkf"....DescrizioneAllarme(100)="Allarme 100' fijdsfdfjidkfd" Modificato: 11 aprile 2003 da dago_ Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 11 aprile 2003 Segnala Share Inserita: 11 aprile 2003 Altra cosa, questo non va bene Dim DescrizioneAllarme(1 to 100) As String,Deve essere dichiarato in un modulo in questo modo per essere statica, oppure devi sostituire Dim con Static, ma è meglio nel modulo come PublicPublic DescrizioneAllarme(1 to 100) As String Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 11 aprile 2003 Segnala Share Inserita: 11 aprile 2003 (modificato) Prova l'esempio che trovi qui: http://web.tiscali.it/maravea/non posso pubblicarlo nella sezione up/download perchè non mi ricordo la password. Modificato: 11 aprile 2003 da dago_ Link al commento Condividi su altri siti More sharing options...
trentaluca Inserita: 13 aprile 2003 Autore Segnala Share Inserita: 13 aprile 2003 Grazie mille dago.....Ho scaricato il tuo programmino di esempio l' ho rovinato un po ed ho ottenuto la mia benedetta pagina allarmi...In più ho messo una list box che mi fa visualizzare solo gli allarmi attivi e la resetto ogni secondo così cancello tutto e faccio solo un refresch degli allarmi effettivamente presenti.Ho aggiunto una combo box buttandogli dentro lo storico degli aalrmi così da non dover andare nel file log per vedere lo storico...Avrei una domanda: alla prima lettura del form(allarmi)non posso buttare dentro nella combo box tutti i dati del file log??Se si mi potresti spiegare come??Che limitazione ho di memoria in una combo box...sicuramente non potro caricarci dentro storici lunghissimi...Altra domandina...ho provato e riprovato a utilizzare la propietà keyup e keydownper far funzionare un botton come un pulsante elettromeccanico e cioè attivare una memoria alla sua pressione e disattivarla al suo rilascio...ma chissa che casini combino...il giochino mi funziona con i tasti della tastiera (tutti in quanto non riesco a indirizzarlo su uno)ma non funziona se il botton lo schiaccio col mause...Grazie ancora..ciao.. Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 13 aprile 2003 Segnala Share Inserita: 13 aprile 2003 //Avrei una domanda: alla prima lettura del form(allarmi)non posso buttare dentro nella combo box tutti i dati del file log??//'Modifica la Sub ApriFileAllarmi in questo modoSub ApriFileAllarmi(Nome As String) '===================================================================='Apri il file log allarmi, con input per caricare la listbox NumFileAllarmi = FreeFile Open App.Path + "\" + Nome For Input As NumFileAllarmi'carica la listbox con gli allarmi presenti nel file log'nascondi la listbox, in questo modo il caricamento è molto più veloce Form1.List1.Visible = False 'svuota la listbox Form1.List1.Clear Dim NumeroAll As String Dim TipoAll As String Dim DataAll As String Dim OraAll As String Dim DescrizioneAll As String Dim RigaAll As String Do While Not EOF(NumFileAllarmi) ' Ripete fino alla fine del file. 'Leggi tutti i campi Input #NumFileAllarmi, NumeroAll, TipoAll, DataAll, OraAll, DescrizioneAll 'aggiungi alla listbox le righe prelevate dal file log 'Componi la riga, nell'ordine che vuoi e con i dati che ti servono, da caricare nella listbox RigaAll = TipoAll + " " + datall + " " + OraAll + " " + DescrizioneAll Form1.List1.AddItem RigaAll Loop 'mostra la listbox aggiornata Form1.List1.Visible = True Close NumFileAllarmi '===================================================================='QUESTO E' QUELLO CHE C'ERA GIA' 'Apri il file log allarmi, con Append i nuovi eventi verranno aggiunti sempre alla 'fine del file. NumFileAllarmi = FreeFile Open App.Path + "\" + Nome For Append As NumFileAllarmiEnd Sub//Che limitazione ho di memoria in una combo box...sicuramente non potro caricarci dentro storici lunghissimi...//Il limite delle listbox,combobox,ecc.... non è di memoria ma di indice, in pratica non si possono caricare più di 32K elementi//Altra domandina...ho provato e riprovato a utilizzare la propietà keyup e keydown//dunque...Per il pulsante devi usare l'evento MouseUp e MouseDownPer i tasti, imposta la proprietà del Form1 (o come l'hai chiamato) KeyPreview = True quindi metti una label a caso sul form e nella Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) scrivi Label1.Caption = CStr(KeyCode)in questo modo vedi cosa hai premuto, quindi con un Select Case intercetti quello che serve, stesso discorso per KeyDown Link al commento Condividi su altri siti More sharing options...
trentaluca Inserita: 14 aprile 2003 Autore Segnala Share Inserita: 14 aprile 2003 grazie mille....Ora quando ho tempo in ditta c proverò....Volevo sapere se conosci qualche sito dove poter scaricare immagini di componenti industriali in formato 2d/3d da inserire nello scada tipo pompe,elettrovalvole,motori,silos,ecc e chi più ne ha più ne metta...Sapendo che le ditte che vendono supervisione fanno pagare un occhio della testa le librerie aggiuntive penso che di sti simboli non ce ne siano in giro un h...comunque se non si possono scaricare mi puoi suggerire un programmino grafico per farmele??Grazie ancora.. Link al commento Condividi su altri siti More sharing options...
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