【发布时间】:2013-02-13 08:14:28
【问题描述】:
我有一个在 com 端口上发送数据的临床设备,我想从设备接收数据 在 ENQ 上发送 ACK 后,它还收到了第一帧 (254) 字符 它接收 [ETB] [CR][LF] 个字符 然后我再次为下一帧发送 ACK,但不接收数据 只接收 EOT 字符
根据设备的设备通信是:
->[确认]
**********************-[ETB]21 [CR][LF]
->[确认]
**********************-[ETX]8E [CR][LF]
->[确认]
我的代码是:
'MSComm1.Settings = "9600,n,8,1"
'MSComm1.InputLen = 1
Private Sub MSComm1_OnComm()
Dim InBuff As String
InBuff = MSComm1.Input
if Chr$(5)=InBuff then 'ENQ received
MSComm1.Output=Chr$(6) & VbCr
elseif Chr$(10)=InBuff then 'LF received
MSComm1.Output=Chr$(6) & VbCr
else
text1.text=text1.text & InBuff
end if
End Sub
设备发送完整数据,因为设备附带了 1 个软件,该设备接收完整数据 但我再次发送 ACK 后没有收到下一帧, 如果有人知道下一个 ACK 必须发送什么输出,请告诉我
提前致谢
【问题讨论】:
-
MSComm1.InputLen = 1 将每次调用 .Input 限制为仅从缓冲区读取 1 个字符; .RThreshold 将确定 rx 缓冲区中引发 _oncomm 所需的字符数,尝试使用 1。在事件运行时将其设置为 0,使用 .InBufferCount 确定和处理大于 1 个字符的缓冲区。谷歌 sysinternals portmon 查看所有端口 tx/rx 的工具。
-
您必须阅读设备的协议规范,我们无法为您提供帮助。猜测是设备只是认为事务完成,因此发送传输结束控制代码。这将要求您使用 ENQ 开始另一个。只是猜测。
标签: interface vb6 serial-port