一批黑码 2018-09-25 04:05 采纳率: 25%
浏览 460
已采纳

VB.NET SerialPort SHIKO天平减重称量用法?

问题1:在实际应用中,连接了SHINKO的电子天平,使用减重称量的方式记录每次减下重量,在减下物品的时候,因为风或触碰,所以需要判断重量稳定了才能记录结果,搞了多次测试了,感觉已经困在自己的逻辑里面了,求高手点醒!

问题2:VB.NET中的SerialPort 使用 ReadExisting 方法读取数据后,缓存区的数据还在吗?我用了 DataReceived 事件来触发 ReadExisting,现在得出的结果不是预期效果。

新人,无分,请高手不吝赐教!有代码最好!万分感谢!在线等。。。。
我用的是 VS2017 目标框架是 .NET Framework 2.0 语言是 VB

  • 写回答

3条回答 默认 最新

  • 一批黑码 2018-10-02 15:03
    关注

    通过自己想办法已解决,分享下思路吧,让同样遭遇的人少走一些弯路:
    1.延迟读取数据(我是通过调整触发DataReceived事件的字符串长度来弄的)
    2.设置一个Boolean变量,用来标记此时的读数是否已经记录,
    a.初始状态将这个变量的值设置为 False ,
    b.每次记录后,将这个变量值更改为 True,
    c.通过总结操作过程,自动记录当前重量时,当天平读取到一次当前重量时 0±0.02时,就标记这个变量的值为 false;同理自动记录重量差后,读取重量差文本框的读数是0±0.02时,标记变量为 false;在此代码下方执行判断后再决定是否记录读数到DGV中。

    代码分享如下:

      Private Sub TB_DQCZ_TextChanged(sender As Object, e As EventArgs) Handles TB_DQCZ.TextChanged
            'Dim t As System.IO.StreamWriter = New System.IO.StreamWriter(RtxtPth, True, System.Text.Encoding.UTF8)
            '当 当前称重 变化的时候
            '计算并显示重量差
            TB_ZLC.Text = Format(Str2Num(TB_SYCCZ.Text) - Str2Num(TB_DQCZ.Text), "0.000")
    
            If CB_ZLQZ.Text = "当前重量" Then
                If Str2Num(TB_DQCZ.Text) <= 0.02 Then
                    ZLYJL = False
                End If
            End If
    
            If meLoaded = True And RB_zdms.Checked = True And RB_bzzd.Checked = True And CB_ZLQZ.Text = "当前重量" And AllowWritIn = True And Str2Num(TB_DQCZ.Text) > 0.02 And ZLYJL = False Then
                WritWeightToDGV() '当前称重不是0 且当前重量未被记录
    
            End If
    
        End Sub
    
        Private Sub TB_ZLC_TextChanged(sender As Object, e As EventArgs) Handles TB_ZLC.TextChanged
            '当 重量差 有变化的时候
    
            If CB_ZLQZ.Text = "重量差" Then
                If Str2Num(TB_ZLC.Text) <= 0.02 Then
                    ZLYJL = False
                Else
                    'ZLYJL = True
                End If
            End If
            If meLoaded = True And RB_zdms.Checked = True And RB_bzzd.Checked = True And CB_ZLQZ.Text = "重量差" And AllowWritIn = True And Str2Num(TB_ZLC.Text) > 0.02 And ZLYJL = False Then
                WritWeightToDGV() '当前称重不是0 且与上一次记录了的重量之差大于0.01
            End If
        End Sub
        Private Sub TB_SYCCZ_TextChanged(sender As Object, e As EventArgs) Handles TB_SYCCZ.TextChanged
            '显示重量差
            TB_ZLC.Text = Format(Str2Num(TB_SYCCZ.Text) - Str2Num(TB_DQCZ.Text), "0.000")
        End Sub
    
                Private Sub WritWeightToDGV()
            ZLYJL = True
            Dim W As Decimal = 0
            Select Case CB_ZLQZ.Text
                Case "当前重量"
                    W = Str2Num(TB_DQCZ.Text) '记录当前称重及商品信息到 DGV 中
                Case "重量差"
                    W = Str2Num(TB_ZLC.Text) '记录重量差及商品信息到 DGV 中
                Case "输入重量"
                    W = Str2Num(TB_SRZL.Text) '记录输入重量及商品信息到 DGV 中
            End Select
    
            DGV_sj.Rows.Add()
    
            DGV_sj.Rows(DGV_sj.RowCount - 2).Cells(DGV_sj_C_zl.Index).Value = Format(W, "0.000")
            DGV_sj.FirstDisplayedScrollingRowIndex = DGV_sj.RowCount - 2
            TB_SYCCZ.Text = TB_DQCZ.Text '将此次称重数据设为上次称重数据
            'SYCJLZL = W
    
            W = Nothing
        End Sub
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样