[bcn-pm] Problemilla con arrays

Josep M. Mendoza josep at mendoza-ginesta.net
Mon Feb 14 12:52:10 PST 2005


A Dilluns 14 Febrer 2005 19:59, Xavier Noria va escriure:
> On Feb 14, 2005, at 19:00, Josep M. Mendoza wrote:
[...]
> De acuerdo al codigo $byteCount es 6, que es distinto de 3. Es un bug?
> Para darle vueltas al tema, por que pasas $Length? No seria calculable
> a partir de @data? $Length = @data/2?

Ciertamente "es" el bug @data son words no bytes. Arreglado como así:

sub writeMultipleRegisters(){
  my ($self, $Address, @data) = @_;
  my $wordCount = @data;
  my $byteCount = (wordCount * 2);
  my $transactionID = chr(0).chr(0);
  my $protocolID = chr(0).chr(0);
  my $dataLength = $self->toChars( (7 + $byteCount) );
  my $unitID = chr(0);
  my $requestCode = chr(16);
  my $requestAddress = $self->toChars($Address);
  my $requestLength = $self->toChars($Length);
  my $requestBytes = chr($byteCount);
  [...]

Si calculo $wordCount a partir de @data no tengo que comprobar y/o advertir de 
ninguna incongruencia.

El $byteCount es porque en el protocolo hay que darle la dirección inicial, la 
longitud del área a escribir y los bytes de datos que se envían en el 
telegrama y los dos valores de longitud y el de bytes siempre están 
relacionados 1 a 2.

A veces la cosa más evidente es la que más cuesta ver...

Muchas gracias.

-- 
Josep M. Mendoza
http://mendoza-ginesta.net


More information about the Barcelona-pm mailing list