VB上位机问题求救
Private Sub Command1_Click()MSComm1.Output = Trim(Text1.Text)
End Sub
Private Sub Form_Load()
MSComm1.Settings = "19200,n,8,1"
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
本人刚学VB 代码如上,每次发送的时候单片机能接受数据 但是每次接受的都不正常,下位机的程序是对的 我用串口调试助手试过 可以正常工作 希望大家能指点一下 先谢谢了 .InputMode = comInputModeBinary 怎么个不正常? 就是接收的数据不正确 二楼说的也试过 比如我把发送过来的数据赋给P2口 P2接的是8个LED 共阳的 是不是发送之前还要把数据转换成二进制 再发出去 各位大虾,在线等答案,帮帮忙 弄很久 才上来问的 首先看你下位机要的是ascii还是hex,然后用虚拟串口看看你vb程序发的是什么?
举例:
Public Function Rs232_send()
Dim tmp_b(1) As Byte
tmp_b(0) = 1
tmp_b(1) = 200
'MainWindows.Text1.Text = Hex$(CRCValue)
MainWindows.MSComm1.Output = Chr(&H7E)
MainWindows.MSComm1.Output = tmp_b
End Function
那么串口发的会是7e 01 c8 下位机接受的就是HEX 不过你上面的有点看不明白,能解释一下吗 先谢谢你 假定你要发送的是7e 01 c8
可以这样实现MSComm1.Output = Chr(&H7E) &Chr(&H01)&Chr(&Hc8)
如果要发送text控件里面的内容则是
MSComm1.Output = Text1.Text
Text1是“7e 01 c8”则输出的是“7e 01 c8”而不是hex了 上面的行了 , 那我如何讲 text1里面的发出去呢?最后一个问题 非常感谢 随便写的,参考一下吧,把text1里的内容以hex的形式输出到MSComm1,如text1键入“12 3e”(不包括引号,每个hex间隔一个空格),则输出12 3e,不规则的输入可能会出错
Private Sub Command1_Click()
On Local Error GoTo ErrH
Dim oStr As String
Dim Buf(255) As Byte
oStr = Text1.Text
If Trim(oStr) = "" Then
MsgBox "输入为空"
Exit Sub
End If
Dim TheLen As Integer '字符串长度
TheLen = Len(oStr)
oStr = oStr & " "
Dim i As Integer, Piece As String, j As Integer
j = 0
i = 1
While i <= TheLen
Piece = Mid(oStr, i, 1)
If IsNumeric("&H" & Piece) Then '检测到数字
If i + 1 <= TheLen And IsNumeric("&H" & Mid(oStr, i + 1, 1)) Then '后面一个也是数字
Buf(j) = CByte("&H" & Mid(oStr, i, 2))
j = j + 1
i = i + 2
Else
Buf(j) = CByte("&H" & Mid(oStr, i, 1))
j = j + 1
i = i + 1
End If
Else
i = i + 1
End If
Wend
'生成完毕,
If j = 0 Then
MsgBox "你输入的字符串中没有数字"
Exit Sub
End If
Dim Arr() As Byte
ReDim Arr(j - 1)
For i = 0 To j - 1
Arr(i) = Buf(i)
Next
MSComm1.Output = Arr 'outbte(0) '...发送数据
Exit Sub
ErrH:
MsgBox Err.Description
End Sub 谢谢 ,有几个函数 不明白 我自己会慢慢解决 非常感谢 MSComm1.Output = Arr 'outbte(0) '...发送数据这个是什么意思啊 其他都明白了 能解释一下吗 谢谢 MSComm1.Output = Arr表示把Arr数组通过串口发送出去 整了一天也没整出来,确实有点笨 能不能写个最简单的 比如我在text里输入00或者aa 按一下按键 以十六进制发送出去就可以了 点击此处下载 ourdev_435708.rar(文件大小:58K) (原文件名:VB_rs232_test.rar)
参考一下 Option Explicit
Private Sub Command1_Click()
Dim c As Integer
Dim a As String
Dim b As Integer
c = Trim(Text1.Text)
b = c
a = Chr(b)
MSComm1.Output = a
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "19200,n,8,1"
MSComm1.PortOpen = True
End Sub 这是我写的,但是数据发送大的时候就出错 比如发送00 01 02 04什么的就能正确接受 但是发送FF AA什么就出错 是什么原因呢 学习一下. Private Sub Command1_Click()
Dim mid_data As Single
Dim temp_str(2) As Byte
Dim buffer As Variant
If sw Then
If (Text3.Text = "" And Text4.Text = "") Or (Text3.Text <> "" And Text4.Text = "") Then
ret = MsgBox("请先输入测试数据", 64, "出错了")
Text4.SetFocus
Else
mid_data = ((Str(Text4.Text)) / 99) * 255 '流量数值转换
temp_str(0) = CByte(mid_data) 'F发送的时候先发送数组下标小的那个
temp_str(1) = CByte(&H22)
temp_str(2) = CByte(temp_str(0)) Xor CByte(temp_str(1))
'"&h" & hex(str(60)) 连接生成十六进制格式
S_DATA_X = Str(Text4.Text)
buffer = temp_str '经chr转换后的数据已经是字符代表的 Ascii码值,如97就是代表 a
MSComm1.Output = buffer
End If
Else
ret = MsgBox("请先打开串口", 64, "出错了")
End If
End Sub
这个是我的一个 sub,也是将text文本中的数据发送出去,前面是判断文本中是否空,后面 else是发送前处理
发送的数据结构有三个 byte,数据+类型+异或校验,像你这样就发一个就够了,不用定义临时数组
应该看的懂吧,已经有注释了 楼主能否加我QQ互相学习下请教下你 谢谢 这个情况我也遇到过,就是串口编写的程序发出去的数据你下位机接受的是十六进制的,还是ASCII码,建议可以用数组的方式来制作,就像21楼中的做法,不过还是要自己多谢谢程序,这样才能提升得快点,这个是我的一些学习经验!
欢迎大家到【爱伙工作室】交流学习!
./bbs_upload/files_17/ourdev_465117.gif
(原文件名:LOGO1.gif) 记号下 学 楼主遇到的问题,我也遇到过,发到上位机的不正常,楼主解决可没有?可否公开源程序呢???多谢楼主了
页:
[1]