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

📄 es16uh.zrg

📁 本代码为与电能表相配套的掌上通讯设备的源程序
💻 ZRG
📖 第 1 页 / 共 5 页
字号:
		return
	endif
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*若一屏不能显示,用此显示方式
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure XsData2
	clear
	i=1
	j=63
	do while i<=len(trim(strxs))
		clear
		ctmpstr="按↓↑键翻页查阅 "  
		@3,0 say ctmpstr
		@0,0 say substr(strxs,i,j)  
		@3,20 say ""   
		wait"" to cKeyChar  
		do case       	
			case asc(cKeyChar)=14
        			if i+j<=len(trim(strxs))
        				i=i+j
        			endif
      			case asc(cKeyChar)=17
      				if i>=j 
        				i=i-j
        			endif 
     			case asc(cKeyChar)=24
				return
			otherwise
        			loop
  		endcase
	enddo
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*通用转换格式
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Changeother
	k=1
	m=1
	n=1
	if nlen>ndatalen*nitem
		nlen=ndatalen*nitem
	endif 
    	j=ndatalen 
	strdata="" 
	if nchangeformat=1 
*/循显时间的显示问题\*
		if (ndataid1=019 .and. ndataid2=193).or.(ndataid1=048.and.ndataid2=193)
			prognum=crecbuff{1,1}
			strdata=str(prognum-51 ,2)
		else
			do while k<=nlen
				if j>7
        				l=1                        
        				n=j                   
        				do while l<=j
        					i = BCDtoNUM(crecBuff{n, 1}, 033h)  
        					if i<10 
                					ctmpstr="0"+str(i,1)
              					else
                					ctmpstr=str(i,2)
              					endif
              					strdata=strdata+ctmpstr
              					n=n-1
              					l=l+1
          				enddo    
     				else         
         				if nvallen=1
            					m=m+1
            					j=j-1
         				endif
         				i = BCDtoNUM(crecBuff{m, j}, 033h)                
          				ctmpstr=str(i,j*2) 
          				n=1 
          				do while n<=j*2                                               
            					strdata=strdata+str(val(substr(ctmpstr,n,1)),1)            
            					n=n+1
         				enddo 
     				endif                             
     				m=m+j         
     				k=k+j          
  			enddo
		endif
	else
		do while K<=nitem
     			i = BCDtoNUM(crecBuff{m, j}, 033h)          
     			strdata=strdata+str(i,j*2)                             
     			m=m+j         
     			k=k+1          
  		enddo
	endif
	if ProgramFlag=1
		n=receivebuf{18,1}
		n=n-33h
		strdata=strdata+substr(hex(n),3,2)
		n=receivebuf{17,1}
		n=n-33h
		strdata=strdata+substr(hex(n),3,2)
		nlen=6
	endif
	i=1
	if ndataid2=226 &&反相或停电的数据域倒序
	  	strdata=substr(strdata,9,8)+substr(strdata,1,8)
	endif  
  	do while i<=nlen*2
   		n = scanbyte(cformat{1,len(cformat)},asc("#"))
   		if n>0       
        		cformat{n,2}=strdata{i,2}      
   		endif  
   		i=i+2
  	enddo
	n = scanbyte(cformat{1,len(cformat)},asc("#"))
   	if n>0       
        	cformat=substr(cformat,1,n-1)
   	endif  
	i=1
  	do while .t.
     		i =scanbyte(cformat{1,len(cformat)},asc("*") )
     		if i>0 
       			j= scanbyte(cformat{i+1,len(cformat)},asc("*"))      
       			strxs=substr(cformat,1,i-1)+substr(cformat,i+j+1,len(cformat)-i-j)      
       			cformat=strxs       
     		else      
       			strxs=cformat
       			exit     
     		endif
  	enddo 
  	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*电量转换格式
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ChangePower
	if nlen>ndatalen*nitem
		nlen=ndatalen*nitem
	endif 
	j=ndatalen
	k=1
	l=1
	do while K<=nvaldot
		l=l*10
		k=k+1
	enddo		&&l=100,nlen=20,j=4,nitem=5
	k=1
	m=1
	n=1
     
	strdata=""   
	if nchangeformat=3
		do while K<=nitem                 
			i = BCDtoNUM(crecBuff{m, 1}, 033h) 
			jj = BCDtoNUM(crecBuff{m +1,j -1}, 033h)
			strdata = strdata+str(jj,6)
			if len(str(i,0))<2 
				strdata = strdata+".0"
			else
				strdata = strdata+"."
			endif
			strdata = strdata + str(i,0)           
			m=m+j         
			k=k+1          
		enddo
		i=1
		k=1 
		do while k<=nitem
			n = scanbyte(cformat{1,len(cformat)},asc("#"))
			if n>0    
				cformat{n,nvallen}=strdata{i,nvallen}       
			endif          
			i=i+nvallen
			k=k+1
		enddo
	else
		i =scanbyte(cformat{1,len(cformat)},asc("*") )
		if i>0         
			s= scanbyte(cformat{i+1,len(cformat)},asc("*"))      
		endif
		do while K<=nitem                 
			i = BCDtoNUM(crecBuff{m, j}, 033h) 
           		ctmpstr1=str(i/l,nvallen,nvaldot)           
      			strdata=strdata+substr(ctmpstr1,1,s-1)+"*"+substr(ctmpstr1,s,nvallen-s+1)          
      			m=m+j         
      			k=k+1          
  		enddo
    		i=1
        	k=1 
        	do while k<=nitem
          		n = scanbyte(cformat{1,len(cformat)},asc("#"))
          		if n>0    
            			cformat{n,nvallen+1}=strdata{i,nvallen+1}       
          		endif          
          		i=i+nvallen+1
          		k=k+1
		enddo

	endif
        
  	do while .t.
     		i =scanbyte(cformat{1,len(cformat)},asc("*") )
     		if i>0         
       			j= scanbyte(cformat{i+1,len(cformat)},asc("*"))      
       			strxs=substr(cformat,1,i-1)+substr(cformat,i+j+1,len(cformat)-i-j)      
       			cformat=strxs             
     		else      
       			strxs=cformat
       			exit     
     		endif
  	enddo 
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
*时段转换格式
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ChangeRate
  	ctmprate[1]="T1"
  	ctmprate[2]="T2"
  	ctmprate[3]="T3"
  	ctmprate[4]="T4"
  	k=1
  	m=1
  	n=1
  	j=ndatalen   
  	l=int(nlen/j)     
  	strdata="" 
  	strxs=trim(cformat)+space(21-zlen)
  	do while K<=l
 		i = BCDtoNUM(crecBuff{m, j}, 033h)               
 		ctmpstr=str(i,j*2) 
 		n=1 
 		do while n<=j*2                                               
    			strdata=strdata+str(val(substr(ctmpstr,n,1)),1)            
    			n=n+1
 		enddo                                
 		m=m+j         
 		k=k+1          
  	enddo
  	i=1
  	do while i<=l*ndatalen*2                   
        	j=val(substr(strdata,i+4,2))
		if j<>0
			strxs=strxs+substr(strdata,i,2)+":"+substr(strdata,i+2,2)
	        	strxs=strxs+"  "+ctmprate[j]+"            "
		endif          
        	i=i+6
  	enddo
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*输入表号
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure inputmeterid	  	
	clear
	@0,0 say "表号:"
	inputkey=""
        ninputcount=1
        nrow=0
        ncol=7
        datalen=12
        maxvalue="999999999999"
        minvalue="0"
        dot=0
        unableval=0
        do inputformat         
        if nexitflag=1
        	ifquit=1
        	return
        endif
        if len(inputkey)=0
        	inputkey="999999999999"
        endif 
        ctmpstr=str(val(inputkey),12)
        i=1
        cmtnum1=""
        do while i<=12
        	cmtnum1=cmtnum1+str(val(substr(ctmpstr,i,1)),1)
        	i=i+1
        enddo 
        szaddr{1,6}=0
        szaddr=numtobcd(val(inputkey),0)         
	m=scanbyte(szaddr{1,6},255) 
        if m>0         
        	szaddr{m,7-m}=0           	
       	endif 
       	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*输入子程序
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
procedure inputformat
	nexitflag=0
	ifquit=0
	i=ninputcount
	@nrow,ncol+i-1 say ""             
    	do while i<=datalen+1
		wait "" to cKeyChar
                if  asc(cKeyChar)=13
                	if val(inputkey)>val(maxvalue)
                        	@nrow,ncol+i-1 say ""
                        	loop
                    	endif
                  	if val(inputkey)<val(minvalue)
                  		@nrow,ncol+i-1 say ""
                  		loop
                 	endif
                   	if  val(inputkey)+48=unableval
                        	@nrow,ncol+i-1 say ""
                        	loop
                   	endif
			exit
		endif 
   		if asc(cKeyChar)=24
   			ifquit=1
                    	nexitflag=1
                	return
           	endif 
    		if asc(cKeyChar)=8
         		if i >= 2
        			i = i -1
                		inputkey=substr(inputkey,1,i-1)
                		@nrow,ncol+i-1 say " "
               			@nrow,ncol+i-1 say ""
            			loop
             		endif           
             	endif 
             	if i=datalen+1
                	@nrow,ncol+i-1 say ""
		     	loop
		endif                       
		if asc(cKeyChar)<46 .or.asc(cKeyChar)>57  .or. asc(ckeychar)=unableval
                	@nrow,ncol+i-1 say ""
		      	loop
	 	endif
        	if val(inputkey+ckeychar)>val(maxvalue)
                	@nrow,ncol+i-1 say ""
                	loop
        	endif
        	if i=datalen
            		if val(inputkey+ckeychar)<val(minvalue)
                		@nrow,ncol+i-1 say ""
                		loop
            		endif
     		endif  
        	if asc(cKeyChar)=46
            		if dot=0
                		@nrow,ncol+i-1 say ""
                		loop
            		endif                   
        	endif                                
        	@nrow,ncol+i-1 say cKeyChar                
        	inputkey=inputkey+cKeyChar
		i=i+1
	enddo
	if ctmpstr="费 率 数:"
		tariffno=inputkey
		@2,18 say tariffno
	endif
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*清除进度条
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure clearbar
	set intensity on
	@3,0 say space(21)
	set intensity off
	return
endpro
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*显示进度条
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
procedure xsbar	
	nBarLen=38
	set color to 0
	fillbox nStartPos,53,nStartPos+nBarLen,59
	set color to 1
	return
endpro
*/----------------------------------------------------------------------\*
*根据格式不同,取数据库中的预置数据
*/---------------------------------------------------------------------\*  
procedure execwrite
	do case           
		case nchangeformat=2 .or. nchangeformat=4
			@1,0 say space(21)   
			@2,0 say space(21)   
			@1,0 say "正在设置"+trim(ctmpstr)
			i=0
			j=0 
			s=1
			strdata=trim(strdata)
			if len(strdata)>0
				do while j<len(strdata)                                
					ctmpstr2=numtobcd(val(substr(strdata,j+5,1)),33h)                                          
            				szdata{s,1}=ctmpstr2{1,1}
            				ctmpstr2=numtobcd(val(substr(strdata,j+3,2)),33h)            
            				s=s+1
            				szdata{s,1}=ctmpstr2{1,1}
            				ctmpstr2=numtobcd(val(substr(strdata,j+1,2)),33h)   
            				s=s+1
            				szdata{s,1}=ctmpstr2{1,1}                                    
            				s=s+1
            				i=i+1
            				j=j+5
				enddo  
       			endif
			corder[2]=str(6+i*3,2)   
			ndatalen=i*3                    

		case nchangeformat=3
			@1,0 say space(21)   
    			@2,0 say space(21)        
    			@1,0 say "正在设置"+trim(ctmpstr)
    			i=1
    			s=1 
    			j=0
    			do while i<=len(trim(strdata))
    				ctmpstr2=numtobcd(val(substr(strdata,i,2)),33h)                                          
    				szdata{s,1}=ctmpstr2{1,1}
    				i=i+2
    				s=s+1
    				j=j+1
    			enddo
    			corder[2]=str(6+j,2)   
    			ndatalen=j 
                   
     		case  nchangeformat=1  
        		i=1 
        		ctmpstr2=""
        		do while i<=len(strdata)                 
        			ctmpstr1=substr(strdata,i,1)
          			if ctmpstr1="."                                                                               
             			ctmpstr2=ctmpstr2+substr(strdata,i,1)
          			else 
             			ctmpstr2=ctmpstr2+str(val(substr(strdata,i,1)),1)
          			endif
          			i=i+1
            		enddo
            		if writename="初始电量"
				*m=scanbyte(ctmpstr2{1,datalen*2+1},asc("."))          
				m=scanbyte(ctmpstr2{1,9},46)
				if m>0
					ctmpstr2=substr(ctmpstr2,1,m-1)+substr(ctmpstr2,m+1,datalen*2-m+1) 
       				endif  
        		endif
        		if writename="显示方式" 
        			szdata{1,1}=val(ctmpstr2)+51-int((val(ctmpstr2)+51)/256)*256
        		else
        			szdata=numtobcd(val(ctmpstr2),33h)
        		endif
        		m=scanbyte(szdata{1,ndatalen},255) 
        		if m>0
           			szdata{m,ndatalen+1-m}=51           
        		endif
        		@1,0 say space(21)   
        		@2,0 say space(21)               
         		@1,0 say "正在设置"+trim(ctmpstr)

      		case  nchangeformat=10      
            		@1,0 say space(21) 
            		@2,0 say space(21)                 
            		@1,0 say  trim(ctmpstr1) 
            		n=nitem
            		ncharstart=1
            		l=1
            		j=150    
            		strinput=""              
            		do while l<=n       
            			inputkey=""   
            			do while len(inputkey)=0                                                 
            				datalen=val(substr(Cdataformat,ncharstart,2))	&&出厂设置电量,记住上次输入
					if ccszflag = 1 .and. writename="初始电量"
						inputkey=datanewfig
						ninputcount=1+len(inputkey)  
					else                               
						ninputcount=1  
					endif
					minvalue=substr(cdataformat,ncharstart+2,2)
            				maxvalue=substr(cdataformat,ncharstart+4,12) 
            				nrow=val(substr(cdataformat,ncharstart+16,2))   
            				ncol=val(substr(cdataformat,ncharstart+18,2))    
            				dot=val(substr(cdataformat,ncharstart+20,1))
            				unableval=0
            				do inputformat         
            				if nexitflag=1
            					ifquit=1
              	 				return
            				endif            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -