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

📄 es16uh.zrg

📁 本代码为与电能表相配套的掌上通讯设备的源程序
💻 ZRG
📖 第 1 页 / 共 5 页
字号:
*******--------------------------------------------振中掌上电脑源程序---------------------------*******
*******--------------------------------------------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 + -