邪恶孙尚香无惨:VB程序访问串口 遇到问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 06:14:59
您好:
我现在使用VB程序访问串口,串口接转接器转接器接收的是两路信号 X 和Y ,使用软件是VB6.0企业版,操作系统WIN2000
将一转接器传送来的数据通过串口送入计算机,VB程序通过串口接收,选择事件驱动方式我是一个初学者,以下程序目的只实现部分功能,接收一桢的第一个字节。窗体上有一个BUTTON 一个TEXT 一个MSCOMM控件

转接器串口通讯协议:
波特率:9600 8位数据位 1位起始位 1位停止位 无奇偶校验位
送字符格式:PX士╳ ╳ ╳ ╳ ╳ ╳ ╳ Y 士╳ ╳ ╳ ╳ ╳ ╳ ╳0d
PXY为字符 士为符号 ╳为数字
当外部设备向转接器发送十六进制数Od,转接器向外部传送数据

请问1. 8位数据位是不是指每一个 ╳ 是8个二进制位,每发送一个╳ 前面都有1位起始位 后面都有一位停止位,字符和符号也是同样的吗?每一桢是20个字节,字节和字符是同一个意思吗?
2.以下是程序,程序执行到语句Case comEvReceive就不执行了 请问是不是在发送十六进制数0d处 Dim s As String Dim fs As Integer fs = &HD s = CStr(fs) 语句错误 ,我如果将上面的s类型定义为variant 出现实时错误380 ,无效的属性值。必须定义成string语句才执行这是为什么呢
现在估计错误是怎样发送十六进制数0d 出现了错误 ,我不能确定,请问是不是这样呢?是不是还有别的我不知道的知识呢?以下的程序要实现的功能只是接收第一个字符P ?我能否理解P为这桢数据的标志字节
3.怎样分别接收符号 和数字呢?

MSComm1.Output = s
Private Sub Command1_Click()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InBufferSize = 40
MSComm1.OutBufferSize = 2
MSComm1.InputLen = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 1
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Dim s As String’定义发送数据的变量s(为什么不能是variant呢)
Dim fs As Integer
fs = &HD将0d 赋值给fs
s = CStr(fs)
MSComm1.Output = s将s发送到串口
Select Case MSComm1.CommEvent
Case comEvReceive
Dim r As String 定义接收数据的变量r
r = MSComm1.Input 从接收缓冲区读数
Text1.Text = r 在文本框中显示
Case Else
End Select
End Sub

MSComm1.InputMode = comInputModeBinary
定义了二进制接收方式,把这个改了。(PXY为字符 士为符号 ╳为数字)要是你上面说的没有字就不会有这个问题。要是命令中没有字符或只是数据或BCD码就不会有问题了。

有关于 RS232 串口通讯请看下面这帖,里面有我的回答.

http://post.baidu.com/f?kz=71817013