VB串口通讯问题求教

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:34:57
Private Sub Timer1_Timer()
Dim str As String
Dim instrt As String

Dim STX As String ' = Chr(2)
Dim ETX As String ' = Chr(3)
Dim strValue As String
Dim lngValue As Long
Dim intIDOk As Integer
Dim j As Integer
Dim a, a1 As String

Dim strInstuAddr, strDRegAddr, intUTAddr As String
Dim intInLen As Integer

For j = 1 To 6 '地址1-6

If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If

STX = Chr(2)
ETX = Chr(3)
intUTAddr = j '地址1-6
strInstuAddr = Format(intUTAddr, "00")
strDRegAddr = "D0003" '读采集地址
str = STX + strInstuAddr + "010WRD" + strDRegAddr + ",01" + ETX + vbCr '发送命令
MSComm1.Output = str
intInLen = MSComm1.OutBufferCount '
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0
a = MSComm1.Input '...接受显示数据
strValue = Mid(a, 8,

看不到LZ的循环周期时间.建议LZ将接收放OnComm时间处理.
LZ:
str = STX + strInstuAddr + "010WRD" + strDRegAddr + ",01" + ETX + vbCr '发送命令
上述指令中无询址变化,你的
intUTAddr = j
在上述指令中的哪个位置?
下位机返回数据帧字节长度?

Private Sub Form_Load()
MSComm1.CommPort = 1 '设置端口号为1
MSComm1.Settings = "9600,N,8,1" '设置波特率等通 ′信协议
MSComm1.InputLen = 0 '设置一次从串口读取6个字节
MSComm1.RThreshold = 1 '这修改为返回数据帧字节长度
MSComm1.PortOpen = True '打开串行口
MSComm1.InputMode = comInputModeText
End Sub

Private Sub MSComm1_OnComm()
Dim strValue As String
Dim lngValue As Long
Select Case MSComm1.CommEvent
Case 2
a = a & MSComm1.Input '...接受显示数据
strValue = Mid(a, 8, 4)
lngValue = Val("&H" + Mid(strValue, 1, 1)) * 4096 + _
Val("&H" + Mid(strValue, 2, 1)) * 256 +