VB读串口问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 06:45:22
我写了段程序读PLC上的数据,PLC是50MS传送一次数据共128个字符,而我程序读的时候用MSComm1.InBufferCount返回有1000以上,而下一句用MSComm1.Input读的时候却只有100个左右的字符,最少只有几个,不知道哪里出问题了,程序如下:
Private Sub Command1_Click()
Const COM% = 3

MSComm1.CommPort = 1
MSComm1.Settings = "19200,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
MSComm1.RTSEnable = True
End Sub

Private Sub Command2_Click()
Me.Text1 = MSComm1.InBufferCount
Me.Text2 = MSComm1.Input
End Sub
Me.Text1里有1000多个
Me.Text2里只有几个到100多个
另外, 波特率设置没问题。
要是把inputmode改成
MSComm1.InputMode = comInputModeText
那读的时候只有一个字符在input
以上这些情况都是无论间隔多少时间都一样,唯一不同的是MSComm1.InBufferCount 里面的数据,时间越长,数据越多,而用MSComm1.InputMode = comInputModeBinary 这句,input里面的数据就不稳定,有时多有时少。还有电脑串口的流控制怎么改,效果都一样。谢谢那位高手帮忙解决下,谢谢啦!

1、看看你的 PLC 波特率 的 设置,这个是否 与 MSComm1 设置的匹配;

2、你用 MSComm1 的事件 OnComm 来接收数据 试试看;

Good luck

Option Explicit
Dim strData As String
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "19200,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 128
MSComm1.PortOpen = True
MSComm1.RTSEnable = True
End Sub

Private Sub MSComm1_OnComm()
Dim buffer() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case 2
buffer = MSComm1.Input
For i = 0 To UBound(buffer)
strData = strData & Right("0" & Hex(buffer(i)), 2)
Debug.Print buffer(i)
Next
If Len(strData) = 256 Then
Text1 = strData
strData = ""
End If