📄 hwcb_yn_auto.prg
字号:
*****************************************************************
** 名称:海创抄表计费程序 **
** 日期:2002.11.5 yxy **
** 功能:1.显示用户信息,是否已经抄表; **
** 2.抄录每用户每电表的示数,判断电量情况并计算电费; **
** 3.定位查询”户号/表号/卡本“; **
** 4.抄表情况统计; **
** 5.系统基本信息和设置; **
******************************************************************
set color to
set help to HelpHdl &&设置帮助过程
set exact off
*set numwidth to 9 &&设置缺省数字显示宽度
*set decimal to 3 &&设置缺省小数字显示宽度
********初始化INKEY()键值变量*************
KEY_ENTER = 13
KEY_F1 = 29
KEY_F10 = -9
KEY_DEL = 7
KEY_BS = 8
KEY_UP = 5
KEY_DOWN = 24
KEY_LEFT = 19
KEY_RIGHT = 4
KEY_ASTERISK = 42
KEY_SLANT = 47
KEY_PLUS = 43
KEY_MINUS = 45
rKEY_ESC = 12
KEY_ESC = 27
iconZC = 'C'^1'Mdd'^3'Ldg'^1'Ldf'^3'$' && ^1 ... +CHR(1)+
iconWC = 'C'^1'Mdg'^2'Sdg'^1'$'
iconYC = 'C'^1'Ldg'^4'Mdu'^4'Ldh'^4'$'
iconCursor = 'C'^2'Sdg'^5'R$'
iconArrowUp = 'C'^1'Ldh'^3'Ldr'^2'Ldd'^2'Ldr'^2'Ldu'^2'Ldr'^2'Lde'^3'R$'
iconArrowDown = 'C'^1'Lde'^3'Ldr'^2'Ldu'^2'Ldr'^2'Ldd'^2'Ldr'^2'Ldh'^3'R$'
helpContext = 0 &&设置帮助变量
do _HideCursor &&关闭光标
* do _LcdShowHdp with 'fz.hdp'
* do _LcdSetLogo with 'fz.hdp'
* q=inkey(0)
*do _LcdWinSet with 0,0, 127, 127, 8, 32
*设置液晶视窗0,0)-(127,127),8行32列
do _LcdWinSet with 0,0, 130, 130, 10, 34
clear
@0,0 say '红外抄表程序'
@2,0 say '海创科技有限公司'
@3,0 say ' 2006.03.07 '
@4,0 say '作者:肖顺东'
do delay with 10
***************设置密码**********************
*passWord = GetPassword('密码:')
* do while password <> GetPassword('确认:')
* password = GetPassword('密码:')
* enddo
*clear
***************异常码数组定义******************
dimension abnormalStr(15)
abnormalStr(1) = '闭门'
abnormalStr(2) = '铅封损坏'
abnormalStr(3) = '漏抄'
abnormalStr(4) = '型号不符'
abnormalStr(5) = '电表烧坏'
abnormalStr(6) = '电表停走'
abnormalStr(7) = '电表倒转'
abnormalStr(8) = '电表丢失'
abnormalStr(9) = '电表移位'
abnormalStr(10)= '电表空转'
abnormalStr(11)= '表箱损坏'
abnormalStr(12)= '拆表'
abnormalStr(13)= '换表'
abnormalStr(14)= '底度错误'
abnormalStr(15)= '无卡片'
exitBrowse = .F.
redraw = .T.
locMode = 1
scanNeeded = .T.
&&读电表
do MeterReading
return
***************数据库和空间设置*******************
database d:\cbq\hw_data.dbf
%heap 48000 &&定义堆空间为24K
%code 4096 &&定义代码缓冲空间为4K
%stack 8192 &&定义栈空间为8K
procedure MeterReading
if .not. File("hw_data.dbf")
if .not. EnterServer()
return
endif
endif
use hw_data
select 1
exitBrowse = .F.
do while .not. exitBrowse
**弹红外抄表
m = menu_calc()
do case
case m = 1
***先使用通用表号读取表号************
bhtmp = right('AAAAAAAAAAAAAAA',12)
tkzz = 'C032'
do ready
bh = Read_hwsj('C032',bhtmp)
bh = trim(bh)
DO _DISABLERX &&关闭红外
i = 0
if len(bh) > 0
if auto_find_bh(bh)
do while .t.
*******查找表号******************
bhtmp = trim(serial_id)
if bh = bhtmp
titemid = trim(item_id)
do ready
tmpdata = Read_hwsj(titemid,bh)
DO _DISABLERX &&关闭红外
if len(tmpdata) < 2
k = show3lnbox(bh,trim(item_name),'未采集到数据')
if k = key_esc
if eof()
exit
else
skip 1
endif
endif
else
********显示*************************
do case
case titemid = '9010'
ls_tmp = '正向有功总电量'
case titemid = '9020'
ls_tmp = '反向有功总电量'
case titemid = '9110'
ls_tmp = '正向无功总电量'
case titemid = '9120'
ls_tmp = '反向无功总电量'
case titemid = '9010'
ls_tmp = '正向有功总电量'
endcase
do _lcdwinopen with 0,0, 127,127, 10,34
do _ShowCursor
@0,0 say '户号:'+person_no
@1,0 say '户名:'+user_name
@2,0 say '地址:'+user_addr
@3,0 say '表号:'+serial_id
@4,0 say ls_tmp
set decimal to 0
@5,0 say '倍率:'+str(rate,0)
set decimal to 3
@6,0 say '单价:'+str(price,3)
set decimal to 2
@7,0 say '上次:'+cs_val
@8,0 say '本次:'+tmpdata
set decimal to 0
do while .t.
k = Inkey(0)
if k = KEY_ENTER .or. k = KEY_ESC
exit
endif
enddo
do _LcdWinClose
********显示*************************
replace bc_val with tmpdata,cb_flag with '1',input_date with date()
if eof()
exit
else
skip 1
endif
endif
else
exit
endif
enddo
else
exit
endif
endif
case m = 2
exitBrowse = .t.
otherwise
endcase
k = InKey(0)
do case
case k = KEY_F1 &&按键为帮助
helpContext = 1
do HelpHdl
helpContext = 0
case k = KEY_ENTER &&按键为确定
case k = KEY_UP
do LastRecord &&选择上一条记录
case k = KEY_DOWN
do NextRecord &&选择下一条记录
case k = KEY_F10 &&功能按键
m = MainMenu()
do case
case m=1
case m=2
**do GetLocMode
case m=3
**do ShowInform
case m=4
do EnterServer
case m=5
do _lcdwinopen with 0,0, 127,127, 4,6
clear
do _showbattery
do _lcdwinclose
case m=6
**do DispMap
case m=7
exitBrowse = .T.
endcase
endcase
enddo
return
**********开窗显示两行字符串,等待按'取消'或'继续'键后关窗退出***********
procedure Show2LnBox
parameters fstLine, sndLine
i = Len(fstLine)
j = Len(sndLine)
m = iif(i>j, i, j)
j = Int((128-(m*8))/2)
i = (m*8)+j
do _lcdwinopen with 0,0, 127,127, 8,20
*do _LcdWinOpen with 12, j-3, 50, i+3,4,16
@3,0 say fstLine
@4,0 say sndLine
k = 0
do while (k#KEY_ESC) .and. (k#KEY_ENTER)
k = InKey(0)
enddo
do _LcdWinClose
return k
**********开窗显示三行字符串,等待按'取消'或'继续'键后关窗退出*********
procedure Show3LnBox
parameters fstLine, sndLine, thdLine
i = Len(fstLine)
j = Len(sndLine)
h = Len(thdLine)
m = iif(i>j, i, j)
n = iif(m>h, m, h)
j = Int((128-(n*8))/2)
i = (n*8)+j
do _LcdWinClose
do _lcdwinopen with 0,0, 127,127, 8,20
@2,0 say fstLine
@3,0 say sndLine
@4,0 say thdLine
k = 0
do while (k#KEY_ESC) .and.(k#KEY_ENTER)
k = InKey(0)
enddo
do _LcdWinClose
return k
*************开窗显示两行字符串,等待按'取消'或'继续'键后关窗退出**********
procedure Show4LnBox
parameters fstLine, sndLine, thdLine, forthLine
i = Len(fstLine)
j = Len(sndLine)
h = Len(thdLine)
p = Len(forthLine)
m = iif(i>j, i, j)
n = iif(m>h, m, h)
q = iif(n>p, n, q)
j = Int((128-(q*8))/2)
i = (q*8)+j
do _LcdWinOpen with 12, j-3, 66, i+3, 4,16
*打开液晶窗口(12,j-3)-(66,i+3)三行,文本缓冲区4行16列
@1,0 say fstLine
@2,0 say sndLine
@3,0 say thdLine
@4,0 say forthLine
k = 0
do while (k#KEY_ESC) .and. (k#KEY_ENTER)
k = InKey(0)
enddo
do _LcdWinClose
return k
*********************判断数据是否下载***********************
procedure EnterServer
if .not. GetBATT()
return .F.
endif
clear
do while .T.
if .not. File("hw_data.dbf")
do Show2lnBox with '尚未下载抄表数据', '按 确定 继续'
endif
do _EnterServer
if .not. File("hw_data.dbf")
return .F.
endif
enddo
clear
return .T.
procedure GetBatt
batt = _GetBattery()
if batt > 100
batt1 = int(batt /256)
batt1 = batt1 + (batt - batt1 * 256) /100
if (batt1 < 4.7)
do _Beep with 2
do Show2lnBox with '电池电量偏低', '请及时充电'
return .F.
endif
else
if (batt < 70)
do _Beep with 2
do Show2lnBox with '电池电量偏低', '请及时充电'
return .F.
endif
endif
if .not. _BackupBatt()
do _Beep with 2
do Show2lnBox with '备用电池电量不足', '请速更换'
return .F.
endif
return .T.
***************移到上一条记录***************************
procedure LastRecord
if eof()
return
endif
if bof()
k = Show2LnBox('已到首条记录', '按"确定"键继续')
go top
else
redraw = .T.
scanNeeded = .T.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -