Foxtable(狐表)用户栏目专家坐堂 → 串口接收会延迟一次


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

主题:串口接收会延迟一次

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


加好友 发短信
等级:童狐 帖子:271 积分:2334 威望:0 精华:0 注册:2016/6/3 8:28:00
串口接收会延迟一次  发帖心情 Post By:2022/2/25 8:56:00 [只看该作者]

Dim str As String
Dim drp As Row = Tables("INT").Current
If Ports(drp("串口号")).IsOpen Then
    Dim fsstr1 As String="175654854455555"
    Functions.Execute("sendstr",fsstr1,drp("串口号"))
    Dim cnt As Integer =  Ports(drp("串口号")).BytesToRead
    'msgbox(cnt1)
    'If cnt1=cnt  Then '缓冲区是否有数
    Dim rval(cnt - 1) As Byte
    Ports(drp("串口号")).Read(rval,0,cnt)
    str =BitConverter.ToString(rval).Replace("-", "")
    
    msgbox(str) ’这个接收到的数据是第二次接收到的数据
    Dim dr1 As DataRow =DataTables("日志信息").AddNew
    dr1("记录信息")="【接收数据】" & str
    dr1("记录时间")=Format(Date.Now, "G")
    dr1.Save
    Tables("日志信息").Sort = "记录时间 desc"
    Tables("日志信息").Select(0,0)
Else
    Forms("int").Open
End If
这个是什么原因吗?有什么办法解决吗?

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/25 9:05:00 [只看该作者]

代码写在哪里的?调用的函数代码发上来
DataReceived事件有没有代码?

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


加好友 发短信
等级:童狐 帖子:271 积分:2334 威望:0 精华:0 注册:2016/6/3 8:28:00
  发帖心情 Post By:2022/2/25 12:20:00 [只看该作者]

  DataReceived事件里面没有代码  直接Ports(drp("串口号"))引用的,每次读出来的数据都是上一条接收到的数据

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


加好友 发短信
等级:童狐 帖子:271 积分:2334 威望:0 精华:0 注册:2016/6/3 8:28:00
  发帖心情 Post By:2022/2/25 12:22:00 [只看该作者]

  Functions.Execute("sendstr")这个的代码




Dim sendstr As String = Args(0)
Dim sendcom As String = Args(1)

If sendstr.Contains(" ") Then
    sendstr= sendstr.Replace(" ","")
End If

Dim aaff(sendstr.Length/2-1) As uInteger 'CRC验证码
For i As Integer = 0 To sendstr.Length/2-1
    aaff(i) = Convert.ToInt32("0x" & sendstr.Substring(i * 2, 2),16)
Next
Dim bb As String = Convert.ToString(CRC16(aaff, aaff.Length), 16).ToUpper().PadLeft(4,"0")

bb = bb.SubString(2.2) & bb.SubString(0,2)
sendstr= sendstr & bb
Dim dr1 As DataRow =DataTables("日志信息").AddNew
dr1("记录信息")="【发送数据】" & sendstr
dr1("记录时间")=  Format(Date.Now, "G")
dr1.Save
Tables("日志信息").Sort = "记录时间 desc"
Tables("日志信息").Select(0,0)


Dim bytes2(sendstr.Length/2-1) As Byte
For i As Integer = 0 To sendstr.Length/2-1
    bytes2(i) ="&H" & sendstr.Substring(i * 2, 2)
Next

If Ports(sendcom).IsOpen Then
    Ports(sendcom).Write(bytes2,0,bytes2.length)
Else
    msgbox("请打开端口或者端口丢失")
    Forms("int").Open
End If

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/25 13:39:00 [只看该作者]

试试到DataReceived事件能不能接收完整的数据

看看接口文档是不是有什么设置漏了

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


加好友 发短信
等级:童狐 帖子:271 积分:2334 威望:0 精华:0 注册:2016/6/3 8:28:00
  发帖心情 Post By:2022/2/25 20:28:00 [只看该作者]

 在DataReceived事件能实时接收数据,但是也遇到一个问题   给设备发送命令,设备返回命令有断断续续的,就要设置cnt 感觉这样不够直接  太麻烦了,老师能帮忙找找原因吗?

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110581 积分:562801 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/26 9:01:00 [只看该作者]

没有设备测试,没法找呀。仔细看看设备的开发文档,根据人家的要求接收数据,什么直接不直接的,功能先做出来,再考虑优化

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


加好友 发短信
等级:七尾狐 帖子:1578 积分:13038 威望:0 精华:0 注册:2009/6/16 7:30:00
  发帖心情 Post By:2023/11/20 10:54:00 [只看该作者]

这个问题一直都有,没有解决

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


加好友 发短信
等级:七尾狐 帖子:1578 积分:13038 威望:0 精华:0 注册:2009/6/16 7:30:00
  发帖心情 Post By:2023/11/20 10:55:00 [只看该作者]

我现在也遇到这个问题了,也是每次读出来的数据都是上一条接收到的数据

 回到顶部