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

📄 testprog.c

📁 电除尘行业中监控界面采用ACTIVE 控件的形式
💻 C
📖 第 1 页 / 共 5 页
字号:
				m_br_work_sty1 = 1;
				m_br_work_sty2 = 0;
				m_br_work_sty3 = 0;
			}
			else if(m_get_gzfs ==5)
			{
			 	printf_hz(8, 0,":最高平均值");
				m_br_work_sty1 = 1;
				m_br_work_sty2 = 0;
				m_br_work_sty3 = 1;
			}
			else if(m_get_gzfs ==6)
			{
			 	printf_hz(8, 0,":自动调节  ");
				m_br_work_sty1 = 1;
				m_br_work_sty2 = 1;
				m_br_work_sty3 = 0;
			}
			printf_hz(28,0,"MA");


			if(m_get_cur2 < 1000)
			{
				display_zf(25,0,3,m_get_cur2,1);
				display_zf(21,0,2,m_get_vol2,1);
				printf_hz(23,0,"KV");
			}
			else
			{
				display_zf(24,0,4,m_get_cur2,1);
				display_zf(20,0,2,m_get_vol2,1);
				printf_hz(22,0,"KV");
			}
			//查找给定的一次电流
			//
			//暂时引用火花次数作为计数器
			m_hh_count = m_get_cur2/100-1;		//-2

			if(m_get_vol2 == 72)
				m_cur1_given = curlimit72[m_hh_count];
			else if(m_get_vol2 ==66)
				m_cur1_given = curlimit66[m_hh_count];
			else if(m_get_vol2 == 60)
				m_cur1_given = curlimit60[m_hh_count];

			m_cur1_given_div4 = m_cur1_given/4;

			m_max_ss = curlimit11[m_hh_count];

//			m_cur1_com = m_cur1_given/10;
			m_cur2_div6= m_get_cur2/6;
			m_cur2_div3= m_get_cur2/3;
			m_cur2_div4= m_get_cur2/4;
			m_cur2_div4_3 = m_cur2_div4*3;

			//==============================================================
			if(m_get_ykfs == 2)
				m_br_dcs = TRUE;
			else if(m_get_ykfs == 1)
				m_br_dcs = FALSE;
	
			P2DDRH = 0x5f;              //attention please!  change later!
			P2DDRL = 0xf5;				//
			P2     = 0x7f;				//P2.5 = 1

			//===============================================================
			m_r_in 	= 0;									//记录标志初始化
			m_br_can_s 	= FALSE;
						
			for(i = 0;i<18;i++)
				ser_rec[i]  = 0; 
			if(RI_0) 	
			{
				i = SBUF0;
				RI_0 =0;
			}
			TI_0			= 0;

			m_change_mode   = 0;
			m_vol1          = 0;							//一次电压
			m_cur1          = 0;
			m_vol2          = 0;
			m_cur2          = 0;
			m_dtj           = 0;
			m_now_hhl       = 0;
			m_tem_cur2_6    = 0;
			m_tem_cur2_7    = 0;
			m_tempurature   = 0;
			icbase1         = 0;
			m_fdb_tc        = (m_get_fdb-1)*277;		  //每个台阶为10度 
			m_left_fdb_tc   =  8900 - m_fdb_tc; 
			EA          	= SET;
			EWDI           	= SET;
			WDTCON 			= 0x80; 							// Set EWDT
			WDTCON      	= 0x09; 							// Clear EWDT – Watchdog enabled
gon2:
			WDTCON     |= 0x20; 							// Set RWDT, other bits unaffected
			WDTCON     &= ~0x20; 							// Clear RWDT—watchdog reset				
			EX0         = CLEAR;							//禁止中断
			ET0         = CLEAR;
			ET1         = CLEAR;
			U_DRV 		= SET;

				
			work_sta        = SET;							//备妥
			ES				= SET;							//改为常打开方式 

//			if(m_br_jkyk == TRUE && m_br_dcs == FALSE)		//2005-10-15
//				ES  		= SET;							//2005-10-15
//			else											//2005-10-15
//				ES  		= CLEAR;						//2005-10-15


			if(icbase1 != 0)								//故障时间,合不上闸刀
			{
				U_BJ       = CLEAR;							//铃响,提示开机
			}
			
			if(m_br_work == FALSE)
			{
				scan_jp(30,0);
				
				if( jp_code == 0x0b && m_br_jkyk == FALSE )		//启动/停机键(处于近控方式)
					m_br_work =!m_br_work;
				else if(jp_code == 0x0c)
				{
					m_br_jkyk =! m_br_jkyk;

					if(m_br_jkyk == TRUE && m_br_dcs == TRUE )
					{
						ES			= CLEAR;
					}
					else
					{
						ES			= SET;
						m_r_in 		= 0;
						ser_rec[0] 	= 0;
						ser_rec[1] 	= 0;
						ser_rec[2] 	= 0;
						ser_rec[3] 	= 0;
					}
//					if(m_br_jkyk == FALSE )
//					{
//						//ES 		= CLEAR;
//						ES			= SET;
//						m_r_in 		= 0;
//						ser_rec[0] 	= 0;
//						ser_rec[1] 	= 0;
//						ser_rec[2] 	= 0;
//						ser_rec[3] 	= 0;
//
//					}
//					if(m_br_jkyk == TRUE && m_br_dcs == FALSE)
//					{
//						ES 			= SET;
//						m_r_in 		= 0;
//						ser_rec[0] 	= 0;
//						ser_rec[1] 	= 0;
//						ser_rec[2] 	= 0;
//						ser_rec[3] 	= 0;
//					}
					m_br_work =  FALSE;
				}
				else if(jp_code == 0x08)					//关闭退出的通道
				{
					U_STO  = SET;							//初始没有备妥信号
					goto init;				
				}
			}

			work_sta = SET;									//

//			if( m_br_jkyk == TRUE  && icbase1 == 0 )//&& m_br_dcs == TRUE
//			{
//				U_STO = CLEAR;		//远控备妥信号
//			}
//			else
//			{
//				U_STO = SET;		//非远控、或者是远控,但是不是DCS方式
//			}
			if(  icbase1 == 0 )
			{
				U_STO = CLEAR;		//远控备妥信号
			}
			else
			{
				U_STO = SET;		//非远控、或者是远控,但是不是DCS方式
			}

			//如果属于遥控工作方式,即使在休息时间,也能进行通信
//			if(m_br_jkyk == TRUE && m_br_dcs == FALSE)
			if( m_br_dcs == FALSE)							//更改为远控近控都有通信操作
			{
				//----------------------------------------
				//连线状态下的开机,停机操作
				if( ser_rec[0] != 0xa5 && ser_rec[1] != m_get_jh )	//
				{
					m_r_in 		= 0;						//继续从零开始接收
					m_br_can_s 	= FALSE;	
					ser_rec[0]  = 0; 
					ser_rec[1]  = 0; 
					ser_rec[2]  = 0; 
					ser_rec[3]  = 0; 
					ES 			= SET;						//已经接收到发往本机的信息
					DE_S        = CLEAR;					//禁止发送信息
				}
				else if((m_r_in == ser_rec[3]) && m_r_in >3 )
				{
					ES = CLEAR;								//已经接收到发往本机的信息
					if( ser_rec[0] != 0xa5 || ser_rec[1] != m_get_jh )
					{
						//--------------------------  		仅仅是擦除,不做任何反应
						m_r_in 		= 0;					//继续从零开始接收
						ser_rec[0] 	= 0;
						ser_rec[1] 	= 0;
						ser_rec[2] 	= 0;
						ser_rec[3] 	= 0;
						ES 			= SET;					//已经接收到发往本机的信息
						goto exit_this;
					}

					c_c = ser_rec[0];
					for(z = 1; z < m_r_in -1; z++)
					{
						c_c += ser_rec[z];
						WDTCON     |= 0x20; 				// Set RWDT, other bits unaffected
						WDTCON     &= ~0x20; 				// Clear RWDT—watchdog reset				

					}					
					if(c_c == ser_rec[m_r_in - 1])			//判断累加和是否相等
					{
						//累加和正确,接收到正确的信息
						if( ser_rec[2] == 0x8d )
						{
							if(ser_rec[4] == 0xff && m_br_jkyk == TRUE && m_br_dcs == FALSE)
								m_br_work = TRUE;
							else if(ser_rec[4] == 0 && m_br_jkyk == TRUE && m_br_dcs == FALSE)
							{
								m_br_work = FALSE;
								U_BJ      = SET;			//用于上位机关闭报警
								icbase1   = 0;				//用于上位机关闭报警
							}
							fetch_succ();					//回应正确的通信
						}
						else if( ser_rec[2] == 0x0d)	    //要求状态
						{
							ser_rec[0] 	=  0x9A;
							ser_rec[1]  =  m_get_jh;
							ser_rec[2]  =  0x0d;
							ser_rec[3] 	=  0x12;			//17;
							ser_rec[4] 	=  0;				//一次电压
							ser_rec[5] 	=  0;				//
							ser_rec[6] 	=  0;				//一次电流
							ser_rec[7] 	=  0;				//
							ser_rec[8] 	=  0;				//二次电压
							ser_rec[9]  =  0;  				//二次电流
							ser_rec[10] =  0;				//
							ser_rec[11] =  0;				//导通角
							ser_rec[12] =  0;				//省掉火花率
							ser_rec[13] =  0;				//m_tempurature;	//油温
							ser_rec[14] =  icbase1;			//报警状态
							ser_rec[15] =  icbase3;         //工作状态
							ser_rec[16] =  0;         //工作状态

							//========================================================
							//发送相关的数据
							ES 			= CLEAR;
							DE_S        = SET;			// ADDING 2003-12-19
							TB8_0 		= 0;					
							TI_0 		= 0;

							for( z = 0 ;z < 16; z++ )
							{
								SBUF0 = ser_rec[z];
								while(!TI_0){};
								TI_0 = 0;

								ser_rec[16] += ser_rec[z];
							}
							SBUF0 = ser_rec[16];
							while(!TI_0){};
							TI_0 		= 0;
							SBUF0 = 0;
							while(!TI_0){};
							TI_0 		= 0;
							DE_S        = CLEAR;				// ADDING 2003-12-19

							m_r_in 		= 0;
							ser_rec[0] 	= 0;
							ser_rec[1] 	= 0;
							ser_rec[2] 	= 0;
							ser_rec[3] 	= 0;
							ES 		= SET;
						}
						else if( ser_rec[2] == 0x98)
						{

							//--------------------------------------------不写进内部数据区
							m_cur1_given 	= ser_rec[4]*256 + ser_rec[5] ; //用16进制格式
							m_get_vol2   	= ser_rec[6];
							m_cur2_climit	= ser_rec[7]*256 + ser_rec[8];	//用16进制格式
							m_get_dtj		= ser_rec[9];		        //用16进制格式
			 				m_get_hhl		= ser_rec[10];				//用16进制格式
							m_get_ljyw		= ser_rec[11];		        //用16进制格式
			 				m_get_gzfs		= ser_rec[12];				//用16进制格式

							fetch_succ();					//回应正确的通信
	
							if(m_get_gzfs ==1)
							{
							 	printf_hz(8, 0,":间歇供电  ");
								m_br_work_sty1 = 0;
								m_br_work_sty2 = 0;
								m_br_work_sty3 = 1;
							}
							else if(m_get_gzfs ==2)
							{
							 	printf_hz(8, 0,":定值火花率");
								m_br_work_sty1 = 0;
								m_br_work_sty2 = 1;
								m_br_work_sty3 = 0;
							}
							else if(m_get_gzfs ==3)
							{
							 	printf_hz(8, 0,":临界少火花");
								m_br_work_sty1 = 0;
								m_br_work_sty2 = 1;
								m_br_work_sty3 = 1;
							}
							else if(m_get_gzfs ==4)
							{
							 	printf_hz(8, 0,":脉冲供电  ");
								m_br_work_sty1 = 1;
								m_br_work_sty2 = 0;
								m_br_work_sty3 = 0;
							}
							else if(m_get_gzfs ==5)
							{
							 	printf_hz(8, 0,":最高平均值");
								m_br_work_sty1 = 1;
								m_br_work_sty2 = 0;
								m_br_work_sty3 = 1;
							}
							else if(m_get_gzfs ==6)
							{
							 	printf_hz(8, 0,":自动调节  ");
								m_br_work_sty1 = 1;
								m_br_work_sty2 = 1;
								m_br_work_sty3 = 0;
							}

							//重新写量程信息
							if(m_get_vol2 > 72 )
								m_get_vol2 = 72;

							if(m_get_cur2 < 1000)
							{
								display_zf(25,0,3,m_get_cur2,1);
								display_zf(21,0,2,m_get_vol2,1);
								printf_hz(23,0,"KV");
							}
							else
							{
								display_zf(24,0,4,m_get_cur2,1);
								display_zf(20,0,2,m_get_vol2,1);
								printf_hz(22,0,"KV");
							}


							//重新写量程信息
							if(m_get_cur2 < 1000)
							{
								display_zf(25,0,3,m_get_cur2,1);
								display_zf(21,0,2,m_get_vol2,1);
								printf_hz(23,0,"KV");
							}
							else
							{
								display_zf(24,0,4,m_get_cur2,1);
								display_zf(20,0,2,m_get_vol2,1);
								printf_hz(22,0,"KV");
							}
						}
					}
					else	fetch_fail();
				}
exit_this:		printf_hz(0,0,"远控");
			}

//			else if(m_br_jkyk == TRUE && m_br_dcs == TRUE )		//DCS  工作方式
			if(m_br_jkyk == TRUE && m_br_dcs == TRUE )		//DCS  工作方式
			{
				if( ACH7 == FALSE  && icbase1 == 0)	
				{
					m_br_work =	TRUE;
					U_STO     = CLEAR;	//远控状态,DCS方式下备妥信号
				}
				if( ACH7 == TRUE)	m_br_work =	FALSE;
				printf_hz(0,0,"远控");
				ES      = CLEAR;
			}
			else if(m_br_jkyk == FALSE)
			{
				U_STO       = SET;//CLEAR;//2004/12/11	//近控状态,DCS方式下无备妥信号
				printf_hz(0,0,"近控");
//				m_r_in 		= 0;
//				ser_rec[0] 	= 0;
//				ser_rec[1] 	= 0;
//				ser_rec[2] 	= 0;
//				ser_rec[3] 	= 0;
//				ES 			= CLEAR;
			}

			if(m_br_work ==	TRUE && icbase1 == 0 ) 
			{
		 		printf_hz(4, 0,"工作");
				U_STA 		= CLEAR;						//    -----正逻辑
//				U_STO 		= CLEAR;						//???????????????????????
			}
			else if( m_br_work == FALSE )
			{
				printf_hz(4, 0,"停机");
				U_STA = SET; //   -----正逻辑
				clszf();
				goto gon2;
			}
					
			ET0 		= 0;
			TR0 		= 0;
			U_DRV 		= SET;
			ET1 		= 0;
			TR1 		= 0;

			icbase0    &= 0x30;								//all kinds of flags
			icbase1    	= 0;
			icbase2    	= 0;
	 		printf_hz(5, 7,"            ");					//擦除报警的标志以及描述

			if(m_br_work == FALSE ) goto gon2;

			if(m_br_work == TRUE)
			{
				clszf();
				if(HS1_0 == FALSE)							//wa si signal
				{
					m_br_wsbj = TRUE;
					m_br_work = FALSE;
	 				printf_hz(5, 7,"瓦斯报警    ");
				}
				else
				{
					printf_hz(5, 7,"无            ");	
				}

				m_zkb_now       = m_get_zkb/2+1;
				m_set_interval 	= 6000/m_get_hhl;			//间隔的中断次数
				m_fsmc 			= m_get_mcfs-1;
				m_cur2_limit    = m_get_cur2+ m_get_cur2/9;

				m_pulse_count   = 0;
				m_detel_k       = m_get_cur2/100;			//--------
				m_tempurature   = 0;
				m_third_sec     = 0;
				m_hh_count 		= 0;
				m_int_count_rec = 7;						//记录火花之间的间隔

				m_br_reach  	= TRUE;//FALSE;					//最初的12秒定时标志
				m_br_fs 		= FALSE;					//at first ,it's mustn't lock wave to zero
				m_br_plc 		= FALSE;
				m_br_u2         = FALSE;
				m_br_zz         = FALSE;
				m_br_xy         = FALSE;
				U_BJ        	= SET;						//报警装置平时带电
				m_br_can_s 		= FALSE;					//可以发送回馈信息
				m_br_open       = FALSE;
				m_br_over8		= FALSE;

				m_int_count 	= 0;						//clear the count value of interrupt
				m_tc    		= 1600;
				m_tc_max   		= 2500;
				con_speed 		= 3;						//初始阶段的上升速度
				m_tc_old        = 3500;
				m_count_kkg_kl  = 0;

				m_vol2_new      = 0;
				m_send_ref      = 0;						//工作期间,数据发送的参考

				m_vol2_old_01   = 0;
				m_vol2_old_90   = 0;
				m_vol2_old_10   = 0;
				m_count_low 	= 0;
				m_count_plc     = 0;
				m_count_open    = 0;
				m_count_dl2     = 0;						//二次电流短路计数
				m_now_hhl       = 0;
				m_r_in          = 0;						//用于记录接收到的信息
				m_vol1          = 0;		

⌨️ 快捷键说明

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