⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digi.bas

📁 Bascula conectada al puerto serie
💻 BAS
字号:
Attribute VB_Name = "Apis"
Option Explicit


Declare Function GetTickCount Lib "kernel32" () As Long


Const NMS = 100              'N鷐ero de milisegundos que espero la respuesta.
Const NumeroIntentos = 3     'N鷐ero de veces que se reintenta una comunicaci髇.


'Variables que contienen los ultimos pesos
'de Pieza y de caja para una posible reimpresion
Global nUltimoPesoCaja As Double


'Matrices de Entradas
Global nPesoRecibido As Double
Global bPesoRecibido(1) As Boolean
Global bRecibiendoTrama(1) As Boolean
Global sTramaRecibida(1) As String
Global sTipoEntrada(1) As String



'--------------------------------------------------------------
'Sub ComprobarPuertoSinRespuesta
'   Comprueba si hay datos en el puerto de comunicaciones
'   y envia la respuesta a bExtraerCamposTramaRecibida
'   directamente, SIN pasar por AnalizarTramaRecibida
'   que es el que responde al puerto
'
'--------------------------------------------------------------
Public Sub ComprobarPuertoSinRespuesta(objCOM As Object, nEntrada As Integer)


    Dim T1 As Long
    Dim T2 As Long
    Dim Aux As String
    Dim Dummy As Variant
    

    
    T1 = GetTickCount()
    Do
        Dummy = DoEvents
        T2 = GetTickCount()
        If (T2 - T1) >= NMS Then
            Exit Do
        End If
        If objCOM.InBufferCount Then
            Aux = objCOM.Input
            If Aux <> "" Then
                Select Case Asc(Aux)
                    Case 2  'STX. Comienzo de Trama.
                        If Not bRecibiendoTrama(nEntrada) Then
                            'Comienzo a recibir una trama.
                            bRecibiendoTrama(nEntrada) = True
                            sTramaRecibida(nEntrada) = ""
                        Else
                            sTramaRecibida(nEntrada) = sTramaRecibida(nEntrada) & Aux
                        End If
                    Case 3  'ETX. Final de Trama.
                        If bRecibiendoTrama(nEntrada) Then
                            'Trama recibida. Analizo dicha trama.
                            bRecibiendoTrama(nEntrada) = False
                            Dummy = bExtraerCamposTramaRecibida(nEntrada)
                        Else
                            sTramaRecibida(nEntrada) = sTramaRecibida(nEntrada) & Aux
                        End If
                    Case 6  'ACK. El microfug髆etro ha entendido el mensaje.
                        If Not bRecibiendoTrama(nEntrada) Then
                            'Se recibe OK (al 鷏timo mensaje enviado).
                            sTramaRecibida(nEntrada) = Aux
                        Else
                            sTramaRecibida(nEntrada) = sTramaRecibida(nEntrada) & Aux
                        End If
                    Case 21 'NAK. El microfug髆etro no ha entendido el mensaje.
                        If Not bRecibiendoTrama(nEntrada) Then
                            'Se recibe KO (al 鷏timo mensaje enviado).
                            sTramaRecibida(nEntrada) = Aux
                        Else
                            sTramaRecibida(nEntrada) = sTramaRecibida(nEntrada) & Aux
                        End If
                    Case Else
                        If bRecibiendoTrama(nEntrada) Then
                            sTramaRecibida(nEntrada) = sTramaRecibida(nEntrada) & Aux
                        Else
                            sTramaRecibida(nEntrada) = ""
                        End If
                End Select
            End If
            T1 = GetTickCount()
        End If
    Loop
End Sub


Public Sub PuertoComunicaciones(objCOM As Object, Estado As Boolean, _
Optional nInputLen As Integer)
On Error GoTo error
    If Estado Then
        'Abrir.
        objCOM.InputLen = nInputLen
        If Not objCOM.PortOpen Then
            objCOM.PortOpen = True
        End If
    Else
        'Cerrar.
        If objCOM.PortOpen Then
            objCOM.PortOpen = False
        End If
    End If
error:
MsgBox "Error en el puerto COM" & objCOM
FormPrincipal.TimerGeneral.Enabled = False
End Sub


'------------------------------------------------------------------
'Function bExtraerCamposTramaRecibida
'   Estrae de la trama recibida los campos que tiene
'   que analizar (Peso y Linea Recibida)
'
'------------------------------------------------------------------
Public Function bExtraerCamposTramaRecibida(nEntrada As Integer) As Boolean
        
    Dim nPos As Integer
    On Error Resume Next
    
    
    Err.Clear
       
    'Analisis del peso
    nPos = InStr(1, sTramaRecibida(nEntrada), "W")
    If nPos > 0 Then
        nPesoRecibido = Val(Mid(sTramaRecibida(nEntrada), nPos + 1, Len(sTramaRecibida(nEntrada))))
        nPesoRecibido = nPesoRecibido / 1000
        nPesoRecibido = Format(nPesoRecibido, "0.000")
    FormPrincipal.peso.Caption = nPesoRecibido & " Kg"
    End If
           
    
    If Err.Number = 0 Then
        bExtraerCamposTramaRecibida = True
    Else
        bExtraerCamposTramaRecibida = False
    End If
    
End Function




'-----------------------------------------------------------------------
'Sub Main
'
'Autor: CSA
'-----------------------------------------------------------------------
Sub Main()
             
    
    'Comprueba que solo exista una insatancia de la aplicacion ejecutandose
    If App.PrevInstance = True Then
        End
    End If
    'mostrar el formulario
    Load FormPrincipal
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -