Problema extraño de VB, espero que los expertos puedan darme alguna orientación, puede estar relacionado con la generación de exe~~~~
Attend.MSComm2.RTreshold = 10
Esta oración significa que se genera una interrupción cuando el puerto serie recibe 10 datos.
Se recomienda intentar configurarlo en 1.
Attend.MSComm2.InBufferSize = 40
Se recomienda establecer esta oración en 4096
Solo puedo decir que muchos convertidores de interfaz USB a puerto serie son virtual La interrupción suave del puerto serie casi no funciona correctamente durante la comunicación continua.
El convertidor de USB a serie que compré antes no funcionó, pero el que compré más tarde, el convertidor de PCI a serie, funcionó bien de inmediato.
La prueba de recepción del puerto serie acaba de completarse, la prueba de baja velocidad pasó.
Copia el siguiente código y guárdalo como .frm.
Utilice esta prueba de compilación para ver si recibirá varios datos.
VERSIÓN 5.00
Objeto = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "mscomm32.ocx"
Comenzar VB .Form Form1
BorderStyle = 3 'Diálogo fijo
Caption = "Form1"
ClientHeight = 6090
ClientLeft = 45 p>
ClientTop = 330
ClientWidth = 5580
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 6090
ScaleWidth = 5580
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Ventana predeterminada
Comenzar VB.ComboBox Combo1
Alto = 300
Izquierda = 2640
Estilo = 2 'Lista desplegable
TabIndex = 4
Superior = 5640
Ancho = 855
Fin
Inicio VB.Timer Timer1
Habilitado = 0 'Falso
Intervalo = 40
Izquierda = 240
Arriba = 4560
Fin
Comenzar VB.CommandButton Command2
Caption = "Borrar"
Alto = 495
Izquierda = 1440
TabIndex = 2 p>
Arriba = 5400
Ancho = 975
Fin
Comienzo MSCommLib.MSComm MSComm1
Izquierda = 840
p>Superior = 4440
_ExtentX = 10
05
_ExtentY = 1005
_Version = 393216
CommPort = 3
DTREnable = -1 'Verdadero
StopBits = 2
Fin
Inicio VB.CommandButton Comando1
Título = "Inicio"
Alto = 495
Izquierda = 120
TabIndex = 1
Arriba = 5400
Ancho = 1095
Fin
Comenzar VB.TextBox Texto1
Alto = 5055
Izquierda = 120
MultiLine = -1 'Verdadero
Barras de desplazamiento = 2 ' Vertical
TabIndex = 0
Superior = 120
Ancho = 5295
Fin
Inicio VB.Shape Forma1
BackColor = &H80000004&
BackStyle = 1 'Opaco
Altura = 255
Izquierda = 4920
Forma = 3 'Círculo
Top = 5640
Ancho = 375
Fin
Comenzar VB.Label Label3
Título = "Byte"
Alto = 255
Izquierda = 3600
TabIndex = 6
Arriba = 5640
Ancho = 495
Fin
Inicio VB.Label Label2
Título = "Recibir longitud de datos"
Alto = 255
Izquierda = 2640
TabIndex = 5
Arriba = 5280
Ancho = 1215
Fin
Inicio VB .Label Label1
Alineación = 1 'Justificar a la derecha
Tamaño automático = -1 'Verdadero
Título = "0 Byte"
Alto = 180
Izquierda = 3960
TabIndex = 3
Arriba = 5280
Ancho = 1380
Fin
Fin
Atributo VB_Name = "Form1"
Atributo VB_GlobalNameSpace = False
Atributo VB_Creatable = False
Atributo VB_PredeclaredId = True
Atributo VB_Exposed = False
Subcombo privado1_Click()
MSComm1.InputLen = Combo1.ListIndex + 1
End Sub
Sub privado Command1_Click()
MSComm1.PortOpen = No MSComm1.PortOpen
Si MSComm1.PortOpen Entonces
Command1. Caption = "Detener"
Else
Command1.Caption = "Iniciar"
Finalizar si
Fin Sub
Subcomando privado2_Click()
Text1.Text = ""
Label1.Caption = "0 Byte"
End Sub
Private Sub Form_Load()
'Inicialización del puerto de comunicación:
Para i = 1 a 99
Combo1.AddItem i
Siguiente
Combo1.ListIndex = 8
MSComm1.Settings="9600,n,8,2"
MSComm1.CommPort = 3
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = Combo1.ListIndex + 1
MSCom
m1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RTreshold = Combo1.ListIndex + 1
MSComm1.InBufferSize = 4096
End Sub
Sub privado Form_QueryUnload(Cancelar como entero, UnloadMode como entero)
Si MSComm1.PortOpen entonces MSComm1.PortOpen = False
End Sub
'Evento de recepción del puerto serie
Private Sub MSComm1_OnComm()
Dim inx() As Byte
Dim strTemp As String
Dim strTemp1 como cadena
Dim strLen como byte
Seleccionar caso MSComm1.CommEvent
Caso comEvReceive 'Juzgado para recibir evento
inx = MSComm1.Input 'Recibir datos
MSComm1.InBufferCount = 0
MSComm1.RTreshold = Combo1.ListIndex + 1
Para i = 0 Para UBound (inx)
strTemp1 = Hex(inx(i))
Si Len(strTemp1) > 1 Entonces
strTemp = strTemp & strTemp1 & " "
De lo contrario
strTemp = strTemp & "0" & strTemp1 & " "
Finalizar si
Siguiente i
Texto1.Text = Texto1.Text & strTemp & vbCrLf
Text1.SelStart = Len(Text1.Text)
Label1.Caption = Str(Val(Label1.Caption ) + i ) & " Byte"
Borrar inx
Shape1.BackColor = vbRed
Timer1.Enabled = True
Finalizar selección
Fin del subtexto
Subtexto privado1_Change()
Si Len(Text1.Text) > 9999 Then Text1.Text = ""
End Sub
Private Sub Timer1_Timer()
Shape1.BackColor = &H80000004
Timer1.Enabled = False
Fin Sub