Foxtable(狐表)用户栏目专家坐堂 → [求助] 菜鸟求称重串口接收代码


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

主题:[求助] 菜鸟求称重串口接收代码

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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/3/2 15:41:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/2 15:51:00 [只看该作者]

9楼有上传了台称的说明书参数,帮忙看下好吗,这个模块卡了好几天了

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/2 16:39:00 [只看该作者]

这个网上刚找到的,不知有没用?,我的台称波特率是2400!

关于彩信仪表RS232接口内部通讯的说明

1、表上15芯插头的第7脚(信号TXD)和第8脚(接地GND)

分别对应计算机9芯插孔的第2脚(TXD接计算机RXD)和第5脚;

2、传送数据为“1200“波特率/

   传送格式为每个数11位:

        一位起始位

        八位起始位

        一位奇偶校验位(不用)

        一位停止位

3、传送数据ASCII码,发送方式为连续发送,分隔符为“=”,有小数点是每组发送

      例:仪表显示“0.123

          发送的数据为=33 32 31 2E 30 30 30=33…….

          表示 “=3 2 1 . 0 0 0=3…..”

          有小数点时发送8,无小数点时发送7,发送时低位数在前,高位数在后.


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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/3/2 17:05:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2013/3/2 17:09:00 [只看该作者]

f aa 0d 30 0d da e1 a6 00 0f 01 cc 10 00 01 03 98 (接收的字节数为17即代码中If cnt >= 17 Then为判断接收的字节数是否完整)
0xFF 0xAA为帧头;
0x0D为帧长度;
0x30识别码;
0x0d 0xda 0xe1,为地址码,即AD板编号,高位在前,相当于当前AD板编号为0x0ddae1,换成十进制即为0908001;
0xa6,为状态字节,表示当前数据为实时上传重量数据;
0x00 0x0f 0x01 0xcc 为仪表上传的实时重量信息,高位在前,为实际重量的100位,实际重量为0x000f01cc/100,即983500/100;
0x10 为数据项的第五字节,即00010000b,D0D1为0,说明当前仪表显示没有小数点,微机直接显示没有小数点的数据即可,若接收的数据为983500,直接显示成9835kg即可;如果D0D1为2,若接收的数据为983500,则应显示为9835.00kg;D2D3为0,说明当前仪表称重状态为毛重;D4为1,表明当前重量还不稳定,当D4为0时,当前重量稳定,仪表上显示稳定标志;
以后是我电子枰的接口说明.

With Ports("COM1")
    Dim cnt As Integer = .BytesToRead
    If cnt >= 17 Then '缓冲区是否有数据
        Dim Val(cnt - 1) As Byte
       .Read(val,0,cnt)
      Dim ss As String = BitConverter.ToString(val) ''BitConverter.ToString()的用法,这个就是把字节或字节数组转换为十六进制或十六进制的字符串形式,中间用“-”连接
      ss = ss.Replace("-","") '去掉转换成带-的十六进制的字符串中'-''
      ss = ss.Trim("") 
      Dim k As Integer
      Dim s(cnt - 1) As String '定义字节数组'
      For j As Integer = 0 To cnt - 1      '提取字节,保存到数组中去'
          k = j * 2
          s(j) = ss.substring(k,2)   '因为十六制是两位的数'(不含Ox)
      Next
       For i As Integer = 0 To cnt -2
           Dim st As String = s(i) & s(i+1) 
           If st = "FFAA" Then  (0xFF 0xAA为帧头;判断接收字节开始部分)
              If  (12+i) <= cnt -1 Then   (这段判断输出字节包含重量信息在内,因为接收字节可能是连续重复的数据在,保证在连续的有效17个字节内)       
                 If  s(12+i) = "00"  Then  (判断重量信息位置,为什么要用12,因为字节数有两个00,判断最后一个00的位置)
                     forms("电子称重").controls("textbox1").value = HexToDec(s(i+8) & s(i+9) & s(i+10) & s(i+11))/100 
                     's(i+8) & s(i+9) & s(i+10) & s(i+11) 是对应到 0x00 0x0f 0x01 0xcc 为仪表上传的实时重量信息,最后把十六制转换成十进制(HexToDec)'
                     '为实际重量的100位,所以需要除100'  
                 End If   
              End If  
           End If  
       Next
     End If
End With

请楼主自己分析吧,我不清楚此设备输出,也不好测试哦.

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/2 18:13:00 [只看该作者]

baoxyang 总算出现了,非常感谢 baoxyang  大师的认真指点。下班后马上测试去。。。。。。。
也思望狐表的帮助里能加一些这方面的教程/案例 让类似我这种有工厂管理经验又不懂编码的狐表爱好者多些参考。。。。。。
图片点击可在新窗口打开查看

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


加好友 发短信
等级:狐精 帖子:3313 积分:23134 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2013/3/4 7:48:00 [只看该作者]

With Ports("COM1")
    Dim cnt As Integer = .BytesToRead
    If cnt >= 11 Then '缓冲区是否有数据
        Dim Val(cnt - 1) As Byte
       .Read(val,0,cnt)
      Dim ss As String = BitConverter.ToString(val) ''BitConverter.ToString()的用法,这个就是把字节或字节数组转换为十六进制或十六进制的字符串形式,中间用“-”连接
      ss = ss.Replace("-","") '去掉转换成带-的十六进制的字符串中'-''
      ss = ss.Trim("") 
      Dim k As Integer
      Dim s(cnt - 1) As String '定义字节数组'
      For j As Integer = 0 To cnt - 1      '提取字节,保存到数组中去'
          k = j * 2
          s(j) = ss.substring(k,2)   '因为十六制是两位的数'(不含Ox)
      Next
      dim p1,p2 as integer
       For i As Integer = 0 To cnt -2
           Dim st As String = s(i)
           If st = "3D" Then  (=为0x3D;判断接收数据的开始部分)
              p1 = i
               If st = "3D" Then    ( =为0x3D;判断接收数据的结束部分)  
                  p2 = i     
                 If  p2 -p1 = 8 Then  '判断是否为含小数点
                     dim k1 as integer = HexToDec(s(p1+3) & s(p1+2) & s(p1+1))   '为整数部分
                     dim k2 as integer = HexToDec(s(p1+5) & s(p1+6) & s(p1+7))   '为小数部分
                     else if p2 -p1 = 7 Then  '判断是否为无小数点
'同上' 
                 End If   
              End If  
           End If  
       Next
     End If
End With

以上需要楼主测试下,因为说明不清楚

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/4 8:06:00 [只看该作者]

上面的代码要如何指定到-》forms("电子称重").controls("textbox1").value  文本框中?

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/4 14:05:00 [只看该作者]

17楼的代码 测试不成功,文本框没反应(文本框显示空白)!
是不是没把结果引用到文本框中? 我要如何引用提取值?(不懂代码)

还有:
                 If  p2 -p1 = 8 Then  '判断是否为含小数点
                     dim k1 as integer = HexToDec(s(p1+3) & s(p1+2) & s(p1+1))   '为整数部分
                     dim k2 as integer = HexToDec(s(p1+5) & s(p1+6) & s(p1+7))   '为小数部分
                     else if p2 -p1 = 7 Then  '判断是否为无小数点
'同上'   (这节是无小数点的如何同上了?)
                 End If   

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


加好友 发短信
等级:童狐 帖子:242 积分:2235 威望:0 精华:0 注册:2011/8/16 22:33:00
  发帖心情 Post By:2013/3/4 15:09:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:xk315a1表串行说明(通讯协议).rar

附件是XK315A1表串行说明(通讯协议)。 有任何问题请咨询021-5823 5786陈小姐。 上海彩信电子科技有限公司 caisun@caisun.com
[此贴子已经被作者于2013-3-4 15:10:24编辑过]

 回到顶部
总数 20 上一页 1 2