Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Richiesta di aiuto/suggerimento per sviluppo progetto

$
0
0

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

Viewing all articles
Browse latest Browse all 2212

Trending Articles


HOY PANGIT, MAGBAYAD KA!


Henry el monstruo feliz para colorear e imprimir


Dama y vagabundo para pintar


Girasoles para colorear


Good Morning Quotes


RE: Mutton Pies (jameskoiman)


Hagibis (1946) by Francisco V. Coching


Ka riam ka beit bad ka por riam


Vimeo Create - Video Maker & Editor 1.6.0 by Vimeo Inc


Vimeo 3.42.1 by Vimeo Inc