Balance RS232

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Balance RS232

Re: Balance RS232

par xlP1TUF0lx » 17 sept. 2012, 08:39

Merci pour ta réponse.
Mais j'ai un soucis avec le $i
quand je lance le script j'ai ce message à chaque fois su'il passe dans la boucle :
"Notice: Undefined variable: i in D:\Mes Documents\php\EasyPHP-12.1\www\rs232\test.php on line 27"
Donc je rajoute $i en parametre de la fonction lectureBalance($i) et j'ai une autre erreur :
"Warning: Missing argument 1 for lectureBalance::lectureBalance(), called in D:\Mes Documents\php\EasyPHP-12.1\www\rs232\test.php on line 44 and defined in D:\Mes Documents\php\EasyPHP-12.1\www\rs232\test.php on line 10"
et la meme que la premiere à la première boucle...

EDIT:
Pour le poids j'ai réussi à le récupérer en modifiant ça :
[...]
else
                {
                        echo "Port ouvert.".'<br>';
                        $val = fread($fp,15);
                        // echo $val;
                        
                        //Lecture du poids
                        $poids = substr($val,5); //MODIFICATION DE CES 2 LIGNES
			$poids = substr($poids,0,-2); //MODIFICATION DE CES 2 LIGNES
                        echo "poids = ".$poids.'<br>';
                        echo "compteur = ".$i.'<br>';
           
                        //Fermeture Port
                        if(fclose ($fp) === true)
                        {
                                echo "Port Fermé".'<br>';
                                return True;
                        }
                        else
                        {
                                $this->tabErreur[] = "Pb fermeture port";
                                return False;
                        }
                }
[...]

Re: Balance RS232

par Aureusms » 14 sept. 2012, 17:26

1. Est tu sûr que ta balance ne renvoi pas de données de fermeture de port (Mettler est très fort pour cela)
2. Et si tu boucle sur l'ouverture par une interogation de classe ?
<?php
$te = 'mode com1: BAUD=1200 PARITY=P data=7 stop=1 xon=off'; //je ne sais pas à quoi cela te sert...
    

class lectureBalance
{
	public $numeroCom = "COM1:";
	public $tabErreur = array();
	
	public function lectureBalance ()
	{
		$fp = fopen ($this->numeroCom, "w+");
		if (!$fp)
		{
			$this->tabErreur[] = "Erreur ouverture port.";
			return FALSE;
		}
		else
		{
			echo "Port ouvert.".'<br>'.'<br>';
			$val = fread($fp,15);
			echo $val;
			
			//Lecture du poids
			$poids = substr($val,5,-2);
			echo "poids = ".$poids.'<br>';
			echo "compteur = ".$i.'<br>'.'<br>';
	   
			//Fermeture Port
			if(fclose ($fp) === true)
			{
				echo '<br>'.'<br>'."Port Fermé";
				return True;
			}
			else
			{
				$this->tabErreur[] = "Pb fermeture port";
				return False;
			}
		}
	}
}

$masseBalance = new lectureBalance;
for ($i=0;$i<5;$i++)
	if (!$masseBalance->lectureBalance())
		foreach ($masseBalance->tabErreur as $erreur)
			echo $erreur;
?>

Balance RS232

par xlP1TUF0lx » 14 sept. 2012, 16:20

Bonjour,
pour une histoire de pratique, je développe j'essaie de développer un site en php et d'y récupérer des valeurs envoyées par une balance connectée en RS232.
MON SITE EST EN LOCAL
J'ai bien la valeur qui s'affiche à l'écran mais je souhaiterai effectuer plusieurs pesées successivement.
Pour ça j'utilise la fonction fopen() et à chaque fois que je veux récupérer un poids, je dois actualiser ma page or je voudrais stocker toutes les pesées dans un tableau par exemple.
Une boucle for suffit largement SAUF que je n'ai qu'une valeur de correcte (la première).
Voilà mon code :
<?php
'mode com1: BAUD=1200 PARITY=P data=7 stop=1 xon=off';
    $fp = fopen ("COM1:", "w+");
	
    if (!$fp) 
	{
        echo "Erreur ouverture port.".'<br>'.'<br>';
    } 
	else 
	{
		echo "Port ouvert.".'<br>'.'<br>';
		
		
		for ($i=0;$i<5;$i++)
		{
		//lecture de la trame
		$val = fread($fp,15);
		
		echo $val;
		//Lecture du poids
		$poids = substr($val,5,-2);
		echo "poids = ".$poids.'<br>';
		echo "compteur = ".$i.'<br>'.'<br>';
		}
	
		//Fermeture Port
                if(fclose ($fp)==1)
		      echo '<br>'.'<br>'."Port Fermé";
	        else
		      echo '<br>'.'<br>'."Pb fermeure port";
	}
?>
Donc là, le site attend bien les 5 pesées sinon il reste bloqué mais voilà l'affichage :
Port ouvert.

poids = 77.7
compteur = 0

poids = + 77
compteur = 1

poids = +
compteur = 2

poids = +
compteur = 3

poids = g +
compteur = 4



Port Fermé
Le poids est de 77,7 et je l'envois 5 fois..

EDIT: avec un array() qui récupère les valeurs dans la boucle, l'affichage donne :
Array ( [0] => 77.7 [1] => + 77 [2] => + [3] => + [4] => g + )