Pergunta

Eu estou procurando uma maneira de se comunicar com a porta serial RS232 COM no Windows. Eu encontrei 2 soluções na net, um que não é totalmente livre (introduz deliberar atrasos na função) e outra com capacidade limitada no Windows. Este último só pode escrever a uma porta COM no Windows, não ler.

Eu não posso olhar para o código da primeira solução, uma vez que é compilado em um arquivo .dll (faz sentido, caso contrário, as pessoas podem simplesmente editar o atraso e não comprá-lo ...) eo segundo parece apenas para uso fopen () para abrir a porta e fwrite mais tarde () para isso por escrito, assim como um faria a um córrego. Mas, aparentemente, freading ele retorna nada.

Eu sei que é possível, como a primeira solução fez isso, embora exija Apache para uso módulo php-cgi em vez de php5module.

Todas as idéias?

Foi útil?

Solução

Todas as soluções acima é ou trabalho ineficiente ou muito.

Você pode simplesmente usar o PHP-DIO biblioteca (dio_fcntl, dio_open, dio_read, dio_write, dio_seek, ...). É também na a entrada do manual do PHP para DIO :

Este pacote PECL não está disponível por padrão. Para obtê-lo para o Windows se você tiver PHP 5.2.x maior do que 5.2.6, você pode baixá-lo como parte de um ZIP:

Ambos os links foram encontrados em http: // www.deveblog.com/index.php/download-pecl-extensions-for-windows/

Aqui é a compilação do Linux , basta obtê-lo e fazer o phpize / configure / make / make install coisa.

Eu não sei se ele deve ser usado em uma sessão de Apache, mas ir para ele.

Outras dicas

A maneira mais fácil de resolver este seria escrever um programa em outro idioma (como C ++) e, em seguida, executá-lo a partir de seu script php com system(). Fazendo Comm I / O em C ++ é trivial.

Isso pressupõe que você tem acesso suficiente para o servidor para configurá-lo para permitir que o executável a ser executado pelo php, etc.

Outra forma possível seria usar a API Win32 através de algo como w32api_register_function() ou ffi e use comunicação serial chamadas para fazê-lo funcionar no Windows.

Eu tive o mesmo problema e já pensou em escrever a minha própria extensão php quando me deparei com esta solução, que é popular entre os desenvolvedores do Arduino - 'serproxy' (encontrado em muitos lugares, ou seja, http://www.lspace.nildram.co.uk/freeware.html ) conjuntos nofollow até uma pilha TCP de / para as portas seriais e me permitiu usar as funções de soquete php se comunicar com ele.

Você precisa configurar a porta COM usando um DOS-like comando.

Por exemplo, a seguinte linha executa o comando através do PHP:

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

Para exibir os resultados que você pode usar:

echo "$output"; 

Criar a ID de recurso:

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

if (!$fp)
{
      echo "Port not accessible";
}
else
{
     echo "Port COM1 opened successfully";
}

Escreva-port:

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

echo"Bytes written to port: $writtenBytes";

Leia a partir da porta:

$buffer = fgets($fp);

echo "Read from buffer: $buffer";

Talvez alguém pode me ajudar com o problema fgets. Empilha lá por exatamente um minuto se TO=on, ou pilhas lá para sempre se TO=off. Parece ser uma opção "MODE COM" então talvez um DOS especialista pode ajudar.

Talvez em vez de fgets, deve-se usar fgetc, desde a captura fgets até o newline, enquanto capturas fgetc um único personagem. Se uma nova linha não é encontrado, ele pode bloquear até que haja uma ou até que o buffer é lavada. O atraso de um minuto pode ser janelas rubor seu buffer em um intervalo.

Outra opção é usar um objeto via ActiveX em janelas. Existem vários objetos de série, principalmente comerciais para COM no Windows. Você também pode expor um objeto baseado em .NET e registrá-lo para uso COM bem. Claro, isso não presumo que você tem controle sobre o servidor para registrar um controle COM, como você precisaria de uma interface serial.

Outra questão é a contenção de recursos se isto é para uso via Web. Se isto é para uma impressora serial, por exemplo, em seguida, um gerenciador de filas de impressão seria sua melhor opção sobre a comunicação direta.

Se você quer lidar com sms usando a porta COM, então aqui é o mais famoso class comunicação serial php por Rémy Sanchez com google code amostra . Aqui está uma discussão que inclui o assunto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top