En el manual de Programación Pawn del PLC:
http://slicetex.com/hw/stx80xx/docs/STX80XX-MP-PLC-AX_CX_DX.pdfEstán las descripciones completas de las funciones Pawn que utilizamos a continuación para responder sus dudas.
Por ejemplo para activar 4 alarmas que se repiten todos los días a una hora particular haces:
PlcMain()
{
// Activar Alarma 1.
TimeAlarm1SetEvent(17,0,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 2.
TimeAlarm1SetEvent(15,33,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 3.
TimeAlarm1SetEvent(21,52,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 4.
TimeAlarm1SetEvent(23,58,0, TIMEALARM_REPEAT, 0)
// Ciclo principal del programa.
while(1)
{
// Hacer parpadear el led DEBUG.
LedToggle()
DelayMS(500)
}
}
// A CONTINUACION SE DEFINEN LOS EVENTOS PARA TODAS LAS ALARMAS:
@OnTimeAlarm1()
{
// ...
// HACER ALGO AL OCURRIR LA ALARMA
// ...
}
@OnTimeAlarm2()
{
// ...
// HACER ALGO AL OCURRIR LA ALARMA
// ...
}
@OnTimeAlarm3()
{
// ...
// HACER ALGO AL OCURRIR LA ALARMA
// ...
}
@OnTimeAlarm4()
{
// ...
// HACER ALGO AL OCURRIR LA ALARMA
// ...
}
Si queres activar un
timeout que apague un rele en un tiempo
X luego de producirse la alarma haces los siguiente:
// Variable para alterar el tiempo de apagado del RELAY1.
new TimeoutRelay1Off = 20
PlcMain()
{
// Inicializar temporizadores Timeout.
TimeoutInitEvent()
// Activar Alarma 1.
TimeAlarm1SetEvent(17,0,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 2.
TimeAlarm1SetEvent(15,33,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 3.
TimeAlarm1SetEvent(21,52,0, TIMEALARM_REPEAT, 0)
// Activar Alarma 4.
TimeAlarm1SetEvent(23,58,0, TIMEALARM_REPEAT, 0)
// Ciclo principal del programa.
while(1)
{
// Hacer parpadear el led DEBUG.
LedToggle()
DelayMS(500)
}
}
// A CONTINUACION SE DEFINEN LOS EVENTOS PARA TODAS LAS ALARMAS:
@OnTimeAlarm1()
{
// Activar RELAY1
RelayClose(RELAY1)
// Especificar un Timeout1 en "TimeoutRelay1Off" segundos.
Timeout1SetEvent(TimeoutRelay1Off)
}
@OnTimeAlarm2()
{
// Activar RELAY1
RelayClose(RELAY1)
// Especificar un Timeout1 en "TimeoutRelay1Off" segundos.
Timeout1SetEvent(TimeoutRelay1Off)
}
@OnTimeAlarm3()
{
// Activar RELAY1
RelayClose(RELAY1)
// Especificar un Timeout1 en "TimeoutRelay1Off" segundos.
Timeout1SetEvent(TimeoutRelay1Off)
}
@OnTimeAlarm4()
{
// Activar RELAY1
RelayClose(RELAY1)
// Especificar un Timeout1 en "TimeoutRelay1Off" segundos.
Timeout1SetEvent(TimeoutRelay1Off)
}
// Manejador para el evento "OnTimeout()"
@OnTimeout()
{
// Comprobar si Timeout1 ha expirado.
if(Timeout1Check() == 1)
{
// Desactivar RELAY1.
RelayOpen(RELAY1)
// Eliminar Timeout1.
Timeout1ClrEvent()
}
}
La linea:
Timeout1SetEvent(TimeoutRelay1Off) establece un timeout de acuerdo a la variable global
TimeoutRelay1Off, que podes modificar en otra parte.
Este código es valido cuando el timeout es menor al tiempo entre alarmas.
Caso contrario, deberías utilizar un timeout diferente por cada alarma, para que no se "pisen".
Cualquier duda, quedamos a disposición.