SOS!!求教mscomm1控件编程问题.急用!

mysh911 2006-09-10 04:39:20
各位大虾好啊。我想请问一下怎么样通过mscomm1控件实现以下要求通讯啊?
我是个vb新手啊,不懂怎么使用这控件啊,有那位高手可以解释详细点啊,最好有源代码啊。要不我死定了啊。呜呜...
其中 波特率:9600 、校验位:N 、数据位:8、停止位为:1
数据的格式如:PP AA BB CC DD
通讯协议如下:
格式: 字头PP AA BB CC DD(校验位)
取值范围: (固定值,比如为FF) 取值只能为00、01、02、03 取值为从01到31 取值为00到06 取值为AA+BB+CC
(如:AA=01、BB=02、CC=03,则DD=06)
...全文
675 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mysh911 2006-09-12
  • 打赏
  • 举报
回复
恩.好的.谢谢啊。大虾.我太喜欢你了.谢谢
doxob 2006-09-12
  • 打赏
  • 举报
回复
例子已经给你了,你研究研究吧,毕竟我不能代替你做全部的东西
doxob 2006-09-12
  • 打赏
  • 举报
回复
在我这里试正常啊,你不是说
AA取值只能为00、01、02、03
BB取值为从01到31
CC取值为从00到06
就不要输入字符了。或者你作个数值判断吧
mysh911 2006-09-12
  • 打赏
  • 举报
回复
我可能表达的不清楚吧.
我是说我用你的程序在有串口的机子上试了就没有下面这错误了啊.
Run-time error '8002'
Invalid port number
但是我想问下就是说我令数据格式为
PP=1
AA=1
BB=2
CC=3
时为什么在串口调试器里显示的却是01 01 02 03 06 00啊.我想问下最后怎么多了个00出来啊?
不是PP AA BB CC DD的格式吗?那这00是怎么回事啊?
还有为什么我令PP为字母的话则无论什么字母pp的位置他都总是显示00啊.如果我想令PP为字母那怎么样才可以显示字母出来啊?
还有就是从串口调试发出数据时这程序收不到啊 ,没有显示.我想问下当我们从串口调试器发出数据来时那我们这程序怎么样才可以显示发出的数据啊?
谢谢!

mysh911 2006-09-12
  • 打赏
  • 举报
回复
恩.这个我在串口机子上试了没有了.
但是奇怪也了.
我令
PP=1
AA=1
BB=2
CC=3
时怎么在串口调试里收到却是01 01 02 03 06 00啊.最后怎么多了个00出来啊?
如果我令PP为字母的话则无论什么字母他都显示00啊.如果我想令PP为字母那怎么办啊?
还有就是从串口调试发出来时程序收不到啊 ,没有显示.
谢谢.在线等待中
doxob 2006-09-12
  • 打赏
  • 举报
回复
有两个串口的机器,用一根两面都是母头的串口线连上就可以。因为两面都是母头的串口线一般都是2,3脚交叉的。
doxob 2006-09-12
  • 打赏
  • 举报
回复
Run-time error '8002'
Invalid port number
这说明在你的机器中没有检测到COM口,找个有两个COM口的机器试一下
MSComm1.PortOpen = 1这句话是打开串口1
MSComm2.PortOpen = 1这句话是打开串口2
mysh911 2006-09-11
  • 打赏
  • 举报
回复
谢谢doxob(doxob) 大虾啊.我明天去试试看啊。
对了,你说电脑要有两个串口,把两个串口对连注意2,3角要交叉。那我要是装上串口卡了再用那线连上原来主板上的串口就可以了吧?
我现在还没有串口卡呢,不过我现在运行他显示有错啊,
出错为:
Run-time error '8002'
Invalid port number
啊.然后他指向语句MSComm2.PortOpen = 1 啊.
在你发给我的邮件当中有下面这个form_load(),是不是在
Private Sub Form_Load()
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = 1
End If
If MSComm2.PortOpen = False Then
MSComm2.PortOpen = 1
End If
End Sub
中我们把mscomm1和2的都设成了portopen=1的缘故还是怎么的?
doxob 2006-09-11
  • 打赏
  • 举报
回复
你的电脑要有两个串口,把两个串口对连注意2,3角要交叉。
我把程序发给你信箱里你看看吧
doxob 2006-09-11
  • 打赏
  • 举报
回复
先把MScomm1的RThreshold属性设成5 如果接收数据超过等于5个MSComm1.CommEvent=2

'发送
Private Sub Command1_Click()
dim dataout(5) as byte '定义一个发送数组
DD=AA+BB+CC '
dataout(0) = PP '数组中付发送值
dataout(1) = AA
dataout(2) = BB
dataout(3) = CC
dataout(4) = DD

MSComm1.Output = dataout '发送数据
End Sub
'接收
Dim data As Variant '定义一个Variant类型变量读出数据
Dim datain() As Byte '读出数据数组型
Private Sub MSComm1_OnComm() '接收后显示

If MSComm1.CommEvent = 2 Then '当接收的数据超出RThreshold属性中定义的个数时
data = MSComm1.Input '接收数据
datain = data '接收到的数据付给datain数组

For i = 0 To 4 '循环把发送的数据显示到TEXT1中
Text1.Text = Text1.Text & datain(i) & " "
Next i
If datain(0) = PP Then '接收到的字头如果正确
alert = MsgBox("接收成功!", , "写入提示")
Else
alert = MsgBox("接收失败!", , "写入提示")
End If
End If

End Sub
mysh911 2006-09-11
  • 打赏
  • 举报
回复
大虾可以完整一点吗,我不 是很懂啊。如果可以的话解释完整点啊,或者把文件发到我信箱里啊。谢谢大虾啊!!
再补充一下,就是我们可以手动输入数据格式,接受到时在界面上 也显示出来.拜托啊大虾.
doxob 2006-09-11
  • 打赏
  • 举报
回复
中间应该是这样的
Dim datain() As Byte '读出数据数组型
Private Sub MSComm1_OnComm() '接收后显示
doxob 2006-09-11
  • 打赏
  • 举报
回复
先吧MScomm1的RThreshold属性设成5

'发送
Private Sub Command1_Click()
dim dataout(5) as byte
DD=AA+BB+CC
dataout(0) = PP
dataout(1) = AA
dataout(2) = BB
dataout(3) = CC
dataout(4) = DD

MSComm1.Output = dataout
End Sub
'接收
Dim data As Variant '读出数据
Dim datain() As Byte '读出数据数组型Private Sub MSComm1_OnComm() '接收后显示

If MSComm1.CommEvent = 2 Then
data = MSComm1.Input
datain = data

For i = 0 To 4
Text1.Text = Text1.Text & datain(i) & " "
Next i
If datain(0) = PP Then
alert = MsgBox("接收成功!", , "写入提示")
Else
alert = MsgBox("接收失败!", , "写入提示")
End If
End If

End Sub
mysh911 2006-09-10
  • 打赏
  • 举报
回复
不好意思啊,一发表上去就乱了,我再补充一下啊。
数据的格式如:PP AA BB CC DD
其中 字头PP 为(固定值,比如为FF)
AA取值只能为00、01、02、03
BB取值为从01到31
CC取值为从00到06
DD取值为AA+BB+CC(如:AA=01、BB=02、CC=03,则DD=06)

那个大虾懂的告诉我一下啊,因我是个vb新手不懂这方面啊,希望最好有源程序啊。我等着急用啊,我的email:mysh911@163.com谢谢啊.

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧