Newsgroup: it.comp.lang.visual-basic
Titolo: Comunicazione Seriale in Command-Line

Salve, non sono un esperto di programmazione. Le mie conoscenze si 
limitano a qualcosa in Java e abbastanza Assembly. Avrei però la 
necessità di comunicare con un dispositivo tramite interfaccia seriale 
Rs-232. La comunicazione dovrebbe essere bidirezionale o meglio, io 
invio un comando che è per esempio una stringa ASCII data da: C00 e 
carattere di return. Al dato comando dovrebbe essere possibile scrivere 
la risposta sempre in forma di stringa su un log. Ancora più semplice 
basterebbe un echo con data e ora della comunicazione su file. Il tutto 
dovrebbe funzionare con 4 porte com probabilmente tramite convertitore 
USB. Ho già testato con RealTerm ma mi servirebbe un programma super 
semplice in riga di comando (prompt dos) che mi dia come parametri la 
porta, il messaggio e il log! La velocità può essere fissa a 9600,1,N.
Sapete se esite qualcosa di free già pronto?
Grazie mille!

 ha scritto:

Che io sappia no, e il fatto di usare il convertitore USB ti preclude la
possibilità di usare il vecchio QuickBasic che era l'ideale per fare un
programma a linea di comando.
In VisualBasic 5-6 si usa il controllo MsComm, che non è difficile da usare, ma
occorre pur sempre conoscere il basic.
Qui trovi un intro per MsComm:
http://www.it-lang-vb.net/download.asp?file=http://www.it-lang-vb.net/Documentazione/Articoli/MSCOMM.htm&ID=362
--
ciao
  Stefano

 programma a linea di comando.
Premesso che non ho capito cosa serve di preciso il fatto dell'uso dell'usb 
non preclude proprio niente poichè in questo caso è vista come una normale 
COM.
Il problema è che (notato con vecchi convertitori com-usb, quindi ormai sarà 
eliminato) 'sti convertitori ogni tanto si inchiodavano.
Se deve fare dei test forse il sistema più semplice è quello di usare 
l'hyperterminal che è presente su ogni OS windows.
Ciao 

 l'hyperterminal che è presente su ogni OS windows.
No dev'essere una cosa automatizzata. Devo poi poter creare degli script 
da far girare a ore prestabilite. Purtroppo su queste macchine non posso 
usare linux altrimenti era molto semplice.

l'hyperterminal che è presente su ogni OS windows.
Probabilmente si, anche se lui sta facendo qualcosa con un pic e la seriale, lo
vedo su altri ng.
--
ciao
  Stefano

 usare linux altrimenti era molto semplice.
Potresti tentare di fare una console-app con un VB2005 Express o c# 2005 
Express e usare la classe SerialPort.
Dovrebbe essere abbastanza facile e forse girerebbe/potresti svilupparla 
direttamente sotto linux con Mono e poi copiarla su windows.
Ciao 

 vedo su altri ng.
No no, questo programmino mi serve per comandare dei videoproiettori... 
Comandi tipo "C00/r"

 direttamente sotto linux con Mono e poi copiarla su windows.
Infatti sto provando! Cerco aiuti però! :)

 ha scritto:

Puoi provare a usare QuickBasic, qui trovi la versione 7.1
http://www.ring-apotheke.com/pkworld/download/compiler/qb71eng.zip
o la 4.5 qui:
http://www.ring-apotheke.com/pkworld/dlc/dlc.php3?qb45eng
 
Il programma puņ ridursi a questo:
_____________________
S$="C00/r"
OPEN "COM1:9600,N,8,1" FOR RANDOM AS #1 LEN = 256 
    PRINT #1,S$;
CLOSE #1
END
____________
Puoi gestire l'input della stringa da tastiera con LINE INPUT o da un file.
In ogni caso QB ha anche l'help ( F1 ).
--
ciao
  Stefano

 In ogni caso QB ha anche l'help ( F1 ).
Ottimo! Domani faccio qualche prova xkè ora scappo al lavoro! QB l'avevo 
lasciato stare xkè credevo gestisse max la com1/2!

 direttamente sotto linux con Mono e poi copiarla su windows.
Ho scritto questa piccola app. Sembra fare quello che mi serve. Do come 
parametro in command line "out=COSAVOGLIOMANDARE" e mi manda per 
l'appunto il comando scrivendo su un log prescelto data, ora, comando e 
risposta. E' in Visual Basic 2005 (Express).
Imports System
Imports System.IO
Module Module1
     Sub Main()
         Dim Data As String
         Dim WOut As String
         Data = Parametri() & Chr(13)
         SendSerialData(Data)
         WOut = DateString & " " & TimeString & " > " & Parametri() & ": 
" '& ReceiveSerialData()
         Dim path As String = "C:\LOG.txt"
         Dim sw As StreamWriter
         If File.Exists(path) = False Then
             sw = File.CreateText(path)
             sw.WriteLine("File di LOG creato il " & DateString & " alle 
ore " & TimeString)
             sw.Flush()
             sw.Close()
         End If
         sw = File.AppendText(path)
         sw.WriteLine(WOut)
         sw.Flush()
         sw.Close()
     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", 38400, 
IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
             com1.WriteLine(data)
             com1.Close()
         End Using
     End Sub
     Function ReceiveSerialData() As String
         ' Receive strings from a serial port.
         Dim returnStr As String = ""
         Using com1 As IO.Ports.SerialPort = _
                 My.Computer.Ports.OpenSerialPort("COM1", 38400, 
IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
             Do
                 Dim Incoming As String = com1.ReadLine()
                 If Incoming Is Nothing Then
                     Exit Do
                 Else
                     returnStr &= Incoming & vbCrLf
                 End If
             Loop
             com1.Close()
         End Using
         Return returnStr
     End Function
     Function Parametri() As String
         For Each param As String In My.Application.CommandLineArgs
             Dim param_name As String
             Dim param_value As String
             Dim pos As Integer = param.IndexOf("=")
             If pos < 0 Then
                 param_name = param
                 param_value = ""
             Else
                 param_value = param.Substring(pos + 1)
             End If
             If param_name = "out" Then
                 Return param_value
             End If
             Return ""
         Next param
         Return ""
     End Function
End Module