Windows üzerinde PHP ile seri comm

7 Cevap php

Ben windows RS232 seri port ile iletişim kurmak için bir yol arıyorum. Ben 2 tamamen ücretsiz değildir one net çözümler, (fonksiyonu üzerine kasıtlı gecikmeler tanıtır) ve another Windows üzerinde sınırlı yeteneği ile bulduk. İkincisi sadece okumak için değil, Windows üzerinde bir COM port yazabilirsiniz.

Bir. Dll derlenmiş beri (... aksi takdirde insanlar sadece gecikme düzenlemek ve satın alamazsınız, mantıklı) birinci çözeltinin koduna bakmak değil ve ikincisi sadece fopen kullanmak gibi görünüyor () tek bir akış yapacağını gibi, yazma için ona port açmak ve daha sonra fwrite () için. Ama görünüşe göre hiçbir şey döndürür freading.

Yerine php5module php-cgi modülü kullanmak için Apache gerektirmez rağmen, ilk çözüm yaptığımız gibi mümkün olduğunu biliyorum.

Herhangi bir fikir?

7 Cevap

Tamam, çocuklar. Yukarıdaki her çözüm, verimsiz ya da çok iş ya da değildir.

Sadece PHP-DIO library (dio_fcntl, dio_open, dio_read, dio_write, dio_seek, ...) kullanabilirsiniz. O da var the PHP manual's entry for DIO:

Bu PECL paketi varsayılan mevcut değildir. Eğer 5.2.6 daha fazla PHP 5.2.x varsa Windows için bunu elde etmek için, bir ZIP parçası olarak indirebilirsiniz:

Bu bağlantıların her http://www.deveblog.com/index.php/download-pecl-extensions-for-windows/ bulundu

Here is the build from Linux, sadece almak ve phpize / configure / make / make install bir şey yapmak.

Ben bir Apache oturumda kullanılması gerekip gerekmediğini biliyorum, ama bunun için gitmeyin.

Bu mücadele için en kolay yolu (örneğin, C + + gibi) başka bir dilde bir program yazmak ve ardından system() ile php script çalıştırmak olacaktır. C + + İletişim I / O yapıyor saçmadır.

Bu çalıştırılabilir vb php, tarafından işletilen izin vermek için onu yapılandırmak için sunucu yeterli erişiminiz varsayar

Başka bir olası yol w32api_register_function() or ffi gibi bir şey aracılığıyla Win32 API kullanın ve ardından serial communications calls, Windows altında işe almak için kullanmak olacaktır.

Sen gibi, bir dos komutu ile com ayarlamanız gerekir:

$output = `mode COM1: BAUD=115200 PARITY=N data=8 stop=1 XON=off TO=on `;  

Bir sonraki komutu php dos komutu yürütür:

echo"$output";  

Kaynak id oluşturun:

$fp = fopen('COM1', 'r+');

if(!$fp){

 echo"Port not accessible";

}else{

 echo"Port COM1 opened successfully";

}

Noktasına yazın:

$writtenBytes = fputs($fp, "Hello");

echo"Bytes written to port: $writtenBytes";

Limanından okuyun:

$buffer = fgets($fp);

echo"Read from buffer: $buffer";

Belki birileri fgets sorun bana yardımcı. Bu tam bir dakika boyunca orada yığınlar TO = veya yığınları orada sonsuza varsa TO = off eğer. Bir DOS uzman yardımcı olabilir belki bu yüzden bir "MODE COM" bir seçenek gibi görünüyor.

Belki iyisi, fgets yerine fgets newline kadar yakalar beri, bir, fgetc kullanmalısınız. Yeni bir satır karşılaştı değilse tampon boşalana kadar orada bir ya kadar, bu engelleyebilir. Bir dakikalık gecikme aradan üzerindeki tampon yıkama pencereleri olabilir.

Ben aynı sorunu vardı ve ben Arduino geliştiricileri ile popüler olan bu çözüm üzerinde geldi zaten kendi php uzantısı yazma kabul - 'serproxy' (. Birçok yerde buldum, yani http://www.lspace.nildram.co.uk/freeware.html), bir TCP kurar seri port için / yığını ve bana onunla iletişim kurmak için php soket işlevlerini kullanmak için izin verdi.

Başka bir seçenek pencerelerde ActiveX üzerinden bir nesneyi kullanmaktır. Windows COM çoğunlukla ticari, birkaç seri nesneler vardır. Ayrıca. Net tabanlı nesneyi ve de COM kullanmak için kayıt edebilirsiniz. Tabii ki, bu bir seri arabirim gerekir gibi, bir COM denetimi kaydetmek için sunucu üzerinde kontrole sahip tahmin yok.

Bu Web üzerinden kullanım için ise başka bir konudur kaynak çekişme olduğunu. Bu bir seri yazıcı için ise, örneğin, daha sonra bir yazdırma kuyruğu yöneticisi doğrudan iletişim üzerinde en iyi seçenek olacaktır.

Com bağlantı noktasını kullanarak sms ile uğraşmak istiyorsanız o zaman burada en ünlü php serial communication class by Rémy Sanchez ile google sample code. Here is a thread ki bu konuyu içerir.