Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale

Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale (http://forum.roboitalia.com/index.php)
-   P. in Visual Basic (http://forum.roboitalia.com/forumdisplay.php?f=29)
-   -   Problema invio codici ASCII via seriale VB 2010 Express (http://forum.roboitalia.com/showthread.php?t=8305)

Frengo75 27-10-2011 11.24.35

Problema invio codici ASCII via seriale VB 2010 Express
 
Salve a tutti,

Sto cercando di usare la porta seriale con VB 2010 express, di cui sono un neofita, ed ho questo problema: se invio dei codici ASCII da 0 a 127 tutto ok, se provo quelli da 128 a 255 l'uscita (controllata con l'oscilloscopio) è sempre la stessa, come se si potessero usare solo i primi 7 bit, anche se nelle impostazioni della porta la lunghezza del dato è settata a 8 bit.
Vi posto la parte di codice che non va

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SendSerialData(Chr(192))
End Sub
Sub SendSerialData(ByVal data As String)
' Send strings to a serial port.
Using com1 As IO.Ports.SerialPort =
My.Computer.Ports.OpenSerialPort("COM1")
com1.Write(data)
End Using
End Sub

Grazie in anticipo

sergio_camici 27-10-2011 13.04.27

Mi tengo ben lontano dal VB ;) ma sei sicuro che passare un chr ad una funzione che si aspetta una String non faccia danni?

Caronte 27-10-2011 18.39.59

Vb 8 e successivi 'vedono' male comunque l'utilizzo di chr.
Indipendentemente da questo la sintassi che usi per l'invio è errata.

Il comando write ha una sintassi specifica:

Cito dalle MSDN di Microsoft:

Citazione:

Write(Byte(), Int32, Int32) Scrive sulla porta un numero specificato di byte sulla porta seriale utilizzando i dati da un buffer di output a partire dall'offset specificato.
In sintesi e se non ho travisato, devi inviate numeri compresi tra 0 e 255: BYTE

Quindi la sintassi prevede comunque:

SerialPort.write(buffer,count,offset)

Dove:

SerialPort è ovviamente la tua porta seriale (che tu, almeno da quello che vedo, invochi dagli eventi. Puoi anche utilizzare l'oggetto che trovi nella casella degli strumenti)

buffer = sono i byte che devi inviare e NECESSARIAMENTE devi indicare

offset (integer) = dove parte l'array

count (integer) = e dove si conclude

Quindi (premettendo che tu abbia già impostato TUTTI i parametri della seriale) dovrebbe essere questo (non ho con me il mio pc e vado a memoria) prova questo:

Codice:

    Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

        Dim Valore(1) As Byte

        Valore(1) = Asc("192")
 
        Dim offset As Integer = 0
        Dim count As Integer = 1
        Try
            serialport.Write(Valore, offset, count)

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

Ora devo andare a casa (:)) leggiti bene anche la procedura try

Ciao

Antonio

Frengo75 29-10-2011 09.14.37

Grazie ragazzi,

in realtà mi sto avventurando in una convesione di un programma
da QB45 a VB, nel codice sono presenti delle comunicazioni verso un micro mediante un protocollo che prevede dei caratteri speciali di inizio e fine stringa (AC e CA rispettivamente). In QB la cosa è semplice, si fa Print #1, Chr$(&HAC). Pensavo che anche VB "digerisse" bene questo comando, ma mi sbagliavo. Farò altre prove sulla base dei vostri suggerimenti!

Ciao

Franco

Caronte 29-10-2011 15.41.48

Citazione:

In QB la cosa è semplice, si fa Print #1, Chr$(&HAC)
.... già.... Anche e fino a Visual Basic 6, tramite l'oggetto MScomm, facevi la stessa cosa. Con una riga inviavi un intero array, proprio con chr$! Il problema dopo diventava dimensionare il buffer. Ecco, per quello, se volevi fare una cosa fatta bene, ti servivano una ventina di righe(e sono buono...) per gestire gli errori! Comunque, sono d'accordo con Sergio: w il C! Adesso quando devo programmare uso sempre VB10 ma in C, o meglio, C++ (ad esclusione delle interfaccie grafiche). L'unico problema è impararlo in maniera decente!

In bocca al lupo!

Ciao

Antonio


Tutti gli orari sono GMT. Adesso sono le: 04.11.05.

Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.