No programa de controle abaixo, dois conjuntos de lâmpadas, cada qual em um semáforo de dois tempos, são acesas alternadamente de acordo com a seqüência de ativação padrão, com possibilidade de alterarem-se os tempos em que cada seqüência torna-se ativa, por meio das variáveis AIW0, AIW1 e AIW2; e também desativar o semáforo, por meio do ponto de entrada I0.0, quando então as luzes amarelas ficarão piscando.
clp Semáforo// Controle de semáforo com dois conjuntos de luzes sinalizadoras (cruzamento simples) e sinalização de desativado: piscando amarelas
var Q0.0Vermelha1, // Luz vermelha do primeiro conjunto ...
Q0.1Amarela1,
Q0.2Verde1,
Q1.0Vermelha2,
Q1.1Amarela2,
Q1.2Verde2,
AIW0TmpVerde1, // Tempo em que a luz verde fica acesa no conjunto 1
AIW1TmpAmarela1,
AIW2TmpVermelha1,
T0DeuTmpVerde, // Var. de tempo que indica que tempo da luz verde foi alcançado
T1DeuTmpAmarela1,
T2DeuTmpAmarela2,
T3DeuTmpVermelha,
T4TmpLig, // Tempo em que as luzes amarelas ficam acesas quando semáforo inativo
T5TmpDeslig, // ... idem apagadas
I0.0 PiscaAmarelas; // Indica semáforo inativo, com as luzes amarelas piscando
rede 0// Inicia o controle na seqüência Verd1Verm2 e configura temporização padrão se tempos de operação não fornecidos nas variáveis AIW0, AIW1 e AIW2
se (nãoVarAux){
acionaInicio; // Gera um pulso em Inicio quando do início da operação (1º ciclo) ou (VarAux){
acionaVarAux;
}
}
se (Inicio){
ligaVerd1Verm2; // Ativa a seqüência inicial quando do início da operação
}
se (TmpVerde1<=0) { // Se tempo não fornecido ... TmpVerde1 :=10; // ... recebe valor padrão
}
se (TmpAmarela1<=0) {
TmpAmarela1 :=3; // Idem
}
se (TmpVermelha1<=0) {
TmpVermelha1 :=10; // Idem
}
//**************************************************
rede 1// Na seqüência Verd1Verm2 abaixo acendem-se as luzes Verde1 e Vermelha2 seqüênciaVerd1Verm2
rede 2// Controle das ligações e desligamentos e temporização se ( nãoimediatoVerde1ounãoimediatoVermelha2 ) {
ligaimediatoVerde1;
ligaimediatoVermelha2;
desligaimediatoVermelha1;
desligaimediatoAmarela1;
desligaimediatoAmarela2;
desligaimediatoVerde2;
resetDeuTmpVerde;
}
quando ( Verde1 ) temporizaDeuTmpVerdeTmpVerde1 s;
fim_circuito_seqüência
rede 3// Transfere execução para a próxima seqüência se (imediatoPiscaAmarelas) {
desligaimediatoVerde1;
desligaimediatoVermelha2;
ligaimediatoAmarela1;
ligaimediatoAmarela2;
transfere_seqüênciaAmar1Amar2;
}
se ( DeuTmpVerdeenãoimediatoPiscaAmarelas) { transfere_seqüênciaAmar1Verm2;}
rede 4// Fim da seqüência Verd1Verm2
fim_seqüência;
//**************************************************
rede 5// Na seqüência Amar1Verm2 acendem-se as luzes Amarela1 e Vermelha2 seqüênciaAmar1Verm2
rede 6// Controle das ligações e desligamentos e temporização se ( nãoimediatoAmarela1ounãoimediatoVermelha2 ) {
ligaimediatoAmarela1;
ligaimediatoVermelha2;
desligaimediatoVermelha1;
desligaimediatoAmarela2;
desligaimediatoVerde1;
desligaimediatoVerde2;
resetDeuTmpAmarela1;
}
quando ( Amarela1 ) temporizaDeuTmpAmarela1TmpAmarela1 s;
fim_circuito_seqüência
rede 7// Transfere execução para a próxima seqüência se (imediatoPiscaAmarelas) {
desligaimediatoVermelha2;
ligaimediatoAmarela2;
transfere_seqüênciaAmar1Amar2;
}
se ( DeuTmpAmarela1enãoimediatoPiscaAmarelas ) { transfere_seqüênciaVerm1Verd2; }
rede 8// Fim da seqüência Amar1Verm2
fim_seqüência;
//**************************************************
rede 9// Na seqüência Verm1Verd2 acendem-se as luzes Vermelha1 e Verde2 seqüênciaVerm1Verd2
rede 10// // Controle das ligações e desligamentos e temporização se ( nãoimediatoVermelha1ounãoimediatoVerde2 ) {
ligaimediatoVermelha1;
ligaimediatoVerde2;
desligaimediatoAmarela1;
desligaimediatoAmarela2;
desligaimediatoVerde1;
desligaimediatoVermelha2;
resetDeuTmpVermelha;
}
quando ( Vermelha1 ) temporizaDeuTmpVermelhaTmpVermelha1 s;
fim_circuito_seqüência
rede 11// Transfere execução para a próxima seqüência se (imediatoPiscaAmarelas) {
desligaimediatoVerde2;
desligaimediatoVermelha1;
ligaimediatoAmarela1;
ligaimediatoAmarela2;
transfere_seqüênciaAmar1Amar2;
}
se ( DeuTmpVermelhaenãoimediatoPiscaAmarelas ) { transfere_seqüênciaVerm1Amar2; }
rede 12// Fim da seqüência Amar1Verm2
fim_seqüência;
//**************************************************
rede 13// Na seqüência Verm1Amar2 acendem-se as luzes Vermelha1 e Amarela2 seqüênciaVerm1Amar2
rede 14// // Controle das ligações e desligamentos e temporização se ( nãoimediatoAmarela2ounãoimediatoVermelha1 ) {
ligaimediatoVermelha1;
ligaimediatoAmarela2;
desligaimediatoAmarela1;
desligaimediatoVerde1;
desligaimediatoVerde2;
desligaimediatoVermelha2;
resetDeuTmpAmarela2;
}
quando ( Amarela2 ) temporizaDeuTmpAmarela2TmpAmarela1 s;
fim_circuito_seqüência
rede 15// Transfere execução para a próxima seqüência se (imediatoPiscaAmarelas) {
desligaimediatoVermelha1;
ligaimediatoAmarela1;
transfere_seqüênciaAmar1Amar2;
}
se ( DeuTmpAmarela2enãoimediatoPiscaAmarelas ) { transfere_seqüênciaVerd1Verm2; }
rede 16// Fim da seqüência Verm1Amar2
fim_seqüência;
//**************************************************
rede 17// Desativa semáforo e pisca amarelas, indicando a desativação destinoDesativa:
//**************************************************
rede 18// Na seqüência Amar1Amar2 as luzes amarelas piscando nos dois conjuntos indicam semáforo desativado seqüênciaAmar1Amar2
rede 19// // Controle das ligações e desligamentos e temporização se (PiscaAmarelas){
desligaimediatoVerde1;
desligaimediatoVerde2;
desligaimediatoVermelha1;
desligaimediatoVermelha2;
}
quando ( nãoimediatoAmarela1 ) temporizaTmpDeslig500 ms;
se ( TmpDeslig ) {
ligaimediatoAmarela1;
ligaimediatoAmarela2;
}
quando ( imediatoAmarela1 ) temporizaTmpLig500 ms;
se ( TmpLig ) {
desligaimediatoAmarela1;
desligaimediatoAmarela2;
}
fim_circuito_seqüência
rede 20// Transfere execução para a próxima seqüência se (nãoimediatoPiscaAmarelas ) {
desligaimediatoAmarela1;
desligaimediatoAmarela2;
transfere_seqüênciaVerd1Verm2;
}
rede 21// Fim da seqüência Amar1Amar2
fim_seqüência;
fim
Como resultado da compilação do programa Semáforo acima, o SimuPLC 4.1.0 gerou, exatamente, o seguinte código, emLista de Instruções - IL :
// CLP Semáforo // Controle de semáforo com dois conjuntos de luzes sinalizadoras (cruzamento simples) e sinalização de desativado: piscando amarelas
NETWORK0// Inicia o controle na seqüência Verd1Verm2 e configura temporização padrão se tempos de operação não fornecidos nas variáveis AIW0, AIW1 e AIW2
LDNVarAux =Inicio // Gera um punho em Inicio quando do início da operação (1º ciclo) OVarAux =VarAux
LDInicio SVerd1Verm2, 1 // Ativa a seqüência inicial quando do início da operação
LDD<=AIW0, 0 // Se tempo não fornecido ... MOVD10, AIW0 // ... recebe valor padrão
LDD<=AIW1, 0 MOVD3, AIW1 // Idem
LDD<=AIW2, 0 MOVD10, AIW2 // Idem //**************************************************
NETWORK1// Na seqüência Verd1Verm2 abaixo acendem-se as luzes Verde1 e Vermelha2
LSCRVerd1Verm2
NETWORK2// Controle das ligações e desligamentos e temporização