Jump to content

Fernando Rafael

Members
  • Content count

    57
  • Joined

  • Last visited

Community Reputation

0 Comum

About Fernando Rafael

  1. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Oi Icarof, o problema com PHP não era a escrita, mas sim a leitura (em ambiente Windows), o PHP sempre travava na Leitura, minha solução foi deixar o PHP com a escrita, e para os casos em que se faz necessário a leitura o Java entra em ação.
  2. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Vendo em muitos Fóruns, notei que o PHP tem bloqueios para leitura de portas seriais no Windows, sendo necessário configurar ou usar DLL (não encontrei tutoriais do tipo). Bem... Resolvi da forma mais aceitável diante da situação (ambiente Windows): Fiz um programa em JAVA (exportado em um arquivo .jar) que recebe os parâmetros da porta serial e efetua a leitura da mesma. Mas fiz de uma forma mais diretamente "ligada" ao PHP. Sabendo que o arquivo .jar pode ser executado pelo CMD passando até mesmo parâmetros por linha de comando, fiz com que o PHP acionasse esse arquivo pelo comando "exec" ou "passthru" e depois tratei o retorno no próprio PHP, acredito que dessa forma é bem melhor do que ficar criando arquivos .txt para ficar lendo depois... Então, sem mais delongas segue os fontes (JAVA e PHP): PHP: $comando_cmd="java -jar ler_serial.jar 9600 8 1 0 COM3 ENQ"; //Arquivo seguido dos parâmetros que serão capturados pelo arquivo .jar (separados por espaços). OBS: só coloquei parâmetros pois não quis criar um arquivo .jar para cada tipo de porta ou configurações e comandos (ENQ por exemplo serve apenas para saber qual comando será usando no arquivo .jar, deve haver alguma forma de executar os comandos no JAVA que estejam armazenados em uma variável, eliminando assim os "if" e "else" para cada instrução dentro do arquivo .jar). echo passthru($comando_cmd); //exibe o retorno. JAVA: import jssc.SerialPort; //Para funcionar é preciso adicionar no projeto uma biblioteca (usei essa: jSSC-2.7.0-Release.zip), vale pesquisar como adicionar, é fácil import jssc.SerialPortException; //Para funcionar é preciso adicionar no projeto uma biblioteca (usei essa: jSSC-2.7.0-Release.zip), vale pesquisar como adicionar, é fácil //Fonte sobre essa biblioteca: http://nakalabs.herokuapp.com/articles/arduinoAndJava.html public class Main { public static void main(String[] args) throws InterruptedException { //Parametros estáticos, caso não usem os valores passados por linha de comando /* int BAUD_RATE = 9600; int DATA_BITS = 8; int STOP_BITS = 1; int PARITY = 0; String SERIAL_PORT = "COM2"; */ //Armazena os parâmetros nas variáveis int BAUD_RATE = Integer.parseInt(args[0]); //9600 int DATA_BITS = Integer.parseInt(args[1]); //8 int STOP_BITS = Integer.parseInt(args[2]); //1 int PARITY = Integer.parseInt(args[3]); //0 String SERIAL_PORT = args[4]; //COM3 String COMANDO ="ENQ"; //Comando inicial, caso nada seja passado como parametro, vai executar um ENQ (muito comum em comunicação serial) if(args[5].equals("ENQ")){ //Serve apenas para comparar o parâmetro passado e executar algum comando previamente programado COMANDO = ""+(char)5; //Coloquei ""+ (aspas dupla concatenada) só para aceitar como String, pois nem todo comando é do tipo (char) no meu caso } else if(args[5].equals("BEL")){ //Outro comando, e assim vai... COMANDO = ""+(char)7+"p"; //Salientando que esses comandos são das minhas necessidades, isso vai depender do comando que o dispositivo esteja aguardando para retornar algo... } SerialPort serialPort = new SerialPort(SERIAL_PORT); try { //Os comandos "exec" e "passthru" capturam esses retornos, basta exibilos ao seu favor... System.out.println("Porta aberta: " + serialPort.openPort()); System.out.println("Parametros configurados: " + serialPort.setParams(BAUD_RATE, DATA_BITS, STOP_BITS, PARITY)); System.out.println("Enviado mensagem: " + serialPort.writeString(""+COMANDO+"")); //Aqui ele escreve o comando na porta Thread.sleep(1000); //Aguarda 1 segundo para ler a porta //System.out.println("Retorno: " + serialPort.readString()); //Retorno da porta em String System.out.println("Retorno: " + serialPort.readHexString("")); //Retorno da porta em Hexadecimal, Com "" (aspas dupla) no parâmetro, significa que não haverá espaços entre os valores retornados ou colocando qualquer caractere, servirá como separador. System.out.println("Porta fechada: " + serialPort.closePort()); } catch (SerialPortException ex){ System.out.println(ex); } } } Postei essa mesma solução no ACBR, Imaster e Devmedia. nos que suportarem anexos, colocarei também a biblioteca do JAVA zipada. Não sou bom em programação Java, caso alguém tenha melhorias para o código, ficarei muito grato... Vale visitar meu site: www.sisnorg.com (ainda em desenvolvimento, mas funcional para um possível contato comigo). Abraços a todos que me ajudaram nos mais diversos fóruns...
  3. Fernando Rafael

    Tem alguma forma de retirar esse espaço que fica entre os links?

    Vai depende de como você separou os links... se no HTML foi separado com espaços, vai ficar com este espaço, mas se for com um border-right: 5px; ai ele não fica (testei no meu).
  4. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Boa tarde, continuando as buscas... achei um comando para setar um timeOut no PHP (Colocar "stream_set_timeout($fp, 10);" depois de abrir a porta), mas não funcionou, continua carregando infinitamente... Achei um equivalente em powerShell, que sem o comando de timeOut fica rodando infinitamente... segue o cod: $port= new-Object System.IO.Ports.SerialPort COM6,9600,None,8,One $port.ReadTimeout = 10000 $port.Open() while($myinput = $port.ReadLine()) { $myinput } $port.Close() Mas não me retornou nada depois que entra em timeOut... Bem, estou usando um simulador de balança (filizola/toledo) juntamente com um simulador de porta serial, testo a conexão com um programa de monitoramento de porta ou com o PC Scale da Filizola, e neles eu tenho retorno.... OBS: o simulador de balança tem um botão que envia dados para a porta, sem a necessidade de escrever na porta para que a mesma retorne algo.
  5. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Oi boa tarde EdCesar. testei a classe indicada por você, mas sem sucesso... Segue o código completo: <?php include 'PhpSerial.php'; // Let's start the class $serial = new PhpSerial(); // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("COM6"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); // Then we need to open it $serial->deviceOpen(); // To write into $serial->sendMessage("Hello !"); // Or to read from $read = $serial->readPort(); // If you want to change the configuration, the device must be closed $serial->deviceClose(); // We can change the baud rate $serial->confBaudRate(9600); ?> Na linha: $serial->deviceOpen(); ele mostra o seguinte erro no navegador: Warning: Unable to open the device in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\balanca\PhpSerial.php on line 149 A classe que testei antes foi essa: https://www.phpclasses.org/browse/file/17926.html na qual retorna o seguinte erro, também quando se tenta ler algo (Linha: $read=$serial->readPort();): require "php_serial.class.php"; $serial = new phpSerial; $serial->deviceSet("COM6"); $serial->confBaudRate(9600); $serial->deviceOpen(); $serial->sendMessage(chr(5)); sleep(7); $read=$serial->readPort(); //tabém da erro ao executar a leitura $serial->deviceClose(); Retorno no navegador: Warning: Reading serial port is not implemented for Windows in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\balanca\php_serial.class.php on line 503 A porta funciona, pois consigo comunicar normal com outras aplicações, incluindo simuladores de balança, Serial Port Monitor e etc...
  6. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Testando um pouco mais, reparei que o PHP não trava quando abrimos a porta com permissão de leitura (w+, r, r+ e etc...), mas sim quando tentamos exibir seu retorno, nos seguintes comandos: fread($fp); ou fgets($fp); Também tentei limitar o tamanho em bytes da leitura, mas sem sucesso... : ( fread($fp, 1024); ou fgets($fp, 1024); Vi um cara dizendo que conseguiu usando comandos CMD via "exec" do PHP, mas não citou nenhuma fonte ou código....
  7. Fernando Rafael

    Leitura de porta serial (COM ou LPT) com PHP

    Estou tendo problemas com a leitura de porta serial com PHP, consigo facilmente escrever na mesma, mas sempre que no comando de abertura da porta eu coloco que haverá permissão de leitura o PHP trava e fica carregando infinitamente, e a porta fica bloqueada e só libera quando reiniciado o computador. Segue o cod: exec('MODE COM1:9600,n,8,1'); //seta configuração na porta COM $fp=fopen("COM1","r+b"); if(!$fp) { echo("Erro ao abrir a porta com1"); exit; } else { echo("COM1 aberta <br>"); } fwrite($fp,Chr(5)); //escrevendo valor na porta sleep(1); //pausa para retorno dos dados echo (fgets($fp)); fclose($fp); já tentei colocar: fopen("COM1", "r+b"); fopen("COM1", "r+t"); fopen("COM1", "r"); fopen("COM1", "w+"); fopen("COM1", "r+"); para escrever consigo normal, com o fopen("COM1", "w");. mas já para ler..... Notei que na internet tem muito sobre esse problema, inclusive falaram em permissões de usuário, sendo que nos casos em que conseguiram, estavam usando o Linux. Eu estou usando o W7 e W10 com PHP 5.2, se for o caso de permissões, como resolvo isso? preciso configurar mais alguma coisa no php.ini? Também já tentei usar uma classe: phpSerial Mas retorna o seguinte erro: Warning: Reading serial port is not implemented for Windows in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\balanca\php_serial.class.php on line 503
  8. Olá a todos, atualmente estou quebrando a cabeça com 3 campos da geração do XML de NFCE/NFE, são eles: <SignatureValue> , <DigestValue> e <X509Certificate>, como faço para gerar esses 3 campos? Procurei na internet, mas não achei nada que me ajude, gostaria de fazer 100% com php e de preferência manualmente (sem a utilização de classes prontas na qual é difícil de entender o código). Já tenho o certificado em PFX, e já gerei um certificado do tipo PEM. OBS 1: não precisam explicar ou mandar códigos de como inserir o conteúdo gerado nas tags <SignatureValue> e <X509Certificate>. OBS 2: O campo <DigestValue> notei em alguns fóruns que é um retorno da Sefaz, é correto isso? ,
  9. Fernando Rafael

    Como transmitir NFE / NFCE com PHP

    Oi bom dia, atualmente venho desenvolvendo um sistema de emissão de NFE/NFCE em PHP, já está operável (realiza as vendas, assina a XML com certificado e gera o arquivo). Mas preciso de ajuda para entender como funciona o processo de transmissão das mesmas para o governo, no site da Sefaz tem os links para qual serão transmitidas, mas não achei como é feita essa comunicação, quais as variáveis, como mandar o arquivo e etc... Já usei muitos sistemas de vendas que fazem isso, e também o Emissor de NFE do governo, tenho toda experiência operacional necessária, mas me falta essa experiência técnica. Quero muito me tornar um desenvolvedor de automação comercial. Agradeço muito a ajuda de vocês.
  10. Boa tarde, atualmente estou tendo um problema com alguns comandos que encontro na internet, sobre retornar linhas de um bloco de notas. Achei um comando que retorna apenas a primeira linha, e outro que retorna todas através de um laço de repetição. Mas preciso de algo mais especifico no qual eu diga a linha que quero e retorne o conteúdo, apenas isso... Preciso dessa forma pois é um volume de dados muito grande, laços são inviáveis, o valor que preciso sempre vão estar nas mesmas linhas, preciso de algo mais direto. Comando que achei que retorna apenas a primeira linha: @echo off set /p conteudo=<teste.txt echo. echo %conteudo% pause Comando para todas as linhas: for %%G IN ("teste.txt") DO ( type %%G ) Agradeço a ajuda, não sou bom em comandos CMD ou BAT...
  11. Fernando Rafael

    Retornar peso de balança Filizola Platina com PHP

    Oi Gabriel, obrigado pela indicação, não tenho como parar para avaliar esses dias, mas com certeza darei uma estudada no tópico que você indicou, notei que no exemplo é usado uma Filizola BP-15, tenho até um software fornecido pela Filizola (Filizola Scale) que serve justamente para retornar o peso e salvar em TXT. Esse mesmo programa tem vários modelos de balança da marca, mas nada de Filizola Platina. Pesquisando na internet vi um comentário alegando que balanças com impressor de etiquetas, não permitem esse tipo de retorno... mas não sei a procedência dessa informação . Outra informação: Consegui ligar para um telefone da Filizola, mas a atendente disse que a empresa faliu... todos os modelos ainda vendidos são pontas de estoque...
  12. Fernando Rafael

    Retornar peso de balança Filizola Platina com PHP

    Bom dia, estou com um "pequeno problema"... Tenho uma balança Filizola Platina 15kg (branca), na qual está conectada em um computador pela porta COM1, ela possui um sofware chamado SMART que envia e recebe dados da balança. O problema é que este programa não tem nenhuma função para retornar o PESO e permitir que outros softwares tratem a informação, o fabricante tem até um pequeno programa só para esse fim, porém não consta o modelo da minha balança nas configurações de comunicação (o mais estranho é que a minha é um modelo mais avançado que a maioria da lista, e não permite que eu faça isso???). Já achei várias pessoas conseguindo esse efeito com outros modelos de balança, mas nada que se iguale com a minha situação, o comando em PHP que cheguei mais próximo de algo foi esse: <?php exec('MODE COM1:9600,n,8,1'); //seta configuração na porta COM $fp=fopen("COM1","r+b"); if(!$fp) { echo("Erro ao abrir a porta com1"); exit; } else { echo("COM1 aberta <br>"); } fwrite($fp,Chr(5)); //escrevendo valor na porta sleep(1); //pausa para que a balança tenha tempo de retornar seus dados (peso) echo (fgets($fp)); fclose($fp); Entre a balança e o computador existe um aparelho que converte a comunicação COM em uma comunicação que minha balança interpreta (Opto - Conversor Rs232 / 485 - Balanças Filizola), o mesmo possui 2 Leds que indicam envio e recebimento de dados, quando rodo o Código, o led que indica envio de dados acende, porém não tenho retorno. Procurei qual seria o comando para ser enviado mas não encontrei, porém nos manuais de todos os modelos pedem que envie o comando "ENQ" em ASCII (representado por 5), em um dos modelos pedem para enviar o comando: <STX>SPPPPPPPUTE<CR><LF>, mas nada feito.... Não achei um manual do meu modelo com instruções desse comando, e não consegui um telefone do suporte Filizola que funcione.... Ficaria muito grato se me ajudassem... Não precisa ser especificamente em PHP, dês de que eu possa depois tratar a informação em qualquer linguagem.
  13. Boa tarde, estou com um problema, tenho uma página que ao ser carregada é exibida um alert, mas esta mesma página tem comandos em javascript que funcionan automáticos, mas os mesmos não funcionan enquando eu não der ok no alert. Existe alguma forma de deixar esse alert apenas como mensagem, não pararndo o resto da pagina de ser carregada ou funcionar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.