VB串口通信RS232 接收数据问题.

dazhi518 2010-09-14 09:06:03
我第一次学习接触串口通信编程,想利用电脑接收"电子高度规"传递的数据.
窗体上有一个文本框控件,把收到的数据写显示在文本框里

我是这样写的代码:

Dim z As String

Private Sub Form_Load()
MSComm1.commport = 2
MSComm1.settings = "9600,N,8,1"
MSComm1.portopen = True
MSComm1.RThreshold = 1
End Sub

Private Sub MSComm1_OnComm()
z = MSComm1.input
Text2.Text = z

End Sub

可是它跟本就没有发生MSComm1_OnComm()事件呀.

请高手多多指教.十分感谢....
...全文
458 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
XC_Electronics 2010-11-15
  • 打赏
  • 举报
回复
我也有同样的问题,高手在哪?
lable_asp 2010-11-15
  • 打赏
  • 举报
回复
数据转换
mybha 2010-10-21
  • 打赏
  • 举报
回复
串口的ONCOM事件的触发阈值没有设置,去查一下控件的说明,应该是当缓冲区接收到你设置的字节数后就触发事件.
flfq 2010-10-21
  • 打赏
  • 举报
回复
用过数显高度尺,你首先要判断接线是否正常,用串口调试工具试试能否接收到数据,这些设备一般都是主动发送的。
kkaa123321 2010-10-20
  • 打赏
  • 举报
回复
1.使用串口调试器找出具体串口,2。数据是否是十进制,可能用函数转换
dazhi518 2010-09-16
  • 打赏
  • 举报
回复
谢谢.....
贝隆 2010-09-16
  • 打赏
  • 举报
回复
使用串口调试器试一试,如果串口调试器都不行,那说明是硬件问题。
http://download.csdn.net/source/1441583
zdingyun 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dazhi518 的回复:]
引用 4 楼 zdingyun 的回复:
需要看"电子高度规"的通信协议是如何约定的,似乎有可能是发送字节数据.可以参阅:
http://www.vbgood.com/viewthread.php?tid=83700&highlight=
用它的工程来调试.
并请注意COM口接线是否正确.


大侠,如果是发送字节数据的话,我的程序改如何写呢..十分感谢.
[/Quote]

见4楼给出的链接.
dazhi518 2010-09-15
  • 打赏
  • 举报
回复
谢谢各位.问题还是解决不了...我不知道是不是因为那根连接线是自已改装的.别人的程序可以传输,我想自己做个程序试试,结果失败.....
msdtx 2010-09-15
  • 打赏
  • 举报
回复

Private Sub Form_Load()
MSComm1.commport = 2
MSComm1.settings = "9600,N,8,1"
MSComm1.portopen = True
MSComm1.RThreshold = 1
End Sub


你先打开串口,再设置RThreshold 为 1。
系统先执行第一句PortOpen,此时 RThreshold 为默认值0。如果 CPU 在执行第二条语句时串口已经收到数据,InbufferCount 的值大于 RThreshold,就不会发出OnComm 事件。
of123 2010-09-15
  • 打赏
  • 举报
回复

窗体上放 MSComm 控件了吗?怎么属性的首字符还是小写?
dazhi518 2010-09-14
  • 打赏
  • 举报
回复
有写呀.第五行.
getemail 2010-09-14
  • 打赏
  • 举报
回复
你好像没有MSComm1.PortOpen = True这句
dazhi518 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zdingyun 的回复:]
需要看"电子高度规"的通信协议是如何约定的,似乎有可能是发送字节数据.可以参阅:
http://www.vbgood.com/viewthread.php?tid=83700&highlight=
用它的工程来调试.
并请注意COM口接线是否正确.
[/Quote]

大侠,如果是发送字节数据的话,我的程序改如何写呢..十分感谢.
getemail 2010-09-14
  • 打赏
  • 举报
回复
MSComm1.RThreshold = 1 '若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件,如果设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。


MSComm1.RTSEnable = True '确定是否使 Request To Send (RTS) 线有效。一般情况下,由计算机发送 Request To Send 信号到联接的调制解调器,以请示允许发送数据。
'当 RTSEnable 设置为 True,端口打开时,Request To Send 线设置为高电平,端口关闭时,设置为低电平。
'Request To Send 线用在 RTS/CTS 硬件握手。RTSEnable 属性允许手动检测 Request To Send 线以确定其状态。

MSComm1.SThreshold = 1 '在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
'若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。
'若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
'如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。
'comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。
'例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。
'如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。

'没有以上三行(默认设置)就不能收到返回的信息,也不能接收短信
MSComm1.CommPort = 4 '设置端口号码,控件手工设置无效,必须重新指定
MSComm1.Settings = "9600,N,8,1" '9600波特,无奇偶校验,8位数据,一个停止位,可省略
MSComm1.PortOpen = True '打开端口,不,可省略
zdingyun 2010-09-14
  • 打赏
  • 举报
回复
需要看"电子高度规"的通信协议是如何约定的,似乎有可能是发送字节数据.可以参阅:
http://www.vbgood.com/viewthread.php?tid=83700&highlight=
用它的工程来调试.
并请注意COM口接线是否正确.
dazhi518 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zdingyun 的回复:]
请问LZ的"电子高度规"与PC机的COM口连接是否正确?
是"电子高度规"主动发送数据吗?
发送的数据是字符串吗?

LZ的代码可以接收字符串数据呀!
[/Quote]

电子高度规,本身有一个显示屏,屏上有一个接口,我把这个接口和电脑连接起来.我想它发送到自己的显示屏上就也会发送到电脑上.应该是主动发送数据的.

至于发送的是不是字符串,也不知道.电子高度规是用来测量尺寸的.
zdingyun 2010-09-14
  • 打赏
  • 举报
回复
请问LZ的"电子高度规"与PC机的COM口连接是否正确?
是"电子高度规"主动发送数据吗?
发送的数据是字符串吗?

LZ的代码可以接收字符串数据呀!
getemail 2010-09-14
  • 打赏
  • 举报
回复
没有发生MSComm1_OnComm()事件
说明
"电子高度规"没有传递数据

864

社区成员

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

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