VB 串口编程 问题一大堆

mmmaaa 2012-02-03 10:44:28
好几年没编程了,好多都忘了。

问题 设置串口后,在接受字符哪里出问题,不知道什么原因


Private Sub Command2_Click()


MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.Settings = 19200 & "," & "n,8,1"


MSComm1.InputMode = 0 '接收文本型数据
MSComm1.PortOpen = True '打开通信端口1
End Sub

'接收字符
Private Sub Timer1_Timer()
Dim buf$
Dim shou()
Dim shou1()
Dim i
Dim j

buf = Trim(MSComm1.Input) '将缓冲区内的数据读入buf变量中
If Len(buf) <> 0 Then '判断缓冲区内是否存在数据
TextReceive.Text = TextReceive.Text + buf 'Chr(13) + Chr(10)

TextReceive.SelLength = 1 '光标设置到文本框的最后一行
TextReceive.SelStart = Len(TextReceive.Text) '光标设置到文本框的最后一行
End If

End Sub


'停止程序运行
Private Sub Cmdquit_Click()
Unload Me
End Sub

...全文
537 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
痴心贼 2013-04-01
  • 打赏
  • 举报
回复
引用 11 楼 Veron_04 的回复:
把: out(nNum) = varP(0) 修改为: If Not IsNull(varP) Then out(nNum) = varP(0)
为什么我改了还是下标越界呢- -
chinaboyzyq 2012-02-03
  • 打赏
  • 举报
回复
串接收不要用timer控件,要用mscomm的触发事件。
贝隆 2012-02-03
  • 打赏
  • 举报
回复

Option Explicit

Private Sub Form_Load()
MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.Settings = "19200,n,8,1"


MSComm1.InputMode = comInputModeText '接收文本型数据
MSComm1.PortOpen = True '打开通信端口1

End Sub

贝隆 2012-02-03
  • 打赏
  • 举报
回复
把:
out(nNum) = varP(0)
修改为:
If Not IsNull(varP) Then out(nNum) = varP(0)
贝隆 2012-02-03
  • 打赏
  • 举报
回复
加个错误处理语句即可。
贝隆 2012-02-03
  • 打赏
  • 举报
回复
那说明varP是空
mmmaaa 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 veron_04 的回复:]
别,来 亲 好不?
受不了

呵呵

那个串口调试器怎么会提示下表越界?哪一句上?
[/Quote]


out(nNum) = varP(0)
贝隆 2012-02-03
  • 打赏
  • 举报
回复
别,来 亲 好不?
受不了

呵呵

那个串口调试器怎么会提示下表越界?哪一句上?
mmmaaa 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 veron_04 的回复:]
VB code

Option Explicit

Private Sub Form_Load()
MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.Settings = "19200,n,8,1"


MSComm1.InputMode = comInputModeText '接收文本型数据
……
[/Quote]

亲,这个我以前也是这么处理的,但是现在,我想独立的设置一个波特率,然后通过一个按钮赋值给串口的settings属性。所以出现了错误。。。。接收数据的错误。。。
mmmaaa 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 veron_04 的回复:]
先看看这个,VB编写的串口调试器
[/Quote]

这个不能用,下标越界。。。
orient_hwa 2012-02-03
  • 打赏
  • 举报
回复
我的做法是mscomm事件来触发一个timer,这样就不会有数据丢失的问题,否则当数据量很大时,若单纯用一个mscomm事件来收难免会丢失数据量,特别在波特率可以任意调整时或下位机有多串数据相应且很慢时。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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