вот как выглядит скрипт для меркурия 200.02
<?php $service_port = 10010; $address = "192.168.1.160"; //адрес преобразователя интерфейсов $server = "192.168.1.20"; //адрес сервера MajorDoMo $cmd = array (0x00, 0x01, 0x0B, 0xF0, 0x63, 0x50, 0x17); /*команда счетчику на запрос текущих данных, первые 4 байта - адрес счетчика (у меня 068592, это последние 6 цифр серийного номера), 2 последних байта - контрольная сумма*/ $hex = ""; for ($i=0; $i<count($cmd); $i++){$hex .= chr($cmd[$i]);} //Формируем запрос для счетчика $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //Создаём TCP/IP сокет $result = socket_connect($socket, $address, $service_port); //Пытаемся соединиться с '$address' на порту '$service_port' $result = socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0)); //Устанавливаем таймаут на сокете не более 5 секунд socket_write($socket, $hex, strlen($hex)); //Отправляем запрос $result = socket_read($socket, 14); //Читаем ответ // Результат получаем в шестнадцатиричном виде, но его написание соответствует десятичному значению. // Например 0x22 0x87 = 228,7 вольт. Переводим результат в человеческий вид. $Uv = round(((ord($result[5])>>4)*100)+((ord($result[5])&0x0f)*10)+(ord($result[6])>>4)+((ord($result[6])&0x0f)/10),1); $Ia = round(((ord($result[7])>>4)*10)+(ord($result[7])&0x0f)+((ord($result[8])>>4)/10)+((ord($result[8])&0x0f)/100),2); $Pv = round(((ord($result[9])&0x0f)*10)+(ord($result[10])>>4)+((ord($result[10])&0x0f)/10)+((ord($result[11])>>4)/100)+((ord($result[11])&0x0f)/1000),3); socket_close($socket);//Закрываем сокет
//Значения Uv, Ia, Pv теперь можно передать в базу $result=file_get_contents("http://".$server."/objects/?object=sensorAmper&op=m&m=EleChanged&t=".$Ia); $result=file_get_contents("http://".$server."/objects/?object=sensorVatt&op=m&m=EleChanged&t=".$Pv); $result=file_get_contents("http://".$server."/objects/?object=sensorVolt&op=m&m=EleChanged&t=".$Uv);
//и сохранить значения в лог-файл в формате: 23.07.2013 21:43:59 1 21.38 $FilePath='C:\LogFolder\'; //имя папки где лежит лог-файл $FileName='logfile.log'; //имя файла $str1=date('d.m.Y H:i:s').' 1 '.$Ia."\r\n"; //формат записи значения силы тока $str2=date('d.m.Y H:i:s').' 2 '.$Pv."\r\n"; //формат записи значения мощности $str3=date('d.m.Y H:i:s').' 3 '.$Uv."\r\n"; //формат записи значения напряжения $F=file_get_contents($FilePath.$FileName); // Читаем файл if ($F==false) mkdir($FilePath); //Если его не существует или путь не верен, то создаем file_put_contents($FilePath.$FileName,$str1); //Добавляем данные в файл file_put_contents($FilePath.$FileName,$str2); file_put_contents($FilePath.$FileName,$str3); ?>
|