以文本方式查看主题 - 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,输出一下操作的各种数据,看看出错后当时正在处理的是什么样的数据
|