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

📄 hualong.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 H
📖 第 1 页 / 共 4 页
字号:
					l=0;
          			if((*fp1)>9) 
					l=0;
          		}
   //add2004-5-18
   		if(l==1)
   			{   
				num=12;
        			for(l1=0;l1<12;l1++)
        				{
                				fp1=rbuffer+6+3*l1;
                				fp2=&a[3*l1];
        	  				*fp2=(*(fp1+1));// minute
        	  				*(fp2+1)=(*(fp1+2));// hour
        	  				*(fp2+2)=(*fp1);//price
        				}
        			if(0==set_price_ok(num,&a[0])) 
					l=0;        	
   			}   
    		if(l==1)
    			{
    				set_before(type_biao);
        			for(l1=0;l1<12;l1++)
        				{
        					fp1=rbuffer+6+3*l1;
                				fp2=&RAM[addr+3*l1];
	         				*fp2=(*(fp1+1));// minute
	         				*(fp2+1)=(*(fp1+2));// hour
	         				*(fp2+2)=(*fp1);//price
        				}
        			copy_ram_to_fm_fm1(addr,36,addr);
        			set_end(type_biao,0);
        			onetime_biancheng(0,1,code);
      				shiduan_onetimeprog=1;
      				recoder_shiduan_yonghuhao_biaohao_addr(recorde_shiduan);
        			hualong_send_ack();
       		}
      		else 
			hualong_send_noack();
	}
}

void hualong_write_fuhe() 
{unsigned char l,l1;
  unsigned char num,a[36];
  unsigned char *fp1,*fp2;
  if((*(rbuffer+5))==36)
    	{
      		l=1;
      		for(l1=0;l1<12;l1++)
          		{
          			if(2!=testbcd(*(rbuffer+7+3*l1))+testbcd(*(rbuffer+8+3*l1))) 
					l=0;// day month
            			if((*(rbuffer+6+3*l1))>5) // shi tao hao
					l=0;
            		}
        //add2004-5-18
   		if(l==1)
   			{//num=0;
   				num=12;
        			for(l1=0;l1<12;l1++)
        				{
        					fp1=&a[3*l1];
						fp2=rbuffer+6+3*l1;
        	  				*fp1=(*(fp2+1));// day
        	  				*(fp1+1)=(*(fp2+2));// month
        	  				*(fp1+2)=(*(fp2));//num tao
        				}
        			if(0==set_fuhe_ok(num,&a[0])) 
					l=0;        	
   			} 
      		if(l==1)
    	   		{
    	   			set_before(TYPE_EP1_SEASONPROGRAM_RECORD);
         			for(l1=0;l1<12;l1++)
         				{
         					fp1=&RAM[R_ONUS_1+3*l1];
					        fp2=rbuffer+6+3*l1;
	       					*fp1=(*(fp2+1));// day
	        				*(fp1+1)=(*(fp2+2));// month
	        				*(fp1+2)=(*(fp2));// num tao
         				}
          			copy_ram_to_fm_fm1(R_ONUS_1,36,FM_ONUS_1);
          			set_end(TYPE_EP1_SEASONPROGRAM_RECORD,0);
          			onetime_biancheng(0,1,0x96);
          			shiduan_onetimeprog=1;
          			recoder_shiduan_yonghuhao_biaohao_addr(recorde_shiduan);
          			hualong_send_ack();
        		}
      		else 
	  		hualong_send_noack();
     }
}
const unsigned int table_hualong_write_fuhejilu_use[]=
												{
													R_RECORD_INTERVAL_1,
	                                                                                  		R_RECORD_INTERVAL_2,
	                                                                                 		R_RECORD_INTERVAL_3,
	                                                                                  		R_RECORD_INTERVAL_4,
	                                                                                  		R_RECORD_INTERVAL_5,
	                                                                                  		R_RECORD_INTERVAL_6
	                                                                                  };
const unsigned char table_hualong_write_fuhejilu_code[]={0x16,0x17,0x18,0x19,0x20,0x21};
void hualong_write_fuhejilujiange()
{unsigned char l,code;
  unsigned int addr;
	l=1;
	code=*(rbuffer+3)-0x56;
	if(1!=testbcd(*(rbuffer+6))) 
		l=0;
	if(1!=(*(rbuffer+5))) 
		l=0;
	if(l==1)
    		{
    			addr=table_hualong_write_fuhejilu_use[code];
      	 		RAM[addr]=*(rbuffer+6);
       			RAM[addr+1]=0;
      	 		copy_ram_to_fm_fm1(addr,2,addr);
       			onetime_biancheng(1,2,table_hualong_write_fuhejilu_code[code]);
       	 		hualong_send_ack();
      		}
	else
       		hualong_send_noack();
}


void hualong_write_20_use(set_type,addr,num)
unsigned char set_type,num;
unsigned int addr;
{unsigned char l;
	if((num!=0)&&(*(rbuffer+5)==num))
    		{
    			set_before(set_type);
      			for(l=0;l<num;l++)
	     			RAM[addr+l]=*(rbuffer+6+l);
     			copy_ram_to_fm_fm1(addr,num,addr);
     			if(set_type!=TYPE_FM_CHAOBIAORIPROGRAM_RECORD)
           			set_end(set_type,0);
     			else
           			set_end(set_type,1);// chao biao ri wu 
     		hualong_send_ack();
    		}
}
	



void hualong_write_20()
 {unsigned char l;
	switch(*(rbuffer+3))
		{
 			case 0x2:  // chao biao ri
           				if((2==testbcdnum(rbuffer+6,2))&&((*(rbuffer+7))<0x29))
           					{
           	    					hualong_write_20_use(TYPE_FM_CHAOBIAORIPROGRAM_RECORD,R_CHAOBIAORI,2);
           	    					onetime_biancheng(1,1,0x32);
           					}
           				else
                 				hualong_send_noack();
           				break;
			case 0x3:
	      				// hua cha
	     	 			if((1==thevalueisbcd1to60(*(rbuffer+6)))&&(*(rbuffer+5)==1))//add
	      	    				{
	      	       					RAM[R_HUACHA]=*(rbuffer+6);
	              					copy_ram_to_fm_fm1(R_HUACHA,1,R_HUACHA);
                     					onetime_biancheng(1,1,0x33);
	             					hualong_send_ack();
	        				}
	      				else
	        				hualong_send_noack();
	      				break;
			case 0x5:
	     			// xuliang zhou qi
	      				if((1==thevalueisbcd1to60(*(rbuffer+6)))&&(*(rbuffer+5)==1))
	      	     				{
	      	     					RAM[R_XULIANGZHOUQI]=*(rbuffer+6);
	             					copy_ram_to_fm_fm1(R_XULIANGZHOUQI,1,R_XULIANGZHOUQI);
                   					onetime_biancheng(1,1,0x35);
	             					hualong_send_ack();
	         				}
	      				else
	         				hualong_send_noack();
	      				break;
			case 0x8:
	     // fu he ji lu qi shi
					if((1==testminutehour(rbuffer+6))&&(*(rbuffer+5)==4)&&(1==testdaymonth(rbuffer+8)))
	          				{
	          					for(l=0;l<4;l++)
	     	          					RAM[R_RECORD_START_TIME+l]=*(rbuffer+6+l);
	           					copy_ram_to_fm_fm1(R_RECORD_START_TIME,4, R_RECORD_START_TIME);
                 					onetime_biancheng(1,1,0x38);
	           					hualong_send_ack();
						}
	     				else
	          		 		hualong_send_noack();
	     				break;
			case 0x9:
	    		// lun xian shi jian
	    				if((0!=(*(rbuffer+6)))&&(1==testbcd(*(rbuffer+6)))&&(*(rbuffer+5)==1))
	    	   				{
	    	   					RAM[R_DISPLAY_TIMER]=*(rbuffer+6);
	           					copy_ram_to_fm_fm1(R_DISPLAY_TIMER,1,R_DISPLAY_TIMER);
                 					onetime_biancheng(1,1,0x39);
	           					hualong_send_ack();
						}
	     				else
	     	     				hualong_send_noack();
	     				break;
			case 0xb:
	  		  // gong xiu JI SHI DUAN
	  		  // rbuffer+6   gong xiu ri      rbuffer+7   gong xiu ri shi tao
	    				if((*(rbuffer+7)<6)&&(*(rbuffer+7)!=0)&&(1==hualong_canwrite_price()))
	    					{
	    	      					hualong_write_20_use(TYPE_FM_WORKOFFPROGRAM_RECORD,R_WORKOFFDAY,2);
	    	      					onetime_biancheng(0,1,0x41);
	    	      					shiduan_onetimeprog=1;
	    					}
          				else
	     	      				hualong_send_noack();
	     				break;
			case 0x4e:  // mo chong shu cuo
             				hualong_write_canshubianchen_use(R_PLUSEMODE,4,2,0x8);           
	      				break;
			case 0x51:
	    				// duan liu  shi liu lost i condition	    
	       				hualong_write_canshubianchen_use(R_LOSTI_CONDITION,4,2,0x11);		   
	     				break;      
			case 0x52:
	    				// wu gong zu he fan shi//chang 2005-2-4
	    				if((*(rbuffer+6)<7)&&(*(rbuffer+7)<7)
							&&(1==zhangjizhuangtai())&&(1==hualong_canwrite_kwh()))
	    	 				{
	    	 					hualong_write_20_use(TYPE_FM_KVARHMODEPROGRAM_RECORD,R_KVARHMODE_F,2);
	          					onetime_biancheng(0,2,0x12);
	    					}
          				else
	     	    				hualong_send_noack();
	   				break;      
			case 0x53:
	 				 // zhen xian gong lv chao xiang
	    				hualong_write_canshubianchen_use(R_KW_F_MAX,3,2,0x13);	
	    				break;      
			case 0x54:
	  				// fan xian gong lv chao xiang
	     				hualong_write_canshubianchen_use(R_KW_R_MAX,3,2,0x14);
	     				break;      
			case 0x55:
	  				 // dong jie shi ke(ding shi
	   				l=1;
	   				
					if(0==testminutehour(rbuffer+6)) 
						l=0;
	   				if((1!=testday(*(rbuffer+8)))&&(0x99!=(*(rbuffer+8)))) 
						l=0;
	   				if((1!=testmonth(*(rbuffer+9)))&&(0x99!=(*(rbuffer+9)))) 
						l=0;
          				if(l!=0)   	
	     	       			hualong_write_canshubianchen_use(R_FREEZE_TIME,4,2,0x15);
          				else
	     	       			hualong_send_noack();
	    				break;
		case 0xc:
		case 0x12:
		case 0x1e:
		case 0x2a:
		case 0x36:
	         			hualong_write_shitao();
	         			break;
		default:
	    	// 
	      				if((0x42==(*(rbuffer+3)))&&(1==hualong_canwrite_price()))   
						hualong_write_fuhe();
                         		else
                       	     		{
                       	     			if((0x55<(*(rbuffer+3)))&&(*(rbuffer+3)<0x5c))  
								hualong_write_fuhejilujiange();
                                			else  
								hualong_send_noack();
						}            	
        }
}



unsigned char hualong_mima_ok_err(value)
unsigned char value;
{unsigned char l,l1,l2;
unsigned int addr;
l=value;
if(progfunction_security==yes)  
 	if(l==0)
   		g_errmima_function();
//           an quan
 if(progfunction_security==yes) 
   	{
   		if((RSTATUS_RUN==LOCK_DEED)||(0==RFLAG_PROG))
                 	l=0;          
               if(l==1) 
               	  if(RAM[R_SECURITY_LOCK_NUM]!=0)
               	      	{
               	  		 RAM[R_SECURITY_LOCK_NUM]=0;
               	  		 data_addr.addri=FM_SECURITY_LOCK_NUM;
                             	 wr_data[0]=RAM[R_SECURITY_LOCK_NUM];
                             	 write(FM,1);
                             }
            }
     else
           {
           	l1=*(rbuffer+6);
             	l=gmima_function(l,l1); // fei an quan ren zheng
           }
return l;
}



void hualong_write_60()
{unsigned char l,l1,a,value;
unsigned int i;
switch(*(rbuffer+3))
	{
 	 case 0x1:
		   // jiao yuan mi ma	   
	   		if((4==(*(rbuffer+5)))&&(*(rbuffer+6)<2)) // len==4  mima deng ji 0 1	   
	   			{
	        			data_addr.addri=FM_MIMA1+3*(*(rbuffer+6));// QUAN GUO
	        			if(1==read(FM,3))
	   	    				{
	   	    					value=1;
	             					for(l=0;l<3;l++)
	   	          					if(wr_data[l]!=*(rbuffer+7+l))
	   	            						{
	   	              							value=0;
	                     						 	l=5;
									}
                        				if(1==hualong_mima_ok_err(value))
          	             					{	                
	                      						hualong_mima_quanxiang=*(rbuffer+6);
                             						if(tongdao==comm485_1)
             	                   						{
             	                   							rstatus_485_mima_youxiao=zhangji_mima_youxiao_yes;
                                  		 					rtime_485_zhangjimima=600;
                                  	 						rzhangji_485_mima_use_second=RSOFT_RTC_SECOND;
             	                    						}
                                 					else
                                 	     					if(tongdao==comm485_0)

⌨️ 快捷键说明

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