本示例使用设备:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com)
=34
return GetResponseData(4,$DispStr); //生成回应数据
break;
case hexdec('0xD1') or hexdec('0xDF') : //接收ID读卡器上传的读卡号数据、ID卡离开读卡器的信息
if($bytes[0]==hexdec('0xD1')){
$Dispinf="数据解析:ID读卡器读取卡号,";
}else{$Dispinf="数据解析:ID卡离开读卡器,";}
$Ipaddstr=$bytes[1].".".$bytes[2].".".$bytes[3] .".".$bytes[4] ;
$Machine=($bytes[5]+$bytes[6]*256) ;
$frame=($bytes[7]+$bytes[8]*256) ;
$Card16H="";
for($i=9;$i<14;$i++)
{
$Card16H=$Card16H.substr('00'.dechex($bytes[10+$i]),-2);
}
$CardNo=$bytes[9] & 0xff;
$CardNo=$CardNo+($bytes[10] & 0xff) *256;
$CardNo=$CardNo+($bytes[11] & 0xff) *65536;
$CardNo=$CardNo+($bytes[12] & 0xff) *16777216;
$CardNo=substr("0000000000".$CardNo,-10);
$SerialNum ="";
for($i=14;$i<$len;$i++){
$SerialNum=$SerialNum.substr('00'.dechex($bytes[$i]),-2);
}
$Dispinf=$Dispinf."设备IP:".$Ipaddstr.",机号:".$Machine.",数据包序号:".$frame.",16进制卡号:".$Card16H.",转十进制卡号:".$CardNo.",硬件序列号:".$SerialNum;
echo $Dispinf."\n\n";
//此处加入业务对数据库的查、增、删、减等操作
$DispStr="卡号:".$CardNo." ".substr(date('Y-m-d h:i:s', time()),0,16)." "; //全屏显示信息长度>=34
return GetResponseData(4,$DispStr); //生成回应数据
break;
default:
}
}
//根据情况生成不同的回应数据
function GetResponseData($respcode,$DispStr)
{
$sdata = array();
switch($respcode){
case 0: //回只应蜂鸣响声
$sdata[0] = hexdec('0x96'); //指令码
$sdata[1] = 0; //机号低位,
$sdata[2] = 0; //机号高位,高低位都为0表示任意机号
$sdata[3] = 1; //蜂鸣响声代码,取值范围0-12,代表12种不同的蜂鸣响声
$sendBuf = '';
for ($i = 0; $i < 4; $i++) {
$sendBuf = $sendBuf . chr($sdata[$i]);
}
return $sendBuf;
break;
case 1: //回应只开启继电器
$sdata[0] = hexdec('0x78'); //指令码
$sdata[1] = 0; //机号低位,
$sdata[2] = 0; //机号高位,高低位都为0表示任意机号
$sdata[3] = hexdec('0xF0'); //继电器代码 F0表示全部继电器、F1表示1号继电器 、F2表示2号继电器、F3表示3号继电器......
$sdata[4] = hexdec('0x2C'); //继电器开启延时低位16进制
$sdata[5] = hexdec('0x01'); //继电器开启延时高位16进制,高低位取值FFFF表示继电器一直开启
$sendBuf = '';
for ($i = 0; $i < 6; $i++) {
$sendBuf = $sendBuf . chr($sdata[$i]);
}
return $sendBuf;
break;
case 2: //回应只关闭已开启的继电器
$sdata[0] = hexdec('0x78'); //指令码
$sdata[1] = 0; //机号低位,
$sdata[2] = 0; //机号高位,高低位都为0表示任意机号
$sdata[3] = hexdec('0xE0'); //继电器代码 E0表示全部继电器、E1表示1号继电器 、E2表示2号继电器、E3表示3号继电器......
$sdata[4] = hexdec('0x2C'); //继电器关闭延时低位16进制
$sdata[5] = hexdec('0x01'); //继电器关闭延时高位16进制,高低位取值FFFF表示继电器一直关闭
$sendBuf = '';
for ($i = 0; $i < 6; $i++) {
$sendBuf = $sendBuf . chr($sdata[$i]);
}
return $sendBuf;
break;
case 3: //回应蜂鸣响声+文字显示
$sdata[0]=hexdec('0x5A'); //指令码
$sdata[1]=0; //机号低位
$sdata[2]=0; //机号高位,高低位都为0表示任意机号
$sdata[3]=2; //蜂鸣声代码,取值范围0-12,代表12种不同的蜂鸣响声
$sdata[4]=20; //显示时长,单位秒,取值范围0-255,取值255时表示永久显示
$sendBuf='';
for($i=0;$i<5;$i++)
{
$sendBuf=$sendBuf.chr($sdata[$i]);
}
$sendBuf=$sendBuf.$DispStr;
return $sendBuf;
break;
case 4: //回应蜂鸣响声+继电器开关+文字显示+播报TTS语音
$SpeakStr="[v10]"; //[v10]是语音大小,取值范围0-16,可加在任何地方,其他语音策略请看文档说明
$SpeakStr=$SpeakStr."刷卡成功,感谢您使用我们的网络读卡器!";//要播报的TTS语音,每条指令最大不能超过126字符
$Splen = strlen($SpeakStr); //TTS语音长度
//
$sdata[0]=hexdec('0x5C'); //指令码
$sdata[1]=0; //机号低位
$sdata[2]=0; //机号高位,高低位都为0表示任意机号
$sdata[3]=2; //蜂鸣声代码,取值范围0-12,代表12种不同的蜂鸣响声
$sdata[4]=hexdec('0xF0'); //继电器代码 F0表示全部继电器 F1表示1号继电器 F2表示2号继电器
$sdata[5]=hexdec('0x2C'); //继电器开启时长低位
$sdata[6]=hexdec('0x01'); //继电器开启时长高位
$sdata[7]=hexdec('0x14'); //显示保留时间,单位为秒,为0xFF时表示永久显示
$sdata[8]=0; //在显示屏中的哪个位置开始
$sdata[9]=hexdec('0x22'); //显示字符串长度 为全屏显示为 34 个字符
$sdata[10]=$Splen; //语音长度
$suffixStr=chr(hexdec('0x55')).chr(hexdec('0xaa')).chr(hexdec('0x66')).chr(hexdec('0x99')); //固定的抗干扰后缀
$sendBuf='';
for($i=0;$i<11;$i++)
{
$sendBuf=$sendBuf.chr($sdata[$i]);
}
$sendBuf=$sendBuf.substr($DispStr,0,34).$SpeakStr.$suffixStr; //最长显示34个字符
return $sendBuf;
break;
default:
}
}
//获取本机IP地址------------------------------------------------------------------------------------------------------------------------
function get_local_ip()
{
$preg = "/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/";
//获取操作系统为win2000/xp、win7的本机IP真实地址
$Netdriv=array();
exec("ipconfig", $out, $stats);
if (!empty($out)) {
foreach ($out AS $row) {
if (strstr($row, "IP") && strstr($row, ":") && !strstr($row, "IPv6")) {
$tmpIp = explode(":", $row);
if (preg_match($preg, trim($tmpIp[1]))) {
$Netdriv[]=trim($tmpIp[1]);
echo trim($tmpIp[1])."\n";
}
}
}
}
//获取操作系统为linux类型的本机IP真实地址
//exec("ifconfig", $out, $stats);
//if (!empty($out)) {
// if (isset($out[1]) && strstr($out[1], 'addr:')) {
// $tmpArray = explode(":", $out[1]);
// $tmpIp = explode("", $tmpArray[1]);
// if (preg_match($preg, trim($tmpIp[0]))) {
// return trim($tmpIp[0]);
// }
// }
//}
if (!empty($Netdriv)) {
return $Netdriv[0]; //如果有多张网块,可以修改数组取值来绑定相应的网卡
}else{
return '127.0.0.1';
}
}
?>