怎样用VB实现RS232接口通信

发送的命令格式为字节位置含义数据说明1,2帧头0xAA0xAA3数据长度0x04除帧头外数据长度4传感器地址0X02232输出方式地址为25命令0xxx命令罗盘输出数据帧... 发送的命令格式为
字节位置 含义 数据 说明
1,2 帧头 0xAA 0xAA
3 数据长度 0x04 除帧头外数据长度
4 传感器地址0X02 232输出方式地址为2
5 命令 0xxx 命令罗盘输出数据帧
6 效验字 前面全部数据的异或结果
求怎样用MSComm控件实现命令。
不甚感谢!
我的程序是这样的:
Private Sub Command9_Click()
Dim b(4) As Byte
b(0) = &HAA
b(1) = &HAA
b(2) = &H4
b(3) = &H2
b(4) = &H1
MSComm1.Output = b()
buf = MSComm1.Input
Text1.Text = buf
End Sub
我用F8调试,运行到MSComm1.output=b()这一步,显示的是
MSComm1.output=<属性只写>,buf值是空的
是什么原因啊?
展开
 我来答
zdingyun
推荐于2016-02-09 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48170
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部

VB可以使用MsComm控件来实现串口通信。

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm 控件提供下列两种处理通讯的方式:


事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或
Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm
事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent
属性。

OnComm 事件

无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。

OnComm 事件示例


下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。

Private Sub MSComm_OnComm()
    Select Case MSComm1.CommEvent
    ' 错误
        Case comEventBreak   ' 收到 Break。
        Case comEventCDTO   ' CD (RLSD) 超时。
        Case comEventCTSTO   ' CTS Timeout。
        Case comEventDSRTO   ' DSR Timeout。
        Case comEventFrame   ' Framing Error
        Case comEventOverrun   '数据丢失。
        Case comEventRxOver '接收缓冲区溢出。
        Case comEventRxParity ' Parity 错误。
        Case comEventTxFull   '传输缓冲区已满。
        Case comEventDCB   '获取 DCB] 时意外错误
         ' 事件
        Case comEvCD   ' CD 线状态变化。
        Case comEvCTS   ' CTS 线状态变化。
        Case comEvDSR   ' DSR 线状态变化。
        Case comEvRing   ' Ring Indicator 变化。
        Case comEvReceive   ' 收到 RThreshold # of chars.
        Case comEvSend   ' 传输缓冲区有 Sthreshold 个字符         
        Case comEvEOF   ' 输入数据流中发现 EOF 字符
    End Select
End Sub

MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

Output 属性,往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。

说明


Output 属性可以传输文本数据或二进制数据。用 Output 属性传输文本数据,必须定义一个包含一个字符串的
Variant。发送二进制数据,必须传递一个包含字节数组的 Variant 到
Output 属性。


正常情况下,如果发送一个 ANSI 字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null 字符等等的数据,要以二进制形式发送。

以下代码是在打开COM口后,能以二进制形式或字符串发送指令:

Option Explicit
    Dim sjByt() As Byte
Private Sub Command1_Click() '2进制发送
    ReDim sjByt(1 To 10) '设置为10个元素
    sjByt(1) = &H31
    sjByt(2) = &H32
    sjByt(3) = &H12
    sjByt(4) = &H31
    sjByt(5) = &H32
    sjByt(6) = &H33
    sjByt(7) = &H34
    sjByt(8) = &H35
    sjByt(9) = &H36
    sjByt(10) = &H37
    MSComm1.Output = sjByt '此命令执行一次发送10字节
End Sub

Private Sub Command2_Click()'文本字符串发送
    Dim sjStr As String
    sjStr = "Dim sjStr As String"
    MSComm1.Output = sjStr '此命令执行字符串发送
End Sub

百度网友45c5915
推荐于2017-11-23 · TA获得超过105个赞
知道小有建树答主
回答量:79
采纳率:0%
帮助的人:0
展开全部
其实很简单,声明一个变量数组其类型为Byte。然后将你要的数据逐一赋值到这个数组,将MSComm控件串行模式属性:InputMode 设为 二进制模式,也就是值为1的那个,然后将这个变量数组输出到 OutPut 就行了。如:

dim DA(4) as Byte
DA(0)=&HAA
DA(1)=&HAA
DA(2)=&H04
DA(3)=&H02
DA(4)=.....

MSComm1.OutPut=DA()

*注意在VB中十六进制要用 &H 开头表示

发接为二进制发送,自然接收也是一样的,所以接收的也应该是一个Byte类型的不定变量数组,接收后可用 Ubound 语句来获取字节数,接收的数据以 变量(下标) 形式取得,不能将数组直接赋值于一个变量或控件的字符属性中。如:

Dim AD() As Byte
Dim Ik As Long
AD=MSComm.Input
For Ik=0 To Ubound(AD)
Text1.text=text1.text & Chr(AD(Ik))
Next
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
串口通信之家
2020-12-26 · Modbus TCP\RTU\ASCII通信之家
串口通信之家
采纳数:14 获赞数:10

向TA提问 私信TA
展开全部

单片机+RS232通信模块实现Modbus RTU串口通信

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
peimoxu
2007-01-25 · 超过11用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:19万
展开全部
用createfile
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式