以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]串口通信问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143583)

--  作者:YDS
--  发布时间:2019/11/28 16:54:00
--  [求助]串口通信问题
问题一
错误信息:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.11.3.1
错误所在事件:串口监视器,DataReceived
详细错误信息:
索引超出了数组界限。

错误代码:
\'串口读取数据代码
Dim i,cnt As Integer
Dim jssj As String
Select Case e.Port.PortName
    Case “com1”
        cnt = e.Port.BytesToRead
        If cnt = vars("coml") Then
            Dim Vr(cnt - 1) As Byte
            e.Port.Read(Vr,0,cnt)
            jssj = ""
            For i = 0 To cnt - 1
                If jssj = "" Then
                    jssj = Vr(i)
                Else
                    jssj = jssj & "-" & Vr(i)
                End If
            Next
            Functions.AsyncExecute("AC200",jssj)
        End If
    Case “com2”
        cnt = e.Port.BytesToRead
        If cnt > 0 Then
            Dim Vr(cnt - 1) As Byte
            e.Port.Read(Vr,0,cnt)
            jssj = ""
            For i = 0 To cnt - 1
                If jssj = "" Then
                    jssj = Vr(i)
                Else
                    jssj = jssj & "-" & Vr(i)
                End If
            Next
            Functions.AsyncExecute("TCU",jssj)
        End If
    Case “com3”
        cnt = e.Port.BytesToRead
        If cnt > 0 Then
            Dim Vr(cnt - 1) As Byte
            e.Port.Read(Vr,0,cnt)
            jssj = ""
            For i = 0 To cnt - 1
                If jssj = "" Then
                    jssj = Vr(i)
                Else
                    jssj = jssj & "-" & Vr(i)
                End If
            Next
            Functions.AsyncExecute("LLNJ",jssj)
        End If
    Case Functions.Execute("GET","串口号","WD","值")
        cnt = e.Port.BytesToRead
        If cnt > 0 Then
            Dim Vr(cnt - 1) As Byte
            e.Port.Read(Vr,0,cnt)
            jssj = ""
            For i = 0 To cnt - 1
                If jssj = "" Then
                    jssj = Vr(i)
                Else
                    jssj = jssj & "-" & Vr(i)
                End If
            Next
            Functions.AsyncExecute("WD",jssj)
        End If
End Select


问题二
错误信息:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.11.3.1
错误所在事件:自定义函数TCU
详细错误信息:
调用的目标发生了异常。
没有为 类型“DBNull” 和 类型“Integer” 定义运算符“=”

错误代码:
Dim sj As String = args(0)
If vars("kt") = 1 Then
    If Forms("主窗口").opened Then
        Forms("主窗口").Controls("tt").text = Format(Date.now,"HHmmssfff")
        If vars("sjt") > "" Then
            vars("sjt") = vars("sjt") & "-" & sj
        Else
            vars("sjt") = sj
        End If
    End If
End If

问题三
错误信息:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.11.3.1
错误所在事件:自定义函数TCU
详细错误信息:
调用的目标发生了异常。
索引超出范围。必须为非负值并小于集合大小。
参数名: index

错误代码:
Dim sj As String = args(0)
If vars("kt") = 1 Then
    If Forms("主窗口").opened Then
        Forms("主窗口").Controls("tt").text = Format(Date.now,"HHmmssfff")
        If vars("sjt") > "" Then
            vars("sjt") = vars("sjt") & "-" & sj
        Else
            vars("sjt") = sj
        End If
    End If
End If

[此贴子已经被作者于2019/11/28 16:58:10编辑过]

--  作者:有点蓝
--  发布时间:2019/11/28 17:20:00
--  
调试看是哪一句代码的问题。

问题二的错误应该是【If vars("kt") = 1 Then】这一句引起的,vars("kt")可能之前是从数据库查询的结果有问题,如果没有查询结果数据库返回的是DBNull,而不是0,1这种值

--  作者:YDS
--  发布时间:2019/11/29 10:41:00
--  
这种情况不是一直出现,我需要怎么调试?问题三是什么原因呢?
--  作者:有点蓝
--  发布时间:2019/11/29 11:19:00
--  
我也看不出是什么原因。文本框赋值后会不会触发其它事件?

可以使用日志调试:https://wechat.foxtable.com:9009/Webhelp/scr/we0008.htm,输出一下操作的各种数据,看看出错后当时正在处理的是什么样的数据