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);