📄 module3.bas
字号:
Attribute VB_Name = "Module3"
Option Explicit
Public Const FUNC_ASK_ALL = &H0
Public Const FUNC_TIME = &H1
Public Const FUNC_YK_SEL = &H2
Public Const FUNC_YK_EXE = &H3
Public Const FUNC_YK_CANCEL = &H4
Public Const FUNC_BK5 = &H5
Public Const FUNC_ALL_SOE = &H6
Public Const FUNC_CLR_SOE = &H7
Public Const FUNC_ALL_EVENT = &H8
Public Const FUNC_CLR_EVENT = &H9
Public Const FUNC_ALL_SEF = &HA
Public Const FUNC_CLR_SEF = &HB
Public Const FUNC_ALL_DEF_WAV = &HC
Public Const FUNC_CLR_DEV_WAV = &HD
Public Const FUNC_ALL_STAT = &HE
Public Const FUNC_CLR_STAT = &HF
Public Const FUNC_ALL_YK_REC = &H10
Public Const FUNC_CLR_YK_REC = &H11
Public Const FUNC_YC_CAL = &H12
Public Const FUNC_YC = &H13
Public Const FUNC_YX = &H14
Public Const FUNC_DD = &H15
Public Const FUNC_W_DD = &H16
Public Const FUNC_R_DD_CFG = &H17
Public Const FUNC_W_DD_CFG = &H18
Public Const FUNC_R_SYS_CFG = &H19
Public Const FUNC_W_SYS_CFG = &H1A
Public Const FUNC_R_XS_CFG = &H1B
Public Const FUNC_W_XS_CFG = &H1C
Public Const FUNC_R_YC_CFG = &H1D
Public Const FUNC_W_YC_CFG = &H1E
Public Const FUNC_R_DI_CFG = &H1F
Public Const FUNC_W_DI_CFG = &H20
Public Const FUNC_R_DO_CFG = &H21
Public Const FUNC_W_DO_CFG = &H22
Public Const FUNC_R_SET_CFG = &H23
Public Const FUNC_W_SET_CFG = &H24
Public Const FUNC_R_SET_GP_CFG = &H25
Public Const FUNC_W_SET_GP_CFG = &H26
Public Const FUNC_R_PROT_CFG = &H27
Public Const FUNC_W_PROT_CFG = &H28
Public Const FUNC_R_RAM_CFG = &H29
Public Const FUNC_W_RAM_CFG = &H2A
Public Const FUNC_CH_WAV = &H2B
Public Const FUNC_RE_DEF_CFG = &H2C
Public Const FUNC_PROT_ANG_CFG = &H2D
Public Const FUNC_SDZS = &H2E
Public Const FUNC_XHFG = &H2F
Public Const FUNC_SYS_PRG = &H30
Public Const FUNC_LED_PRG = &H31
Public Const FUNC_RESET = &H32
Public Const FUNC_R_TIME = &H33
Public RecData
Public PreRecData
Public CurRecData
Public PreRecDatLen
Public NewRecData
Public SOE_numble
Type yk_type
YK_jdq_flag As Boolean '继电器选择标志
YK_tj_flag As Boolean '遥控条件选择标志
YK_flag As Boolean '遥控标志
YK_num As Integer
YK_tj As Integer
YK_tj_sn As Integer '遥控条件中的控件的index序号
End Type
Public yk As yk_type
Public Send_buf() As Byte
Public Sub Tx_Header(dat_len As Integer)
ReDim Send_buf(dat_len + 6) As Byte
Send_buf(0) = &HEB
Send_buf(1) = &H90
Send_buf(2) = Cur_Dev.addr '地址
Send_buf(3) = Cur_Dev.dev_type_num '装置类型号
Send_buf(4) = Comm_tx_type
Send_buf(5) = dat_len '数据区长度
End Sub
Public Sub Send_handle()
Dim i, j, k As Integer
Dim sum As Long
Select Case Comm_tx_type
Case FUNC_ASK_ALL
Tx_Header (0)
Case FUNC_TIME '对时
Dim systime As String
Dim sysdate As String
Dim str As String
sysdate = Format(Date, "yyyy-mm-dd")
systime = Format(Time, "hh-mm-ss")
Tx_Header (8)
Send_buf(2) = &HFF '地址
Send_buf(3) = &H0 '装置类型
Send_buf(6) = &H0
Send_buf(7) = &H0
Send_buf(8) = CByte(Mid(systime, 7))
Send_buf(9) = CByte(Mid(systime, 4, 2))
Send_buf(10) = CByte(Mid(systime, 1, 2))
Send_buf(11) = CByte(Mid(sysdate, 9))
Send_buf(12) = CByte(Mid(sysdate, 6, 2))
Send_buf(13) = CByte(Mid(sysdate, 3, 2))
Case FUNC_YK_SEL
Tx_Header (4)
Send_buf(6) = yk.YK_num
Send_buf(7) = yk.YK_tj
Send_buf(8) = yk.YK_num
Send_buf(9) = yk.YK_tj
Case FUNC_YK_EXE
Tx_Header (4)
Send_buf(6) = yk.YK_num
Send_buf(7) = yk.YK_tj
Send_buf(8) = yk.YK_num
Send_buf(9) = yk.YK_tj
Case FUNC_YK_CANCEL
Tx_Header (4)
Send_buf(6) = yk.YK_num
Send_buf(7) = yk.YK_tj
Send_buf(8) = yk.YK_num
Send_buf(9) = yk.YK_tj
Case FUNC_BK5
Tx_Header (0)
Case FUNC_ALL_SOE
Tx_Header (0)
Case FUNC_CLR_SOE
Tx_Header (0)
Case FUNC_ALL_EVENT
Tx_Header (0)
Case FUNC_CLR_EVENT
Tx_Header (0)
Case FUNC_ALL_SEF
Tx_Header (0)
Case FUNC_CLR_SEF
Tx_Header (0)
Case FUNC_ALL_DEF_WAV
Tx_Header (0)
Case FUNC_CLR_DEV_WAV
Tx_Header (0)
Case FUNC_ALL_STAT
Tx_Header (0)
Case FUNC_CLR_STAT
Tx_Header (0)
Case FUNC_ALL_YK_REC
Tx_Header (0)
Case FUNC_CLR_YK_REC
Tx_Header (0)
Case FUNC_YC_CAL
Tx_Header (6)
Send_buf(6) = Cal_CH_type
Send_buf(7) = 0
Send_buf(8) = Cal_CH_num0
Send_buf(9) = Cal_CH_num1
Send_buf(10) = 0
Send_buf(11) = 0
Case FUNC_DD '读电度表底
Tx_Header (0)
Case FUNC_W_DD '写电度表底
Tx_Header (DD_RATE_CFG_NUM * 4 + 4)
j = 8
For i = 1 To DD_RATE_CFG_NUM
sum = Dev_Par(Cur_Dev.addr).dd_base_cfg(i)
Send_buf(j) = sum And &HFF
Send_buf(j + 1) = (sum And 65280) / 256
Send_buf(j + 2) = (sum And 16711680) / 65536
Send_buf(j + 3) = (sum And 2130706432) / 16777216
j = j + 4
Next i
Send_buf(j) = Dev_Par(Cur_Dev.addr).dd_base_cfg(i) And 255
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).dd_base_cfg(i) And 65280) / 256
j = j + 1
Case FUNC_R_DD_CFG '电度变比
Tx_Header (0)
Case FUNC_W_DD_CFG
Tx_Header (DD_RATE_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To DD_RATE_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).dd_rate_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).dd_rate_cfg(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_SYS_CFG '读系统配置
Tx_Header (0)
Case FUNC_W_SYS_CFG '写系统配置
Tx_Header (SYS_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To SYS_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).sys_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).sys_cfg(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_XS_CFG '读通道系数
Tx_Header (0)
Case FUNC_W_XS_CFG '写通道系数
Tx_Header (YC_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To YC_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).yc_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).yc_cfg(i) And &HFF00) / 256
j = j + 1
Next i
Case FUNC_R_YC_CFG '读遥测配置
Tx_Header (0)
Case FUNC_W_YC_CFG '写遥测配置
Tx_Header (YC_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To YC_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).yc_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).yc_cfg(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_DI_CFG '读遥信配置
Tx_Header (0)
Case FUNC_W_DI_CFG '写遥信配置
Tx_Header (DI_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To DI_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).di_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).di_cfg(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_DO_CFG '读开出配置
Tx_Header (0)
Case FUNC_W_DO_CFG '写开出配置
Tx_Header (DO_CFG_NUM * 2 + 4)
Send_buf(6) = 0
Send_buf(7) = 0
j = 8
For i = 1 To DO_CFG_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).do_out_cfg(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).do_out_cfg(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_SET_CFG '读定值
Tx_Header (2)
Send_buf(6) = Dev_Par(Cur_Dev.addr).settle(0)
Send_buf(7) = Send_buf(6)
Case FUNC_W_SET_CFG '写定值
Tx_Header (SETTLE_NUM * 2 + 4)
Send_buf(6) = Dev_Par(Cur_Dev.addr).settle(0)
Send_buf(7) = Dev_Par(Cur_Dev.addr).settle(0)
j = 8
For i = 1 To SETTLE_NUM + 1
Send_buf(j) = Dev_Par(Cur_Dev.addr).settle(i) And &HFF
j = j + 1
Send_buf(j) = (Dev_Par(Cur_Dev.addr).settle(i) And 65280) / 256
j = j + 1
Next i
Case FUNC_R_SET_GP_CFG '读定值组号
Tx_Header (0)
Case FUNC_W_SET_GP_CFG '切换定值组
Tx_Header (2)
Send_buf(6) = Form1.Text13.Text
Send_buf(7) = Send_buf(6)
Case FUNC_R_PROT_CFG
Tx_Header (0)
Case FUNC_W_PROT_CFG
Case FUNC_R_RAM_CFG
Tx_Header (0)
Case FUNC_W_RAM_CFG
Case FUNC_CH_WAV
Case FUNC_RE_DEF_CFG
Case FUNC_PROT_ANG_CFG
Case FUNC_SDZS
Case FUNC_XHFG
Case FUNC_SYS_PRG
Case FUNC_LED_PRG
Case FUNC_RESET
Case FUNC_R_TIME
Tx_Header (0)
Case Else
Tx_Header (0)
If Comm_ms = True Then
Send_buf(2) = &HFF '地址
Send_buf(3) = &H0 '装置类型
End If
Select Case Comm_tx_loop_type
Case FUNC_YC
Send_buf(4) = FUNC_YC '遥测功能
Comm_tx_loop_type = FUNC_YX
Case FUNC_YX
Send_buf(4) = FUNC_YX '遥信功能
Comm_tx_loop_type = FUNC_YC
End Select
End Select
Send_buf(UBound(Send_buf)) = check_sum(Send_buf, UBound(Send_buf))
SendData (Send_buf)
Comm_tx_type_bk = Comm_tx_type
Comm_tx_type = &H7F
End Sub
Public Sub DisposeAllData()
'写入纪录
On Error Resume Next
Dim Tempstr As String
Dim i As Integer
For i = 0 To UBound(NewRecData)
Tempstr = Tempstr & FormatHex(NewRecData(i)) & " "
Next i
If BaoWen_Refresh Then
With frmMsgList.Text1(0)
.Text = Tempstr & vbCrLf & .Text
.Text = "接收数据 " & .Text
.Text = Now & vbCrLf & .Text
End With
End If
If CheckData Then
RData.ControlCode = RecData(4)
Select Case (RData.ControlCode - 128)
Case FUNC_YK_SEL '遥控选择
If RecData(7) = &HFF Then
Form1.Label26.Caption = "遥控选择失败!"
yk.YK_flag = False
Else
Form1.Label26.Caption = "遥控选择成功!请执行或取消遥控!"
Form1.Command55.Enabled = True
Form1.Command56.Enabled = True
End If
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -