用VB的mscomm控件串口通信,怎么发十六进制?
问题背景:现在奉命需要做个VB界面和智能仪表通信,为此突击学习了VB,以及重点MSCOMM控件。VB和仪表通信发送和接收都是用十六进制(00--FF),现在对mscomm...
问题背景:现在奉命需要做个VB界面和智能仪表通信,为此突击学习了VB,以及重点MSCOMM控件。VB和仪表通信发送和接收都是用十六进制(00--FF),现在对mscomm控件还没搞透彻,弄了几天也没成功发送十六进制数据。
如果对你来说没啥困难,请按照下面内容给我写段程序,供研究学习之用。
程序内容:
1.点击“发送”按钮后,VB通过串口连续发送5个十六进制数据,这5个数据预存在一个名为recive的数组中。
2.在mscomm的on_comm事件中,接收来自串口的连续5个十六进制数据,并将这5个数据存储在一个名为send数组中。
波特率、奇偶校验等采用默认设置,其余参数、变量等请自便。
提前感谢您的帮助,如果答案比较完美定会加送20分。
十分感谢各位的参与,我用了你们说的方法,但只是一部分数据传输正确,怎么回事啊?具体情形就是00--09是正确的,10--ff都会出现错误,出现错误的这些数据中,个位是正确的,仅十位会出现错误,比如发送10,收到的是30,发送AA收到4A。 展开
如果对你来说没啥困难,请按照下面内容给我写段程序,供研究学习之用。
程序内容:
1.点击“发送”按钮后,VB通过串口连续发送5个十六进制数据,这5个数据预存在一个名为recive的数组中。
2.在mscomm的on_comm事件中,接收来自串口的连续5个十六进制数据,并将这5个数据存储在一个名为send数组中。
波特率、奇偶校验等采用默认设置,其余参数、变量等请自便。
提前感谢您的帮助,如果答案比较完美定会加送20分。
十分感谢各位的参与,我用了你们说的方法,但只是一部分数据传输正确,怎么回事啊?具体情形就是00--09是正确的,10--ff都会出现错误,出现错误的这些数据中,个位是正确的,仅十位会出现错误,比如发送10,收到的是30,发送AA收到4A。 展开
展开全部
'不清楚的地方请百度HI我,添加一个按钮和一个mscomm控件,然后粘贴代码
Dim recive(1 To 5) As Byte
Dim send() As Byte
Private Sub Command1_Click()
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary'二进制方式发送
MSComm1.Output = recive' 发送数据
Do Until MSComm1.InBufferCount >= 5'等待数据
DoEvents
Loop
send = MSComm1.Input'接受
Dim i As Integer
Dim s As String
For i = 0 To UBound(send)
s = s & Hex(send(i)) & " "
Next i
MsgBox "收到5字节:" & s'显示
End Sub
Private Sub Form_Load()
recive(1) = &H41
recive(2) = &H42
recive(3) = &H43
recive(4) = &H44
recive(5) = &H45
End Sub
Dim recive(1 To 5) As Byte
Dim send() As Byte
Private Sub Command1_Click()
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary'二进制方式发送
MSComm1.Output = recive' 发送数据
Do Until MSComm1.InBufferCount >= 5'等待数据
DoEvents
Loop
send = MSComm1.Input'接受
Dim i As Integer
Dim s As String
For i = 0 To UBound(send)
s = s & Hex(send(i)) & " "
Next i
MsgBox "收到5字节:" & s'显示
End Sub
Private Sub Form_Load()
recive(1) = &H41
recive(2) = &H42
recive(3) = &H43
recive(4) = &H44
recive(5) = &H45
End Sub
展开全部
Option Explicit
Dim Receive() As Byte '按你的要求写的,放要发送的数据
Dim Send() As Byte '存放已收到数据
Private Sub Command1_Click()
If MSComm1.PortOpen = False Then '端口未打开,则打开
MSComm1.PortOpen = True
End If
MSComm1.OutBufferCount = 0 '清空发送缓冲
Dim i As Integer
ReDim Receive(4) '下面只是填充数据,你根据自己情况给Receive赋值
For i = 0 To 4
Receive(i) = i + 48
Next
MSComm1.Output = Receive '发送数据
End Sub
Private Sub Form_Load()
With MSComm1 '初始化Mscomm1属性
.CommPort = 1 '端口COM1
.Settings = "9600,n,8,1"
.SThreshold = 0
.RThreshold = 5 '接收阀值,收到5个字节后会触发OnComm事件
.InputMode = comInputModeBinary '数据通过 Input 属性以二进制形式取回
End With
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then '收到5个数据后
Send = MSComm1.Input '数据保存在Send数组中.
Debug.Print Hex(Send(0)); Hex(Send(1)); Hex(Send(2)); Hex(Send(3)); Hex(Send(4)) '调试用,不要可以删除
'你可以在这里加入一些对收到的数据的处理,
End If
End Sub
Dim Receive() As Byte '按你的要求写的,放要发送的数据
Dim Send() As Byte '存放已收到数据
Private Sub Command1_Click()
If MSComm1.PortOpen = False Then '端口未打开,则打开
MSComm1.PortOpen = True
End If
MSComm1.OutBufferCount = 0 '清空发送缓冲
Dim i As Integer
ReDim Receive(4) '下面只是填充数据,你根据自己情况给Receive赋值
For i = 0 To 4
Receive(i) = i + 48
Next
MSComm1.Output = Receive '发送数据
End Sub
Private Sub Form_Load()
With MSComm1 '初始化Mscomm1属性
.CommPort = 1 '端口COM1
.Settings = "9600,n,8,1"
.SThreshold = 0
.RThreshold = 5 '接收阀值,收到5个字节后会触发OnComm事件
.InputMode = comInputModeBinary '数据通过 Input 属性以二进制形式取回
End With
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then '收到5个数据后
Send = MSComm1.Input '数据保存在Send数组中.
Debug.Print Hex(Send(0)); Hex(Send(1)); Hex(Send(2)); Hex(Send(3)); Hex(Send(4)) '调试用,不要可以删除
'你可以在这里加入一些对收到的数据的处理,
End If
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上 都 代码不错
推荐看书
Visual_Basic与_RS-232_串行通信控制
推荐看书
Visual_Basic与_RS-232_串行通信控制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询