TASTEK RS485配置

1、登录rs485页面

 

现场数据采集: 

部署开机启动:

windows2008中,进入gpedit.msc-->计算机配置-->windows设置-->脚本-->启动-->选择脚本路径

代码日志:

第一列:写死了

第二列:探测器id

第三列:探头地址编号1-8,按照ia,ib,ic,i,ta,tb,tc,tn,前面不能为空,如没有电流及剩余电流,则1-4代表ta,tb,tc,tn,再如没有ia,ib,ic,则1-5代表i,ta,tb,tc,tn,再如没有i,则1-7代表ia,ib,ic,ta,tb,tc,tn

第四列:数据,温度或者电流A或者剩余电流mA----(剩余电流监测,数值小于30mA会显示0,电流监测,数值小于60A会显示为0)

第五列:告警值(正常、告警、掉线--通讯故障,故障--探头有问题)

衡阳东阈值设置:电流互感器额定电流600A,报警阈值为120%即720A,是根据互感器的额定电流,系统自动匹配阈值;温度探头,手动设定阈值为80℃;剩余电流,手动设定阈值为800mA,最大测量为2550mA;

报警复位:现场一旦超出阈值则报警,数据状态为”报警“,除非手动消除,否则即使数据正常还会显示“报警”,手动消除后,则显示“正常”

程序代码:

<?php

//确保在连接客户端时不会超时
set_time_limit(0);
 
//服务器
$ip   = '192.168.1.122';
$port = 10001;

//数据库
$sql_ip       = "localhost:3306";
$sql_username = "root";
$sql_password = "root";


$global_buf_tmp=" ";



/*----------------    socket    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) 
{
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
else
{
	echo "socket_create\tok!\n";
}
 
if(($ret = socket_bind($sock,$ip,$port)) < 0) 
{
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
else
{
	echo "socket_bind\tok!\n";
}
 
if(($ret = socket_listen($sock,4)) < 0) 
{
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
else
{
	echo "socket_listen\tok!\n";
}
 

/*----------------    mysql    -------------------*/
$sql_connect = mysql_connect($sql_ip ,$sql_username,$sql_password); 
if(!$sql_connect)
{
	die('Could not connect: ' . mysql_error());
	$sql_connect = mysql_connect($sql_ip ,$sql_username,$sql_password);
}
else//成功
{
	echo "mysql_connect\tok!\n";	
}


while(true)
{
	if (($msgsock = socket_accept($sock)) < 0) 
	{
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    }
	while(true)
	{
		$buf=socket_read($msgsock,$port,PHP_BINARY_READ);
		if(!$buf)
			break;

		if(strlen($buf) ==6 && $global_buf_tmp != $buf)
		{
			//头标识:0xa5
			$cmd = bin2hex($buf[0]);
			echo $cmd ;echo "\t";
			
			//探测器地址
			$tk =hexdec(bin2hex($buf[1]));
			echo $tk;echo "\t";
		
			//探头地址
			$tt =hexdec(bin2hex($buf[2]));
			echo $tt;echo "\t";
			
			//值
			$value =hexdec(bin2hex($buf[4]))*256 + hexdec(bin2hex($buf[3]));
			echo $value;echo "\t";

			$state="错误";
			//状态
			$st =bin2hex($buf[5]);
			    if($st=='00'&& $cmd=='a5')$state="正常";
			elseif($st=='0a'&& $cmd=='a5')$state="故障";
			elseif($st=='51'&& $cmd=='a5')$state="报警";
			elseif($st=='21'&& $cmd=='a1')$state="掉线";
	
			echo $state;echo "\t";
			
			//故障和掉线,值都设为0
			if($state == "故障" || $state == "掉线")
			{
				$value=0;
			}
			
			//获取日期和时间
			$time=date("Y-m-d H:i:s");//例2019年07月08日15时01分59秒

			echo $time;echo "\n";
			if(!$sql_connect)//数据库连接不成功
			{
				die('Could not connect: ' . mysql_error());
				$sql_connect = mysql_connect($sql_ip ,$sql_username,$sql_password);
			}
			elseif(($cmd == 'a1' || $cmd == 'a5') && $tt < 9 && $state != "错误")//防止帧错误
			{		
				mysql_select_db("unis_smart_site_hyd", $sql_connect);
				mysql_query("set names 'gbk'");//gbk格式,才能输入中文

				if($tk<7)//不同的探测器,探头类型排列不同
				{
					switch($tt)
					{
						case 1:mysql_query("UPDATE tt_value SET ia='$value',ia_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 2:mysql_query("UPDATE tt_value SET ib='$value',ib_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 3:mysql_query("UPDATE tt_value SET ic='$value',ic_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 4:mysql_query("UPDATE tt_value SET ta='$value',ta_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 5:mysql_query("UPDATE tt_value SET tb='$value',tb_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 6:mysql_query("UPDATE tt_value SET tc='$value',tc_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 7:mysql_query("UPDATE tt_value SET tn='$value',tn_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						default:break;
					}
				}
				else
				{
					switch($tt)
					{
						case 1:mysql_query("UPDATE tt_value SET i='$value',i_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 2:mysql_query("UPDATE tt_value SET ta='$value',ta_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 3:mysql_query("UPDATE tt_value SET tb='$value',tb_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 4:mysql_query("UPDATE tt_value SET tc='$value',tc_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						case 5:mysql_query("UPDATE tt_value SET tn='$value',tn_state='$state',update_time='$time' WHERE  detector_id= '$tk' ");break;
						default:break;
					}				
				}
			}
		}
		$global_buf_tmp=$buf;//重新赋值
	
	}
	socket_close($msgsock);	
}
socket_close($sock);

猜你喜欢

转载自blog.csdn.net/kutianya518/article/details/120939617