Newsgroup: it.comp.lang.visual-basic
Titolo: info sintassi

scusate qualcuno sa indicarmi dove sbaglio la sintassi in questo pezzetto di
programma?
res = leggidaplc(cmdReadDM, addrTaraMinBilUno, 1, outV)
        If res Then
            txtBilancia1(0).Text = Mid(outV, 1, 4)
Mi da sempre errore quando cerco di creare l'eseguibile.
Grazie anticipato per l'info..........
Se potete mandate un E-mail : 
in...@ag-net.net

 ha scritto nel messaggio
news:8dkmph$r75$1...@pegasus.tiscalinet.it...

Dovresti indicare anche come sono dichiarati leggidapcl, cmdReadDM,
addrTaraMinBilUno, res e outV
--
 
federic...@planet.it
Eliminare NOSPAM dall'indirizzo! Delete NOSPAM from address!

addrTaraMinBilUno, res e outV
esatto, poiché può benissimo essere che il tipo di dati restituito dalla funzione (leggidalpc) sia
diverso da res (e non solo).
Se ad esempio la funzione ritorna un valore di tipo booleano (per indicare il successo o meno delle
operazioni) allora "res" deve essere di tipo booleano; inoltre le variabili passate alla funzione
devono essere dello stesso tipo dei parametri dichiarati nella funzione (function leggidalpc (par1
as..., par2 as....) as boolean)
Ciao,
Moreno
#sirri#@
morenosoft.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

Public Function leggiDaPLC(comando As String, start As String, num As
Integer, outVal As String) As Boolean
    Dim outS As String
    Dim inS As String
    Dim retCode As String
    Dim numStr As String
    numStr = Format(Abs(num))
    If Len(numStr) Then numStr = Mid(numStr, 1, 4)
    While Len(numStr) < 4
        numStr = 0 & numStr
    Wend
    Dim startStr As String
    startStr = Format(Abs(start))
    If Len(startStr) Then startStr = Mid(startStr, 1, 4)
    While Len(startStr) < 4
        startStr = 0 & startStr
    Wend
    outVal = ""
    leggiDaPLC = True
    outS = generaFrame(comando, startStr & numStr)
    If Not comPLC.PortOpen Then
        comPLC.PortOpen = True
    End If
    comPLC.Output = outS
    ' Wait for data to come back to the serial port.
    inS = ""
    tmrTimeout.Enabled = False
    tmrTimeout.Enabled = True
    timedOut = False
    Do
        Do
            DoEvents
        Loop Until (comPLC.InBufferCount >= 1) Or (timedOut)
        If comPLC.PortOpen Then
            inS = inS & comPLC.Input
        End If
        If inS = "" Then
            inS = "1"
        End If
    Loop Until (Mid(inS, Len(inS), 1) = vbCr) Or (timedOut)
    tmrTimeout.Enabled = False
    If inS <> "1" And isFrameOK(inS) Then
        setAllarme 0, False
        ' Estraggo i dati letti
        retCode = Mid(inS, 6, 2)
        If retCode <> "00" Then
            ' Errore nella risposta
            leggiDaPLC = False
            outVal = "Errore PLC (" & retCode & ")"
        Else
            ' Risposta OK
            outVal = Mid(inS, 8)
            outVal = Mid(outVal, 1, Len(outVal) - 4)
        End If
    End If
    If timedOut Then
        leggiDaPLC = False
        outVal = "Time out di comunicazione"
        setAllarme 0, True
    End If ' timedOut
    ' Close the serial port.
    If comPLC.PortOpen Then
        comPLC.PortOpen = False
    End If
End
Function -------------------------------------------------------------------
--------
Private Sub LeggiParametriImpianto()
Dim outV As String
Dim res As Boolean
Dim i As Integer
Dim nSerb As Integer
Dim risp  As Integer
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("library\dosatore.mdb")
Set rs = db.OpenRecordset("SELECT Serbatoi.Serbatoio, Serbatoi.Prodotto,
MateriePrime.* FROM MateriePrime RIGHT JOIN Serbatoi ON
MateriePrime.CodProdotto = Serbatoi.Prodotto")
Do While Not rs.EOF
    If rs.Fields("Prodotto") <> "" Then
        rs.Edit
        nSerb = rs.Fields("Serbatoio")
        ' BILANCIA 1 - Leggo i parametri dal PLC ...
        ' Leggo la tara minima della bilancia uno
        res = leggiDaPLC(cmdReadDM, addrTaraMinBilUno, 1, outV)
        If res Then
            txtBilancia1(0).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.tara_min") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il fondo scala della bilancia uno
        res = leggiDaPLC(cmdReadDM, addrFondScalaBilUno, 1, outV)
        If res Then
            txtBilancia1(2).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.peso_max") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo la tara massima del contenitore sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrTaraMaxContBilUno, 1, outV)
        If res Then
            txtBilancia1(1).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.tara_max") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo presenza del contenitore sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrTempoPresenzCont, 1, outV)
        If res Then
            txtBilancia1(4).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.tempo_att_presenza_cont") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo mancanza del contenitore sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrTempoMancanzaCont, 1, outV)
        If res Then
            txtBilancia1(5).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.tempo_att_macanza_cont") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo campionamento peso sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrTempoCampionamPeso, 1, outV)
        If res Then
            txtBilancia1(6).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.tempo_verf_incr_peso") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo l'incremento minimo del peso riferito a campionatura sulla
bilancia uno
        res = leggiDaPLC(cmdReadDM, addrIncremMinPesoCampionam, 1, outV)
        If res Then
            txtBilancia1(7).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.min_incr_peso") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il ritardo sul cambio apertura sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrRitardoCambApertura, 1, outV)
        If res Then
            txtBilancia1(8).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.Rit_stab_apert_valv") = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il peso minimo dosabile sulla bilancia uno
        res = leggiDaPLC(cmdReadDM, addrPesoMinDosabBilUno, 1, outV)
        If res Then
            txtBilancia1(3).Text = Mid(outV, 1, 4)
            'rs.Fields("Bilancie.peso_min_dosabile") = Mid(outV, 1, 4)
        Else
        End If
        ' BILANCIA 2 - Leggo i parametri dal PLC ...
        ' Leggo la tara minima della bilancia due
        res = leggiDaPLC(cmdReadDM, addrTaraMinBilDue, 1, outV)
        If res Then
            txtBilancia2(0).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il fondo scala della bilancia due
        res = leggiDaPLC(cmdReadDM, addrFondScalaBilDue, 1, outV)
        If res Then
            txtBilancia2(2).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo la tara massima del contenitore sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrTaraMaxContBilDue, 1, outV)
        If res Then
            txtBilancia1(1).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo presenza del contenitore sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrTempoPresenzCont, 1, outV)
        If res Then
            txtBilancia2(4).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo mancanza del contenitore sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrTempoMancanzaCont, 1, outV)
        If res Then
            txtBilancia2(5).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo campionamento peso sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrTempoCampionamPeso, 1, outV)
        If res Then
            txtBilancia2(6).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo l'incremento minimo del peso riferito a campionatura sulla
bilancia due
        res = leggiDaPLC(cmdReadDM, addrIncremMinPesoCampionam, 1, outV)
        If res Then
            txtBilancia2(7).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il ritardo sul cambio apertura sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrRitardoCambApertura, 1, outV)
        If res Then
            txtBilancia2(8).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il peso minimo dosabile sulla bilancia due
        res = leggiDaPLC(cmdReadDM, addrPesoMinDosabBilDue, 1, outV)
        If res Then
            txtBilancia2(3).Text = Mid(outV, 1, 4)
        Else
        End If
        '**PARAMETRI CARICO** conttrollare mid
        'Leggo la posizione del carico contenitore
        res = leggiDaPLC(cmdReadDM, addrPosizCaricContenit, 3, outV)
        If res Then
            txtCarrello(0).Text = Mid(outV, 1, 12)
        Else
        End If
        'Leggo la posizione del scarico contenitore
        res = leggiDaPLC(cmdReadDM, addrPosizScaricContenit, 3, outV)
        If res Then
            txtCarrello(1).Text = Mid(outV, 1, 12)
        Else
        End If
        'Leggo accelerazione carrello
        res = leggiDaPLC(cmdReadDM, addrAccelerazCarrello, 2, outV)
        If res Then
            txtCarrello(2).Text = Mid(outV, 1, 8)
        Else
        End If
        'Leggo decelerazione carrello
        res = leggiDaPLC(cmdReadDM, addrDecelerazCarrello, 2, outV)
        If res Then
            txtCarrello(3).Text = Mid(outV, 1, 8)
        Else
        End If
        'Leggo velocità carico
        res = leggiDaPLC(cmdReadDM, addrVelocCarico, 2, outV)
        If res Then
            txtCarrello(4).Text = Mid(outV, 1, 8)
        Else
        End If
        'Leggo velocità vuoto
        res = leggiDaPLC(cmdReadDM, addrVelocVuoto, 2, outV)
        If res Then
            txtCarrello(5).Text = Mid(outV, 1, 8)
        Else
        End If
        'Leggo finestra ins
        res = leggiDaPLC(cmdReadDM, addrFinestraIns, 2, outV)
        If res Then
            txtCarrello(6).Text = Mid(outV, 1, 8)
        Else
        End If
        'START DI AGITAZIONI & RICIRCOLI
        'Leggo il primo start di agitazione
        res = leggiDaPLC(cmdReadDM, addrPrimStartAgitaz, 1, outV)
        If res Then
            txtPartenza(1).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il secondo start di agitazione
        res = leggiDaPLC(cmdReadDM, addrSecoStartAgitaz, 1, outV)
        If res Then
            txtPartenza(2).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il terzo start di agitazione
        res = leggiDaPLC(cmdReadDM, addrTerzStartAgitaz, 1, outV)
        If res Then
            txtPartenza(3).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il quarto start di agitazione
        res = leggiDaPLC(cmdReadDM, addrQuarStartAgitaz, 1, outV)
        If res Then
            txtPartenza(4).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo durata agitazione
        res = leggiDaPLC(cmdReadDM, addrTempoDurataAgitaz, 1, outV)
        If res Then
            txtPartenza(5).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il primo start ricircolo
        res = leggiDaPLC(cmdReadDM, addrPrimStartRicirco, 1, outV)
        If res Then
            txtRicircolo(1).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il secondo start ricircolo
        res = leggiDaPLC(cmdReadDM, addrSecoStartRicirco, 1, outV)
        If res Then
            txtRicircolo(2).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il terzo start ricircolo
        res = leggiDaPLC(cmdReadDM, addrTerzStartRicirco, 1, outV)
        If res Then
            txtRicircolo(3).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il quarto start ricircolo
        res = leggiDaPLC(cmdReadDM, addrQuarStartRicirco, 1, outV)
        If res Then
            txtRicircolo(4).Text = Mid(outV, 1, 4)
        Else
        End If
        'Leggo il tempo durata ricircolo
        res = leggiDaPLC(cmdReadDM, addrTempoDurataRicirc, 1, outV)
        If res Then
            txtRicircolo(5).Text = Mid(outV, 1, 4)
        Else
        End If
        rs.Update
    End If
    rs.MoveNext
Loop
rs.Close
db.Close
End Sub
 ........e questo è il modulo
il problema è: perche non mi rioconosce la funzione leggiDaPlc?

Ciao Ho un problema spero che qualcuno di voi sia in grado di aiutarmi
Anticipatamente ringrazio tutti quelli che mi scriveranno
Mi potete dire dove sbaglio la sintassi in questo pezzetto di  programma?
Private Sub leggi_PLC()
    ' legge i dati dal PLC e riempie i controlli
Dim outV As String
Dim res As Boolean
Dim i As Integer
Dim nSerb As Integer
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase("library\dosatore.mdb")
Set rs = db.OpenRecordset("SELECT Serbatoi.Serbatoio, Serbatoi.Prodotto,
MateriePrime.* FROM MateriePrime RIGHT JOIN Serbatoi ON
MateriePrime.CodProdotto = Serbatoi.Prodotto")
Do While Not rs.EOF
    If rs.Fields("Prodotto") <> "" Then
        rs.Edit
        nSerb = rs.Fields("Serbatoio")
        ' BILANCIA 1 - Leggo i parametri dal PLC ...
        res = frmDosatore.leggiDaPLC(cmdReadDM, addrInizioProdottiBilUno +
10 * (nSerb - 1), 7, outV)
        If res Then
            '... e li scrivo sul database
           ' rs.Fields("MateriePrime.tolleranza") = Mid(outV, 25, 4) ******
           ' rs.Fields("MateriePrime.grande") = Mid(outV, 1, 4)
**
           ' rs.Fields("MateriePrime.media") = Mid(outV, 5, 4)
**
           ' rs.Fields("MateriePrime.piccola") = Mid(outV, 9, 4)
**
           ' rs.Fields("MateriePrime.volo") = Mid(outV, 13, 4)
**
           ' rs.Fields("MateriePrime.pulsatoON") = Mid(outV, 17, 4)      **
           ' rs.Fields("MateriePrime.pulsatoOFF") = Mid(outV, 21, 4) *****
        Else
        End If
        ' BILANCIA 2 - Leggo i parametri dal PLC ...
        res = frmDosatore.leggiDaPLC(cmdReadDM, addrInizioProdottiBilDue +
10 * (nSerb - 1), 7, outV)
        If res Then
            ' ... e li scrivo sul database
            'rs.Fields("MateriePrime.tolleranza2") = Mid(outV, 25, 4)***
            'rs.Fields("MateriePrime.grande2") = Mid(outV, 1, 4)****
            'rs.Fields("MateriePrime.media2") = Mid(outV, 5, 4)*****
            'rs.Fields("MateriePrime.piccola2") = Mid(outV, 9, 4)****
            'rs.Fields("MateriePrime.volo2") = Mid(outV, 13, 4)****
            'rs.Fields("MateriePrime.pulsatoON2") = Mid(outV, 17, 4)*****
            'rs.Fields("MateriePrime.pulsatoOFF2") = Mid(outV, 21, 4)**
        Else
        End If
        rs.Update
    End If
    rs.MoveNext
Loop
rs.Close
db.Close
End Sub
Cioè più precisamente dove c'è l'asterisco
Grazie a tutti ciao

La funzione leggiDaPCL è stata dichiarata:
Public Function leggiDaPLC(comando As String, start As String, num As
Integer, outVal As String) As Boolean
Quindi Comando è una stringa,
start è una stringa,
num un integer,
outVal una stringa e la funzione restituisce un boolean.
Fin qui sembra tutto a posto, ma non dici da nessuna parte come sono
dichiarati (e dove)
cmdReadDM e tutti i vari addr..., cioè i primi due parametri che mandi ogni
volta che richiami la funzione. Inoltre sarebbe possibile sapere dove
esattamente dà errore?
Se lo esegui passo passo, ti dà lo stesso errore? E che errore?
Inoltre, txtBilancia1 è un array di controlli? Esiste l'indice 0?
Scusa, ma non è ancora chiaro il problema con i dati forniti.
Comunque, grazie per la fiducia




