📄 initialization.bas
字号:
Attribute VB_Name = "initialization"
'****************************************************************************
'人人为我,我为人人
'枕善居收藏整理
'发布日期:2007/09/27
'描 述:电表业645规约的电表485通讯代码
'网 站:http://www.Mndsoft.com/ (VB6源码博客)
'网 站:http://www.VbDnet.com/ (VB.NET源码博客,主要基于.NET2005)
'e-mail :Mndsoft@163.com
'e-mail :Mndsoft@126.com
'OICQ :88382850
' 如果您有新的好的代码别忘记给枕善居哦!
'****************************************************************************
Option Explicit
Declare Function USkinInit Lib "USkin.dll" (ByVal lpszRegCode As String, ByVal lpszFileName As String, ByVal FilName$) As Long
Declare Function USkinLoadSkin Lib "USkin.dll" (ByVal FilName$)
Declare Function USkinExit Lib "USkin.dll" (ByVal yes&) As Long
Declare Function USkinRemoveSkin Lib "USkin.dll" (ByVal yes&) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public strProgramCipher As String
Public strDuishiCipher As String
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SetWindowRgn Lib "User32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function GetDesktopWindow Lib "User32" () As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'本模块是初始化
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Type StandStat '标准表状态
Phase As Integer '相线
Voltage As Single '电压
DisplayCurrent As Integer '显示电流量程
PulesCurrent As Integer '测量电流量程
Const As Long '常数
End Type
Public Const gStrInfoTitle As String = "PTC-8125" '提示信息标题
Public Const gDblSecondsOfDay As Double = 86400
Public Const MAXDEVICES As Integer = 10 '装置数量
Public Const MAXMETERS As Integer = 120 '被检表的数量,实际表位为gIntMeters
Public Const GROUPCOUNT As Integer = 20 '最大分机板数量
Public Const GROUPMETERS As Integer = 12 '每个分机板控制的最大表位数
Public Const NOLEN As Integer = 40 '局号长度,数据库局号字段长度为12,实际长度由gIntNoLen决定
Public Const BARCODELEN As Integer = 40 '条码位数
Public Const PI As Single = 3.1415926 '圆周率
Public Const gIntVersion As Integer = 3
Public Const COMMKEY As String = "111111" '485与表通讯密码
Public Const MAXPOINTS As Integer = 24 '最多走字点数(指Iabc、Ib、PF三者均不同的点数,数据库中最多保留24个)
Public Const PTC8000BASEADDRESS As Integer = 65 '误差计算器基地址
Public gIntSourceType As Integer '装置类型 1-普通型 2-带谐波功能,LCD面板
Public gStrAppPath As String '软件路径
Public gIntMeters As Integer '装置表位数,最大为MAXMETERS
Public gIntGroupMeters As Integer
Public gIntNOLen As Integer '表号长度
Public gIntBarCodeLen As Integer '条形码长度
Public gIntSourceVersion As Integer '信号源版本
Public gStrDeviceNo As String '装置序号
Public gAryNO(MAXMETERS) As String '被检表局号,如果为空则对应表位没有在检表
Public gAryBarCode(MAXMETERS) As String '被检表条码编号
Public gAryUserNO(MAXMETERS) As String '户号
Public gAryEnable(MAXMETERS) As Boolean '表位有效
Public gAryAddress(MAXMETERS) As String '被检表地址
Public gAryWorkerNO(MAXMETERS) As String '工号
Public gAryRoundConst(MAXMETERS) As Integer '被检表电能常数
Public gAryPulesConst(MAXMETERS) As Integer '被检表电能常数
Public gAryConst(MAXMETERS) As Integer '被检表电能常数
Public gAryClass(MAXMETERS) As String '被检表等级
Public gAryModel(MAXMETERS) As String '被检表型号
Public gAryStartTime(MAXMETERS) As Single '被检表启动时间(s)
Public gStrIndexCode As String '表计索引码
Public gIntType As Integer '表类型
Public gIntPhase As Integer '相线
Public gSngClass As Single '等级
Public gSngVoltage As Single '被检表电压
Public gSngCurrent As Single '被检表电流
Public gSngMaxCurrent As Single '被检表最大电流
Public gSngFrequency As Single '被检表频率
Public gIntConst As Integer '电能常数
Public gStrRoundConst As String '圈转电能常数
Public gStrPulesConst As String '脉冲电能常数
Public gIntConstFactor As Integer '脉冲常数/圈常数
Public gStrModel As String '被检表型号
Public gStrPhase As String '被检表相线
Public gStrClass As String '被检表等级
Public gStrVoltage As String '被检表电压
Public gStrCurrent As String '被检表电流 电流(最大电流)
Public gStrFrequency As String '被检表频率
Public gIntImax As Long 'Imax (%Ib)
Public gIntDemandPeriod As Integer '需量-需量周期(min)
Public gIntSlidePeriod As Integer '需量-滑差周期(min)
Public gIntSlideTimes As Integer '需量-滑差数
Public gStrUserName As String '用户名称
Public gStrUserPath As String '保存到用户/网络数据路径,总库
Public gStrUserPassPath As String '保存到用户/网络数据路径,合格库
Public gLngStandardConst As Long '标准表电能常数
Public gSngStandardVoltage As Single '标准表电能常数
Public gSngStandardCurrent As Single '标准表电能常数
Public gSngStandardFrequency As Single '标准表频率
Public gStrStandardPhase As String '标准表相线
Public gStrStandardModel As String '标准表型号
Public gStrStandardClass As String '标准表等级
Public gUdtStandardMeter As StandStat '标准表状态
Public gSngDeviceCurrentRange As Single '装置电流量程
Public gStrScheme As String '检验方案
Public gIntControlMode As Integer '走字控制模式 1-按时间;2-各表度数;3-时间+各表度数;4-按标准表度数;5-按基准表
'控制参数
Public gBlnIgnoreCommError As Boolean '对通讯错误是否提出警告
Public gBlnKeyMatched As Boolean '口令符合
Public gIntSeekSignalFunction As Integer '寻标记功能 0-无;1-电压;2-电流
Public gIntVerifyPass As Integer '需要检查复校合格情况:1-需要,0-不需要
'关于局号
Public gBlnNoAsManufacturingNo As Boolean '用出厂编号代替局号
Public gStrNOField As String
'主关键字字段,当gBlnNoAsManufacturingNo=False 时为"JH"(局号,用于供电局)
'否则为"CCBH"(出厂编号,用于电表厂家)
Public gStrNOTitle As String '
'主关键字字段的说明,当gBlnNoAsManufacturingNo=False 时为"局号"(JH,用于供电局)
'否则为"出厂编号"(CCBH,用于电表厂家)
Public gStrNO2Field As String
'次关键字字段,当gBlnNoAsManufacturingNo=False 时为"CCBH"(厂号,用于供电局)
'否则为"JH"(局号,用于电表厂家)
Public gStrNO2Title As String '
'次关键字字段的说明,当gBlnNoAsManufacturingNo=False 时为"厂号"(CCBH,用于供电局)
'否则为"局号"(JH,用于电表厂家)
'主关键字字段的说明,当gBlnNoAsManufacturingNo=False 时为"局号"(JH,用于供电局)
'否则为"出厂编号"(CCBH,用于电表厂家)
Public gIntNOPlaceFrom As Integer '厂号在条形码中的位置(起始)
Public gIntNOPlaceTo As Integer '厂号在条形码中的位置(结束)
Public gBlnAddCrToBarCode As Boolean '在输入的条形码后加回车(解决条形码输入器无回车的故障)
'通讯参数
Public COMMSOH As String ' ChrB(&H1) '通讯起始符
Public COMMETB As String ' ChrB(&H17) '结束符
Public COMMACK As String ' ChrB(&H6) '接收正确
Public COMMNAK As String ' ChrB(&H15) '接收出错
Public COMMSOURCEADDRESS As String ' ChrB(&H92) '信号源通讯地址
Public COMMHPU1011ADDRESS As String ' ChrB(&HA0) 'HPU1011地址
Public COMMSTANDARDADDRESS As String ' '标准表地址
Public Const COMMSUCESS As Integer = -1 '数据发送成功,应答正确
Public gIntComPort As Integer ' 串行口 1- COM1, otherwise- COM2
Public gIntComPort485 As Integer ' 485串行口 1- COM1, otherwise- COM2
'Pass变量记录测试项目的结果
Public gBlnNewMeters As Boolean '新被检表
''Done全局变量在对应项检验完成后置为True, 设置新表后置为False
''这些变量用于FomMain 中指示哪些项目已检,在FomSave 中指示哪些项目需要保存
Public gBlnMeterSetDone As Boolean
Public gBlnClockDone As Boolean '时钟校对已做/未做
Public gStrTemperature As String '温度
Public gStrHumidity As String '湿度
Public gStrTest As String '检定人
Public gStrTestNO As String '检验员工号
Public gStrVerify As String '审核人
''485通讯参数
Public gStrCommProtocol As String '通讯规约
Public gStrCommPreByte As String '前缀字符
Public gStrCommBaudRate As String '波特率
Public gDblCommAnswerDelay As Double '应答延时(ms)
Public gDblCommAnswerByteDelay As Double '应答字节间延时(ms)
Public gDblCommOrderByteDelay As Double '命令字节间延时(ms)
Public gIntCommOrder As Integer '命令方式;0-块命令;1-分项命令
Public gIntCommProtocol As Integer '485通讯规约
Public gIntCommVersion As Integer '485通讯规约版本
Public gIntStatus As Integer '状态:0-正向有功;1-反向;2-正向无功;3-反向
Public gIntLastStatus As Integer '当前状态:0-正向有功;1-反向;2-正向无功;3-反向
Public LngReaddataRunSign As Long '读数据窗体运行状态 -0- 不运行,-1-单表执行,-2-连续执行
Public LngwriteRunSign As Long '写数据窗体运行状态 -0- 不运行,-1-单表执行,-2-连续执行
Public LnglookRunSign As Long '关键数据窗体运行状态 -0- 不运行,-1-单表执行,-2-连续执行
Public LngTiaomaRunSign As Long '条码扫描窗体运行状态
Public Mscom485RunSign As Long 'Mscom485控件运行状态 -0-关闭,-1-读数据占用,-2-写数据占用,-3-关键数据读占用,-4-条码扫描占用
Public LngXuhao As Long '序号
Public gLngcha As Long '局号后6位-厂号后6位的差
Public lngMeterCurrentPosition As Long '序号
Public strSoftwareName As String
Public strOrder As String
Public strEdition As String
Public gLngMscom485RunSign As Long
Public gFrameDelay As String
Public gByteDelay As String
Public gInitAddress As String
Public gVoltage As String
Public varSend As Variant
Public gBackPicture As String '背景图片
Public Fa_Name As String
Public Fang_Shi As String
Public Sll As New SLL_DataOperate.DataOperate
Public myHC3100 As ClassHc3100
Public mySource As ClassCky '声明电压电流源
Public myUdt8000 As Class8000 '声明控制器
Public Connstr As String
Global gSysInfo As typSysInfo '系统信息
Type typSysInfo '系统信息
AppPath As String '系统程序启动路径
IniFileName As String 'Ini文件路径及名称
End Type
Sub ReadIniData_gSub()
'读初始化文件, 初始化全局变量
Dim lIntFileHandle As Integer
Dim lIntEqualPlace As Integer
Dim lStrFileName As String, lStrVarName As String, lStrValue As String
Dim lStrTemp As String
Dim lSngValue As Single
Dim i As Integer
LngReaddataRunSign = 0
LngwriteRunSign = 0
LnglookRunSign = 0
LngTiaomaRunSign = 0
Mscom485RunSign = 0
gBlnIgnoreCommError = False
gStrPhase = "单相"
gStrNOField = "JH"
gStrNOTitle = "局号"
gStrNO2Field = "CCBH"
gStrNO2Title = "表号"
strOrder = "0123456"
gIntNOLen = 9
gIntSourceVersion = 3
gSngStandardCurrent = 5
gSngStandardVoltage = 220
gLngStandardConst = 4000000 ''18000000
lStrFileName = gStrAppPath & "PSYS.INI"
lIntFileHandle = 1
If Dir(lStrFileName) <> "" Then '文件是否存在
Open lStrFileName For Input As #lIntFileHandle
Do While Not EOF(lIntFileHandle)
Line Input #lIntFileHandle, lStrTemp
lIntEqualPlace = InStr(lStrTemp, "=")
If lIntEqualPlace > 0 Then
lStrVarName = Trim(Left(lStrTemp, lIntEqualPlace - 1))
lStrValue = Trim(Right(lStrTemp, Len(lStrTemp) - lIntEqualPlace))
lSngValue = Val(lStrValue)
Select Case lStrVarName
Case "UserName"
gStrUserName = lStrValue
Case "UserPath"
gStrUserPath = Trim(lStrValue)
Case "UserPassPath"
gStrUserPassPath = lStrValue
Case "VerifyPass"
gIntVerifyPass = Val(lStrValue)
Case "ComPort"
gIntComPort = Val(lStrValue)
Case "ComPort485"
gIntComPort485 = Val(lStrValue)
Case "JuChangHao"
gLngcha = Val(lStrValue)
Case "SourceType"
gIntSourceType = Val(lStrValue)
Case "DeviceNo"
gStrDeviceNo = lStrValue
Case "DeviceMetersCount"
gIntMeters = Val(lStrValue)
Case "FrameDelay"
gFrameDelay = lStrValue
Case "ByteDelay"
gByteDelay = lStrValue
Case "Voltage"
gVoltage = lStrValue
Case "InitAddress"
gInitAddress = lStrValue
Case "BackPicture"
gBackPicture = lStrValue
Case "NOasManufacturingNO"
If Val(lStrValue) = 1 Then
gStrNOField = "CCBH"
gStrNOTitle = "表号"
gStrNO2Field = "JH"
gStrNO2Title = "局号"
gBlnNoAsManufacturingNo = True
Else
gStrNOField = "JH"
gStrNOTitle = "局号"
gStrNO2Field = "CCBH"
gStrNO2Title = "表号"
gBlnNoAsManufacturingNo = False
End If
Case "NOLen"
gIntNOLen = Val(lStrValue)
Case "BarCodeLen"
gIntBarCodeLen = Val(lStrValue)
Case "AddCrToBarCode"
If Val(lStrValue) = 1 Then
gBlnAddCrToBarCode = True
Else
gBlnAddCrToBarCode = False
End If
Case "NOPlaceFrom"
gIntNOPlaceFrom = Val(lStrValue)
Case "NOPlaceTo"
gIntNOPlaceTo = Val(lStrValue)
End Select
End If
Loop
Close lIntFileHandle
End If
If gIntSourceType = 1 Then
'' COMMSOH = ChrB(&H2)
'' COMMSOURCEADDRESS = ChrB(&H41)
'' COMMETB = ChrB(&H17)
Else
If gIntSourceType > 3 Then
gIntSourceType = 2
End If
End If
If gIntComPort485 <= 0 Then
gIntComPort485 = 3
End If
COMMSOH = ChrB(&H1)
COMMETB = ChrB(&H17)
COMMSOURCEADDRESS = ChrB(&H92)
COMMACK = ChrB(&H6)
COMMNAK = ChrB(&H15)
COMMSTANDARDADDRESS = ChrB(&H37)
gStrCommProtocol = "(无通讯功能)" '' "电力部规约"
gStrCommPreByte = ""
gStrCommBaudRate = "1200"
gDblCommAnswerDelay = 200
gDblCommAnswerByteDelay = 0
gDblCommOrderByteDelay = 0
gIntCommOrder = 0
gBlnClockDone = False
If gIntBarCodeLen > BARCODELEN Or gIntBarCodeLen <= 1 Then
gIntBarCodeLen = BARCODELEN
End If
If gIntMeters <= 0 Or gIntMeters > MAXMETERS Then gIntMeters = MAXMETERS
If gIntNOLen <= 0 Or gIntNOLen > NOLEN Then gIntNOLen = NOLEN
For i = 0 To MAXMETERS - 1
gAryEnable(i) = True
Next i
If gIntMeters Mod 12 = 0 Then
gIntGroupMeters = 6
ElseIf gIntMeters Mod 8 = 0 Then
gIntGroupMeters = 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -