Foxtable(狐表)用户栏目专家坐堂 → [求助]rs232串口发送字节问题


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

主题:[求助]rs232串口发送字节问题

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


加好友 发短信
等级:三尾狐 帖子:628 积分:3594 威望:0 精华:0 注册:2011/5/21 18:05:00
[求助]rs232串口发送字节问题  发帖心情 Post By:2017/11/3 15:50:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:ac200.foxdb

1 接口形式

a)接口类型:RS232

b)传输协议:波特率19200bps8位数据位、1位停止位、无校验

c)       采用二进制码;多字节数据传送时,低字节在前、高字节在后


2发送的通信协议如下


此主题相关图片如下:0011.png
按此在新窗口浏览图片


发送按钮代码如下

If e.form.Controls("sd").Enabled = False Then
    Dim s,s2,s3 As String
    s = DecToBin(e.form.Controls("sd").text)
    If s.Length > 8 Then
        s2 = s.SubString(s.Length-8)
        s3 = s.SubString(0,s.Length-8)
    Else
        s2 = 0
        s3 = s
    End If
    Dim v2,v3 As Integer
    v2 = BinToDec(s2)
    v3 = BinToDec(s3)
    Dim Val() As Byte = New Byte() {235,144,v2,v3,v2,v3,v2,v3,0,0}
    If Ports.Contains(vars("com")) = True Then
        Ports(vars("com")).close()
        Ports(vars("com")).open()
        Ports(vars("com")).Write(Val, 0, Val.Length)
    End If
    e.form.Controls("sd").Enabled = True
    e.form.Controls("sd").text = ""
Else
    msgbox("请先对输入时转速进行确认,谢谢合作!",64,"温馨提示")
End If

为什么会不成功呢?

[此贴子已经被作者于2017/11/3 15:51:42编辑过]

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


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

周末人这么少啊

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/3 17:33:00 [只看该作者]

1、报什么错?

 

2、生成的数据是否正确?

 

Dim Val() As Byte = New Byte() {235,144,v2,v3,v2,v3,v2,v3,0,0}

msgbox(val(2))

msgbox(val(3))

msgbox(val(4))

 

 

[此贴子已经被作者于2017/11/3 17:32:56编辑过]

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


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

我输入的转速是1500    

Dim Val() As Byte = New Byte() {235,144,v2,v3,v2,v3,v2,v3,0,0}

msgbox(val(2))

msgbox(val(3))


弹出的对话框是 220   5

数据是准确的,我现在怀疑是不是最后一个字节不对   校验和是怎么算的?


 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

这个要看接口说明了,1楼的图片不就有算法吗

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


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

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.10.26.1
错误所在事件:串口监视器,DataReceived
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: startIndex

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

使用数组的时候,索引超过数组的长度了。

错误所在事件:串口监视器,DataReceived

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


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

'AC200控制器串口读取数据代码
Select Case e.Port.PortName
    Case vars("com")
        Dim cnt As Integer = e.Port.BytesToRead
        If cnt = 10 Then '缓冲区是否有数据
            Dim Val(cnt - 1) As Byte
            e.Port.Read(val,0,cnt)
            Dim xy As Decimal
            If val(0) = 235 And val(1) = 144 Then
                Dim mb,dq As object
                mb = DecToBin(val(3)) & DecToBin(val(2))
                dq = DecToBin(val(5)) & DecToBin(val(4))
                If forms("主窗口").opened Then
                    Select Case val(7)
                        Case 1
                            Forms("主窗口").Controls("zt").text = "减小桨距"
                        Case 2
                            Forms("主窗口").Controls("zt").text = "增大桨距"
                        Case 3
                            Forms("主窗口").Controls("zt").text = "顺桨增大桨距"
                        Case 4
                            Forms("主窗口").Controls("zt").text = "无转速信号"
                        Case 5
                            Forms("主窗口").Controls("zt").text = "已到最小桨距"
                        Case 6
                            Forms("主窗口").Controls("zt").text = "已到最大桨距"
                        Case 7
                            Forms("主窗口").Controls("zt").text = "顺桨桨距限制"
                        Case 8
                            Forms("主窗口").Controls("zt").text = "无法低于最小桨距"
                        Case 9
                            Forms("主窗口").Controls("zt").text = "无法超过最大桨距"
                        Case 10
                            Forms("主窗口").Controls("zt").text = "无法超过顺桨桨距限制"
                        Case 11
                            Forms("主窗口").Controls("zt").text = "启动反桨模式(反桨选项步骤一)"
                        Case 12
                            Forms("主窗口").Controls("zt").text = "低于最小桨距(反桨选项)"
                        Case 13
                            Forms("主窗口").Controls("zt").text = "超过最大桨距(顺桨选项)"
                        Case 14
                            Forms("主窗口").Controls("zt").text = "减小桨距时过电流"
                        Case 15
                            Forms("主窗口").Controls("zt").text = "增大桨距时过电流"
                        Case 16
                            Forms("主窗口").Controls("zt").text = "增大顺桨桨距时过电流"
                        Case 17
                            Forms("主窗口").Controls("zt").text = "开路故障"
                        Case 18
                            Forms("主窗口").Controls("zt").text = "控制器软件错误"
                        Case Else
                            Forms("主窗口").Controls("zt").text = "无定义"
                    End Select
                    If val(6) > 30 Then
                        Forms("主窗口").Controls("ms").text = "手动"
                    Else
                        Forms("主窗口").Controls("ms").text = "自动"
                    End If
                    Select Case val(6)
                        Case 17,33
                            Forms("主窗口").Controls("jd").text = "起飞"
                        Case 18,34
                            Forms("主窗口").Controls("jd").text = "爬升"
                        Case 19,35
                            Forms("主窗口").Controls("jd").text = "巡航"
                        Case 20,36
                            Forms("主窗口").Controls("jd").text = "恒速"
                        Case 21,37
                            Forms("主窗口").Controls("jd").text = "顺桨"
                        Case Else
                            Forms("主窗口").Controls("jd").text = "无定义"
                    End Select
                    Forms("主窗口").Controls("sj").text = BinToDec(dq)
                    Forms("主窗口").Controls("ys").text = BinToDec(mb)
                End If
                If vars("k") = 1 Then
                    Dim dr As DataRow = DataTables("原始数据").addnew()
                    dr("时间") = Date.now
                    dr("COM") = vars("com")
                    dr("cnt") = cnt
                    For i As Integer = 0 To cnt - 1
                        If dr.Isnull("val") Then
                            dr("val") = DecToBin(val(i))
                        Else
                            dr("val") = dr("val") & "-" & DecToBin(val(i))
                        End If
                        If dr.Isnull("v10") Then
                            dr("v10") = val(i)
                        Else
                            dr("v10") = dr("v10") & "-" & val(i)
                        End If
                        If dr.Isnull("v16") Then
                            dr("v16") = DecToHex(val(i))
                        Else
                            dr("v16") = dr("v16") & "-" & DecToHex(val(i))
                        End If
                    Next
                    Dim r As DataRow = DataTables("采集数据").AddNew()
                    r("时间") = dr("时间")
                    r("目标转速") = BinToDec(mb)
                    r("当前转速") = BinToDec(dq)
                    r("档位状态") = val(6)
                    r("实时状态") = val(7)
                End If
            End If
        End If
End Select

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm

看是那一句代码出错

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


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

'AC200控制器串口读取数据代码
Select Case e.Port.PortName
    Case vars("com")
        Dim cnt As Integer = e.Port.BytesToRead
        If cnt = 10 Then '缓冲区是否有数据
            Dim Val(cnt - 1) As Byte
            e.Port.Read(val,0,cnt)
            Dim xy As Decimal
            msgbox(0)
            xy = val(0)+val(2)+val(3)+val(4)+val(5)+val(6)+val(7)+val(8)+val(9)
            xy = xy Mod 256
            msgbox(xy)
 

 回到顶部
总数 22 1 2 3 下一页