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
这个是什么原因吗?有什么办法解决吗?
DataReceived事件里面没有代码 直接Ports(drp("串口号"))引用的,每次读出来的数据都是上一条接收到的数据
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
试试到DataReceived事件能不能接收完整的数据
看看接口文档是不是有什么设置漏了
在DataReceived事件能实时接收数据,但是也遇到一个问题 给设备发送命令,设备返回命令有断断续续的,就要设置cnt 感觉这样不够直接 太麻烦了,老师能帮忙找找原因吗?
没有设备测试,没法找呀。仔细看看设备的开发文档,根据人家的要求接收数据,什么直接不直接的,功能先做出来,再考虑优化