Foxtable(狐表)用户栏目专家坐堂 → 串口接收读卡器数据的位数只有最后2位数字(共10位数字)


  共有10776人关注过本帖树形打印复制链接

主题:串口接收读卡器数据的位数只有最后2位数字(共10位数字)

帅哥哟,离线,有人找我吗?
fanwei1111
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:25 积分:318 威望:0 精华:0 注册:2012/2/10 21:02:00
串口接收读卡器数据的位数只有最后2位数字(共10位数字)  发帖心情 Post By:2012/8/11 11:18:00 [只看该作者]

我是这样做的,当id卡放到读卡器上,读卡器接收到数据,通过串口传给foxtable,但只接收到2位数字(比如35,是id卡0005831235的后两位),而我利用串口调试助手却能接收到10位数字,下面是我用的代码,看看哪里出了问题,为什么接收的数据不完整,只接收到最后两位

 

 

 

 

代码

Ports.Add("COM1")
With Ports("COM1")
    .Close()
    .Parity = Parity.None '不发生奇偶校验检查
    .Handshake = Handshake.None '不使用握手协议
    .StopBits = StopBits.One '使用一个停止位
    .BaudRate = 9600
    .DataBits = 8
    .ReadBufferSize() = 4096
    .WriteBufferSize() = 2048
    .Open
End With

Ports("COM1").Open()


 回到顶部
帅哥哟,离线,有人找我吗?
muhua
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/8/11 11:37:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
fanwei1111
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:25 积分:318 威望:0 精华:0 注册:2012/2/10 21:02:00
仅做串口又测试了一下  发帖心情 Post By:2012/8/11 12:30:00 [只看该作者]

按你的方法我又做实验,发现10位数据都能接收到了,非常感谢,但又有新问题,刚打开项目时,第一次刷卡正常,第二次以后就变化了,分两个单元格显示,比如第一次刷卡时显示0005832829,而以后再刷一行显示00058328,下一行显示29,这十位数字被分开两个单元格显示了(具体如图附件中)?
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20120811121757.jpg
图片点击可在新窗口打开查看

补充一下,每次刚打开项目时第一次刷卡都正常,我是利用textbox文本框接收串口数据,然后放入表中

[此贴子已经被作者于2012-8-11 12:33:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
muhua
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/8/11 14:14:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
fanwei1111
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:25 积分:318 威望:0 精华:0 注册:2012/2/10 21:02:00
  发帖心情 Post By:2012/8/11 16:31:00 [只看该作者]

感觉问题在读卡器发送数据时,发送一次数据都是分两次接收数据(除了刚打开项目第一次接收外),代码如下: 

项目事件

 

DataReceived

 

Forms("窗口1").Controls("TextBox1").Text = e.Port.ReadExisting()

 

AfterOpenProject

 

Ports.Add("COM1")

With Ports("COM1")

    .Close()

    .Parity = Parity.None

    .Handshake = Handshake.None

    .StopBits = StopBits.One

    .BaudRate = 9600

    .DataBits = 8

    .ReadBufferSize() = 4096    

    .WriteBufferSize() = 2048  

    .Open

End With

 

Ports("COM1").Open()

 

 

窗口与控件事件

 

窗口1_TextBox1_ValueChanged

 

Dim rab As String

rab = Forms("窗口1").Controls("TextBox1").Text

Dim r As Row

r = Tables("称重数据").AddNew()

r("key") = rab

 


 回到顶部
帅哥哟,离线,有人找我吗?
muhua
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/8/11 16:38:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
fanwei1111
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:25 积分:318 威望:0 精华:0 注册:2012/2/10 21:02:00
探讨、请教一个细节问题  发帖心情 Post By:2012/8/12 0:38:00 [只看该作者]

muhua你好,你的代码不经过窗口能够一次接收串口数据10位(调试成功),我又加了窗口调试也通过了,代码如下:

1 Select Case e.Port.PortName
2 Case "COM1"
3     Dim r As Row
4      r = Tables("称重数据").AddNew()    

5      Forms("窗口1").Controls("TextBox1").Text = e.Port.ReadExisting()
6      Dim rab As String
7      rab = Forms("窗口1").Controls("TextBox1").Text
8      r("key") = rab
9 End Select   ‘这是调试好使成功接收到完整串口数据

 

(呵呵,新的问题又来了)当我把第5行Forms("窗口1").Controls("TextBox1").Text = e.Port.ReadExisting()移到第3行结果发送数据时就又分两次接收,换到第4行也一样接收数据不对,经过几次调试发现这样一个现象,当第4行语句r = Tables("称重数据").AddNew()在   Forms("窗口1").Controls("TextBox1").Text = e.Port.ReadExisting()语句之前窗口和表都能正常接收数据,在之后就不能正常接收数据,这是为什么呢?请高手指教!先谢谢啦!!! 


 回到顶部
帅哥哟,离线,有人找我吗?
muhua
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/8/13 8:22:00 [只看该作者]

用户已被锁定

 回到顶部