Foxtable(狐表)用户栏目专家坐堂 → [求助]串口通信问题


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

主题:[求助]串口通信问题

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


加好友 发短信
等级:三尾狐 帖子:628 积分:3594 威望:0 精华:0 注册:2011/5/21 18:05:00
[求助]串口通信问题  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/11/28 17:20:00 [只看该作者]

调试看是哪一句代码的问题。

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

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


加好友 发短信
等级:三尾狐 帖子:628 积分:3594 威望:0 精华:0 注册:2011/5/21 18:05:00
  发帖心情 Post By:2019/11/29 10:41:00 [只看该作者]

这种情况不是一直出现,我需要怎么调试?问题三是什么原因呢?

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


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/11/29 11:19:00 [只看该作者]

我也看不出是什么原因。文本框赋值后会不会触发其它事件?

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

 回到顶部