📄 module3.bas
字号:
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 + -