VB 如何获取电子秤数据

jainkai 2017-11-18 02:39:06
连接梅特勒的一把电子秤,使用超级终端能成功获取数据
如下图



我的VB里取出来的是这样,两个数据老师在循坏跳,如下图


或者是很长的重复数据,如下图



我想要的是像在超级终端里的数据一样,不知要这么修改

我的程序:

Private Sub Form_Load()
With MS1
.CommPort = 1
.Settings = "9600,N,8,1"
.InputLen = 0
.RThreshold = 1
.PortOpen = True
End With
End Sub

Private Sub MS1_OnComm()
Select Case MS1.CommEvent
Case 2
Text1 = ""
Text1.Text = Text1.Text + MS1.Input
End Select
End Sub

Private Sub Text1_Change()
Text1.SelStart = Len(Text1.Text)
End Sub

...全文
1048 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
陳倧辰 2019-03-19
  • 打赏
  • 举报
回复
我也有同一个问题,希望有高手指导一下。我Q727520833
suiyue_12345 2018-01-03
  • 打赏
  • 举报
回复
引用 5 楼 qq574221329 的回复:
[quote=引用 4 楼 suiyue_12345 的回复:] 借用楼主平台也想问一下称重读数的问题,我读到的数据是从零开始变化一直到最后一个稳定的重量数值,不知道楼主是怎样处理这个变化数据的。(我想要用时间来判断我所读到的所有数值,当一个数出现的时间超过四秒之后则认为这个数值是最终的称重数据,但是不知道这个想法怎么实现,想请教一下大神们),谢谢楼主的平台
你逻辑这么清楚了.那就写代码好了啊...每秒判断一次.连续四次一样就是"稳定"了 其实电子称一般有连续发送.稳定发送...这样的设定的.[/quote] 我设的是连续发送的,现在两个问题:1、如果设置稳定发送那么称重的数据是在重量稳定之后发送给我的吗? 2、现在连续发送情况下,同一个物品的重量读取过程中有两个数值都超过了4秒存在,所以我存下来的重量有时候一个物品对应两个甚至两个以上的重量值,此问题尚未解决,还请大神指导。
赵4老师 2018-01-03
  • 打赏
  • 举报
回复
参考《编译原理》中的词法分析和有限状态自动机。
suiyue_12345 2018-01-02
  • 打赏
  • 举报
回复
借用楼主平台也想问一下称重读数的问题,我读到的数据是从零开始变化一直到最后一个稳定的重量数值,不知道楼主是怎样处理这个变化数据的。(我想要用时间来判断我所读到的所有数值,当一个数出现的时间超过四秒之后则认为这个数值是最终的称重数据,但是不知道这个想法怎么实现,想请教一下大神们),谢谢楼主的平台
小噤 2018-01-02
  • 打赏
  • 举报
回复
引用 4 楼 suiyue_12345 的回复:
借用楼主平台也想问一下称重读数的问题,我读到的数据是从零开始变化一直到最后一个稳定的重量数值,不知道楼主是怎样处理这个变化数据的。(我想要用时间来判断我所读到的所有数值,当一个数出现的时间超过四秒之后则认为这个数值是最终的称重数据,但是不知道这个想法怎么实现,想请教一下大神们),谢谢楼主的平台
你逻辑这么清楚了.那就写代码好了啊...每秒判断一次.连续四次一样就是"稳定"了 其实电子称一般有连续发送.稳定发送...这样的设定的.
zdingyun 2017-11-19
  • 打赏
  • 举报
回复
先按如下代码接收来自电子秤的数据,看看文本框内收到的内容,无乱码是ASCII字符,有乱码需要以二进制模式收取。OnComm代码也得改变。
Private Sub Form_Load()
    With MS1
        .CommPort = 1
        .Settings = "9600,N,8,1"
        .InputLen = 0
        .RThreshold = 1
        .InputMode = comInputModeText
        '.InputMode = comInputModeBinary
        .PortOpen = True
    End With
    Text1 = ""
End Sub
  
Private Sub MS1_OnComm()
    Select Case MS1.CommEvent
        Case 2
            Text1.Text = Text1.Text + MS1.Input
    End Select
End Sub
如果有电子秤的通信协议,详细查看通信协议和来写代码。
舉杯邀明月 2017-11-18
  • 打赏
  • 举报
回复
看你说的“超级终端”中显示的第1个符号,我在DOSBOX中试了一下,很象ASC值为2的字符。 你试试把我上面的代码第19行写成:  If (2 = Asc(strTemp)) Then
舉杯邀明月 2017-11-18
  • 打赏
  • 举报
回复
你这样不停的接收、不停的刷新Text1的显示内容,不“跳”才怪! 注意一下“3个0”之后的那个符号,它的ASCII值是什么? 用它作为“标志”,当接收到它时,才进行“刷新”,这样才有可能“稳定”。 大概就是这样:
Option Explicit

Private strBuffer    As String

Private Sub Form_Load()
   ' …………
End Sub
  
Private Sub MS1_OnComm()
   Dim strTemp As String

   'Select Case MS1.CommEvent
   '  如果你只处理1个事件代码的话,没必要Select,用IF就行了。
   If (2 = MS1.CommEvent) Then
      strTemp = MS1.Input
      ' 可以用这个“确认”一下标志值是什么。在输出3个“48”之后,就是它了。
      Debug.Print Asc(strTemp)
      ' 下面的xxx就是我提到的“标志”的ASCII码。最初随便写一个,确认之后更正。
      If (xxx = Asc(strTemp)) Then
         Text1.Text = strBuffer
         strBuffer = ""
      Else
         strBuffer = strBuffer & strTemp
      End If
   End If
End Sub

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧