procedimiento IniSemaforos(
FicheroSemaforos: cadena;
CampoSemaforo: cadena;
CampoIdentificador: cadena;
FichEsGeneral: booleano;
TiempoEspera: entero;
TiempoReintento: entero);
Determina
la configuración del fichero de semáforos para el posterior uso del
procedimiento CambiaSemaforo. |
Los
semáforos configurados mediante este procedimiento y que se utilizan mediante
el procedimiento CambiaSemaforo
aportan un método para asegurarse de que una determinada operación no podrá
realizarse nunca a la vez desde dos o más puestos distintos.
Para usar
los semáforos debe crearse un fichero exclusivamente para ellos, que puede ser
tanto de proyecto como general y que debe estar formado por dos campos, uno de
tipo cadena de longitud 30 o superior (para el código del semáforo) y otro de
tipo numérico y de longitud 9 (para un identificador interno del puesto de
trabajo).
Al
respecto de lo dicho en el párrafo anterior, en FicheroSemaforos
se informa del nombre del fichero que se va a usar para los semáforos; en CampoSemaforo, del código del campo cadena que
guardará el código del semáforo; en CampoIdentificador,
del código del campo numérico que guardará el identificador interno de puesto y
en FichEsGeneral, de si FicheroSemaforos es un fichero general (cierto)
o bien un fichero de proyecto (falso).
Es
importante tener en cuenta que para que los semáforos funcionen adecuadamente,
el fichero de semáforos debe tener un índice único
definido sobre el campo de tipo cadena (el campo definido por CampoSemaforo).
Adicionalmente,
en el parámetro TiempoReintento se
indican los milisegundos que deben esperarse antes de reintentar poner en verde
un semáforo que ha sido puesto en rojo por otro puesto; mientras que en TiempoEspera se indican los milisegundos que de
transcurrirse sin que el semáforo se ponga en verde se entenderá que se trata
de un semáforo de un puesto que finalizó inesperadamente, por lo que se dará
como inválido y quedará anulado.
Si no se
llama a este procedimiento, entonces CambiaSemaforo entiende que los
valores a usar son los que corresponden a los valores por defecto de los
parámetros de este procedimiento, los cuales se indican junto con la
descripción de los parámetros, a continuación.
G77_SEMAFOROS
VAR contador, idReg, Puesto: entero; (...)INICIO // Configuración de los semáforosIniSemaforos('BLOQUEOS', 'C1', 'C2', falso, 100, 5000); (...) // Calcular próximo número de pedido, incrementar el contador y guardarlo. // Se usa el semáforo CONTADORPEDIDOS para que dos puestos no puedan nunca // realizar esta operación a la vez y así no pueda haber números de pedido // repetidos.CambiaSemaforo('CONTADORGENERAL', SmfRojo); Contador := ValorTablaCampanya('CONTADORES', 'C2', 'C1', 'CONTADORPEDIDOS'); inc(Contador); AsignarValorTablaCampanya('CONTADORES', 'C2', Contador, 'C1', 'CONTADORPEDIDOS'); CambiaSemaforo('CONTADORGENERAL', SmfVerde); // Grabar pedidoNuevoRegistro('PEDIDOS', idReg); AsignarValorRegistro(idReg, 'C1', Contador); (...) GrabarRegistro(idReg); LiberarRegistro(idReg);FIN. |