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

📄 181jk9090.php

📁 用PHP写的网络通信服务器程序。用在远程数据采集系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
	      		$msval = 0.05306*$msval;
	      	}
	      		
	      	if ($fsuitem =='fsu050m003') {
	      		$msval = 0.05306*$msval;
	      	}
	      		
	      	if ($fsuitem =='fsu050m004') {
	      		$msval = $msval/9.84;
	      	}
	      		
	      	if ($fsuitem =='fsu050m005') {
	      		$msval = 1.07*$msval;
	      	}
	      			      		
// 临时使用倍数表结束	      	

	      
	      // 获得测量最大值和发生时间
        $msmaxtime = "msmaxtime".$i;
	      $msmaxval = "msmaxval".$i;
	      if ($msinsert) {	// $msperiod 限定的时间内收到的第一个值等于最大值
	        $$msmaxval = $msval;
	        $$msmaxtime = date("Y-m-d H:i:s");
	      }else{ 
	      	// 和原来的最大值比较
	      	if ($$msmaxval < $msval) {
	      		$$msmaxtime = date("Y-m-d H:i:s");
	          $$msmaxval = $msval;
	          }
	      }


	      // 获得测量最小值和发生时间	      
	      $msmintime = "msmintime".$i;
	      $msminval = "msminval".$i;
	      if ($msinsert) {	// $msperiod 限定的时间内收到的第一个值等于最小值
	      $$msminval = $msval;
	      $$msmintime = date("Y-m-d H:i:s");	
	      }else{
	      	// 和原来的最小值比较
	      	if ($$msminval > $msval) {
	      		$$msmintime = date("Y-m-d H:i:s");
	          $$msminval = $msval;
	        }
	      }

	      // 获得平均值
	      $msvalsum = "msvalsum".$i; //第$i 个测量值总和变量名
	      $$msvalsum += $msval; //第$i 个总和
	      $msvalcount = "msvalcount".$i; // 第$i 个计数器变量名
	      $$msvalcount ++ ;
	      $msvalavg = "msvalavg".$i; //第$i 个平均值变量名
	      $$msvalavg = $$msvalsum / $$msvalcount; //第$i 个平均值



	// $msperiod 限定的时间内收到的第一组数据插入,以后更新	      
	      if ($msinsert) {
	      
	      $query = sprintf("INSERT INTO  `%s` (ItemID ,maxval,maxtime,minval,mintime,average,flag) 
	      VALUES ('%s','%s','%s','%s','%s','%s','%s') ",
	 		    mysql_real_escape_string($fsuId),
	 		    mysql_real_escape_string($fsuitem),
			    mysql_real_escape_string($$msmaxval),
			    mysql_real_escape_string($$msmaxtime),
			    mysql_real_escape_string($$msminval),
			    mysql_real_escape_string($$msmintime),
			    mysql_real_escape_string($$msvalavg),
			    mysql_real_escape_string($msstart)); 
	      }else {
	    	$query = sprintf("UPDATE  `%s` 
	    	SET maxval= '%s',maxtime= '%s',minval= '%s',mintime= '%s',average= '%s'
	       WHERE ItemID = '%s' AND flag = '%s'",
			    mysql_real_escape_string($fsuId),
			    mysql_real_escape_string($$msmaxval),
			    mysql_real_escape_string($$msmaxtime),
			    mysql_real_escape_string($$msminval),
			    mysql_real_escape_string($$msmintime),
			    mysql_real_escape_string($$msvalavg),
			    mysql_real_escape_string($fsuitem),
			    mysql_real_escape_string($msstart)); 
	      }
	    	     //  echo $query."\n"; 
	      mysql_query($query) or die("Invalid query: " . mysql_error());
        
        // 将测量数据更新到实时表rtvaldata
        $query_rtval = sprintf("UPDATE  `rtvaldata` 
	    	SET Value= '%s',time= NOW() WHERE ItemID = '%s' ",
			    mysql_real_escape_string($msval),
			    mysql_real_escape_string($fsuitem)); 
			  mysql_query($query_rtval) or die("Invalid query: " . mysql_error());

      } //解析出 $measuresum 个记录。 for 循环结束
	//  Send response 
		  $response = "#VOK#";
  		socket_write($msgsock, $response, strlen($response)); 
     	//  检查计时器 
		 $bb = time() - $msstart;
		  // echo "DELTATIME ".$bb."\n";
     if ($bb < $msperiod) {
       	$msinsert = FALSE ;
      }else{
      	$msinsert = TRUE ;
// 将最大值最小值数组置零	    
for ($i=0; $i < $measuresum; $i++) { 
$msvalsum = "msvalsum".$i;
$$msvalsum = 0;
$msvalcount = "msvalcount".$i;
$$msvalcount = 0;
$msminval = "msminval".$i;
$$msminval = 0;
$msmaxval = "msmaxval".$i;
$$msmaxval = 0;
}

      }
      
    // 继续查找剩余$buf中的匹配字符串
      $buf = substr($restbuf,((strpos($restbuf,"#"))+1));//用掉一段,裁掉一段
	      
        continue;
    }	



// "#ALARM*fsu056*LEVEL=1,001=1*#"
   if (substr($buf,0,7) == '#ALARM*') {
   	  $restbuf=substr($buf,14);
    	// resolve data
      $level = substr($restbuf,6,1);
    	$fsuitem = $fsuId.'m'.substr($restbuf,8,3);
	    $alval = substr($restbuf,12,(strpos($restbuf,"*")-12));
	    $nowtime = date("Y-m-d H:i:s");
	    // echo "LEVEL=".$level."  ItemID=".$fsuitem."  Alarmval=".$alval."\n";
	    // echo $buf."\n";     


// 临时使用倍数表开始
	
	      	if ($fsuitem =='fsu050m001') {
	      		$alval = 0.05349*$alval;
	      	}
	      	if ($fsuitem =='fsu050m002') {
	      		$alval = 0.05349*$alval;
	      	}
	      		
	      	if ($fsuitem =='fsu050m003') {
	      		$alval = 0.05349*$alval;
	      	}
	      		
	      	if ($fsuitem =='fsu050m004') {
	      		$alval = $alval/9.348;
	      	}
	      		
	      	if ($fsuitem =='fsu050m005') {
	      		$alval = 1.07*$alval;
	      	}
	      			      		
// 临时使用倍数表结束	      



	    // 根据告警级别定义
	  switch ($level) {
      case 9:  //控制结果告警
	       if ($alval == '1' ) {
	          $alval = "控制成功";
	         } else  {  
	         $alval = "控制失败";
	         }
	      $fsuitem = $fsuId.'c'.substr($restbuf,8,3);
	      $query = sprintf("INSERT INTO  `alarmhisdata` (ItemID ,AlarmText,AlarmLevel,AlarmTime) VALUES ('%s','%s','OPEVENT',NOW()) ",
	                 mysql_real_escape_string($fsuitem),
	                 mysql_real_escape_string($alval)); 
	      mysql_query($query) or die("Invalid query: " . mysql_error());
	      
	      //更新实时告警表alarm
	     $query = sprintf("UPDATE `alarm` SET `AlarmLevel` = 'OPEVENT',`AlarmText` = '%s' 
	                       WHERE `ItemID` = '%s' ",
	 			      		mysql_real_escape_string($alval),
	 				      	mysql_real_escape_string($fsuitem)); 
	 		 mysql_query($query) or die("Invalid query: " . mysql_error()); 				
	      $response = "#AOK#";
  	    socket_write($msgsock, $response, strlen($response));   
        break;
      case 1:
        $AlarmLevel = "OPEVENT";
        break;
      case 4:
        $AlarmLevel = "NORMAL";
        break;
      case 3:
        $AlarmLevel = "MAIN";
        break;
      case 2:
        $AlarmLevel = "FATAL";
        break;    
      case 5:
        $AlarmLevel = "NOALARM";
        break;  
      case 6:
        $AlarmLevel = "NOALARM";
        break;      
      default:
        $AlarmLevel = "NOALARM";
    }

	
     	
     // 正常告警,先查询是否第一次告警
     $query = sprintf("SELECT * FROM `alarmhisdata` WHERE `ItemID` = '%s' AND `memo` = 'temp' AND `AlarmLevel` = '%s'",
     mysql_real_escape_string($fsuitem),
     mysql_real_escape_string($AlarmLevel)); 
     $result = mysql_query($query) or die("Invalid query: " . mysql_error());

    if (mysql_num_rows($result) == 0) {
	//是第一次告警,insert date into alarmhisdata
	  $query = sprintf("INSERT INTO  `alarmhisdata` (ItemID ,AlarmLevel,AlarmValue,AlarmTime,EndTime,memo) VALUES ('%s','%s','%s',NOW(),NOW(),'temp') ",
	    mysql_real_escape_string($fsuitem),
	    mysql_real_escape_string($AlarmLevel),
	    mysql_real_escape_string($alval)); 
	  mysql_query($query) or die("Invalid query: " . mysql_error()); 
			} else {
    $row = mysql_fetch_array($result, MYSQL_ASSOC) ;
	  $alarmid =$row["AlarmHisID"];
    $endtime = $row["EndTime"];
    $pptime= strtotime($nowtime) - strtotime($endtime);
	    if ($pptime > $lifetime) {
		// 超过特定时间(由$lifetime定义),将原有告警设为旧告警
		  $query = sprintf("UPDATE `alarmhisdata` SET `memo` = 'END' WHERE `AlarmHisID` = '%s' AND `AlarmLevel` = '%s'",
	 					mysql_real_escape_string($alarmid),
	 					mysql_real_escape_string($AlarmLevel)); 
	 		mysql_query($query) or die("Invalid query: " . mysql_error()); 				
	  //插入新告警 ,insert date into alarmhisdata
	  $query = sprintf("INSERT INTO  `alarmhisdata` (ItemID ,AlarmLevel,AlarmValue,AlarmTime,EndTime,memo) VALUES ('%s','%s','%s',NOW(),NOW(),'temp') ",
	     mysql_real_escape_string($fsuitem),
	     mysql_real_escape_string($AlarmLevel),
	     mysql_real_escape_string($alval)); 
	  mysql_query($query) or die("Invalid query: " . mysql_error());
			 } else {
			//没超过特定时间,update endtime
			$query = sprintf("UPDATE `alarmhisdata` SET `EndTime` = NOW(),`EndValue`='%s' 
			WHERE `AlarmHisID` = '%s'",
	 					mysql_real_escape_string($alval),
	 					mysql_real_escape_string($alarmid)); 
	 		mysql_query($query) or die("Invalid query: " . mysql_error()); 
			}
		}		    
	//更新实时告警表alarm
	$query = sprintf("UPDATE `alarm` SET `AlarmLevel` = '%s',`AlarmValue` = '%s' ,`AlarmTime`=NOW()
	WHERE `ItemID` = '%s' ",
	 					mysql_real_escape_string($AlarmLevel),
	 					mysql_real_escape_string($alval),
	 					mysql_real_escape_string($fsuitem)); 
	 		mysql_query($query) or die("Invalid query: " . mysql_error()); 				

	//  Send response 
	  $response = "#AOK#";
  	socket_write($msgsock, $response, strlen($response)); 
     // 继续查找剩余$buf中的匹配字符串
      $buf = substr($restbuf,((strpos($restbuf,"#"))+1));//用掉一段,裁掉一段
      continue;
    }	
/*
// "#RTVAL*fsu001*001=1.35,002=1.55,#"
   if (substr($buf,0,7) == '#RTVAL*') {
      $restbuf = substr($buf,14);
      $fsuId = substr($buf,7,6);
	    $measuresum = substr_count($restbuf, '=')  ;
      for ($i=0; $i < $measuresum; $i++) {
	       $fsuitem = $fsuId.'m'.substr($restbuf,0,3);
	       $msval = substr($restbuf,4,(strpos($restbuf,",")-4));
	       $nowtime = time();
	       $restbuf = substr($restbuf,((strpos($restbuf,","))+1));
	// update values
	       $query = sprintf("UPDATE  `rtmeasure` SET `rtval`='%s',`time`= '%s' WHERE `id` = '%s'",
	 		      mysql_real_escape_string($msval),
			      mysql_real_escape_string($nowtime),
			      mysql_real_escape_string($fsuitem)); 
	        mysql_query($query) or die("Invalid query: " . mysql_error()); 
        }
      pcntl_alarm ( 90);// 定时器复位
   // 继续查找剩余$buf中的匹配字符串
      $buf = substr($restbuf,((strpos($restbuf,"#"))+1));//用掉一段,裁掉一段
        continue;
    }	
		
   if (!$buf = trim($buf)) {
     continue;
	  }	
*/
// 调试用	
   if ($buf == 'quit') {
	socket_close($msgsock);
      exit;
    }
 } //$buf 长度 < 3 ,继续接收数据   
	 
	} //大循环结束 
	//end of while(1)
	 // break 2 come here 
	exit(0); 
     }  // fi ($pid == 0)
	socket_close($msgsock); //关闭父进程
	// 关闭父进程
	//捕捉僵尸进程	
	while(pcntl_waitpid(-1,$staturs,WNOHANG) > 0);
} while (true); //主进程结束
mysql_free_result($result);
socket_close($sock);
mysql_close($con);
?> 

⌨️ 快捷键说明

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