从量表中检索权重以优于

时间:2017-08-14 14:46:20

标签: excel vba excel-vba

我已经通过RS-232转USB转换器电缆将秤连接到我的电脑。我的目标是在excel 2007中创建一个命令按钮,将按比例缩放到所选单元格中。我在用户表单中使用以下代码使其工作。

Private Sub XMCommCRC1_OnComm()
    Static sInput As String
    Dim sTerminator As String
    Dim Buffer As Variant

' Branch according to the CommEvent property
    Select Case XMCommCRC1.CommEvent
    Case XMCOMM_EV_RECEIVE
        Buffer = XMCommCRC1.InputData ' Use Input property for MSComm
        sInput = sInput & Buffer
        If Worksheets("Settings").Range("Terminator") = "CR/LF" Then
            sTerminator = vbCrLf
        Else
            sTerminator = vbCr
        End If
        If Right$(sInput, Len(sTerminator)) = sTerminator Then
            XMCommCRC1.PortOpen = False
            sInput = Left$(sInput, Len(sInput) - Len(sTerminator))
            Select Case Left$(sInput, 2)
            Case "ST", "S "
                ActiveCell.Value = CDbl(Mid$(sInput, 7, 8))
                ActiveCell.Activate
            Case "US", "SD"
                MsgBox "The balance is unstable."
            Case "OL", "SI"
                MsgBox "The balance is showing an eror value."
            End Select
            sInput = ""
        End If
    End Select
End Sub


Public Sub RequestBalanceData()
    With Worksheets("Settings")
' Configure and open the COM port
        If Not XMCommCRC1.PortOpen Then
            XMCommCRC1.RThreshold = 1
            XMCommCRC1.RTSEnable = True
            XMCommCRC1.CommPort = .Range("COM_Port")
            XMCommCRC1.Settings = .Range("Baud_Rate") & "," & _
            .Range("Parity") & "," & _
            .Range("Data_Bits") & "," & _
            .Range("Stop_Bits")
            XMCommCRC1.PortOpen = True
        End If

' Send balance's "SI" (Send Immediate) command
' to request weighing data immediately
        If .Range("Terminator") = "CR/LF" Then
            XMCommCRC1.Output = "R" & vbCrLf
        Else
            XMCommCRC1.Output = "R" & vbCr
        End If
    End With
End Sub

然后我创建了一个带有以下代码的命令按钮。

Private Sub CommandButton1_Click()

    UserForm1.RequestBalanceData

End Sub

当我点击命令按钮时,重量被放置在所选单元格中。但是,这并不是一直发生的。有时当我点击按钮时,没有任何东西放在单元格中,我将不得不多次单击它,直到重量放在单元格中。我想解决这个问题,但我不确定从哪里开始。这是代码本身的问题,还是更可能是转换器或规模本身的问题?

感谢任何帮助。

以下是比例:https://www.optimascale.com/product-page/op-915-bench-scale

以下是转换器电缆:https://www.amazon.com/gp/product/B06XJZHCV8/ref=ox_sc_act_title_3?smid=A33N7O64F8FSDL&psc=1

以下是我用于代码的教程:http://www.msc-lims.com/lims/diybalance.html

以下是我使用的教程中的ActiveX控件:http://www.hardandsoftware.net/xmcomm.htm

编辑:我已经完成了Wedge的建议并在我的第一个结束后放置了一个Mgsbox sInput。我得到了不一致的结果。我想知道我是否需要更改我的比例发送格式。比例目前设置为发送格式4.

以下是比例手册(发送格式见第21-23页:https://docs.wixstatic.com/ugd/78eff6_e629ae5fe7004c7189060cca4bc7c3de.pdf

2ND编辑: 我已将我的串口连接到putty。我的比例是连续发送模式。在腻子中,比例始终如下:ST,GS + 0.00lb。但是,当我尝试在单元格中输入权重值时,消息框有时会显示已发送的部分数据(ST,GS + 0.00lb)已被切断,或者按下一个按钮已多次发送。有谁知道我会如何解决这个问题?

3RD EDIT:在我看来,连续发送模式(模式4)我的比例被设置为发送数据太快并导致我的代码陷入困境。我想尝试使用命令请求模式(模式3),但我无法弄清楚如何正确解析数据字符串并将其放入单元格。命令请求模式的发送格式为: enter image description here

如果有人能帮助我弄清楚如何让这个工作,我会非常感激。

0 个答案:

没有答案