以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  串口接收读卡器数据的位数只有最后2位数字(共10位数字)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=22401)

--  作者:fanwei1111
--  发布时间:2012/8/11 11:18:00
--  串口接收读卡器数据的位数只有最后2位数字(共10位数字)

我是这样做的,当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()


--  作者:fanwei1111
--  发布时间:2012/8/11 12:30:00
--  仅做串口又测试了一下

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

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

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

--  作者:fanwei1111
--  发布时间: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

 


--  作者:fanwei1111
--  发布时间: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()语句之前窗口和表都能正常接收数据,在之后就不能正常接收数据,这是为什么呢?请高手指教!先谢谢啦!!!