为什么我从串口读出来的数据不对?

cuixiutao 2002-01-27 03:23:24
Private Sub MSComm1_OnComm()
Dim txtBuf As String
Dim i As Integer
With MSComm1

Select Case .CommEvent
Case comEvReceive
txtBuf = .Input
'为什么读出来的txtbuf有时候对,有时候不对,我是与超级终端读的
'比较(超级终端都是对的)正常数据比如是:
‘04:49 27/01/02 96512628 Denied
’可是很多时候是读不全的,而且正确获得是上一次刷卡记录?
Debug.Print txtBuf 'nowgetstr 'Right(txtResponse, nowlen)
'下面是从txtBuf 中提取卡号
If Not GetCardId(txtBuf) Then'如果提取错误就退出
Exit Sub
End If

'按此卡号查询员工信息
GetStaffInfo cardid
'把刷卡记录添加到数据库中
AddCheckOnInfo cardid
End Select
End With
End Sub
...全文
212 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuixiutao 2002-01-31
  • 打赏
  • 举报
回复
谢谢各位,我的问题解决了,我采用硬件握手,每次接受一个字符,对一串数据接受完才处理,就好了
TBBT 2002-01-27
  • 打赏
  • 举报
回复
做个全局变量GETSTR

Private Sub MSComm1_OnComm()
Dim i As Integer, b As String
Dim Buffer As Variant

'MDIForm1.StatusBar1.Panels(1).Picture = MDIForm1.ImageList1.ListImages(1).Picture
i = MSComm1.CommEvent
If i > 1000 Then
If i = 1001 Then b = "接受到一个中断信号!"
If i = 1002 Then b = "Clear To Send 超时!"
If i = 1003 Then b = "Date Set Ready 超时!"
If i = 1004 Then b = "通讯帧错误!"
If i = 1006 Then b = "端口超速!"
If i = 1007 Then b = "载波检测超时!"
If i = 1008 Then b = "接受缓冲区溢出!"
If i = 1009 Then b = "奇偶校验错误!"
If i = 1010 Then b = "传送缓冲区溢出!"
If i = 1011 Then b = "检测端口设备控制块DCB错误!"
Else
If i = 2 Then
Form5.Label3(0).BackColor = QBColor(2)
Buffer = MSComm1.Input
getstr = getstr + StrConv(Buffer, vbUnicode)
Form5.Label3(0).BackColor = 0
End If
If i = 3 Then b = "检波状态改变"
End If
'MDIForm1.StatusBar1.Panels(1).Picture = MDIForm1.ImageList1.ListImages(2).Picture
If b <> "" Then addtip 2, 1, b
End Sub

fucool 2002-01-27
  • 打赏
  • 举报
回复
var
recstr:Olevariant;
i:integer;
begin
if Mscomm1.CommEvent = 2 then
begin

repeat
i := MSComm1.InBufferCount;
Sleep (200); //'API 函数,挂起当前进程一段时间

Until MSComm1.InBufferCount = i;

recstr := MSComm1.Input;
// showmessage( recstr);
self.CheckFileEx ;
try
self.ReadstrFromCom(recstr)
except
on EconvertError do Application.MessageBox('条码识读出错。','提示',64);
end;
end;
把这段译成BASIC就行了,这段是我从BASIC中转过去的.一定行.
这是我工程中的源码,没问题的 .

fucool 2002-01-27
  • 打赏
  • 举报
回复
在读入前用API sleep 喊数,一定行,


cuixiutao 2002-01-27
  • 打赏
  • 举报
回复
可是我是刷卡系统,别人耍卡,要根据这个卡号到数据库中读到这个人的资料呀。
xxfly 2002-01-27
  • 打赏
  • 举报
回复
我也遇到了类似的问题,后来我没有用这个它的事件来得数据,而用了一个时钟控件,
定时查看mscomm1.input属性。
cuixiutao 2002-01-27
  • 打赏
  • 举报
回复
怎么清空?为什么我在读后加一个msgbox txtBuf,读的数据好像比较正确,另外,如果我在form上添加一个文本框txtShowData,每次MSComm1_OnComm事件时让txtShowData=txtShowData+txtBuf,这样就是对的呢?
Amoon 2002-01-27
  • 打赏
  • 举报
回复
你每次读数据前把txtBuf清空试试?

741

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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