[bcn-pm] Problemilla con arrays
Josep M. Mendoza
josep at mendoza-ginesta.net
Mon Feb 14 10:00:02 PST 2005
Hola,
Es la primera vez que hago una consulta a la lista, aunque llevo bastante
tiempo observando, espero que mi consulta no sea muy banal...
Resulta que tengo una subrutina en un módulo tal que así:
-- code --
sub writeMultipleRegisters(){
my ($self, $Address, $Length, @data) = @_;
my $wordCount = $Length;
my $byteCount = ($Length * 2);
carp ("Length of data array error") unless (@data == $byteCount);
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);
my ($count, $values);
for ($count = 0; $count < @data; $count++){
$values = $values.$self->toChars($data[$count]);
}
# Send request
$socket->send($transactionID.$protocolID.$dataLength.$unitID.$requestCode.
$requestAddress.$requestLength.$requestBytes.$values);
# Read response
my $responseCode = ord($requestCode);
my (@response, $byte);
while (sysread($socket, $byte, 1) == 1) {
push (@response, ord($byte));
$responseCode = $response[7] if exists $response[7];
last if ($responseCode != ord($requestCode));
last if (@response == 12);
}
return 0, $response[8] if ($responseCode != ord($requestCode));
return 1;
}
-- code --
y resulta que funciona, pero al llamarla desde un script tal que así:
-- code --
#!/usr/bin/perl
use Net::ModbusRTU;
use strict;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $serverConnection = new Net::ModbusRTU ('172.26.0.130') or die "Connection
error.";
$serverConnection->debug(0);
my ($result) = $serverConnection->writeMultipleRegisters(120, 3, $hour, $min,
$sec);
($result) && (print "done.\n") || (print "error\n");
$serverConnection->close();
undef $serverConnection;
-- code --
resulta que me da el error siguiente:
jmendoza at odin:~/Desenvolupament/Net-ModbusRTU$ ./write-time
Length of data array error at ./write-time line 12
y llevo como un rato buscando y probando y no hay manera de averiguar que
puñetas es, el resto de las rutinas me funcionan bien y tengo otros módulos
en los que empleo el mismo sistema para pasar arrays y no me da ningun error.
Si alguien me puede echar un cable,se lo agradeceré...
Saludos,
--
Josep M. Mendoza
http://mendoza-ginesta.net
More information about the Barcelona-pm
mailing list