国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP實(shí)現(xiàn)連接設(shè)備、通訊和發(fā)送命令的方法

2024-05-04 23:39:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了PHP實(shí)現(xiàn)連接設(shè)備、通訊和發(fā)送命令的方法,涉及php基于socket實(shí)現(xiàn)設(shè)備連接及數(shù)據(jù)通信的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了PHP實(shí)現(xiàn)連接設(shè)備、通訊和發(fā)送命令的方法。分享給大家供大家參考。具體如下:

開(kāi)發(fā)的BS架構(gòu)的軟件(PHP),需要跟設(shè)備進(jìn)行通訊,在此記錄一下,歡迎各位指正:

1. 采用php socket技術(shù)使用TCP/IP連接設(shè)備

參數(shù)$service_port 連接端口

參數(shù)$address 發(fā)送IP地址

參數(shù)$in 發(fā)送命令

 

 
  1. function Send_socket_connect($service_port, $address, $in) { 
  2. //創(chuàng)建 TCP/IP socket$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket!"); 
  3. //設(shè)置超時(shí)時(shí)間 
  4. $timeout = 2; 
  5. $time = time(); 
  6. //設(shè)置非阻塞模式 
  7. @socket_set_nonblock($socket); 
  8. //超時(shí)判斷 
  9. while (!@socket_connect($socket, $address, $service_port)) { 
  10. $err = socket_last_error($socket); 
  11. // 連接成功,跳出循環(huán) 
  12. if ($err === 10056) { 
  13. break
  14. //連接失敗,判斷超時(shí)時(shí)間,停止 
  15. if ((time() - $time) >= $timeout) { 
  16. socket_close($socket); 
  17. print('網(wǎng)絡(luò)異常,請(qǐng)檢查網(wǎng)絡(luò)連接!!'); 
  18. exit(); 
  19. // 刷新頻率(250毫秒) 
  20. usleep(250000); 
  21. //設(shè)置阻塞模式 
  22. @socket_set_block($socket); 
  23. //發(fā)送命令到設(shè)備 
  24. socket_write($socket, $in, strlen($in)); 
  25. //關(guān)閉連接 
  26. socket_close($socket); 

Send_socker_xdcoder $buffer為返回值

 

 
  1. function Send_socket_xdcoder($service_port, $address, $in) { 
  2. //創(chuàng)建 TCP/IP socket 
  3. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket!"); 
  4. //設(shè)置超時(shí)時(shí)間 
  5. $timeout = 2; 
  6. $time = time(); 
  7. //設(shè)置非阻塞模式 
  8. @socket_set_nonblock($socket); 
  9. //超時(shí)判斷 
  10. while (!@socket_connect($socket, $address, $service_port)) { 
  11. $err = socket_last_error($socket); 
  12. // 連接成功 
  13. if ($err === 10056) { 
  14. break
  15. //連接失敗,判斷超時(shí)時(shí)間,停止 
  16. if ((time() - $time) >= $timeout) { 
  17. socket_close($socket); 
  18. echo "<script>alert('網(wǎng)絡(luò)異常,請(qǐng)檢查網(wǎng)絡(luò)連接!!');</script>"
  19. exit(); 
  20. // 刷新頻率(250毫秒) 
  21. usleep(250000); 
  22. //設(shè)置阻塞模式 
  23. @socket_set_block($socket); 
  24. //發(fā)送命令到設(shè)備 
  25. socket_write($socket, $in, strlen($in)); 
  26. //接收設(shè)備命令返回?cái)?shù)據(jù) 
  27. $buffer = socket_read($socket, 1024, PHP_NORMAL_READ); 
  28. //關(guān)閉連接 
  29. socket_close($socket); 
  30. //輸出返回值 
  31. return $buffer; 

2. 采用php socket技術(shù)使用UDP協(xié)議連接設(shè)備,實(shí)現(xiàn)通訊和發(fā)送命令

參數(shù)$service_port 連接端口

參數(shù)$address 發(fā)送IP地址

參數(shù)$in 發(fā)送命令

 

 
  1. function Send_socket_connect_udp($service_port, $address, $in) { 
  2. //采用php socket技術(shù)使用UDP協(xié)議連接設(shè)備 
  3. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
  4. @socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 2, "usec" => 0)); 
  5. //發(fā)送命令 
  6. @socket_sendto($socket, $in, strlen($in), 0, $address, $service_port); 
  7. @socket_recvfrom($socket, $buffer, 1024, MSG_WAITALL, $address, $service_port); 
  8. //關(guān)閉連接 
  9. if (empty($buffer)) { 
  10. echo "<script>alert('網(wǎng)絡(luò)異常,請(qǐng)檢查網(wǎng)絡(luò)連接?。?#39;);</script>"

Send_socket_xdcoder_udp $buffer 為返回值

 

 
  1. function Send_socket_xdcoder_udp($service_port, $address, $in) { 
  2. //采用php socket技術(shù)使用UDP協(xié)議連接設(shè)備 
  3. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
  4. @socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 2, "usec" => 0)); 
  5. //發(fā)送命令 
  6. @socket_sendto($socket, $in, strlen($in), 0, $address, $service_port); 
  7. @socket_recvfrom($socket, $buffer, 1024, MSG_WAITALL, $address, $service_port); 
  8. //關(guān)閉連接 
  9. socket_close($socket); 
  10. if (!empty($buffer)) { 
  11. return $buffer; 
  12. else { 
  13. echo "<script>alert('網(wǎng)絡(luò)異常,請(qǐng)檢查網(wǎng)絡(luò)連接!!');</script>"

3. 采用RS232串口技術(shù)連接設(shè)備,實(shí)現(xiàn)通訊和發(fā)送命令

參數(shù)$com 串口號(hào)

參數(shù)$baudratr 波特率

參數(shù)$in 發(fā)送命令

 

 
  1. function rs232_connect($com, $baudrate, $in) { 
  2. @set_time_limit(10); 
  3. //使用 'windows下設(shè)置竄口參數(shù)'; 
  4. exec("mode " . $com . " BAUD=" . $baudrate . " PARITY=n DATA=8 STOP=1 odsr=off"); 
  5. // "打開(kāi)端口串口$com"; 
  6. $f = @fopen($com, 'w+'); 
  7. //判斷串口是否正常打開(kāi) 
  8. if (!$f) { 
  9. //echo "<script>alert('Error when open $com!!');</script>"; 
  10. die("Error when open $com"); 
  11. //向串口發(fā)送數(shù)據(jù); 
  12. fwrite($f, $in); 
  13. //關(guān)閉端口  
  14. fclose($f); 
  15. //串口操作結(jié)束 

還有一個(gè)關(guān)于命令16進(jìn)制轉(zhuǎn)換的:

 

 
  1. function hexToStr($hex) { 
  2. $string = ""
  3. for ($i = 0; $i < strlen($hex) - 1; $i+=3) { 
  4. $string.=chr(hexdec($hex[$i] . $hex[$i + 1])); 
  5. return $string; 

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 醴陵市| 鹿邑县| 甘谷县| 大理市| 沭阳县| 邻水| 怀来县| 辽阳县| 全南县| 东山县| 绥化市| 莆田市| 涿鹿县| 西安市| 来凤县| 凤台县| 准格尔旗| 阿拉尔市| 牡丹江市| 六枝特区| 蒲城县| 晋江市| 白河县| 贵州省| 东台市| 桐城市| 汝阳县| 雷州市| 镇康县| 横山县| 清苑县| 嘉祥县| 昌宁县| 怀集县| 华宁县| 兴国县| 富裕县| 临汾市| 榆社县| 淮滨县| 蕲春县|