Buonasera a tutte/i. Ho 'ereditato' questo 'progetto' ( vedi di seguito ) da altri, e dovrei implementarlo facendo anche questo...
che consigli mi date in merito? Grazie per l'attenzione e auguri a tutte/i per una splendida serata ed una favolosa settimana.
Progetti previsti
Lo scopo dei progetti è finalizzato alla gestione dei dati per la verifica della qualità del processo eseguito
1 applicativo per pc per lettura e raccolta dati da unità (macchina), salvataggio su pc e copia su altra unità(macchina)
2 applicativo raccolta dati e creazione data base da unità(macchina) con connessione on-line
3 applicativo raccolta dati e creazione data base da unità(macchina) offline
progetto 1 : il progetto 1 consiste nel creare un applicativo con lo scopo finale di leggere dei dati da unità(macchina), salvarli su di un file, e copiarli nuovamente su altra unità(macchina).
progetto 2 : il progetto 2 consiste nella raccolta dati online da unità(macchina) connessa a rete mediante modem anybus.
Il progetto prevede che sia sviluppato un applicativo per PC in grado di raccogliere e mettere a disposizione dell'utente i dati in formato per foglio elettronico.
Lista dati output macchina :
matricola sn:
modello macchina:
settaggio macchina:
processo nr:
data:
ora:
operatore:
ref.vps ( ref. dati processo da normativa qualità processo)
programma ( parametri vari)
set macchina: vedi dati settembre dati reali di processo
allarmi
flusso
pressione
consumo?ricavabile da applicativo
cambio bombola
progetto 3: il progetto 3 consiste nella raccolta dati offline da unità(macchina) mediante scaricamento dati da interfaccia rs232.
il progetto prevede che sia sviluppato un applicativo per PC in grado di raccogliere e mettere a disposizione dell'utente i dati in formato per foglio elettronico.
lista dati output macchina :
vedi dati progetto 2
' dichiarazione variabili
Option Explicit
Dim nome_progetto, aaa, stringa, car, attesa_comando, attesa_comando_interno As String
Dim contatore, riga, colonna, ii, jj, kk, posizione, verso, numero_variabili_totale, numero_variabili_parziale, centesimi, portacom, debug1, debug2, debug3, in_ricezione As Integer
Private Sub comando_Click(Index As Integer) ' procedura comando_Click
If Index = 0 Then
' devo eseguire un reset, lo faccio hardware
' attesa_comando = "R"
uart.DTREnable = True ' DTR = Data Terminal Ready terminale dati pronto, dove cè il telefono
centesimi = 0
While centesimi < 10 ' se la variabile è minore di 10 centesimi, esegui DoEvents
DoEvents ' guarda cosa fa DoEvents https://support. office.c...3d4c2575b0
Wend
uart.DTREnable = False
ElseIf Index = 1 Then
attesa_comando = "*"
centesimi = 0
While centesimi < 10
DoEvents
Wend
End If
win.Clear
winc.Clear
Option3(0).Value = False
Option3(1).Value = False
Option3(2).Value = False
Option3(3).Value = False
Option3(4).Value = False
Option3(5).Value = True
End Sub
Private Sub Form_Load()
On Error GoTo qui
numero_variabili_totale = 0
numero_variabili_parziale = 0
contatore = 0
riga = 1
colonna = 0
win.Col = 0
win.Row = 0
resize:
WINDEBUG.Width = 11000
win.ColWidth(0) = 4800
win.ColWidth(1) = 1200
winc.ColWidth(0) = 500
winc.ColWidth(1) = 500
colonna = 1
GoTo li
qui:
comando(0).Caption = "ERR"
li:
On Error GoTo qui2 ' controllare cosè qui2
portacom = 1
' Single-line syntax:
' If condition Then [ statements ] [ Else [ elsestatements ] ]
Open "config.txt" For Input As #1 ' apre il file config.txt e..
Input #1, riga
If riga <>"" Then ' se il valore della variabile riga è diverso da 'vuoto' allora...
If riga = "1" Then ' se il valore della variabile riga è uguale a 1 assegna alla variabile portacom il valore 1
portacom = 1
ElseIf riga = "2" Then ' se il valore della variabile riga è uguale a 2 assegna alla variabile portacom il valore 2
portacom = 2
ElseIf riga = "3" Then ' se il valore della variabile riga è uguale a 3 assegna alla variabile portacom il valore 3
portacom = 3
ElseIf riga = "4" Then ' se il valore della variabile riga è uguale a 4 assegna alla variabile portacom il valore 4
portacom = 4
Else
portacom = 1
End If
Else:
portacom = 1
End If
Close #1
qui2:
Option2(portacom - 1).Value = True 'serve perchè il contatore di visual basic va da 0 a 3(in questo caso) e non da 1 a 4 come voci selezionabili
nome_progetto = Dir("..\sorgenti\*.uv2") ' cosè questa estensione uv2?
If Len(nome_progetto) > 4 Then
nome_progetto = Left((nome_progetto), Len(nome_progetto) - 4)
WINDEBUG.Caption = nome_progetto ' assegna a windebug.caption il nome del progetto? in questo caso uart.frm
Else
tasto_update.Enabled = False
End If
Option3(0).Value = False
Option3(1).Value = False
Option3(2).Value = False
Option3(3).Value = False
Option3(4).Value = False
Option3(5).Value = True
End Sub
Private Sub Option1_Click(Index As Integer)
attesa_comando = Chr(Asc("0") + Index)
Option1(Index).Value = True
' label_n.Caption = Index + 1
End Sub
Private Sub Option2_Click(Index As Integer)
portacom = Index + 1
End Sub
Private Sub Option3_Click(Index As Integer)
win.Clear
winc.Clear
attesa_comando = Chr(Asc("9") + 1 + Index)
End Sub
Private Sub tasto_extra_Click()
attesa_comando = Chr(Asc("+"))
End Sub
Private Sub tasto_uart_Click() ' rappresenta il pulsante Start
On Error GoTo seriale_occupata
If uart.PortOpen = False Then
apri_seriale
tasto_uart.Caption = "STOP"' se è già stato premuto il pulsante start, trasforma in STOP
cornice.Visible = True ' dove c'è la P che si vede il trasferimento dati
posizione = cornice.Left
verso = 1
puntatore.Left = posizione
puntatore.Visible = True
' comando(0).Visible = False
Else
chiudi_seriale
tasto_uart.Caption = "START"' se è stato stoppato il programma,
cornice.Visible = False ' dove c'è la P che si vede il trasferimento dati
puntatore.Visible = False ' se schiacci start si vede la barra di trasferimento dati, se schiacci stop sparisce
' comando(0).Visible = True
End If
GoTo fine_tasto_uart
seriale_occupata:
tasto_uart.Caption = "COMM ERROR"' se è stata selezionata una porta sbagliata il pulsante start diventa comm error
fine_tasto_uart:
End Sub
Private Sub tasto_exit_Click() ' rappresenta il pulsante exit che chiude la form ed esce dal programma
If uart.PortOpen = True Then
chiudi_seriale
End If
Open "config.txt" For Output As #1
If portacom = 1 Then
Print #1, "1"
ElseIf portacom = 2 Then
Print #1, "2"
ElseIf portacom = 3 Then
Print #1, "3"
ElseIf portacom = 4 Then
Print #1, "4"
Else
Print #1, "1"
End If
Close #1
End
End Sub
Private Sub tasto_update_Click()
Dim ritorno As Long ' variabile ritorno
Dim stato_seriale As Boolean ' dichiarazione variabile stato_seriale come booleana, ha 2 possibilità, o è vera o è falsa
If uart.PortOpen = True Then
stato_seriale = True
chiudi_seriale
' inserisco una pausa
centesimi = 0
While centesimi < 10
DoEvents
Wend
Else
stato_seriale = False
End If
On Error Resume Next
ritorno = Shell("fm.bat " + Str(portacom) + "" + nome_progetto, vbNormalFocus)
If ritorno = 0 Then MsgBox "Si è verificato un errore nell'apertura", vbCritical + vbOKOnly, "Errore!"
centesimi = 0
While centesimi < 10
DoEvents
Wend
' aspetto la fine del download
While Len(Dir("..\output\report.txt" )) = 0 ' Len restituisce un valore integer corrispondente al numero di caratteri di una stringa oppure
' al numero nominale di byte necessari per memorizzare una variabile.
DoEvents
Wend
If stato_seriale = True Then
tasto_uart_Click ' se lo stato della seriale risulta vero, esegui pulsante start
End If
win.Clear
winc.Clear
Option3(0).Value = False ' pulsante per la configurazione
Option3(1).Value = False ' pulsante per la calibrazione
Option3(2).Value = False ' pulsante per la modalità mig manuale
Option3(3).Value = False ' pulsante per la modalità mig sinergico
Option3(4).Value = False ' pulsante per la modalità pulsato
Option3(5).Value = True ' pulsante per il debug
End Sub
Private Sub Timer_Timer()
centesimi = centesimi + 1 ' incrementa il valore della variabile centesimi di 1
If centesimi > 20000 Then centesimi = 10000 ' se la variabile centesimi è maggiore di 20000 ( cioè 200 secondi, 3 minuti e 20 ) assegnagli il valore 10000, 100 secondi, 1 minuto e 40 secondi
If attesa_comando >"" Then
If uart.PortOpen = True Then
uart.Output = attesa_comando
End If
attesa_comando = ""
ElseIf attesa_comando_interno >"" Then
If uart.PortOpen = True Then
uart.Output = attesa_comando_interno
End If
attesa_comando_interno = ""
End If
If in_ricezione > 0 Then
in_ricezione = in_ricezione - 1
If verso = 1 Then
If posizione < cornice.Left + cornice.Width - puntatore.Width Then
posizione = posizione + 10
Else
posizione = posizione - 10
verso = 0
End If
Else
If posizione > cornice.Left Then
posizione = posizione - 10
Else
posizione = posizione + 10
verso = 1
End If
End If
Else
End If
puntatore.Left = posizione
End Sub
Private Sub Timer1_Timer() ' secondo orologio, posizionato tra il primo e il telefono giallo
'ogni 100ms
Dim ll As Integer
deb1.Text = debug1
deb2.Text = debug2
deb3.Text = debug3
If uart.PortOpen = True Then
aaa = uart.Input
If Len(aaa) > 0 Then
stringa = stringa + aaa
End If
End If
ll = Len(stringa)
'se sono troppo veloce a spedire e la stringa diventa troppo
'lunga taglio via la parte piu' vecchia
If ll > 1000 Then
stringa = Right(stringa, 900)
ll = 100
ElseIf ll < 100 Then
attesa_comando_interno = "#"
End If
'sistemo la stringa
kk = 0
While kk < ll
jj = 0
'innanzitutto cerco un carattere di inizio stringa (240 o 241 o 224)
While jj < ll
ii = Asc(Left(stringa, 1))
If ii = 240 Or ii = 241 Or ii = 224 Then
'ho trovato un inizio stringa
jj = 2000
Else
'se il primo carattere non e' un inizio stringa lo elimino
stringa = Right(stringa, ll - 1)
ll = Len(stringa)
End If
Wend
jj = ii
'ho un inizio stringa, vedo di che tipo
If jj = 240 And Len(stringa) > 2 Then
'ho trovato l'inizio di una stringa che contiene il nome della variabile, ne cerco la fine
riga = Asc(Mid(stringa, 2, 1))
If riga = 0 Then
win.Clear
winc.Clear
End If
If riga > win.Rows - 1 Then riga = win.Rows - 1
colonna = 0
ii = 3
aaa = ""
kk = ll + 1
While ii < ll
car = Mid(stringa, ii, 1)
If car = Chr(255) Then
'ho trovato la fine della stringa, la stampo
win.Col = colonna
win.Row = riga
If Right(aaa, 1) = "0" Then
Else
winc.Col = 0
winc.Row = riga
winc.Text = "-"
winc.Col = "1"
winc.Text = "+"
End If
aaa = Left(aaa, Len(aaa) - 1)
win.Text = aaa
stringa = Right(stringa, ll - ii)
ll = Len(stringa)
ii = ll + 1
kk = 0
numero_variabili_totale = riga
numero_variabili_parziale = 0
'aggiorna_puntatore
in_ricezione = 100
Else
aaa = aaa + car
End If
ii = ii + 1
Wend
ElseIf jj = 241 And ll > 2 Then
'ho trovato l'inizio di una variabile (in formato stringa), ne cerco la fine
riga = Asc(Mid(stringa, 2, 1))
If riga > 25 Then riga = 25
colonna = 1
ii = 3
aaa = ""
kk = ll + 1
While ii < ll
car = Mid(stringa, ii, 1)
If car = Chr(255) Then ' se il valore della variabile car è uguale a 255 ( cioè l'ultimo carattere della stringa )
'ho trovato la fine della stringa, la stampo
win.Col = colonna
win.Row = riga
If aaa = "" Then aaa = "0"
win.Text = aaa
stringa = Right(stringa, ll - ii)
ll = Len(stringa)
ii = ll + 1
kk = 0
in_ricezione = 100
numero_variabili_parziale = riga
Else
aaa = aaa + car
End If
ii = ii + 1
Wend
Else
'fine delle ricerche
kk = ll + 1
End If
Wend
End Sub
'Private Sub uart_OnComm()
' If uart.CommEvent = comEvReceive Then
' aaa = uart.Input
' If Len(aaa) > 0 Then
'
' stringa = stringa + aaa
'
' End If
' End If
'
'
' If attesa_comando >"" Then
' uart.Output = attesa_comando
' attesa_comando = ""
' End If
'
'End Sub
Private Sub apri_seriale()
If uart.PortOpen = False Then
uart.CommPort = portacom
uart.Settings = "19200,n,8,1"
uart.DTREnable = False
uart.RTSEnable = False
uart.EOFEnable = False
uart.Handshaking = comNone
uart.InBufferSize = 1024
uart.InputMode = comInputModeText
uart.InputLen = 0
uart.RThreshold = 100
uart.SThreshold = 100
uart.PortOpen = True
End If
End Sub
Private Sub chiudi_seriale() ' procedura chiudi_seriale per chiudere il programma
If uart.PortOpen = True Then
uart.PortOpen = False
End If
End Sub
Private Sub winc_Click() ' procedura winc_Click che fa cosa?
If uart.PortOpen = True Then
If winc.ColSel = 0 Then
attesa_comando = Chr(Asc("a") + winc.RowSel)
ElseIf winc.ColSel = 1 Then
attesa_comando = Chr(Asc("A") + winc.RowSel)
End If
uart.Output = attesa_comando
attesa_comando = ""
'debug1 = debug1 + 1
End If
End Sub
Private Sub winc_DblClick() ' Evento Control.DoubleClick https:// msdn.microsoft.c...aspx
winc_Click
' If winc.ColSel = 0 Then
' attesa_comando = Chr(Asc("a") + winc.RowSel)
' ElseIf winc.ColSel = 1 Then
' attesa_comando = Chr(Asc("A") + winc.RowSel)
' End If
End Sub