Attribute VB_Name = "Module1"
Option Explicit
Public Const Programtitle As String = "BenthicFlume"
Public Const Section As String = "CalData"
Public Const Asterisk As String = "*"
Public Const QuestionMark As String = "?"
Public Const Version As String = "1.0"

Public Const MOD0 As String = "0"
Public Const MOD1 As String = "1"
Public Const MOD2 As String = "2"
Public Const MOD3 As String = "3"
Public Const MOD4 As String = "4"
Public Const MOD5 As String = "5"
Public Const MOD6 As String = "6"
Public Const MOD7 As String = "7"
Public Const MOD8 As String = "8"
Public Const MOD9 As String = "9"
Public Const MODA As String = "A"
Public Const MODB As String = "B"
Public Const MODC As String = "C"
Public Const MODD As String = "D"
Public Const SP As String = "SP"
Public Const CP As String = "CP"
Public Const AO As String = "AO"
Public Const RD As String = "RD"
Public Const Dollar As String = "$"
Public Const AoFormat As String = "00000.00"

Public CTDflag As Boolean
Public pHflag As Boolean
Public Const K As Double = 0.000198416
Public Const Kelvin As Double = 273.15
'ctd constants
Public Const A1 As Double = 0.0000207
Public Const A2 = -0.000000000637
Public Const A3 = 3.989E-15
Public Const B1 = 0.03426
Public Const B2 = 0.0004464
Public Const B3 = 0.4215
Public Const B4 = -0.003107
Public Const C0 = 0.6766097
Public Const C1 = 0.0200564
Public Const C2 = 0.0001104259
Public Const C3 = -0.00000069698
Public Const C4 = 0.0000000010031
Public Const Kk = 0.0162

Public SN As String
Public Slope As Double
Public Offset As Double
Public mVout As Double
Public Vout As Double
Public pHvalue As Double
Public T As Double
Public CalDate As Date
Public CTDc As Double
Public CTDp As Double
Public CTDs As Double
Public CTDv As String


Public THRUST_RPM As String
Public Wave_RPM As String

Public Thrust_Current As String
Public Wave_Current As String
Public VP_Current As String

Public Const DataFormat As String = "+00000.00;-00000.00"
Declare Function timeGetTime& Lib "WINMM.DLL" ()

Public Sub TX1(S As String)
If frmMain.MSComm1.PortOpen = True Then
    frmMain.MSComm1.Output = S
Else
    MsgBox "Port Not open", , "Port Failure"
End If
End Sub

Public Function RX1()
Dim A, B As String
Dim START As Integer
A = ""
START = 0
If frmMain.MSComm1.PortOpen = True Then
frmMain.MSComm1.InputLen = 1
    Wait 35
    While frmMain.MSComm1.InBufferCount > 0
        B = Chr(Asc(frmMain.MSComm1.Input) And &H7F)
        If (B = Asterisk) Or (B = QuestionMark) Then
            START = 1
            A = B
        Else
            If START = 1 Then A = A + B
        End If
    Wend
    If Right(A, 1) = Chr(13) Then
        RX1 = Left(A, Len(A) - 1)
    Else
        RX1 = "TIMEOUT"
    End If
End If
End Function
Public Sub SetPosition(address As String, Position As String)
    Dim Output As String
    Output = Dollar & address & SP & Position & vbCr
    TX1 Output
    Output = RX1()
    If Left(Output, 1) = Asterisk Then
        Exit Sub
    Else
        MsgBox "No valid return from SetPosition"
    End If
End Sub

Public Sub ClearPosition(address As String, Position As String)
    Dim Output As String
    Output = Dollar & address & CP & Position & vbCr
    TX1 Output
    Output = RX1
    If Left(Output, 1) = Asterisk Then
        Exit Sub
    Else
        MsgBox "No valid return from ClearPosition"
    End If
End Sub

Public Sub ReadFreq(address As String)
Dim ReadData As String
Dim Freq As Double
ReadData = Dollar & address & RD & vbCr
TX1 ReadData
ReadData = RX1
Select Case address
    Case MOD1
    If Left(ReadData, 1) = Asterisk Then
        ReadData = Mid(ReadData, 3, 8)
        If ReadData = "" Then Exit Sub
        If ReadData > 90000# Then
            ReadData = 0
        End If
        Freq = ReadData
        THRUST_RPM = (Freq * 60)
        THRUST_RPM = Round(THRUST_RPM, 2)
        frmMain.lblThrustRPM.Caption = THRUST_RPM
    Else
        MsgBox "NO VALID RETURN FROM Freq. MODULE"
        Exit Sub
    End If
    Case MOD4
    If Left(ReadData, 1) = Asterisk Then
        ReadData = Mid(ReadData, 3, 8)
        If ReadData = "" Then Exit Sub
        If ReadData > 90000# Then
            ReadData = 0
        End If
        Freq = ReadData
        Wave_RPM = (Freq * 60) / 74
        Wave_RPM = Round(Wave_RPM, 2)
        frmMain.lblWaveRPM.Caption = Wave_RPM
    Else
        MsgBox "NO VALID RETURN FROM Freq. MODULE" & vbCrLf & "Closing Comm Port"
        On Error Resume Next
        frmMain.tmrRPM.Enabled = False
        frmMain.MSComm1.PortOpen = False
        frmMain.StatusBar1.Panels(4).Picture = LoadPicture(App.Path & "\icons\redlight.bmp")
        frmMain.StatusBar1.Panels(4) = "Comm port closed"
        
        Exit Sub
    End If
    End Select
End Sub

Public Sub MotorSpeed(address As String, Polarity As String, Data As String)
    Dim Vout As String
    Dim Value As String
    Data = Right(Data, 8)
    Value = Format(Data, AoFormat)
    Vout = Dollar & address & AO & Polarity & Value & vbCr
    TX1 Vout
    Vout = RX1
End Sub

Public Sub Wait(TimeOut As Single)
    Dim WaitTime As Long
    WaitTime = Int(TimeOut) + timeGetTime()
    Do Until timeGetTime() >= WaitTime
    Loop
End Sub

Public Function Analog_IN(address As String)
Dim MESSAGE As String
Dim REPLY As String
MESSAGE = Dollar & address & RD & vbCr
TX1 MESSAGE
REPLY = RX1
Analog_IN = REPLY
End Function

'Public Sub THRUST_RPM()
'On Error Resume Next
'Dim MESSAGE As String
'Dim REPLY As String
'MESSAGE = Dollar & "B" & RD & vbCr
'TX1 MESSAGE
'REPLY = RX1
'REPLY = Mid(REPLY, 3, 7)
''REPLY = REPLY - 13
''REPLY = (REPLY / 1000) * 7100
'
'frmMain.lblThrustRPM = REPLY
'
'End Sub
Public Sub Thrust_Power(amps As String)
Dim power As Double
On Error Resume Next

amps = Mid(amps, 3, 7)
'amps = amps / 130
amps = amps / 1000
amps = amps * 2
power = 48 * amps
power = Round(power, 2)
amps = Round(amps, 3)
frmMain.lblMtrCur.Caption = power

End Sub

Public Sub Wave_Power(amps As String)
Dim power As Double
On Error Resume Next

amps = Mid(amps, 3, 7)
amps = amps / 250
power = 24 * amps
power = Round(power, 2)
frmMain.lblWaveCur.Caption = power

End Sub

Public Sub VP_Power(amps As String)
Dim power As Double
On Error Resume Next

amps = Mid(amps, 3, 7)
amps = amps / 250
power = 24 * amps
power = Round(power, 2)
frmMain.lblVPcur.Caption = power

End Sub


Public Sub ReadStatus()
Dim ReadData As String
Dim Field() As String
Dim Cnt As Integer
Dim Value As String
Dim Bin As String

ReadData = "$9DI" & vbCr
TX1 ReadData
ReadData = RX1
If Left(ReadData, 1) = Asterisk Then
Else
    MsgBox "NO VALID RETURN FROM 1712"
        On Error Resume Next
        frmMain.Timer1.Enabled = False
        frmMain.MSComm1.PortOpen = False
        frmMain.StatusBar1.Panels(4).Picture = LoadPicture(App.Path & "\icons\redlight.bmp")
        frmMain.StatusBar1.Panels(4) = "Comm port closed"
        Exit Sub
End If
ReadData = Mid(ReadData, 2)
If ReadData = "" Then Exit Sub

For Cnt = 1 To 4 Step 1
    Select Case Mid(ReadData, Cnt, 1)
        Case "0"
            Value = "0,0,0,0"
        Case "1"
            Value = "0,0,0,1"
        Case "2"
            Value = "0,0,1,0"
        Case "3"
            Value = "0,0,1,1"
        Case "4"
            Value = "0,1,0,0"
        Case "5"
            Value = "0,1,0,1"
        Case "6"
            Value = "0,1,1,0"
        Case "7"
            Value = "0,1,1,1"
        Case "8"
            Value = "1,0,0,0"
        Case "9"
            Value = "1,0,0,1"
        Case "A"
            Value = "1,0,1,0"
        Case "B"
            Value = "1,0,1,1"
        Case "C"
            Value = "1,1,0,0"
        Case "D"
            Value = "1,1,0,1"
        Case "E"
            Value = "1,1,1,0"
        Case "F"
            Value = "1,1,1,1"
    End Select
    If Value = "" Then Exit Sub
    Bin = Bin & "," & Value
Next
    Bin = Mid(Bin, 30)
    frmMain.Label5.Caption = Bin

Field() = Split(Bin, ",")
For Cnt = 0 To 1
    If Field(Cnt) = 1 Then
        Select Case Cnt
            Case 0
                frmMain.lblStatus(Cnt).Value = True
'                frmMain.CWButtonUp.Enabled = True
            Case 1
                frmMain.lblStatus(Cnt).Value = True
'                frmMain.CWButtonDwn.Enabled = True
        End Select
    Else
        Select Case Cnt
            Case 0
                frmMain.lblStatus(Cnt).Value = False
'                frmMain.CWButtonUp.Enabled = False
            Case 1
                frmMain.lblStatus(Cnt).Value = False
'                frmMain.CWButtonUp.Enabled = False
        End Select
        
    End If
Next
End Sub

Public Sub rdpH(address As String) 'address should = MOD6(pH-1) or MOD7(pH-2)
Dim ReadData As String
Dim senddata As String
Dim mVolts As String
Dim Result As Double
Dim Temp As Double
Dim c As Integer
Dim Index As Integer
On Error Resume Next

ReadData = Dollar & address & RD & vbCr
TX1 ReadData
ReadData = RX1
'frmMain.lblTemp.Caption = T

If Left(ReadData, 1) = Asterisk Then
    ReadData = Mid(ReadData, 3, 8)
    If ReadData = "" Then Exit Sub
            mVout = ReadData
            Vout = mVout / 1000
            frmMain.lblmV.Caption = mVout
            Temp = T + Kelvin
            Result = (Vout - Offset) / K / Slope / Temp + 7
            pHvalue = Round(Result, 4)
            frmMain.lblpH.Caption = pHvalue
Else
    MsgBox "NO VALID RETURN FROM pH MODULE"
    frmMain.cwbPh.Value = False
    Exit Sub
End If

End Sub

