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

📄 adrevise.vb

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 VB
字号:
Imports System.Data.OleDb
Module ADRevise

    '--------------------------------------------
    '函数名:InitComBox1
    '功能:绑定ComBox1
    '参数:ComBox名称
    '--------------------------------------------
    Public Function InitComBox1(ByRef ComBox As ComboBox)
        Dim i As Integer
        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn
        objCmd.CommandText = "select MCUno,Title from AD_Title order by MCUno"
        Dim objDA As OleDbDataAdapter = New OleDbDataAdapter(objCmd)
        Dim objDS As New DataSet
        objDA.Fill(objDS, "TB")
        Dim objTB As DataTable = objDS.Tables("TB")
        '从数据库中读取通道的总数
        G_ChannelSum = objTB.Rows.Count - 1
        '绑定
        ComBox.DataSource = objTB
        ComBox.DisplayMember = "Title"
        ComBox.ValueMember = "MCUno"
        objConn.Close()

    End Function

    '--------------------------------------------
    '函数名:InitComBox2
    '功能:绑定ComBox2
    '参数:ComBox名称,strCondition数据查询条件
    '返回:X()/Y()
    '--------------------------------------------
    Public Function InitComBox2(ByRef ComBox As ComboBox, ByVal strCondition As String)
        Dim i As Integer
        Dim str As String, a0 As Single, b0 As Single

        ComBox.Items.Clear()

        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn

        objCmd.CommandText = "select X,k,b from AD_Info where MCUno=" & strCondition & " order by X"

        Dim objDA As OleDbDataAdapter = New OleDbDataAdapter(objCmd)
        Dim objDS As New DataSet
        objDA.Fill(objDS, "TB")
        Dim objTB As DataTable = objDS.Tables("TB")
        Dim num As Integer = objTB.Rows.Count  '行数ADChannel
        '********************0907加********************
        G_RecordNum = num
        '=====================0907加=========================
        ReDim G_X(num - 1) : ReDim G_Y(num - 1) : ReDim G_K(num - 1) : ReDim G_B(num - 1)
        For i = 0 To num - 1 '对行循环
            G_X(i) = objTB.Rows(i).Item(0) : G_K(i) = objTB.Rows(i).Item(1) : G_B(i) = objTB.Rows(i).Item(2)
            a0 = objTB.Rows(i).Item(1) : b0 = objTB.Rows(i).Item(2)
            G_Y(i) = a0 * G_X(i) + b0
            str = strCondition & ":x=" & G_X(i) & ",y=" & Format$(G_Y(i), "###0.0#")
            ComBox.Items.Add(str).ToString()
        Next i
        objConn.Close()
    End Function


    '--------------------------------------------
    '函数名:SearchAD
    '功能:查找选中AD的信息
    '参数:channel-选中的AD通道
    '返回:对于物理量的最小、最大值
    '--------------------------------------------
    Public Function SearchAD(ByVal channel As Byte)
        Dim i As Integer

        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn
        objCmd.CommandText = "select Min,Max,Unit from AD_Title where MCUno=" & channel & " "
        Dim objDA As OleDbDataAdapter = New OleDbDataAdapter(objCmd)
        Dim objDS As New DataSet
        objDA.Fill(objDS, "TB")
        Dim objTB As DataTable = objDS.Tables("TB")
        Dim num As Integer = objTB.Rows.Count  '行数ADChannel
        For i = 0 To num - 1 '对行循环
            G_MinPhy = objTB.Rows(i).Item(0)    '物理量最小值
            G_MaxPhy = objTB.Rows(i).Item(1)    '物理量最大值
            G_PhyUnit = objTB.Rows(i).Item(2)   '物理量单位
        Next i
        objConn.Close()
    End Function



    '---------------------------------------------------------------
    ' 模块名:ADToPhy
    ' 功能:将AD值转化为相应的物理值
    ' 参数:AD-AD值,channel-通道号
    '--------------------------------------------------------------
    Public Function ADToPhy(ByVal AD As Integer, ByVal channel As Byte) As Integer
        Dim i, j As Integer
        Dim y0 As Single
        j = LBound(G_X)
        For i = UBound(G_X) To j Step -1
            If (AD >= G_X(i)) Then
                y0 = G_K(i) * AD + G_B(i)
                ' G_CurrentPhy = G_MinPhy + y0 * (G_MaxPhy - G_MinPhy) / 200
                ''''''''''''''''''''''''''''''''''''''''''''''
                G_CurrentPhy = y0
                '''''''''''''''''''''''''''''''''''''''''''''''
                GoTo ADToPhy_Eixt
            End If
        Next i
ADToPhy_Eixt:
        Return G_CurrentPhy
    End Function


    REM 将校准值写入数据库
    Public Function WriteDB(ByVal no As Byte, ByVal x0 As Integer, ByVal y0 As Single, ByVal x1 As Integer, ByVal y1 As Single, ByVal x2 As Integer, ByVal y2 As Single)

        Dim k1, k2, b1, b2 As Single
        k1 = (y0 - y1) / (x0 - x1) : b1 = y1 - k1 * x1
        k2 = (y2 - y0) / (x2 - x0) : b2 = y2 - k2 * x2

        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn
        objCmd.CommandText = "select * from AD_Info where MCUno=" & no & " and X=" & x0
        Dim objDA As OleDbDataAdapter = New OleDbDataAdapter(objCmd)
        Dim objDS As New DataSet
        objDA.Fill(objDS, "TB")
        Dim objTB As DataTable = objDS.Tables("TB")
        Dim num As Integer = objTB.Rows.Count  '行数ADChannel

        If num <> 0 Then
            '删除旧记录
            objCmd.CommandText = "delete from AD_Info  where MCUno=" & no & " and X=" & x0
            objCmd.ExecuteNonQuery()

            '增加新记录
            objCmd.CommandText = "INSERT Into AD_Info(MCUno,X,k,b,Y)values(@no,@x,@k,@b,@y)"
            objCmd.Parameters.Add("@no", OleDbType.Integer)
            objCmd.Parameters("@no").Value = no   '插入MCU号
            objCmd.Parameters.Add("@x", OleDbType.Integer)
            objCmd.Parameters("@x").Value = x0    '插入X
            objCmd.Parameters.Add("@k", OleDbType.Single)
            objCmd.Parameters("@k").Value = k1    '插入k
            objCmd.Parameters.Add("@b", OleDbType.Single)
            objCmd.Parameters("@b").Value = b1    '插入b
            objCmd.Parameters.Add("@y", OleDbType.Single)
            objCmd.Parameters("@y").Value = y0    '插入Y

            objCmd.ExecuteNonQuery()

        Else

            ' 删除前一记录()
            'objCmd.CommandText = "delete from AD_Info  where MCUno=" & no & " and X=" & x1
            'objCmd.ExecuteNonQuery()

            '增加新记录
            objCmd.CommandText = "INSERT Into AD_Info(MCUno,X,k,b,Y)values(@no,@x,@k,@b,@y)"
            objCmd.Parameters.Add("@no", OleDbType.Integer)
            objCmd.Parameters("@no").Value = no   '插入MCU号
            objCmd.Parameters.Add("@x", OleDbType.Integer)
            objCmd.Parameters("@x").Value = x0    '插入X
            objCmd.Parameters.Add("@k", OleDbType.Single)
            objCmd.Parameters("@k").Value = k2    '插入k
            objCmd.Parameters.Add("@b", OleDbType.Single)
            objCmd.Parameters("@b").Value = b2    '插入b
            objCmd.Parameters.Add("@y", OleDbType.Single)
            objCmd.Parameters("@y").Value = y0    '插入Y
            objCmd.ExecuteNonQuery()


        End If

        objConn.Close()

        'PicXiaozhun.Cls()           '清图片框
        'ComboXiaozhun_Click(0)         '重画该路



    End Function

    '********************************0907加*****************************************************************
    REM 从库中删除校准值
    Public Sub DelReviseVal(ByVal no As Byte, ByVal x As Integer)

        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn
        objCmd.CommandText = "delete from AD_Info where MCUno=" & no & " and X=" & x
        objCmd.ExecuteNonQuery()
        objConn.Close()

    End Sub

    REM 获取当前曲线在库中的条数                         没用上
    Public Function GetRecordNum(ByVal no As Byte)

        '建立连接
        Dim objConn As OleDbConnection = GetConn()
        If objConn.State = ConnectionState.Closed Then
            objConn.Open()
        End If
        Dim objCmd As New OleDbCommand
        objCmd.Connection = objConn
        objCmd.CommandText = "select * from AD_Info where MCUno=" & no
        Dim objDA As OleDbDataAdapter = New OleDbDataAdapter(objCmd)
        Dim objDS As New DataSet
        objDA.Fill(objDS, "TB")
        Dim objTB As DataTable = objDS.Tables("TB")

        Return objTB.Rows.Count  '行数ADChannel

    End Function
    '==================================0907加=======================================================================

    REM 将校准值写入MCU的Flash
    Public Function WriteFlash()
        Dim x, k1, k2, b0, b1, b2, i, j As Integer, tmpInt As Integer, tmpLng As Long
        ReDim G_SendData(G_SendDataNum - 1)

        G_SendData(0) = 140 + Form1.frmMain.ComboBox5.SelectedValue              '帧头

        x = 1 'AD值位于第1~20字节
        k1 = G_MaxRecordNum * 2 + 1
        k2 = G_MaxRecordNum * 4 + 1
        b0 = G_MaxRecordNum * 6 + 1
        b1 = G_MaxRecordNum * 7 + 1
        b2 = G_MaxRecordNum * 9 + 1

        For j = 0 To G_RecordNum - 1   '最大10*11B=110字节的数据
            REM AD值           
            G_SendData(x) = Int(G_X(j) / 256) : G_SendData(x + 1) = Int(G_X(j) Mod 256)
            x = x + 2
            REM 斜率k整数部分           
            tmpInt = Int(G_K(j))
            G_SendData(k1) = Int(tmpInt / 256) : G_SendData(k1 + 1) = Int(tmpInt Mod 256)
            k1 = k1 + 2
            REM 斜率k小数部分
            tmpLng = (G_K(j) * 10 ^ G_DecNum) Mod (10 ^ G_DecNum)
            G_SendData(k2) = Int(tmpLng / 256) : G_SendData(k2 + 1) = Int(tmpLng Mod 256)
            k2 = k2 + 2
            REM 截距b的符号
            If G_B(j) < 0 Then    '符号
                G_SendData(b0) = 1 : G_B(j) = G_B(j) * (-1)
            Else
                G_SendData(b0) = 0
            End If
            b0 = b0 + 1
            REM 截距b的整数部分()
            tmpInt = Int(G_B(j))
            G_SendData(b1) = Int(tmpInt / 256) : G_SendData(b1 + 1) = Int(tmpInt Mod 256)
            b1 = b1 + 2
            REM 截距b的小数部分
            tmpLng = (G_B(j) * 10 ^ G_DecNum) Mod (10 ^ G_DecNum)
            G_SendData(b2) = Int(tmpLng / 256) : G_SendData(b2 + 1) = Int(tmpLng Mod 256)
            b2 = b2 + 2
        Next j

        REM 不足10条记录,补0
        While j < G_MaxRecordNum
            G_SendData(x) = 0 : G_SendData(x + 1) = 0
            G_SendData(k1) = 0 : G_SendData(k1 + 1) = 0
            G_SendData(k2) = 0 : G_SendData(k2 + 1) = 0
            G_SendData(b0) = 0
            G_SendData(b1) = 0 : G_SendData(b1 + 1) = 0
            G_SendData(b2) = 0 : G_SendData(b2 + 1) = 0
            x = x + 2
            k1 = k1 + 2
            k2 = k2 + 2
            b0 = b0 + 1
            b1 = b1 + 2
            b2 = b2 + 2
            j = j + 1
        End While


        '求发送数据帧中除校验位和帧尾的数据的异或校验(个数为SendDataNum - 2)
        ' G_SendData(G_SendDataNum - 2) = GetCheckChar(G_SendDataNum - 2, G_SendData)
        G_SendData(G_SendDataNum - 1) = 69        '帧尾' Asc("E")
        For i = 0 To G_SendDataNum - 1
            If G_SendData(i) < 16 Then
                Form1.frmMain.txtWrite.Text = Form1.frmMain.txtWrite.Text & "0" & Hex(G_SendData(i)) & " "
            Else
                Form1.frmMain.txtWrite.Text = Form1.frmMain.txtWrite.Text & Hex(G_SendData(i)) & " "
            End If
        Next
        '发送112个数据
        SCISendN(Form1.frmMain.MSComm1, G_SendData)

        If SCIRecvN(Form1.frmMain.MSComm1, G_SendDataNum - 2, 5) Then
            For i = 0 To G_SendDataNum - 3
                If G_RecvData(i) < 16 Then
                    Form1.frmMain.TxtRead.Text = Form1.frmMain.TxtRead.Text & "0" & Hex(G_RecvData(i)) & " "
                Else
                    Form1.frmMain.TxtRead.Text = Form1.frmMain.TxtRead.Text & Hex(G_RecvData(i)) & " "
                End If
            Next
            MsgBox("写入成功!")
        Else
            Form1.frmMain.TxtRead.Text = "接收失败1"
        End If

        'If SCIRecvN(Form1.frmMain.MSComm1, 2, 5) Then
        '    For i = 0 To 1
        '        If G_RecvData(i) < 16 Then
        '            Form1.frmMain.TxtRead.Text = Form1.frmMain.txtWrite.Text & "0" & Hex(G_RecvData(i)) & " "
        '        Else
        '            Form1.frmMain.TxtRead.Text = Form1.frmMain.txtWrite.Text & Hex(G_RecvData(i)) & " "
        '        End If
        '    Next
        'Else
        '    Form1.frmMain.TxtRead.Text = "接收失败2"
        'End If



    End Function



End Module

⌨️ 快捷键说明

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