📄 es16uh.zrg
字号:
*******--------------------------------------------振中掌上电脑源程序---------------------------*******
*******--------------------------------------------2001年9月13日(Eastsoft)------------------------------------*******
*******--------------------------------------------全部型号(DDSI16、CCU18、ATU、DDSFI、CCE)--------------------------------*******
#MODEL = ZZ502
#ROMVER = 5.5
define database a
meterid :c,12
copyflag:c,1
copydata:c,200
enddef
*/---------------------------------------------------------------\*
define var
*/(menu define)--------------------------\*
nfRepaint : N, 1
nMxItemNum: N, 2 &&菜单项目总数
nMxChoice : N, 2 &&多地址选择(多选一)
iMenu : N, 2
cyMenu : N, 2
cxMenu : N, 2
chKey : C, 1
chMenuKey : C, 1
szWinTitle: C, 20 &&菜单标题
aszMxItem : C, 20 [12] &&菜单项
nWinStyle : N, 1
nCatStyle : N, 1
cyWin : N, 2
cxWin : N, 2
i : N, 12
l : N, 5
nAuto : N, 1
nDelay : N, 2
*/-------------------(menu define end)-----\*
ver : N, 1
szInput : C, 6
szPassword: C, 6 && 存储程序口令
nfPassword: N, 1 && 口令等级标志
nProRight : N, 1 && 当前权限
chfMain : C, 1 && 主程序菜单标志变量
szCorpId : C, 21
x : N, 3
y : N, 3
z : N, 3
j : N, 5
nfWarn : N, 1
ismiddle : N, 1
nfCursor : N, 1
nButton : N, 1
*/---------------------------------------------------------------\*
ctempcode :c, 6
model :c, 8
leng :n, 2
times :n, 1
readtimes :n, 1
receivebuf :c, 200 &&200
formatdata :c, 12
key_esc :c, 2
pulse :n, 4
maxtimes :n, 2
defaulttimes:n, 2
defaultpulse:n, 2
modelatu :c, 6
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CMtNum :c,12
cmtnum1 :c,12 &&输入数字
corder :c,3[2] &&corder1-控制码 corder2-数据长度
ndatalen :n,3 &&数据长度(字节)
nitem :n,2 &&数据组数
ndataid1 :n,3 &&电能量数据标识DIo(十进制形式)
ndataid2 :n,3 &&电能量数据标识DI1(十进制形式)
nchangeformat :n,2 &&控制变量
nvallen :n,2 &&数据有效位数
nvaldot :n,2 &&小数位数
cRecBuff :c,100 &&接收到的数据
szaddr :c,7
m :n,14
n :n,14
k :n,14
s :n,14
p :n,14
t :n,14
szdata :c,50 &&数据域
nstart :n,3
zlen :n,3
strdata :c,150 &&数据
cformat :c,150 &&显示数据
strxs :c,250
CdataFormat :c,150 &&数据要求
ctmprate :c,2[4]
dot :n,1 &&小数位数
inputkey :c,20 &&输入数据
maxvalue :c,20 &&最大值
minvalue :c,2 &&最小值
cKeyChar :c,1
ncol :n,2 &&最大位数
nrow :n,2 &&最小位数
datalen :n,3
nSn :n,4
nstartpos :n,3
nExitFlag :n,1
cTmpStr :c,200
cTmpStr1 :c,200
cTmpStr2 :c,250
ctmpstr3 :c,61
ctmpstr4 :c,200
cSdReadRqt :c,50
strRecFlag :c,3
nBarLen :n,3
nLen :n,3
nzh :n,4
ninputcount :n,2
ncharstart :n,4
strinput :c,50
unableval :n,2
nbackdata :n,3
writename :c,20 &&200
equipment :n,1
ifquit :n,1
tariffno :c,2
unozborhw :n,1
progtest :c,200
prognum :n,4
ii :n,4
jj :n,4
inputweek :c,2 &&周次输入
Segmentnum :n,2
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TP_VER :c,5 &&振中版本
datanewfig :c,9 &&出厂底数
datauno :c,12 &&出厂表号
clearpass :c,6 &&出厂清零密码
datapass :c,6
datatempuno :c,12 &&自动默认表号
temp :c,200 &&临时数据
nzborhw :n,1 &&载波或红外通讯
zhbcflag :n, 1 &&综合编程标志
ProgramFlag :n,1 &&抄读编程时间及内容标志
ifdefault :n,1
zyccsetup :n,1 &&专用于出厂设置
ccszflag :n, 1 &&出厂设置中的初始电量
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
**密码域转换(16进制)
Word1low :n, 3
Word1high :n, 3
Word2low :n, 3
Word2high :n, 3
Word3low :n, 3
Word3high :n, 3
Word1 :n, 3
Word2 :n, 3
Word3 :n, 3
HexStr :c, 6
enddef
*/---------------------------------------------------------------\*
*显示菜单
*/---------------------------------------------------------------\*
procedure Menu
set mode to 1
if nMxChoice < 1 .or. nMxChoice > nMxItemNum
nMxChoice = 1
endif
nfRepaint = 1
do while .T.
if nfRepaint = 1
l = int(len(szWinTitle) / 2)
do case
case nMxItemNum <= 3
do ShowWindow
case nMxItemNum = 4
clear
@ 0, 1 say left(szWinTitle, 2)
@ 1, 1 say substr(szWinTitle, 3, 2)
@ 2, 1 say substr(szWinTitle, 5, 2)
@ 3, 1 say substr(szWinTitle, 7, 2)
line 24,3,24,60
line 26,3,26,60
case nMxItemNum <= 6
do ShowWindow
endcase
iMenu = 1
do while iMenu <= nMxItemNum
do MenuYX
@ cyMenu, cxMenu say aszMxItem[iMenu]
iMenu = iMenu + 1
enddo
iMenu = nMxChoice
endif
nfRepaint = 0
do MenuYX
@ cyMenu, cxMenu say aszMxItem[iMenu]
iMenu = nMxChoice
do MenuYX
set intensity on
@ cyMenu, cxMenu say aszMxItem[nMxChoice]
set intensity off
do HideCursor
Wait "" to chMenuKey
do case
case chMenuKey >= "1" .and. chMenuKey <= chr(nMxItemNum + 48)
nMxChoice = asc(chMenuKey) - 48
case asc(chMenuKey) = 17
nMxChoice = nMxChoice - 1
case asc(chMenuKey) = 14
nMxChoice = nMxChoice + 1
case asc(chMenuKey) = 11
if nMxChoice > int((nMxItemNum + 1) / 2)
nMxChoice = nMxChoice - int((nMxItemNum + 1) / 2)
endif
case asc(chMenuKey) = 12
if nMxChoice <= int((nMxItemNum + 1) / 2)
nMxChoice = nMxChoice + int((nMxItemNum + 1) / 2)
endif
case asc(chMenuKey) = 13
exit
case asc(chMenuKey) = 24
nMxChoice = 0
exit
endcase
if nMxChoice < 1
nMxChoice = nMxItemNum
endif
if nMxChoice > nMxItemNum
nMxChoice = 1
endif
enddo
return
endpro
*/---------------------------------------------------------------------\*
procedure MenuYX
do case
case nMxItemNum <= 3
cyMenu = iMenu
cxMenu = 4
case nMxItemNum = 4
cyMenu = iMenu - 1
cxMenu = 6
case nMxItemNum <= 6
if iMenu <= 3
cyMenu = iMenu
cxMenu = 0
else
cyMenu = iMenu - 3
cxMenu = 10
endif
case nMxItemNum <= 8
if iMenu <= 4
cyMenu = iMenu - 1
cxMenu = 0
else
cyMenu = iMenu - 5
cxMenu = 10
endif
case nMxItemNum <= 12
do case
case iMenu <= 4
cyMenu = iMenu - 1
cxMenu = 1
case iMenu <= 8
cyMenu = iMenu - 5
cxMenu = 8
otherwise
cyMenu = iMenu - 9
cxMenu = 15
endcase
otherwise
cyMenu = 1
cxMenu = 4
endcase
return
endpro
*/---------------------------------------------------------------------\*
procedure HideCursor
set mode to 0
@ 7,20
set mode to 1
return
endpro
*/---------------------------------------------------------------------\*
procedure WaitInput
if nAuto = 1
i = 1
do while i <= nDelay
sound 0, 1
if testkb()
Wait "" to chKey
return
endif
i = i + 1
enddo
else
Wait "" to chKey
endif
return
endpro
*/---------------------------------------------------------------------\*..
procedure ShowWindow
*/---------------------------------------------------------------------\*..
clear
l = len(szWinTitle)
if nCatStyle < 10 && if not rotate the title
cxWin = 11 - int((l + 1) / 2)
cyWin = 0
else
l = int(l / 4)
endif
@ cyWin, cxWin say szWinTitle
return
endpro
*/---------------------------------------------------------------------\*
procedure format
*/---------------------------------------------------------------------\*
if len(trim(formatdata))>=leng
formatdata=left(formatdata,leng)
endif
do while len(trim(formatdata))<leng
formatdata="0"+formatdata
enddo
formatdata=trim(formatdata)
return
endpro
*/---------------------------------------------------------------------\*
procedure Initialize
set mode to 1
set color to 1
nAuto = 1
nDelay = 4
nCatStyle = 2
nWinStyle = 0
nfWarn = 1
ismiddle = 0
ver = 0
ifquit = 0
equipment = 0
tariffno = ""
unozborhw = 0
zyccsetup = 0
segmentnum = 10
defaulttimes=3
maxtimes=10
readtimes=defaulttimes
defaultpulse=5
modelatu=""
chKey = chr(0)
nfCursor = 0
nButton = 1
szCorpId = "载波集中抄表系统"
do WaitInput
if execcount() = 1
szPassword = "888888"
NPRORIGHT=1
endif
nfPassword = 0
do CheckPass
do CheckVER
return
endpro
*/---------------------------------------------------------------------\*
procedure CheckPass
szWinTitle = szCorpId && szCorpId = "电力线载波集中抄表"
do ShowWindow
@3,2 say date() + " " + time()
j = 1
do while nfPassword = 0
line 20, 30, 20 , 50
line 20, 50, 107, 50
line 20, 30, 107, 30
line 107,30, 107, 50
@ 2,4 say "密码:______".
@ 2,19 say " "
@ 2,9
i = 1
szInput = ""
do while i <= 7
Wait "" to chKey
do case
case asc(chKey) = 13 &&按确认键
i = 8
case asc(chKey) = 8 &&按删除键
i = i - 1
if i < 1
i = 1
szInput=""
endif
@ 2, 9 - 1 + i say "_"
@ 2, 9 - 1 + i
szInput=substr(szInput,1,i)
otherwise
if i < 7
@ 2, 9 - 1 + i say "*"
szInput = szInput+chKey
i = i + 1
endif
endcase
enddo
if szInput = "888888"
NPRORIGHT=0
nfPassword = 1
loop
endif
if szInput = "666666"
NPRORIGHT=1
nfPassword = 1
loop
endif
@ 2,19 say "*"
nAuto = 0
do WaitInput
nAuto = 1
j = j + 1
if j > 3
powerdown
endif
enddo
return
endpro
*/----------------------------------------------------------------------\*
*振中版本检测
*/----------------------------------------------------------------------\*
procedure CheckVER
TP_Ver=series()
if left(TP_Ver,1)="6"
TP_Ver=substr(TP_Ver,2,1)
if TP_Ver="3" .or. TP_Ver="5" .or. TP_Ver="8"
TP_Ver="tp800"
else
TP_Ver="tp600"
endif
else
TP_Ver="tp800"
endif
return
endpro
*/---------------------------------------------------------------------\*
**向电能表发送读数据请求帧
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure SendRead
initsio 0 &&不改变波特率,仅清除串口接收缓冲区
receivebuf{1,100}=space(100)
crecbuff{1,100}=space(100)
*前导符
cSdReadRqt{1,2}=254
sends cSdReadRqt{1,2}
i=1
*起始符
cSdReadRqt{i,1}=104
i=i+1
*表号
cSdReadRqt{i,6}=szaddr{1,6}
i=i+6
*第二起始符
cSdReadRqt{i,1}=104
i=i+1
*控制码
cSdReadRqt{i,1}=val(corder[1])
i=i+1
*长度
cSdReadRqt{i,1}=val(corder[2])
i=i+1
*标识符
cSdReadRqt{i,1}=nDataID1+51-int((ndataid1+51)/256)*256
i=i+1
cSdReadRqt{i,1}=nDataID2+51-int((ndataid2+51)/256)*256
i=i+1
*校验码
j=CheckSum(cSdReadRqt{1,i-1})
j=j-256*int(j/256)
cSdReadRqt{i,1}=j
i=i+1
*结束符
cSdReadRqt{i,1}=22
*发送请求桢
sends cSdReadRqt{1,i}
******************
if NPRORIGHT=0
progtest=""
set mode to 0
j=1
do while j<i+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -