运行程序时,不能够触发OnComm()事件
编号:QA004745
建立日期: 2003年11月7日 最后修改日期:2003年11月7日
所属类别:
Q
何鑫:
操作系统:windows xp
编程工具:vb
问题:在使用MSComm控件实现与串口仪器的数据传送和接收时,当端口打开后,主站向仪器中发送一个Modbus"包",其格式为:
从属地址 11(十六进制,下同)
功能码 04
数据启动地址-hi 40
数据启动地址-lo 50
注册号-hi 00
注册号-lo 03
CRC-lo A7
CRC-hi 4A
我主要的传送代码为:
Dim i As Integer
Dim data_out(8) As Byte
Dim buffer As Variant
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
data_out(0) = &H11
data_out(1) = &H4
data_out(2) = &H40
data_out(3) = &H50
data_out(4) = &H00
data_out(5) = &H03
data_out(6) = &HA7
& nbsp;data_out(7) = &H4A
Dim temp(8) As Byte
For i = 0 To 7
temp(i) = data_out(i)
Next i
MSComm1.Output = temp
当运行程序时,不能够触发OnComm()事件,我设置断点跟踪了一下,感觉到是没有将数据传入仪器.在这里我只是测试能否与仪器进行交互,是使用的一个示例,所以有关CRC校验的东西还未考虑,但是任凭我怎么想办法,始终不能够触发事件,请问该如何解决,怎样才能够取得仪器中的数据?
由于我是刚接触串口编程,所以很多的问题还不是很清楚,如果方便请给小弟较为详细的说明,万分感谢!
A回答:
李刚的意见:
问题可能1
在串口初始化中缺少语句 MSComm1.RThreshold=1
问题可能2
串口的握手协议(Handshaking属性)设置有问题.一些仪器可能需要使用RTS握手。
刘殷君的意见:
因为你没有设定为事件驱动模式。好象是在HANDSHAKING这个属性里面设置,你可以查一查帮助文件。我第一次使用这个控件是也出现相同问题,所以还有点印象,不过很久没用了,记得不太清楚。
cubking的意见:
不能够触发OnComm()事件时请检查MSComm控件的RThreshold属性和SThreshold属性
将RThreshold属性设置为0(缺省)将在接收字符时不产生OnComm事件。例如,将RThreshold属性设置为1将导致MSComm控件在每个字符放入缓冲区时就触发OnComm事件。
将SThreshold属性设置为0(缺省)将在发送字符时不产生OnComm事件。例如,将SThreshold属性设置为1将导致发送缓冲区完全变空。如果发送缓冲区中的字符比value值小,则将CommEvent属性设置为comEvSend,并产生OnComm事件。comEvSend事件只产生一次,在字符数低于SThreshold时。例如,如果SThreshold等于5,当字符数从5降低到4时产生一次comEvSend事件。如果输出队列中的字符数总不多于SThreshold属性值,则永不产生该事件。
liugangnet的意见:
关键的一句你为何没有,
If Comm1.PortOpen=false Then Comm1.PortOpen=true
...
Comm1.PortOpen = True '关键的一句哈,有它才发送数据呀(开通讯)
Comm1.Output = "..."
...
此问题由李刚等回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 网络与通信, network, communicate, com, com1, com2。
| |
|
|
| |
|
|