Foxtable(狐表)用户栏目专家坐堂 → 串口代码


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

主题:串口代码

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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
串口代码  发帖心情 Post By:2013/3/5 14:58:00 [只看该作者]

 下面是一段串口的读数据代码。狐表中,数据类型没有variant类型,是否用object类型?如何将读到的数据写入数组?下面这段vb代码如何改成狐表的代码?谢谢
Private Sub MSComm1_OnComm() '串口的消息响应函数
Select Case MSComm1.CommEvent '串口事件
    Case comEvReceive '接收到数据
    Dim Buffer As Variant '存储数据的缓冲区
    Dim StringBuf(8) As String '数据数组
  
    Buffer = MSComm1.Input '清理接收缓冲区,此时,接收的字节数已经为0
    Dim I As Integer
    Dim CardNumber As Long '卡号
    Dim CardNumber1 As Long
    Dim CardNumber2 As Long
    Dim CardNumber3 As Long
    Dim CardNumber4 As Long
    
    CardNumber3 = CDec(Buffer(4)) * 2 ^ 16 + (Buffer(5) * 2 ^ 8) + Buffer(6)
    CardNumber2 = (Buffer(5) * 2 ^ 8) + Buffer(6)
    CardNumber1 = CDec(Buffer(6))
    For I = 0 To 7
        StringBuf(I) = DecToHex(CDec(Buffer(I))) '转换成十六进制
    Next

    If CDec(Buffer(3)) > 127 Then
        'Buffer(3) = Buffer(3) And &HF
        Buffer(3) = Buffer(3) - &H70
        CardNumber4 = CDec(Buffer(3)) * 2 ^ 24 + CDec(Buffer(4)) * 2 ^ 16 + (Buffer(5) * 2 ^ 8) + Buffer(6)
        Text1.Text = "读卡日期:" & Date & Chr(13) & Chr(10) & _
                 "读卡时间:" & Time() & Chr(13) & Chr(10) & _
                 "十六进制数:" & StringBuf(2) & StringBuf(3) & StringBuf(4) & StringBuf(5) & StringBuf(6) & Chr(13) & Chr(10) & _
                 "4字节十进制卡号:" & "-" & Str(Trim(CardNumber4)) & Chr(13) & Chr(10) & _
                 "3字节十进制卡号:" & Str(CardNumber3) & Chr(13) & Chr(10) & _
                 "2字节十进制卡号:" & Str(CardNumber2) & Chr(13) & Chr(10) & _
                 "1字节十进制卡号:" & Str(CardNumber1) & Chr(13) & Chr(10)
    Else
        CardNumber4 = CDec(Buffer(3)) * 2 ^ 24 + CDec(Buffer(4)) * 2 ^ 16 + (Buffer(5) * 2 ^ 8) + Buffer(6)
        'CardNumber4 = CDec(Buffer(3)) * 2 ^ 24 + CDec(Buffer(4)) * 2 ^ 16 + (Buffer(5) * 2 ^ 8) + Buffer(6)
        Text1.Text = "读卡日期:" & Date & Chr(13) & Chr(10) & _
                     "读卡时间:" & Time() & Chr(13) & Chr(10) & _
                     "十六进制数:" & StringBuf(2) & StringBuf(3) & StringBuf(4) & StringBuf(5) & StringBuf(6) & Chr(13) & Chr(10) & _
                     "4字节十进制卡号:" & Str(CardNumber4) & Chr(13) & Chr(10) & _
                     "3字节十进制卡号:" & Str(CardNumber3) & Chr(13) & Chr(10) & _
                     "2字节十进制卡号:" & Str(CardNumber2) & Chr(13) & Chr(10) & _
                     "1字节十进制卡号:" & Str(CardNumber1) & Chr(13) & Chr(10)
    End If
End Select

End Sub
Function DecToHex(DecNumber As Integer) As String '转换成十六进制
        If DecNumber <= 15 Then
            DecToHex = "  0" & Hex(DecNumber)
        Else: DecToHex = "  " & Hex(DecNumber)
        End If
End Function


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/5 15:27:00 [只看该作者]

是的,用object,不过vb.net已经提供了更简单的串口数据读取方法,你可以看看foxtable的帮助。


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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 15:56:00 [只看该作者]

 帮助里我都仔细看了,读出来老是错误。传给label倒是没问题,关键要把它切割,转换时老出错。谢谢

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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 15:59:00 [只看该作者]

也就是说,读出来的数据我怎么给他转换成16进制?我在摸索一下,感觉快出来了


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/5 16:04:00 [只看该作者]

既然能读取数据就好办,至于转换出错,可以慢慢调试分析。

上面那些代码中用到的函数,vb.ne和foxtable都有。


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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 16:14:00 [只看该作者]

 
图片点击可在新窗口打开查看此主题相关图片如下:未命名.bmp
图片点击可在新窗口打开查看


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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 16:14:00 [只看该作者]

什么意思呢?


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/3/5 16:18:00 [只看该作者]

if s isnot nothing then

    output.show(s.length)

end if


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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 16:25:00 [只看该作者]

这回貌似对了,命令窗口中的程序
Dim s As object
s=ports("com7").ReadExisting()'Forms("窗口1").Controls("Label1").text =
If s IsNot Nothing Then
    output.show(s.length)
End If
刷一下卡,出上图提示,确定,不管他
按执行,输出8,表示8个字节?

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


加好友 发短信
等级:幼狐 帖子:58 积分:543 威望:0 精华:0 注册:2013/2/4 14:26:00
  发帖心情 Post By:2013/3/5 16:26:00 [只看该作者]

Dim cnt As Integer = Ports("COM2").BytesToRead
If
cnt > 0 Then '缓冲区是否有数据
    Dim
Val(cnt - 1) As Byte
   
Ports("COM2").Read(val,0,cnt)
End If

您的意思要这么搞?


 回到顶部
总数 12 1 2 下一页