Si no te devuelve nada, es que no hay nada en la base de datos que concuerde con la instrucción SQL que has puesto...
¿Qué es trama{UID}? ¿No será $trama{UID}?
Fuente:0
UID SP103
FEC 060926
TIE 090000
VAL A
LAT 5525,1234
SLA S
LON 12525,1234
SLO E
ALT 00895
La cadena sql tiene : INSERT INTO partes_3 SET Northing = '-9089209.99698948', longitud = '12525,1234E', fuente = '0', uid = 'SP103', validez = 'A', Easting = '5088.02311980753', latitud = '5525,1234S', altitud = '00895', dia = '060926', hora = '09:00:00';
En sth hay: DBI::st=HASH(0x81a2d98)
Fuente:0
ALT 00895
La cadena sql tiene: INSERT INTO partes_3 SET Northing = '0', longitud =' ', fuente ='0', latitud = ' ', Easting = '833991.704418281', altitud = '00895';
En sth hay: DBI::st=HASH(0x81adb08)
my($fuente,) = $trama =~ /^#(0|2)/;
$trama{FUE} = $fuente;
print "Fuente:$fuente\n";
my $fuente;
($fuente, $trama) = $trama =~ /(?:#(0|2)($campos)+)/;
$trama{FUE} = $fuente;
print "Fuente:$fuente\n";
Cambia a partir de TIE, cuando llegue esta cadena debo insertar en la tabla ordenes#xUIDxxxxxFECxxxxxxTIExxxxxx@ODxxxxx@OTxxx@ORxxxx...@OPx
Josmanue escribiste:Primero debo distinguir entre dos cadenas recibidas, la cadena que hemos tratado hasta ahora y por otra parte la cadena '$uid', es decir el '$' seguido de los 5 caracteres del uid, por ejemplo: '$SP103'. Esta cadena es un especie de 'estoy vivo' que se envía cada 30 seg. ( el parte, (la cadena que tratábamos hasta ahora) puede tardar más en enviarse. Si recibe la cadena de siempre, ejecutará el programa, en cambio si recibe esta nueva cadena, entonces sólo preguntará si hay alguna orden para enviarle y ejecutamos la parte del envio de ordenes. Supongo que lo hago con un if pero (como siempre) no se muy bien que expresion regular tengo que poner o si hay que guardar esta cadena en alguna variable '@campos2' o algo así para sacar el campo UID.
Bucle de espera a recibir algo dentro de un tiempo
Leer lo recibido
Si lo recibido coincide con /\$SP103/,
ejecutar 'estoy vivo'
Si lo recibido coincide con una trama,
ejecutar 'procesar trama'
Si ...
Repetir Bucle
Josmanue escribiste:Y por otra parte, tengo que completar el tratamiento de las ordenes,
- en el envío de ordenes falta actualizar el campo ack_orden de la tabla de 0 a 1, para ello una vez enviado, la maquina devolverá la cadena '@OC1uid', por ejemplo '@OC1SP103'. si el programa recibe esta cadena, entonces tengo que poner el campo ack_orden = '1'.
Vuelvo a no saber muy bien qué debo poner para identificar esa cadena.- El programa también debe recibir ordenes, con lo cual hay que hacer el tratamiento de otra cadena, y este creo que es el problema más grande, porque la cadena comienza igual que la otra, en este caso es:
Cambia a partir de TIE, cuando llegue esta cadena debo insertar en la tabla ordenes#xUIDxxxxxFECxxxxxxTIExxxxxx@ODxxxxx@OTxxx@ORxxxx...@OPx
- Código: Seleccionar todo
UID en origen_orden
FEC en fecha_recepcion
TIE en hora_recepcion
@OD en destino_orden
@OT en tipo_orden
@OR en orden (este campo tiene longitud variable, ya que es la orden en sí)
@OP en prioridad
¿Como puedo hacer para tratar esta nueva cadena?
$sql2=("UPDATE ordenes SET ack_orden='1' WHERE destino_orden = 'UID'")
while (my @canal = $s->can_read(180))
{
## Lectura de la trama #############################################################
my $linea = <>; #con esto leemos la cadena por la entrada estándar
chomp $linea; #y le quitamos el final de línea.
#print "$linea\n";
if($linea = 'estoy vivo')
{
sacar su 'UID';
si hay orden para ese 'UID' mandar la orden
}
else if($linea='@OC1SP103')
{
sacar su 'UID'
actualizar ack_orden = '1' para ese 'UID'
}
else if($linea= #xUIDxxxxxFECxxxxxxTIExxxxxx@ODxxxxx@[email protected]@OPx)
{
separar los campos
construir la sentencia sql para insertar los campos
insertar los campos en la tabla ordenes
}
else
{
tratamiento de la trama
}
}
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados