以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  串口接收会延迟一次  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175244)

--  作者:shyilin
--  发布时间: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
这个是什么原因吗?有什么办法解决吗?

--  作者:有点蓝
--  发布时间:2022/2/25 9:05:00
--  
代码写在哪里的?调用的函数代码发上来
DataReceived事件有没有代码?
--  作者:shyilin
--  发布时间:2022/2/25 12:20:00
--  
  DataReceived事件里面没有代码  直接Ports(drp("串口号"))引用的,每次读出来的数据都是上一条接收到的数据
--  作者:shyilin
--  发布时间: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
--  作者:有点蓝
--  发布时间:2022/2/25 13:39:00
--  
试试到DataReceived事件能不能接收完整的数据

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

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

--  作者:有点蓝
--  发布时间:2022/2/26 9:01:00
--  
没有设备测试,没法找呀。仔细看看设备的开发文档,根据人家的要求接收数据,什么直接不直接的,功能先做出来,再考虑优化
--  作者:playmal
--  发布时间:2023/11/20 10:54:00
--  
这个问题一直都有,没有解决
--  作者:playmal
--  发布时间:2023/11/20 10:55:00
--  
我现在也遇到这个问题了,也是每次读出来的数据都是上一条接收到的数据