Autor Tema: comunicacion RS232 en Visual Basic  (Leído 341174 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dgawd

  • PIC10
  • *
  • Mensajes: 11
    • Ingenegros
Re: comunicacion RS232 en Visual Basic
« Respuesta #180 en: 06 de Julio de 2009, 15:40:32 »
Me respondo a mi mismo, lo he solucionado de la siguiente manera:
Envio la cadena de la forma millis+chr(44)+pote1+ch(45)+pote2

Código: [Seleccionar]
If NETComm1.CommEvent = NETComm_EV_RECEIVE Then
    datos = NETComm1.InputData
    nadoti = Asc(datos)
    
    If ((nadoti > 13) And (nadoti <> 44)) Then
        buffer = buffer + datos
    End If
    If (nadoti = 44) Then
        tiempo = buffer
        buffer = ""
        Sheet1.Cells(12, 5).FormulaR1C1 = tiempo
    End If
    If (nadoti = 45) Then
        largo = Len(buffer)
        pote = Left(buffer, largo - 1)
        buffer = ""
        Sheet1.Cells(12, 9).FormulaR1C1 = pote
    End If
    If (nadoti = 10) Then
        dato = buffer
        buffer = ""

        Sheet1.Cells(12, 12).FormulaR1C1 = dato

        
    End If
End If

El NETComm1.InputLen lo deje en 1.

y un video/
:mrgreen:

Saludos!
« Última modificación: 06 de Julio de 2009, 21:02:17 por dgawd »

Desconectado lorotron

  • PIC10
  • *
  • Mensajes: 4
Re: comunicacion RS232 en Visual Basic
« Respuesta #181 en: 10 de Septiembre de 2009, 02:21:51 »
un gran favor estoy enviando desde mi pic lo siguiente "semaforo en mal estado" ,clrf, "baptista y colombia" , clrf , "falla interna" , clrf

pero el momento de recibir en visual basic con el siguiente codigo
Option Explicit
Dim cadena As String
Dim Buffer As String
Private Sub Command2_Click()
If MSComm1.PortOpen = True Then 'si el pueerto esta
MSComm1.PortOpen = False 'abierto, cerrarlo
End If
End Sub

Private Sub Command3_Click()
Text1.Text = Text2.Text
End Sub

Private Sub Form_Load()
Timer1.Interval = 60
MSComm1.Settings = "9600,n,8,1" 'propiedades
MSComm1.CommPort = 1 'seleccionar puerto
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
MSComm1.PortOpen = True 'abrir puerto
End Sub

Private Sub Timer1_Timer() 'setear timer en 1 ms
If MSComm1.PortOpen Then
 Buffer = Buffer & MSComm1.Input
 If InStr(1, Buffer, Chr(13)) Then
 Text2.Text = Buffer
 Buffer = ""
 End If
End If
End Sub


y al momento de recibir los datos en visual basic me aparece solamente el final del mensaje "llainterna"
como puedo hacer para ver todo el mensaje en el textbox?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: comunicacion RS232 en Visual Basic
« Respuesta #182 en: 10 de Septiembre de 2009, 03:12:32 »
Hola. Fijate que en el primer post de este hilo agregué una versión alternativa a la de Todopic.

Mejoré varios problemas que pueden surgir. Uno de ellos relacionados con que el buffer de entrada no debería ser revisado con un timer, sino tratarse mediante eventos.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: comunicacion RS232 en Visual Basic
« Respuesta #183 en: 01 de Abril de 2011, 00:00:49 »
hola, les queria pedir ayuda. resulta que estoy haciendo un programa que solo tiene que recepcionar una trama igual a :

STX (02h) - DATA (10 ASCII) -  CHECK SUM (2 ASCII)  - CR -  LF  - ETX (03h)
[The 1byte (2 ASCII characters) Check sum is the “Exclusive OR” of the 5 hex bytes (10 ASCII) Data characters.]

donde esto quiere decir que :
Lo que quiere decir que debe eliminar el primer caracter que es STX (02h), este caracter es para hacerte saber el inicio de la cadena, despues de ese caracter es que se envian los 10 caracteres ASCII que nesesito ver por un label, despues viene el checksum, un retorno de carro
y un fin de transmision que es el caratere ETX(03h)

he esto dandole a esto pero no puedo, aparte por que soy muy novato en esto.

estoy recepcionando con MSComm1.
si me pudiecen ayudar se los agradeceria mil.

Desconectado banistelrroy

  • PIC10
  • *
  • Mensajes: 29
Re: comunicacion RS232 en Visual Basic
« Respuesta #184 en: 11 de Mayo de 2011, 02:20:28 »
muy buen aporte les felicito voy modificar un poco gracias lo voy a necesitar

Desconectado rosdgo

  • PIC10
  • *
  • Mensajes: 1
Re: comunicacion RS232 en Visual Basic
« Respuesta #185 en: 31 de Agosto de 2011, 07:16:21 »
Buenas foreros, quiero hacer algo parecido a lo que indican este tema, no se si es posible, les comento:
Quiero crear una aplicación en Visual Basic mediante la cual el PC se comunique via ModBus (RS232) con una pantalla HMI que es la maestra y el PC y un automata programable MILLENIUM III de la marca CROUZET seran los esclavos.
Necesito información de como realizarlo.

Muchas gracias y un saludo

Desconectado epogor

  • PIC10
  • *
  • Mensajes: 6
Re: comunicacion RS232 en Visual Basic
« Respuesta #186 en: 16 de Septiembre de 2011, 11:07:00 »
Hola soy nuevo en este foro y queria que me dieran un consejo para empezar a programar, estoy haciendo un projecto propio y quiero controlar un motor con un PWM, desde una pc, ya pude hacer andar el pwm, pero ahora empiezo a conectar el pic con una rs232, voy a usar Visual Basic pero necesito saber como comenzar a conectar el pic con la pc, algun consejo? desde ya muchas gracias por cualquier aporte que puedan hacer, el pic que voy a usar es el 18f2550, que aunque tiene usb prefiero aprender a usar rs232 y luego pasar a usb gracias.

Desconectado NEURINRO

  • PIC10
  • *
  • Mensajes: 2
Re: comunicacion hyperterminal a Visual Basic macro excel
« Respuesta #187 en: 02 de Abril de 2012, 12:41:16 »
Saludos a todos soy nuevo aqui en esta pagina, me gustaria saber como le hago para leer los datos de hyperterminal  del puerto serial para llevarlo a una hoja de excel en un macro y luego enviarlo via email a mi correro (outlook). he utilizado varios codigos genericos par intentar leer pero no consigo ver nada corro la macro y lo unico que sale es Debug 424. realmente no se donde esta el erro pues son codigos genericos de comunicacion via puerto serial. aqui les dejo los codigo que uso para leer los datos que suben a hyperteminal por el puerto comm 1 y luego enviarlos a por email.... Gracias

Private Sub MSComm1_OnComm()
        SelectCase MScomm1.CommEvent
        Case comEventBreak   ' A Break was received.
        Case comEventCDTO    ' CD (RLSD) Timeout.
        Case comEventCTSTO   ' CTS Timeout.
        Case comEventDSRTO   ' DSR Timeout.
        Case comEventFrame   ' Framing Error.
        Case comEventOverrun ' Data Lost.
        Case comEventRxOver  ' Receive buffer overflow.
        Case comEventRxParity   ' Parity Error.
        Case comEventTxFull  ' Transmit buffer full.
        Case comEventDCB     ' Unexpected error retrieving DCB]

         ' Events
        Case comEvCD   ' Change in the CD line.
        Case comEvCTS  ' Change in the CTS line.
        Case comEvDSR  ' Change in the DSR line.
        Case comEvRing ' Change in the Ring Indicator.
        Case comEvReceive ' Received RThreshold # of chars.
            'Sets the global mstinbuff to = what is received by the commm control
            mstInBuff = mstInBuff & MScomm1.Input
            'Resets the variable used to count the lack of response to 0 so that
            'counting restarts.
            mdblReceived = 0
         
    End Select
End Sub



Sub CDO_Send_Selection_Body()
    Dim LastRow As Long
    Dim Source As Range
    Dim Dest As Workbook
    Dim wb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim OutApp As Object
    Dim OutMail As Object
   
     If WorksheetFunction.CountA(Cells) > 0 Then
        LastRow = Cells.Find(What:="*", After:=[C1], _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row
    End If
            Set sh = Sheets("DataLog")    '<<< Change
            Set Source = sh.Range("A" & LastRow & ":C" & LastRow) '<<< Change
 
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
 
    Set wb = ActiveWorkbook
    Set Dest = Workbooks.Add(xlWBATWorksheet)
    Source.Copy
    With Dest.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial Paste:=xlPasteValues
        .Cells(1).PasteSpecial Paste:=xlPasteFormats
        .Cells(1).Select
        Application.CutCopyMode = False
    End With
 
    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Selection of " & wb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
 
    If Val(Application.Version) < 12 Then
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        FileExtStr = ".xlsx": FileFormatNum = 51
    End If
 
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)



 
    With Dest
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        On Error Resume Next
        With OutMail
        .To = "neurin.rodriguez@hospira.com"
        .CC = ""
        .BCC = ""
        .From = """Sistema de Alarmas"" <neurin.rodriguez@hospira.com>"
        .Subject = " "
        .HTMLBody = vbCr & vbCr & "[" & Format(sh.Range("B" & LastRow).Value, "HH:MM AM/PM") & "] EVENTO: " & sh.Range("C" & LastRow).Value 'RangetoHTML(sh, rng)
            .Send
    End With
        On Error GoTo 0
        .Close savechanges:=False
    End With
 
    Kill TempFilePath & TempFileName & FileExtStr
 
    Set OutMail = Nothing
    Set OutApp = Nothing
 
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub



Function RangetoHTML(rng As Range)
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
 
    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With
 
    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
 
    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
 
    'Close TempWB
    TempWB.Close savechanges:=False
 
    'Delete the htm file we used in this function
    Kill TempFile
 
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function



Sub CDO_Send_ActiveSheet_Body_Without_Pictures()
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
 
    Set rng = Nothing
    Set rng = Sheets("DataLog").UsedRange
    'Set rng = Sheets("DataLog").Range("A4:C" & LastRow).SpecialCells(xlCellTypeVisible)

    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next

    With OutMail
        .To = Sheet1.Email1.Value
        .CC = Sheet1.Email2.Value
        .BCC = ""
        .Subject = "Reporte de Alarmas para: " & Format(Range("A4").Value, "MM/DD/YYYY")
        .HTMLBody = RangetoHTML(rng)
        .Send
    End With
    On Error GoTo 0
 
 With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
 
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub




Public Function SheetToHTML(sh As Worksheet)
'Function from Dick Kusleika his site
'http://www.dicks-clicks.com/excel/sheettohtml.htm
'Changed by Ron de Bruin 19-Aug-2006
    Dim TempFile As String
    Dim Nwb As Workbook
    Dim fso As Object
    Dim ts As Object

    sh.Copy
    Set Nwb = ActiveWorkbook

    With Nwb.Sheets(1)
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With

    TempFile = Environ$("tempII") & "/" & _
               Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    Nwb.SaveAs TempFile, xlHtml
    Nwb.Close False

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    SheetToHTML = ts.ReadAll
    ts.Close

    On Error Resume Next
    Kill TempFile
    fso.deletefolder Left(TempFile, Len(TempFile) - 4) & "*", True
    On Error GoTo 0

    Set ts = Nothing
    Set fso = Nothing
    Set Nwb = Nothing
End Function

 

Option Explicit