php在部分應用偶爾和串列埠直接通信,需要和rs232、rs485介面上的資料進行通訊。在網路上搜尋眾多解決方案,出現許多問題,這裡總結一下php與串列通訊的方法大全。
php與串列埠通信,基本上有兩種途徑
1.透過php擴充dio。
下載dio擴充:http://www.cyberspice.org.uk/downloads/dio-0.0.4rc3.tgz
在php.ini開啟dio擴充。
dio開啟後可以透過dio_open dio_read等函數進行通訊。但dio預設只是在linux下的,好像pecl也有編譯後的php_dio.dll,但我在win下測試其實無法正常使用,可能是我php版本太高(5.3.3)。
dio擴展如果能打開,網路上自然有很多實例
<?php $c = stream_context_create(array('dio' => array(‘data_rate’ => 115200, ‘data_bits’ => 8, ‘stop_bits’ => 1, ‘parity’ => 0, ‘is_canonical’ => 1))); if (PATH_SEPARATOR != “;”) { $filename = “dio.serial:///dev/ttyS0″; } else { $filename = “dio.serial://COM1″; } ?>
2.PHP_SER擴展
這是第三方擴展,可以在php5 .3.3上正常使用,我測試結果是比較穩定,提供了單字節流通訊和非同步通訊。對於單字節流通訊我還專門請教了作者,發現原來可以透過loop讀取資料流的。
要注意的是ser_write()的資料是字元型,但是ser_read()的資料則是10進位。所以發送的時候最好轉換為hex,接收後由十進位再轉為十六進位才能正常使用。
還有就是php_ser作為第三方擴展,作者是收費的。免費版本沒有功能限制,只是每次收發位元組數不能超過1024位元組。
function x_get_cgqbh() { $str = ‘at+ver?’; $str = hexToStr($str); ser_open( “COM1″, 9600, 8, “None”, “1″, “None” ); if (ser_isopen()) { return “opened, post data ……”; }else{ return false; } ser_write(“$str”); sleep(1); $str = ser_read(); ser_close(); return $str; }
php_ser位址:忘了,回頭補上
==========================
#你想透過寫php語言去操縱如視頻,音頻或計算機的串併口設備?現在是可以變成現實了。使用php-serial這個開源專案 ,可以很容易地去實作。
例如只要呼叫deviceSet()方法,將串列埠名傳遞進去就可以了,接著就可以使用簡單的讀與寫的方法了,例如:
#p_code img { border: 0px none ; } 2ec584dc50901809fa59f0899375f5f3 deviceOpen(); $serial -> sendMessage( ' Sending a message to the port! ' ); $serial -> deviceClose(); ?>
推薦學習:php影片教學
以上是PHP如何使用串口通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!