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

📄 module3.bas

📁 自动化测试程序
💻 BAS
📖 第 1 页 / 共 3 页
字号:
        Case FUNC_YK_EXE    '遥控执行
            If RecData(7) = &HFF Then
                Form1.Label26.Caption = "遥控执行失败!"
                yk.YK_flag = False
            Else
                Form1.Label26.Caption = "遥控执行成功!"
                Form1.Command55.Enabled = True
                Form1.Command56.Enabled = True
                yk.YK_flag = False
            End If
        Case FUNC_YK_CANCEL    '遥控撤销
            If RecData(7) = &HFF Then
                Form1.Label26.Caption = "遥控撤销失败!"
                yk.YK_flag = False
            Else
                Form1.Label26.Caption = "遥控撤销成功!"
                Form1.Command55.Enabled = True
                Form1.Command56.Enabled = True
                yk.YK_flag = False
            End If
        Case FUNC_YX        '全遥信
            Dispose_YX
        Case FUNC_YC        '全遥测
            Dispose_YC
        
        Case FUNC_DD        '读电量表底
            Dispose_DD
        Case FUNC_W_DD        '写电量表底
            wDispose_DD
        
        Case FUNC_R_DD_CFG '读电度变比
            Dispose_ddp
        Case FUNC_W_DD_CFG '写电度变比
            wDispose_ddp

        Case FUNC_ALL_SOE   'SOE
            Dispose_SOE
        
        Case FUNC_R_SYS_CFG '读系统配置
            Dispose_sysp
        Case FUNC_W_SYS_CFG '写系统配置
            wDispose_sysp
        
        Case FUNC_R_YC_CFG '读测量数据配置
            Dispose_ycp
        Case FUNC_W_YC_CFG '写测量数据配置
            wDispose_ycp
        
        Case FUNC_R_DO_CFG '读开出配置
            Dispose_dop
        Case FUNC_W_DO_CFG '写开出配置
            wDispose_dop
        
        Case FUNC_R_DI_CFG '读遥信配置
            Dispose_dip
        Case FUNC_W_DI_CFG '读遥信配置
            wDispose_dip
        
        Case FUNC_R_XS_CFG '读通道系数
            Dispose_xsp
        Case FUNC_W_XS_CFG '写通道系数
            wDispose_xsp
        
        Case FUNC_R_SET_CFG '读定值
            Dispose_setp
        Case FUNC_W_SET_CFG '写定值
            wDispose_setp

        Case FUNC_R_SET_GP_CFG '读当前定值组号
            Dispose_setgp
        Case FUNC_W_SET_GP_CFG '切换定值组
            Dispose_chag_setgp

        Case FUNC_R_PROT_CFG '读保护逻辑配置
            Dispose_protp
        Case FUNC_W_PROT_CFG '写保护逻辑配置
            wDispose_protp

        Case FUNC_R_RAM_CFG '读内存
            Dispose_ramp
        Case FUNC_W_RAM_CFG '写内存
            wDispose_ramp

        Case FUNC_CH_WAV '实时采样数据点
            Dispose_chwavp
        
        Case FUNC_RE_DEF_CFG '恢复出厂设置
            Dispose_defp

        Case FUNC_PROT_ANG_CFG '手动保护信号模拟
            Dispose_angp
        
        Case FUNC_SDZS      '手动置数
            Dispose_sdzsp

        Case FUNC_XHFG  '信号复归
            Dispose_xhfgp
        
        Case FUNC_SYS_PRG '烧写系统程序
            Dispose_sysfp

        Case FUNC_LED_PRG  '烧写显示程序
            Dispose_ledfp
        
        Case FUNC_RESET     '复位系统
            Dispose_rstp
        
        Case FUNC_R_TIME    '读系统时间
            Dispose_r_time
    
    End Select
    
Else
    If BaoWen_Refresh Then
        frmMsgList.Text1(0) = Now & vbCrLf & "数据错误!" & frmMsgList.Text1(0)
    End If
End If

If BaoWen_Refresh Then
If Len(frmMsgList.Text1(0).Text) > 2000 Then
    i = InStrRev(frmMsgList.Text1(0).Text, "EB 90", -1, vbTextCompare)
    frmMsgList.Text1(0).Text = Mid(frmMsgList.Text1(0).Text, 1, i - 30)
End If
End If
'    Send_handle
End Sub

Function CheckData() As Boolean
Dim sum As Long
Dim b As Boolean
Dim i, j, k, x, y, m, n, l As Integer
CheckData = False
If Comm_loop_rx Then
    b = False
    i = UBound(PreRecData)
    j = UBound(RecData)
    m = 0

    ReDim CurRecData(i + j)
    For k = 0 To i
        CurRecData(k) = PreRecData(k)
    Next k

    For k = 0 To j
        CurRecData(k + i) = RecData(k)
    Next k

    For k = 0 To i + j - 1
        If CurRecData(k) = &HEB Then
            If CurRecData(k + 1) = &H90 Then
                b = True
                l = k
                Exit For
            End If
        End If
    Next k

    If b Then
        '  b=True表示已经找到通过同步头
        '    x = i + j - k - 6 - 1 '数据长度
        If CurRecData(k + 5) <= i + j - k - 6 Then
            For n = k To CurRecData(k + 5) + k + 5
                sum = sum + CurRecData(n)
            Next n
            '        y = i + j - k - 6
            If CurRecData(k + 5) < i + j - k - 6 Then
            '窃取剩余数据
                m = i + j - CurRecData(k + 5) - 6 - 1 '剩余报文长度
                ReDim PreRecData(m)
                For n = 0 To m - 1
                    PreRecData(n) = CurRecData(i + j - m + n)
                Next n
            End If

            sum = ((Not sum) And 255)
            If sum = CurRecData(i + j - m) Then
                ReDim RecData(i + j - k - m)
                For n = 0 To i + j - k - m
                    RecData(n) = CurRecData(n + k)
                Next n
                CheckData = True
            Else
                CheckData = False
            End If
        End If
      
    Else
        ReDim PreRecData(i + j - k)
        For n = 0 To i + j - k - 1
            PreRecData(n) = CurRecData(n + k)
        Next n
        CheckData = False
    End If

Else
    i = UBound(NewRecData)
    If i < 6 Then
        CheckData = False
        Exit Function
    End If
    
    For k = 0 To i
        If (NewRecData(k) = &HEB) Then
            l = k
            If NewRecData(k + 1) = &H90 Then
                Exit For
            End If
        End If
    Next k
    l = i - k
    ReDim RecData(l)
    For j = 0 To l
        RecData(j) = NewRecData(k)
        k = k + 1
    Next j
    
    k = RecData(5)
    If (k + 6) <> l Then
        CheckData = False
        Exit Function
    End If
    sum = 0
    For n = 0 To k + 5
        sum = sum + RecData(n)
    Next n
    sum = (Not sum) And &HFF
    If sum = RecData(n) Then
        CheckData = True
    Else
        CheckData = False
    End If
End If

End Function

Public Function check_sum(dats() As Byte, blen As Integer) As Byte
Dim i As Integer
Dim checksum As Long
checksum = 0
For i = 0 To blen - 1
    checksum = checksum + dats(i)
Next i
check_sum = (Not checksum) And &HFF
End Function

Private Function Getsum(sum As Integer) As Integer
Dim binstr As String
Dim binstr1 As String
Dim i As Integer

binstr1 = DecToBin(sum)
For i = 1 To Len(binstr1)
    If Mid(binstr1, i, 1) = "1" Then
        binstr = binstr & "0"
    Else
        binstr = binstr & "1"
    End If
Next i

Getsum = BinToDec(binstr)
End Function

'全遥信
Public Sub Dispose_YX()
Dim TempLen As Integer
Dim i, j, k As Integer
Dim Tempbin As String
Dim addr As Integer

addr = RecData(2)
TempLen = RecData(5) - 2
If TempLen > (256 / 8) Then
    TempLen = (256 / 8)
End If
k = 8

For i = 0 To TempLen - 1
    Tempbin = DecToBin(RecData(k))
    For j = 1 To 8
        Dev_Cur_Dat(addr).cur_yx(i * 8 + j) = Mid(Tempbin, 9 - j, 1)
    Next j
    k = k + 1
Next i
If addr = Cur_Dev.addr Then
With Form1.ListView2
    For i = 1 To .ListItems.Count
        .ListItems(i).SubItems(2) = Dev_Cur_Dat(addr).cur_yx(i)
    Next i
End With
End If

End Sub

'全遥测
Public Sub Dispose_YC()
On Error Resume Next

Dim TempLen As Integer
Dim i, j, k As Integer
Dim addr As Integer
Dim m As Long

addr = RecData(2)
TempLen = RecData(5) - 2
j = 1
For i = 8 To TempLen Step 2
    m = CLng(RecData(i + 1)) * 256 + RecData(i)
    If m > 32767 Then
        m = m - 65536
    End If
    Dev_Cur_Dat(addr).cur_yc(j) = m
    j = j + 1
Next i
If addr = Cur_Dev.addr Then
k = 8
With Form1.ListView1
    For i = 1 To TempLen
        .ListItems(i).SubItems(2) = Format(HexToDec(RecData(k), RecData(k + 1)) * ParaList(i), "0.000")  '数值
        .ListItems(i).SubItems(3) = FormatHex(RecData(k)) & " " & FormatHex(RecData(k + 1))  '码值
        k = k + 2
    Next i
End With
End If
End Sub

'上传电量表底解析
Public Sub Dispose_DD()
Dim TempLen As Integer
Dim i, j, k As Integer
Dim addr As Integer
TempLen = RecData(5) - 2
addr = RecData(2)
j = 1

For i = 8 To TempLen - 1 Step 4
    Dev_Cur_Dat(addr).cur_dd(j) = ("&H" _
        & FormatHex(RecData(i + 3)) _
        & FormatHex(RecData(i + 2)) _
        & FormatHex(RecData(i + 1)) _
        & FormatHex(RecData(i)))
    Dev_Par(addr).dd_base_cfg(j) = Dev_Cur_Dat(addr).cur_dd(j)
    
    j = j + 1
Next i

If addr = Cur_Dev.addr Then
    With Form1.ListView3
        For i = 1 To .ListItems.Count
            .ListItems(i).SubItems(2) = Dev_Cur_Dat(addr).cur_dd(i) / 100 '数值
            .ListItems(i).SubItems(3) = LongToHex(Dev_Cur_Dat(addr).cur_dd(i)) '码值
        Next i
    End With
    
    If rd_dd_base = True Then
        Form1.MSFlexGrid11.col = 2
        For i = 1 To 31
            Form1.MSFlexGrid11.Row = i
            Form1.MSFlexGrid11.Text = Dev_Cur_Dat(addr).cur_dd(i) / 100
        Next i
        rd_dd_base = False
    End If
  
End If
End Sub

Public Sub wDispose_DD()
    With frmMsgList.Text1(1)
        If RecData(6) = 0 And RecData(7) = 0 Then
            .Text = .Text & vbCrLf & Now & "写电度表底正确。"
        Else
            .Text = .Text & vbCrLf & Now & "写电度表底错误!"
        End If
    End With
End Sub

Public Sub Dispose_SOE()
Dim TempLen As Integer
Dim i, j, k As Integer
Dim m, addr, dtype As Integer

'; SOE记录格式
'; |    1 word    |--|   2 word       |--| 3 word        |--|  4 word  |
'; |0-----------15|--|0-------------15|--|0------------15|--|0-------15|
'; |msecond|second|--|minute|hour|date|--|month|rsv |year|--|flag|Num. |
'; | 10 bit| 6 bit|--| 6 bit|5bit|5bit|--|4bit |4bit|8bit|--|1bit|15bit|

If RecData(5) = 0 Then
    Exit Sub
End If

Dim yx_sn, msecond, second, minute, hour, day, month, year As Integer
Dim flag As Integer
Dim strsoesn, stryxsn, strmsecond, strsecond, strminute, strhour, strday, strmonth, stryear As String

addr = RecData(2)

⌨️ 快捷键说明

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