Salve, mi chiamo Francesco ed è la prima volta che scrivo su questo forum.
Sto gestendo un applicativo che interagisce con HW esterno e che in prima battuta utilizzava un interfaccia RS232 e successivamente tramite una connessione USB.
Il passaggio da un interfaccia hw all'altra non è stata del tutto indolore ma gli statment che utilizzo per aprire la porta sono praticamente gli stessi.
Attualmente l'unica difficolta che incontro è legata alla impossibilità di indirizzare porte con nome superiore al com9 e non ne capisco il motivo.
L'ambito tecnologico è quello del framework 1.1 con Visual studio 2003 ed il linguaggio di riferimento è VB.net
Per completezza qui di seguito riporto il metodo che utilizzo per aprire la connessione verso la porta i-esima.
Ci tengo a sottolineare che l'istruzione che va in errore è la chiamata relativa alla CreateFile.
C'è Qualcuno tra voi che si è già scontrato con problemi simili?
Saluti
Francesco
codice:Public Overloads Sub Open() ' Get Dcb block,Update with current data Dim uDcb As DCB, iRc As Integer ' Set working mode Dim iMode As Integer = Convert.ToInt32(IIf(meMode = Mode.Overlapped, _ FILE_FLAG_OVERLAPPED, 0)) ' Initializes Com Port If miPort > 0 Then Try ' Creates a COM Port stream handle mhRS = CreateFile("COM" & miPort.ToString, _ GENERIC_READ Or GENERIC_WRITE, 0, 0, _ OPEN_EXISTING, iMode, 0) If mhRS <> -1 Then ' Clear all comunication errors Dim lpErrCode As Integer iRc = ClearCommError(mhRS, lpErrCode, 0&) ' Clears I/O buffers iRc = PurgeComm(mhRS, PurgeBuffers.RXClear Or _ PurgeBuffers.TxClear) ' Gets COM Settings iRc = GetCommState(mhRS, uDcb) ' Updates COM Settings Dim sParity As String = "NOEM" sParity = sParity.Substring(meParity, 1) ' Set DCB State Dim sDCBState As String = String.Format( _ "baud={0} parity={1} data={2} stop={3}", _ miBaudRate, sParity, miDataBit, CInt(meStopBit)) iRc = BuildCommDCB(sDCBState, uDcb) 'CODAN 17/05/05 If (uDcb.Bits1 <> 12305) Then uDcb.Bits1 = 12305 End If 'FINE iRc = SetCommState(mhRS, uDcb) If iRc = 0 Then Dim sErrTxt As String = pErr2Text(GetLastError()) Throw New CIOChannelException( _ "Unable to set COM state0" & sErrTxt) End If ' Setup Buffers (Rx,Tx) iRc = SetupComm(mhRS, miBufferSize, miBufferSize) ' Set Timeouts pSetTimeout() Else ' Raise Initialization problems Throw New CIOChannelException( _ "Unable to open COM" & miPort.ToString) End If Catch Ex As Exception ' Generica error Throw New CIOChannelException(Ex.Message, Ex) End Try Else ' Port not defined, cannot open Throw New ApplicationException("COM Port not defined, " + _ "use Port property to set it before invoking InitPort") End If End Sub

Rispondi quotando