⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwcb_yn_auto.prg

📁 Powerbuilder开发的抄表器接口程序
💻 PRG
📖 第 1 页 / 共 2 页
字号:
*****************************************************************
**  名称:海创抄表计费程序                                        **
**  日期: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 + -