📄 adrevise.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 + -