Vai al contenuto
PLC Forum


Scada Con Visualbasic


trentaluca

Messaggi consigliati

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


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 esempio

potrebbe non funzionare al primo colpo ma in ogni caso dovrebbe rendere l'idea di

un modo come tanti altri per fare quello che ti serve.

Link al commento
Condividi su altri siti

la parte di codice che mi hai dato l'ho messa in un form chiamata da un timer da100ms

ho riscontrato dei problemi nella parte di codice:

open app.path+"allarmi.log"for append as numfileallarmi

mi 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

manca la sbagia "\" ,deve essere cosi

open app.path+"\allarmi.log"for append as numfileallarmi

perle 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: da dago_
Link al commento
Condividi su altri siti

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 Public

Public DescrizioneAllarme(1 to 100) As String

Link al commento
Condividi su altri siti

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 keydown

per 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

//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 modo

Sub 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 NumFileAllarmi

End 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 MouseDown

Per 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

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

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