SlideShare a Scribd company logo
1 of 38
Download to read offline
11a
Semana de Tecnologia Metroferroviária – Fórum Técnico
Associação dos Engenheiros e Arquitetos de Metrô - AEAMESP
IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM SEGURANÇA CRÍTICA
Introdução
O objetivo deste trabalho, frente ao atual cenário do setor Metroferroviário, é de conscientização e
esclarecimento sobre o Controle da Qualidade de Software de Sistemas Sinalização e Controle,
demonstrando providências exigíveis a Empresas Fornecedoras e Projetistas destes Sistemas.
No meio acadêmico, são ainda muito discutidas as problemáticas da realização de funções de
segurança através de Software. Apesar do tímido número de evidências científicas de que
equipamentos baseados em Software se comportam de maneira segura, a prática em diversas áreas
demonstra um quadro irreversível de aplicação intensiva desses equipamentos nos mais diversos
sistemas, conforme vivenciamos no nosso dia a dia.
A obtenção de um Software Seguro envolve inúmeros fatores, entre eles a experiência e o preparo
de toda a equipe envolvida no Processo, o uso de técnicas e ferramentas apropriadas, uma criteriosa
Análise de Segurança Independente e, dentre os atributos da Qualidade de Software, em especial
sua Confiabilidade.
Confiabilidade de Software
A Confiabilidade de Software pode ser definida como a “probabilidade de operação livre de falhas
por um período de tempo especificado em um determinado ambiente” [ANSI 1991]. A
Confiabilidade é um dos atributos da Qualidade de Software, uma propriedade multidimensional
que inclui outros fatores de satisfação do cliente tais como funcionalidade, facilidade de uso,
desempenho, capacidade, documentação, facilidades de suporte, instalação e manutenção [Grad
1987, Grad 1992].
A Confiabilidade de Software é geralmente aceita como o fator principal da Qualidade de Software,
pois quantifica as falhas de Software – que podem tirar de operação um poderoso sistema ou até
mesmo trazer riscos às pessoas e patrimônio [Lyu 1996].
Os métodos mais respeitados e evoluídos para a avaliação da confiabilidade de software, tal como
descrito em “Software Reliability Engineering” [Musa 1999], são baseados na observação de falhas
do produto terminado, sustentada por análise estatística. Estes métodos são a única forma de medir
a confiabilidade do produto, pois são baseadas na observação direta de seu comportamento. As
importantes desvantagens destas abordagens são [Dale 1990]:
• estão preocupadas puramente com a medida da confiabilidade, enquanto outras informações
sobre, por exemplo, os métodos que foram utilizados no desenvolvimento do produto, são
ignoradas; e
• só podem ser utilizadas quando o produto final existe, portanto sua aplicação só pode ser
iniciada a partir da obtenção de dados durante a fase de testes do desenvolvimento.
Uma alternativa pesquisada para a obtenção de Software de alta confiabilidade é a especificação e
análise dos Processos de Desenvolvimento de Software adotados em um projeto, em conformidade
com as normas técnicas adequadas a aplicação, além de modelos de ampla aceitação.
Adotando-se uma abordagem deste tipo, a avaliação da confiabilidade deve ser realizada sobre os
produtos intermediários de cada fase do processo de desenvolvimento, antes de se obter o produto
final.
Segurança de Software (SW Safety)
A Segurança de um sistema S(t) é a probabilidade de um sistema efetuar suas operações de forma
correta, ou descontinuar seu funcionamento de forma a não comprometer a operação de outros
sistemas ou comprometer a Segurança [Johnson 1989]. As técnicas de “falha segura” (fail-safe) têm
sido empregadas desde em sistemas eletrônicos convencionais e até mesmo nas principais rotinas de
diagnóstico de funções de Software e componentes de Hardware, bem como nos conceitos de
programação defensiva.
Especificação de Requisitos Técnicos de Software
A Especificação Técnica de Software abordada a seguir foi elaborada, a princípio, tendo em vista
um horizonte de aplicação da tecnologia “Communications Based Train Control” (CBTC) na
implantação e modernização de Sistemas de Sinalização e Controle. O emprego desta nova
tecnologia traz desafios tais como:
• uso intensivo de Software para a realização de funções de Tempo Real e Segurança Crítica;
• fatores de aumento natural do risco e a conseqüente necessidade de sua mitigação através da
tecnologia, tais como a diminuição do intervalo entre trens (“headway”), operação automática
sem condutor (“driverless”), funções de diagnóstico e recuperação remotas;
• transmissão intensiva por meio aberto de sinais vitais, trazendo preocupações típicas da
Segurança da Informação (“security”), além do envelhecimento de informações de tempo real,
que devem ser tratadas pelo Software de comunicação;
• determinação da posição das composições e distâncias percorridas utilizando múltiplos
sensores, e tratamento por algoritmos que incluem informações sobre margens de segurança
para determinação e cumprimento de pontos de parada com segurança;
• emprego limitado de hardware intrinsecamente “fail-safe” e componentes com modos de falha
bem definidos; e
• os conceitos consagrados de Segurança de um Sistema de Sinalização e Controle devem ser
implementados de forma completa e claramente verificáveis [IEEE 2005].
No entanto, devido a incorporação da experiência obtida pelo METRÔ-SP no projeto e implantação
dos sistemas de Sinalização e Controle, somada a estudos realizados em conjunto com a Fundação
para o Desenvolvimento Tecnológico da Engenharia - FDTE, foi considerado adequado o emprego
desta metodologia para a aquisição de Software do Sistema de Sinalização e Controle de Trens –
Estações e Vias da Extensão da Linha 2 – Verde, trecho Ana Rosa – Ipiranga, mesmo tratando-se de
um Sistema Microprocessado Convencional, e dentre seus principais requisitos, serão enfatizados:
Conformidade com CMMi
A Capacidade do Processo [CMU/SEI 2002] estabelece o grau de refinamento e institucionalização
com que o processo é realizado em uma organização, em cinco níveis discretos, em sua
representação por estágios, conforme representado na Figura 1.
Nível 1 - Inicial
Fracamente Controlado,
Imprevisível
Nível 2 - Repetível
Repetição de Tarefas
executadas com sucesso
Nível 3 - Definido
Processo caracterizado e
claramente entendido
Nível 4 - Gerenciado
Processo medido e
controlado
Nível 5 - Otimização
Foco na melhoria
contínua do Processo
Figura 1 - Estágios do CMMi
Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos iniciando a utilização
desta metodologia, ilustrados na Figura 2, podem ser assim resumidos:
• o Processo é Executado;
• o Processo atinge seus resultados definidos; e
• os produtos de trabalho do Processo são gerenciados.
SaídasEntradas
Figura 2 - CMMi nível 2 - Visibilidade
A Especificação Técnica de Software apresenta o seguinte requisito:
A Contratada deve adotar a metodologia estabelecida no “Capability Maturity Model Integration
for Systems Engineering and Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior, do
“Software Engineering Institute / Carnegie Mellon University” (SEI/CMU) para todo o Software
fornecido, sendo que:
Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, na representação em estágios “Staged
Representation”;
A Contratada deve comprovar pelo “Standard CMMI Appraisal Method for Process Improvement”
(SCAMPI) [CMU/SEI 2001], o emprego desta metodologia por toda equipe envolvida no projeto.
Nível de Integridade de Segurança (SIL)
A Especificação Técnica de Software apresenta o seguinte requisito com relação ao Nível de
Integridade de Segurança de Software, que juntamente com os parâmetros de Segurança do
Hardware irão determinar a Segurança do Sistema, traduzido em valores na Figura 3.
Os conceitos de “Fail Safe” devem ser utilizados no Software relacionado às funções de Segurança
Crítica ou Vitais. Deve atender ao “Software Safety Integrity Level” (SIL) quatro (4), conforme a
norma IEC 61508 “Functional Safety of Electrical/Electronic/Programmable Electronic Safety-
Related Systems”.
SIL Falhas inseguras / hora
4 10-9
< λu < 10-8
3 10-8
< λu < 10-7
2 10-7
< λu < 10-6
1 10-6
< λu < 10-5
Figura 3 – Nível de Integridade de Segurança [IEC 1999]
Conformidade com a Norma CENELEC 50128
Um importante requisito na Especificação Técnica de Software é a conformidade com a Norma
CENELEC 50128 [CENELEC 2001], específica para o Software aplicado a Sistemas de
Sinalização e Controle:
Devem ser atendidas as recomendações da norma CENELEC 50128 “Railway applications –
Communications, Signaling and Processing Systems – Software for Railway Control and Protection
Systems”.
Conforme podemos observar no diagrama seguinte, presente na Figura 4, as atividades específicas
para a obtenção do Software estão vinculadas às especificações do Sistema onde ele é empregado.
Integração de Sistema
Especificação de Requisitos de Sistema
Especificação de Requisitos de Segurança de Sistema
Descrição da Arquitetura de Sistema
Plano de Segurança de Sistema
Especificação dos
Requisitos de Software
Especificação de teste de
Requisitos de Software
Especificação de Arquitetura de Software
Plano de Integração de
Software
Especificação de Projeto de
Software
Especificação de Teste de
Módulo de Software
Especificação de Projeto de
Módulo de Software
Código Fonte de Software,
e documentação de suporte
Relatório de Teste de Módulo de Software
Relatório de Teste de Integração de Software
Relatório de Teste de Integração de Software e
Hardware
Documentos de Integração e Teste de Sistema
Verificação do Sistema
Verificação dos Requisitos de
Software
Verificação da Arquitetura
de Software
Verificação do Projeto de
Software
Verificação dos módulos de
Software
Verificação de Código
Validação de Software
Validação de Sistema
Teste de Software
Implementação /
Codificação
Projeto de Software
Requisitos de Software
Integração de Software e
Hardware
Documentos de Projeto Verificação Etapa
Documentos de Instalação do Sistema
Documentos de Manutenção do Sistema
Validação do Sistema
Desenvolvimento do
Sistema
Projeto de Módulo de
Software
Validação de Software
Transição para Suporte
Figura 4 - Ciclo de Vida e Artefatos [CENELEC 2001]
Planejamento de Software
Antes do início do desenvolvimento do Software, foi detectada a necessidade de solicitar à empresa
fornecedora e projetista a elaboração de Planos específicos aos processos de obtenção de Software
com o nível de Segurança adequado à aplicação no sistema de Sinalização e Controle:
• Plano de Gerenciamento de Software;
• Plano de Garantia da Qualidade de Software;
• Plano de Gerência de Configuração de Software;
• Plano de Verificação de Software de Aplicação Crítica e de Segurança; e
• Plano de Validação de Software.
Estes documentos deverão ser submetidos à aprovação, incluindo eventuais alterações ao longo do
fornecimento.
Ciclo de Vida
A Especificação Técnica de Software apresenta, ainda, uma descrição das fases de um Ciclo de
Vida do Software de referência, listadas a seguir:
• Especificação de Requisitos de Software;
• Arquitetura de Software;
• Projeto de Software;
• Implementação de Software;
• Integração e Testes de Software;
• Validação de Software;
• Aceitação de Software; e
• Operação e Manutenção.
Conclusões
Este trabalho tem por objetivo obter uma maior garantia do nível de Segurança do Software e,
ainda, a redução do re-trabalho e conseqüente otimização dos recursos empregados, possibilitando
também um maior controle sobre o processo e as tecnologias em implantação.
Não deixando de observar as limitações impostas pelo estágio de desenvolvimento atual da
indústria nacional, é importante vislumbrar esta oportunidade e necessidade de progresso,
aproveitando a experiência e capacidade de inovação, e incorporando a iniciativa dos maiores
consumidores de Software mundiais e a produção científico-acadêmica disponível nesta área.
Referência Bibliográfica
[CMU/SEI 2002] Carnegie Mellon University Software Engineering Institute: “CMMI-SE/SW – Capability Maturity
Model Integration (CMMI), Version 1.1: CMMI for Systems Engineering and Software Engineering, Staged
Representation”, CMU/SEI-2002-TR-002, 2002.
[CMU/SEI 2001] Carnegie Mellon University Software Engineering Institute: “SCAMPI – Standard CMMI Appraisal
Method for Process Improvement Version 1.1: Method Definition Document”, CMU/SEI-2001-HB-001, 2001.
[CENELEC 2001] European Committee for Electrotechnical Standardization: “Railway Applications –
Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”, BS-EN
50128, 2001.
[Dale 1990] Dale, C.; Paul Rook (ed.) – “Software Reliability Handbook” – Elsevier Applied Science, 1990.
[Johson 1989] Barry W. Johnson –“Design and Analyses of fault-Tolerant Digital Systems” – Addison-Wesley, 1989.
[Lyu 1996] Michael R. Lyu (ed.) – “Handbook of Software Reliability Engineering”, McGraw-Hill, 1996.
[Musa 1999] Musa J.D. – “Software Reliability Engineering”, McGraw-Hill, 1999.
[ANSI 1991] ANSI/IEEE, "Standard Glossary of Software Engineering Terminology", STD-729-1991, ANSI/IEEE,
1991.
[GRAD 1987] Grady, Robert B.; Caswell, Deborah L.- “Software Metrics: Establishing a Company-Wide Program.”
Prentice Hall, 1987.
[GRAD 1992] Grady, Robert B. - “Practical Software Metrics for Project Management and Process Improvement”.
Prentice Hall, 1992.
[IEEE 2005] IEEE Standard for Communications-Based Train Control (CBTC) Performance and Functional
Requirements, Institute of Electrical and Electronics Engineers, IEEE 1474-1, 2005.
[IEC 1999] Functional safety of electrical/electronic/programmable electronic safety-related systems - General
requirements, IEC 61508-1, 1999.
Eng. Christian Becker Bueno de Abreu
e-mail: cbecker@metrosp.com.br – tel. 55-11-3371-7222
Engenheiro de Projeto da Companhia do Metropolitano de São Paulo – METRÔ
Departamento de Projeto de Sistemas de Controle e Comunicações – GEP/EPS
Prof. Dr. Paulo Sérgio Cugnasca
Escola Politécnica da Universidade de São Paulo (EPUSP)
Departamento de Engenharia de Computação e Sistemas Digitais (PCS)
Grupo de Análise de Segurança (GAS)
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
11ª Semana de Tecnologia Metroferroviária
Importância da
Qualidade de Software
em
Segurança Crítica
Eng. Christian Becker Bueno de Abreu
Prof. Dr. Paulo Sérgio Cugnasca
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Software - Definições
“Software”:
Criação intelectual compreendendo os programas,
procedimentos, regras e qualquer documentação correlata
de um sistema de processamento de dados
NOTA: O “software” não depende do meio no qual é
registrado.
Desenvolvimento:
Todas as atividades a serem realizadas para a criação de um
produto de Software.
[NBR ISO 9000-3]
Natureza do
Software
???
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Software - Definições
“Software”:
Criação intelectual compreendendo os programas,
procedimentos, regras e qualquer documentação correlata
de um sistema de processamento de dados
NOTA: O “software” não depende do meio no qual é
registrado.
Desenvolvimento:
Todas as atividades a serem realizadas para a criação de um
produto de Software.
[NBR ISO 9000-3]
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Qualidade & Segurança - Definições
Qualidade - indicadores
● Confiabilidade
● Funcionalidade
● Facilidade de uso
● Desempenho
● Capacidade
● Documentação
● Suporte, Instalação e
Manutenção
Segurança - S(t)
Probabilidade de um sistema
efetuar suas operações de
forma correta ou
descontinuar seu
funcionamento de forma a
não comprometer a operação
de outros sistemas ou
comprometer a Segurança
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Qualidade ∩ Segurança - Confiabilidade
Confiabilidade - R(t)
Probabilidade de operação
livre de falhas por um
período de tempo
especificado em um
determinado ambiente
QUALIDADEQUALIDADE
CONFIABILIDADECONFIABILIDADE
MTTF
0
R t . dt
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Qualidade & Segurança - Definições
Qualidade - indicadores
● Confiabilidade
● Funcionalidade
● Facilidade de uso
● Desempenho
● Capacidade
● Documentação
● Suporte, Instalação e
Manutenção
Segurança - S(t)
Probabilidade de um sistema
efetuar suas operações de
forma correta ou
descontinuar seu
funcionamento de forma a
não comprometer a operação
de outros sistemas ou
comprometer a Segurança
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Qualidade & Segurança - Definições
Qualidade - indicadores
● Confiabilidade
● Funcionalidade
● Facilidade de uso
● Desempenho
● Capacidade
● Documentação
● Suporte, Instalação e
Manutenção
Segurança - S(t)
Probabilidade de um sistema
efetuar suas operações de
forma correta ou
descontinuar seu
funcionamento de forma a
não comprometer a operação
de outros sistemas ou
comprometer a Segurança
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Medição da Confiabilidade
Medir a Confiabilidade:
Observação de falhas
+
Análise estatística.
Problemas:
- Início na etapa de testes:
Produto deve estar terminado
- Tempo necessário:
Software Ultra-confiabilidade
- Informações ignoradas:
Métodos empregados
Alternativa:
Especificação e Análise dos
Processos de Desenvolvimento
de Software.
Conformidade com Normas
Técnicas adequadas e Modelos
de ampla aceitação.
Avaliação da Confiabilidade
sobre Artefatos Intermediários
de cada fase do Processo de
Desenvolvimento.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Medição da Confiabilidade
Medir a Confiabilidade:
Observação de falhas
+
Análise estatística.
Problemas:
- Início na etapa de testes:
Produto deve estar terminado
- Tempo necessário:
Software Ultra-confiabilidade
- Informações ignoradas:
Métodos empregados
Alternativa:
Especificação e Análise dos
Processos de Desenvolvimento
de Software.
Conformidade com Normas
Técnicas adequadas e Modelos
de ampla aceitação.
Avaliação da Confiabilidade
sobre Artefatos Intermediários
de cada fase do Processo de
Desenvolvimento.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CMU/SEI - CMMi
Representação em estágios:
A Capacidade do Processo
estabelece o seu
grau de refinamento e
institucionalização.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CMU/SEI - CMMi
Visibilidade:
CMMi nível 2
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Requisito Técnico de Software - Qualidade
Deve ser adotada a metodologia estabelecida no “Capability
Maturity Model Integration for Systems Engineering and
Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior,
do “Software Engineering Institute / Carnegie Mellon University”
(SEI/CMU) para todo o Software fornecido, sendo que:
● Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, na
representação em estágios “Staged Representation”;
● Deve ser comprovado pelo “Standard CMMI Appraisal Method
for Process Improvement” (SCAMPI), o emprego desta
metodologia por toda equipe envolvida no projeto.
[EPS 2004]
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Fail Safe (Falha Segura)
A validade deste conceito é, em geral, baseada na
experiência, mas tem aplicação limitada ao
desenvolvimento e uso de sistemas grandes e
complexos empregando microprocessadores
comerciais.
O crescimento exponencial no número de
combinações de falhas a serem consideradas
quando usando tais componentes significam que
uma abordagem determinística é, geralmente
impraticável. Com tais sistemas complexos, a
abordagem probabilística pode ser usada
efetivamente. [CENELEC 50126]
Exemplos de aplicação
em Software:
- Rotinas de diagnóstico
- Programação Defensiva
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Níveis de Risco
Determinação dos Níveis de Risco
*Freqüênciada
ocorrênciadeum
eventodeameaça
NíveisdeRisco
Freqüente Indesejável Intolerável Intolerável Intolerável
Provável Tolerável Indesejável Intolerável Intolerável
Ocasional Tolerável Indesejável Indesejável Intolerável
Remoto Negligenciável Tolerável Indesejável Indesejável
Improvável Negligenciável Negligenciável Tolerável Tolerável
Inacreditável Negligenciável Negligenciável Negligenciável Negligenciável
Insignificante Marginal Crítico Catastrófico
Níveisdegravidadedaconseqüênciadaameaça.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
IEC 61508 - Parâmetros para determinar SIL
Conseqüência do Risco
C1 Perdas Pequenas.
C2 Perdas sérias e permanentes
para uma ou mais pessoas, ou
morte de uma pessoa.
C3 Morte de várias pessoas.
C4 Muitas pessoas assassinadas.
Freqüência e Tempo de Exposição
F1 Exposição de rara a freqüente na
região de perigo.
F2 Exposição de freqüente a
permanente na região de perigo.
Possibilidade de evitar o evento
P1 Possível sob certas condições.
P2 Quase impossível.
Probabilidade de ocorrências
indesejáveis
W1Probabilidade muito pequena de
que as ocorrências acontecerão.
W2Probabilidade pequena de que
as ocorrências acontecerão.
W3Probabilidade relativamente alta
de que as ocorrências
acontecerão.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
IEC 61508 - Parâmetros para determinar SIL
Conseqüência do Risco
C1 Perdas Pequenas.
C2 Perdas sérias e permanentes
para uma ou mais pessoas, ou
morte de uma pessoa.
C3 Morte de várias pessoas.
C4 Muitas pessoas assassinadas.
Freqüência e Tempo de Exposição
F1 Exposição de rara a freqüente na
região de perigo.
F2 Exposição de freqüente a
permanente na região de perigo.
Possibilidade de evitar o evento
P1 Possível sob certas condições.
P2 Quase impossível.
Probabilidade de ocorrências
indesejáveis
W1Probabilidade muito pequena de
que as ocorrências acontecerão.
W2Probabilidade pequena de que
as ocorrências acontecerão.
W3Probabilidade relativamente alta
de que as ocorrências
acontecerão.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
IEC 61508 - Parâmetros para determinar SIL
Conseqüência do Risco
C1 Perdas Pequenas.
C2 Perdas sérias e permanentes
para uma ou mais pessoas, ou
morte de uma pessoa.
C3 Morte de várias pessoas.
C4 Muitas pessoas assassinadas.
Freqüência e Tempo de Exposição
F1 Exposição de rara a freqüente na
região de perigo.
F2 Exposição de freqüente a
permanente na região de perigo.
Possibilidade de evitar o evento
P1 Possível sob certas condições.
P2 Quase impossível.
Probabilidade de ocorrências
indesejáveis
W1Probabilidade muito pequena de
que as ocorrências acontecerão.
W2Probabilidade pequena de que
as ocorrências acontecerão.
W3Probabilidade relativamente alta
de que as ocorrências
acontecerão.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
IEC 61508 - Parâmetros para determinar SIL
Conseqüência do Risco
C1 Perdas Pequenas.
C2 Perdas sérias e permanentes
para uma ou mais pessoas, ou
morte de uma pessoa.
C3 Morte de várias pessoas.
C4 Muitas pessoas assassinadas.
Freqüência e Tempo de Exposição
F1 Exposição de rara a freqüente na
região de perigo.
F2 Exposição de freqüente a
permanente na região de perigo.
Possibilidade de evitar o evento
P1 Possível sob certas condições.
P2 Quase impossível.
Probabilidade de ocorrências
indesejáveis
W1Probabilidade muito pequena de
que as ocorrências acontecerão.
W2Probabilidade pequena de que
as ocorrências acontecerão.
W3Probabilidade relativamente alta
de que as ocorrências
acontecerão.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Redução de Risco Nível de Integridade de Segurança
- Sem Requisitos de Segurança
A Sem Requisitos Especiais de Segurança
B, C SIL 1
D SIL 2
E, F SIL 3
G SIL 4
H Sistemas de Proteção não Suficientes
IEC 61508 - Determinar Redução de Risco e SIL
W3 W2 W1
C1 A - -
C2
F1
P1 B A -
P2 C B A
F2
P1 D C B
P2 E D C
C3
F1 F E D
F2 G F E
C4 H G F
SIL Falhas inseguras / hora
4 10-9
< u < 10-8
3 10-8
< u < 10-7
2 10-7
< u < 10-6
1 10-6
< u < 10-5
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
SIL Falhas inseguras / hora
4 10-9
< u < 10-8
3 10-8
< u < 10-7
2 10-7
< u < 10-6
1 10-6
< u < 10-5
W3 W2 W1
C1 A - -
C2
F1
P1 B A -
P2 C B A
F2
P1 D C B
P2 E D C
C3
F1 F E D
F2 G F E
C4 H G F
IEC 61508 - Determinar Redução de Risco e SIL
Redução de Risco Nível de Integridade de Segurança
- Sem Requisitos de Segurança
A Sem Requisitos Especiais de Segurança
B, C SIL 1
D SIL 2
E, F SIL 3
G SIL 4
H Sistemas de Proteção não Suficientes
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
IEC 61508 - Determinar Redução de Risco e SIL
Redução de Risco Nível de Integridade de Segurança
- Sem Requisitos de Segurança
A Sem Requisitos Especiais de Segurança
B, C SIL 1
D SIL 2
E, F SIL 3
G SIL 4
H Sistemas de Proteção não Suficientes
W3 W2 W1
C1 A - -
C2
F1
P1 B A -
P2 C B A
F2
P1 D C B
P2 E D C
C3
F1 F E D
F2 G F E
C4 H G F
SIL Falhas inseguras / hora
4 10-9
< u < 10-8
3 10-8
< u < 10-7
2 10-7
< u < 10-6
1 10-6
< u < 10-5
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Software & Segurança: EN50128 SWSIL
Tendo caracterizado o Nível de
Integridade de Segurança (SIL)
para o Sistema Metro-ferroviário,
o Software na área de Sinalização
para tal Sistema deverá possuir o
mesmo valor.
5.2.2 Os requisitos de nível de
integridade de segurança de
software (SWSIL) deverão ser
decididos com base no nível
de risco associado com a
utilização do software no
sistema e no nível de
integridade de segurança de
software.
[CENELEC 50128]
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CENELEC 50128
4
3
2
1
0
4
3
2
1
0
SWSILSIL
Freqüência de
Ameaça
Conseqüência
Ameaça
Equipamentos
Sujeitos
a
Controle
Nível Risco:
Ausência
Proteção
Exige
Redução
Riscos
4
3
2
1
0
4
3
2
1
0
SWSIL
Freqüência de
Ameaça
Conseqüência
Ameaça
Equipamentos
Sujeitos
a
Controle
Nível Risco:
Ausência
Proteção
Exige
Redução
Riscos
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CENELEC 50128 - Ciclo de Vida I
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CENELEC 50128 - Ciclo de Vida II
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
CENELEC 50128 - Ciclo de Vida III
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Requisito Técnico de Software - Segurança
Os conceitos de “Fail Safe” devem ser utilizados no Software
relacionado às funções de Segurança Crítica ou Vitais.
Deve atender ao “Software Safety Integrity Level” (SIL)
quatro (4), conforme a norma IEC 61508 “Functional Safety of
Electrical/Electronic/Programmable Electronic Safety-Related
Systems”.
Devem ser atendidas as recomendações da norma CENELEC
50128 “Railway applications – Communications, Signaling and
Processing Systems – Software for Railway Control and
Protection Systems”.
[EPS 2004]
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
Emprego de Software em Sinalização - Horizonte
Considerações:
● Uso Intensivo de SW em Tempo Real e Segurança Crítica;
● Fatores de aumento natural do risco;
● Transmissão por meio aberto de Sinais Vitais;
● Determinação de distância por múltiplos sensores;
● Emprego limitado de Hardware fail-safe;
Os conceitos consagrados de Segurança de um Sistema de
Sinalização e Controle devem ser implementados de forma
completa e claramente verificáveis. [IEEE 1474-1]
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
O Software com Qualidade:
● Maior Garantia do Nível de Segurança
● Redução do Retrabalho
● Otimização de Recursos
● Controle sobre o Processo
● Controle sobre Tecnologias em Implantação
● Integra Experiência e Capacidade de Inovação
● Incorporação de Iniciativas dos maiores
Consumidores de Software mundiais e da
Produção Científico-acadêmica na área.
202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++;
204 3 }
205 2
206 2 FtxBAC[UFtxBAC].m[0] = n;
207 2
208 2
209 2 /* Atualiza indices da fila de transmissao. */
210 2 if (UFtxBAC >= (MAXFTXBAC-1))
211 2 UFtxBAC = 0;
212 2 else
213 2 UFtxBAC ++;
214 2 QFtxBAC ++;
215 2
216 2 return(TRUE);
217 2 }
218 1 return(FALSE);
219 1 }
248 BYTE ObtemMsgBAC (BYTE *msg)
249 {
250 1 BYTE i;
251 1
252 1 /* Existe mensagens na Fila de Recepcao. */
253 1 if (QFrxBAC > 0)
254 1 {
255 2 /* Sim. Copia a mensagem para o ponteiro. */
256 2 i = 0;
257 2 while (i < FrxBAC[PFrxBAC].m[0])
258 2 {
259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1];
260 3 i++;
261 3 }
262 2
263 2 /* [02] */
264 2 /* Atualiza indices da fila de recepcao. */
265 2 disable();
266 2 if (PFrxBAC >= (MAXFRXBAC-1))
267 2 PFrxBAC = 0;
268 2 else
269 2 PFrxBAC ++;
270 2 QFrxBAC --;
271 2 enable();
272 2
273 2 return(i);
274 2 }
275 1
276 1 return(0);
277 1 }
302 void EnviaAckBAC (void)
303 {
304 1 TxMsgAckBAC();
305 1 FlagTxBAC = 2;
306 1 TimerTimeoutBAC = TimerRelogio3;
307 1 return;
308 1 }
333 void EnviaNackBAC (void)
89 void IniciaBAC (void)
90 {
91 1 Diagnostico[0x07] ++;
92 1 UFtxBAC = 0;
93 1 PFtxBAC = 0;
94 1 AFtxBAC = 0;
95 1 QFtxBAC = 0;
96 1 UFrxBAC = 0;
97 1 PFrxBAC = 0;
98 1 QFrxBAC = 0;
99 1 FlagTxBAC = 0;
100 1 FlagEstadoBAC = 0;
101 1 FlagCpcBAC = 0;
102 1 FalhasBAC = 0;
103 1 NrtxBAC = MAXRETXBAC;
104 1 SemaforoTxBAC = 0x0F;
105 1 TimerTimeoutBAC = TimerRelogio3;
106 1 TimerJanelaBAC = TimerRelogio2;
107 1 ProgramaRS232C();
108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL));
109 1
110 1 #if MESTREBAC == 1
#endif
113 1 return;
114 1 }
141 void TestaFilaBAC (void)
142 {
143 1 Diagnostico[0x44]++;
144 1
145 1 disable();
146 1 if ((PFrxBAC >= MAXFRXBAC) ||
147 1 (UFrxBAC >= MAXFRXBAC) ||
148 1 (QFrxBAC > MAXFRXBAC) ||
149 1 (PFtxBAC >= MAXFTXBAC) ||
150 1 (UFtxBAC >= MAXFTXBAC) ||
151 1 (QFtxBAC > MAXFTXBAC))
152 1 {
153 2 /* Erro. */
154 2 FalhaFatal = 0x09;
155 2 ErroFatal();
156 2 halt();
157 2 }
158 1 enable();
159 1 return;
160 1 }
190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n)
191 {
192 1 BYTE i;
193 1
194 1 /* [01] */
195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) &&
196 1 (n < MAXBFTXBAC))
197 1 {
198 2 /* Copia a mensagem para a fila. */
199 2 i = 0;
200 2 while (i < n)
201 2 {
+ + +
“Nada disso é tudo,
Tudo isso é fundamental.”
[H Gessiger, Engenheiros do Hawaii]
Christian Becker Bueno de Abreu
cbecker@metrosp.com.br

More Related Content

What's hot

Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...
Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...
Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...Symantec Brasil
 
Visão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKVisão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKMário Pravato Junior
 
Aula 8 TEES UFS Garantia de Qualidadedo Software
Aula 8 TEES UFS  Garantia de Qualidadedo Software Aula 8 TEES UFS  Garantia de Qualidadedo Software
Aula 8 TEES UFS Garantia de Qualidadedo Software Rogerio P C do Nascimento
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Devmedia
 
Qa test roadsec-bh - testes de segurança, não comece pelo fim!
Qa test   roadsec-bh - testes de segurança, não comece pelo fim!Qa test   roadsec-bh - testes de segurança, não comece pelo fim!
Qa test roadsec-bh - testes de segurança, não comece pelo fim!Welington Monteiro
 
Aula 04 qs - sistemas embarcados
Aula 04   qs - sistemas embarcadosAula 04   qs - sistemas embarcados
Aula 04 qs - sistemas embarcadosJunior Gomes
 

What's hot (11)

Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...
Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...
Be Aware Webinar : Alinhando a Estratégia de Segurança: Visibilidade e Confor...
 
Visão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKVisão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOK
 
Guday2015 - GUTS-RS
Guday2015 - GUTS-RSGuday2015 - GUTS-RS
Guday2015 - GUTS-RS
 
Braz. portuguese preparation_guide_tmap_next_test_engineer_201306
Braz. portuguese preparation_guide_tmap_next_test_engineer_201306Braz. portuguese preparation_guide_tmap_next_test_engineer_201306
Braz. portuguese preparation_guide_tmap_next_test_engineer_201306
 
Aula 8 TEES UFS Garantia de Qualidadedo Software
Aula 8 TEES UFS  Garantia de Qualidadedo Software Aula 8 TEES UFS  Garantia de Qualidadedo Software
Aula 8 TEES UFS Garantia de Qualidadedo Software
 
Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR Maturidade no desenvolvimento de software: CMMI e MPS-BR
Maturidade no desenvolvimento de software: CMMI e MPS-BR
 
04 fmea 2010
04 fmea 201004 fmea 2010
04 fmea 2010
 
Qa test roadsec-bh - testes de segurança, não comece pelo fim!
Qa test   roadsec-bh - testes de segurança, não comece pelo fim!Qa test   roadsec-bh - testes de segurança, não comece pelo fim!
Qa test roadsec-bh - testes de segurança, não comece pelo fim!
 
Aula 04 qs - sistemas embarcados
Aula 04   qs - sistemas embarcadosAula 04   qs - sistemas embarcados
Aula 04 qs - sistemas embarcados
 
Introducao swebok
Introducao swebokIntroducao swebok
Introducao swebok
 

Viewers also liked

Soluções shaddai apresentação simples
Soluções shaddai   apresentação simplesSoluções shaddai   apresentação simples
Soluções shaddai apresentação simplesCibeleTressoldi
 
201505 Gear - Bankportaal
201505 Gear - Bankportaal201505 Gear - Bankportaal
201505 Gear - Bankportaalgeareontop
 
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...Los formatos de Comunicación escrita, Técnicas de participación de la comunic...
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...YesicaZavarce
 
Sistema Periodico
Sistema PeriodicoSistema Periodico
Sistema Periodicodiazmarisa
 
Informacion importante sobre devolucion de dinero
Informacion importante sobre devolucion de dineroInformacion importante sobre devolucion de dinero
Informacion importante sobre devolucion de dineroWaldrik Navia
 
Ciências naturais 7 a célula
Ciências naturais 7   a célulaCiências naturais 7   a célula
Ciências naturais 7 a célulaNuno Correia
 
Kapouniaridou maria
Kapouniaridou mariaKapouniaridou maria
Kapouniaridou mariamairitsa
 
La evolucion de la tecnologia y su influencia en la sociedad
La evolucion de la tecnologia y su influencia en la sociedadLa evolucion de la tecnologia y su influencia en la sociedad
La evolucion de la tecnologia y su influencia en la sociedadyersiestefania
 
Cuatro Tribus – Four Tribes at the Board Games Studies 2012
Cuatro Tribus – Four Tribes at the Board Games Studies 2012Cuatro Tribus – Four Tribes at the Board Games Studies 2012
Cuatro Tribus – Four Tribes at the Board Games Studies 2012CuatroTribus
 
Ejercicios de gimp (ii)
Ejercicios de gimp (ii)Ejercicios de gimp (ii)
Ejercicios de gimp (ii)ameliayroro
 
Top 8 chief technologist resume samples
Top 8 chief technologist resume samplesTop 8 chief technologist resume samples
Top 8 chief technologist resume samplesporisherich
 
κανονισμός ιστοτόπου
κανονισμός ιστοτόπουκανονισμός ιστοτόπου
κανονισμός ιστοτόπουatht
 
Valores para la convivencia social
Valores para la convivencia socialValores para la convivencia social
Valores para la convivencia socialvamdragon
 
Fatos que provocam apurações
Fatos que provocam apuraçõesFatos que provocam apurações
Fatos que provocam apuraçõesJussiani Rosana
 

Viewers also liked (20)

Ght
GhtGht
Ght
 
Odys junior tab 8 pro
Odys junior tab 8 proOdys junior tab 8 pro
Odys junior tab 8 pro
 
Clube dos insonias
Clube dos insoniasClube dos insonias
Clube dos insonias
 
Soluções shaddai apresentação simples
Soluções shaddai   apresentação simplesSoluções shaddai   apresentação simples
Soluções shaddai apresentação simples
 
201505 Gear - Bankportaal
201505 Gear - Bankportaal201505 Gear - Bankportaal
201505 Gear - Bankportaal
 
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...Los formatos de Comunicación escrita, Técnicas de participación de la comunic...
Los formatos de Comunicación escrita, Técnicas de participación de la comunic...
 
Sistema Periodico
Sistema PeriodicoSistema Periodico
Sistema Periodico
 
E clenol label
E clenol labelE clenol label
E clenol label
 
Rafa nadal
Rafa nadalRafa nadal
Rafa nadal
 
Informacion importante sobre devolucion de dinero
Informacion importante sobre devolucion de dineroInformacion importante sobre devolucion de dinero
Informacion importante sobre devolucion de dinero
 
Ciências naturais 7 a célula
Ciências naturais 7   a célulaCiências naturais 7   a célula
Ciências naturais 7 a célula
 
12_patata1.ppt
12_patata1.ppt12_patata1.ppt
12_patata1.ppt
 
Kapouniaridou maria
Kapouniaridou mariaKapouniaridou maria
Kapouniaridou maria
 
La evolucion de la tecnologia y su influencia en la sociedad
La evolucion de la tecnologia y su influencia en la sociedadLa evolucion de la tecnologia y su influencia en la sociedad
La evolucion de la tecnologia y su influencia en la sociedad
 
Cuatro Tribus – Four Tribes at the Board Games Studies 2012
Cuatro Tribus – Four Tribes at the Board Games Studies 2012Cuatro Tribus – Four Tribes at the Board Games Studies 2012
Cuatro Tribus – Four Tribes at the Board Games Studies 2012
 
Ejercicios de gimp (ii)
Ejercicios de gimp (ii)Ejercicios de gimp (ii)
Ejercicios de gimp (ii)
 
Top 8 chief technologist resume samples
Top 8 chief technologist resume samplesTop 8 chief technologist resume samples
Top 8 chief technologist resume samples
 
κανονισμός ιστοτόπου
κανονισμός ιστοτόπουκανονισμός ιστοτόπου
κανονισμός ιστοτόπου
 
Valores para la convivencia social
Valores para la convivencia socialValores para la convivencia social
Valores para la convivencia social
 
Fatos que provocam apurações
Fatos que provocam apuraçõesFatos que provocam apurações
Fatos que provocam apurações
 

Similar to 11SMTF050922T03

Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfMichaelArrais1
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de TestesUFPA
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoSandy Maciel
 
Auditoria de sistemas de informação
Auditoria de sistemas de informaçãoAuditoria de sistemas de informação
Auditoria de sistemas de informaçãoSilvino Neto
 
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel GuilizeTI Safe
 
Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1Erivelton Silva Rocha
 
Modelo plano de_testes
Modelo plano de_testesModelo plano de_testes
Modelo plano de_testesIsaias Silva
 
Gerenciamento da Qualidade de Software 1.pptx
Gerenciamento da Qualidade de Software 1.pptxGerenciamento da Qualidade de Software 1.pptx
Gerenciamento da Qualidade de Software 1.pptxRoberto Nunes
 
Estudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationEstudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationAirton Lastori
 
Gestao eficaz de_ativos
Gestao eficaz de_ativosGestao eficaz de_ativos
Gestao eficaz de_ativosPedro Lessa
 
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...TI Safe
 
ISO15408, Common Criteria 2.x - Overview
ISO15408, Common Criteria 2.x - OverviewISO15408, Common Criteria 2.x - Overview
ISO15408, Common Criteria 2.x - OverviewJairo Willian Pereira
 

Similar to 11SMTF050922T03 (20)

Aula 02
Aula 02Aula 02
Aula 02
 
Aula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdfAula18_V&VTesteSoftware.pdf
Aula18_V&VTesteSoftware.pdf
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de Testes
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
Auditoria de sistemas de informação
Auditoria de sistemas de informaçãoAuditoria de sistemas de informação
Auditoria de sistemas de informação
 
Brisa - Cases Qualidade Sofware
Brisa -  Cases Qualidade SofwareBrisa -  Cases Qualidade Sofware
Brisa - Cases Qualidade Sofware
 
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize
[CLASS 2014] Palestra Técnica - Silvio Prestes e Daniel Guilize
 
Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1Aula 03 de engenharia de software uespi 2011-1
Aula 03 de engenharia de software uespi 2011-1
 
Modelo plano de_testes
Modelo plano de_testesModelo plano de_testes
Modelo plano de_testes
 
Gerenciamento da Qualidade de Software 1.pptx
Gerenciamento da Qualidade de Software 1.pptxGerenciamento da Qualidade de Software 1.pptx
Gerenciamento da Qualidade de Software 1.pptx
 
Estudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationEstudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool Qualification
 
Aula1 eng software
Aula1 eng softwareAula1 eng software
Aula1 eng software
 
Defesa Becker
Defesa BeckerDefesa Becker
Defesa Becker
 
Segurança em Desenvolvimento de Software
Segurança em Desenvolvimento de SoftwareSegurança em Desenvolvimento de Software
Segurança em Desenvolvimento de Software
 
Gestao eficaz de_ativos
Gestao eficaz de_ativosGestao eficaz de_ativos
Gestao eficaz de_ativos
 
Rational Unified Process (RUP)
Rational Unified Process (RUP)Rational Unified Process (RUP)
Rational Unified Process (RUP)
 
Trabalho CMM
Trabalho CMMTrabalho CMM
Trabalho CMM
 
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...
White Paper - O uso de padrões abertos para proteção de sistemas scada e de a...
 
152191 11993
152191 11993152191 11993
152191 11993
 
ISO15408, Common Criteria 2.x - Overview
ISO15408, Common Criteria 2.x - OverviewISO15408, Common Criteria 2.x - Overview
ISO15408, Common Criteria 2.x - Overview
 

11SMTF050922T03

  • 1. 11a Semana de Tecnologia Metroferroviária – Fórum Técnico Associação dos Engenheiros e Arquitetos de Metrô - AEAMESP IMPORTÂNCIA DA QUALIDADE DE SOFTWARE EM SEGURANÇA CRÍTICA Introdução O objetivo deste trabalho, frente ao atual cenário do setor Metroferroviário, é de conscientização e esclarecimento sobre o Controle da Qualidade de Software de Sistemas Sinalização e Controle, demonstrando providências exigíveis a Empresas Fornecedoras e Projetistas destes Sistemas. No meio acadêmico, são ainda muito discutidas as problemáticas da realização de funções de segurança através de Software. Apesar do tímido número de evidências científicas de que equipamentos baseados em Software se comportam de maneira segura, a prática em diversas áreas demonstra um quadro irreversível de aplicação intensiva desses equipamentos nos mais diversos sistemas, conforme vivenciamos no nosso dia a dia. A obtenção de um Software Seguro envolve inúmeros fatores, entre eles a experiência e o preparo de toda a equipe envolvida no Processo, o uso de técnicas e ferramentas apropriadas, uma criteriosa Análise de Segurança Independente e, dentre os atributos da Qualidade de Software, em especial sua Confiabilidade. Confiabilidade de Software A Confiabilidade de Software pode ser definida como a “probabilidade de operação livre de falhas por um período de tempo especificado em um determinado ambiente” [ANSI 1991]. A Confiabilidade é um dos atributos da Qualidade de Software, uma propriedade multidimensional que inclui outros fatores de satisfação do cliente tais como funcionalidade, facilidade de uso, desempenho, capacidade, documentação, facilidades de suporte, instalação e manutenção [Grad 1987, Grad 1992]. A Confiabilidade de Software é geralmente aceita como o fator principal da Qualidade de Software, pois quantifica as falhas de Software – que podem tirar de operação um poderoso sistema ou até mesmo trazer riscos às pessoas e patrimônio [Lyu 1996].
  • 2. Os métodos mais respeitados e evoluídos para a avaliação da confiabilidade de software, tal como descrito em “Software Reliability Engineering” [Musa 1999], são baseados na observação de falhas do produto terminado, sustentada por análise estatística. Estes métodos são a única forma de medir a confiabilidade do produto, pois são baseadas na observação direta de seu comportamento. As importantes desvantagens destas abordagens são [Dale 1990]: • estão preocupadas puramente com a medida da confiabilidade, enquanto outras informações sobre, por exemplo, os métodos que foram utilizados no desenvolvimento do produto, são ignoradas; e • só podem ser utilizadas quando o produto final existe, portanto sua aplicação só pode ser iniciada a partir da obtenção de dados durante a fase de testes do desenvolvimento. Uma alternativa pesquisada para a obtenção de Software de alta confiabilidade é a especificação e análise dos Processos de Desenvolvimento de Software adotados em um projeto, em conformidade com as normas técnicas adequadas a aplicação, além de modelos de ampla aceitação. Adotando-se uma abordagem deste tipo, a avaliação da confiabilidade deve ser realizada sobre os produtos intermediários de cada fase do processo de desenvolvimento, antes de se obter o produto final. Segurança de Software (SW Safety) A Segurança de um sistema S(t) é a probabilidade de um sistema efetuar suas operações de forma correta, ou descontinuar seu funcionamento de forma a não comprometer a operação de outros sistemas ou comprometer a Segurança [Johnson 1989]. As técnicas de “falha segura” (fail-safe) têm sido empregadas desde em sistemas eletrônicos convencionais e até mesmo nas principais rotinas de diagnóstico de funções de Software e componentes de Hardware, bem como nos conceitos de programação defensiva. Especificação de Requisitos Técnicos de Software A Especificação Técnica de Software abordada a seguir foi elaborada, a princípio, tendo em vista um horizonte de aplicação da tecnologia “Communications Based Train Control” (CBTC) na
  • 3. implantação e modernização de Sistemas de Sinalização e Controle. O emprego desta nova tecnologia traz desafios tais como: • uso intensivo de Software para a realização de funções de Tempo Real e Segurança Crítica; • fatores de aumento natural do risco e a conseqüente necessidade de sua mitigação através da tecnologia, tais como a diminuição do intervalo entre trens (“headway”), operação automática sem condutor (“driverless”), funções de diagnóstico e recuperação remotas; • transmissão intensiva por meio aberto de sinais vitais, trazendo preocupações típicas da Segurança da Informação (“security”), além do envelhecimento de informações de tempo real, que devem ser tratadas pelo Software de comunicação; • determinação da posição das composições e distâncias percorridas utilizando múltiplos sensores, e tratamento por algoritmos que incluem informações sobre margens de segurança para determinação e cumprimento de pontos de parada com segurança; • emprego limitado de hardware intrinsecamente “fail-safe” e componentes com modos de falha bem definidos; e • os conceitos consagrados de Segurança de um Sistema de Sinalização e Controle devem ser implementados de forma completa e claramente verificáveis [IEEE 2005]. No entanto, devido a incorporação da experiência obtida pelo METRÔ-SP no projeto e implantação dos sistemas de Sinalização e Controle, somada a estudos realizados em conjunto com a Fundação para o Desenvolvimento Tecnológico da Engenharia - FDTE, foi considerado adequado o emprego desta metodologia para a aquisição de Software do Sistema de Sinalização e Controle de Trens – Estações e Vias da Extensão da Linha 2 – Verde, trecho Ana Rosa – Ipiranga, mesmo tratando-se de um Sistema Microprocessado Convencional, e dentre seus principais requisitos, serão enfatizados: Conformidade com CMMi A Capacidade do Processo [CMU/SEI 2002] estabelece o grau de refinamento e institucionalização com que o processo é realizado em uma organização, em cinco níveis discretos, em sua representação por estágios, conforme representado na Figura 1.
  • 4. Nível 1 - Inicial Fracamente Controlado, Imprevisível Nível 2 - Repetível Repetição de Tarefas executadas com sucesso Nível 3 - Definido Processo caracterizado e claramente entendido Nível 4 - Gerenciado Processo medido e controlado Nível 5 - Otimização Foco na melhoria contínua do Processo Figura 1 - Estágios do CMMi Os atributos de processo pertinentes ao nível 2 do CMMi, pelo qual estamos iniciando a utilização desta metodologia, ilustrados na Figura 2, podem ser assim resumidos: • o Processo é Executado; • o Processo atinge seus resultados definidos; e • os produtos de trabalho do Processo são gerenciados. SaídasEntradas Figura 2 - CMMi nível 2 - Visibilidade A Especificação Técnica de Software apresenta o seguinte requisito: A Contratada deve adotar a metodologia estabelecida no “Capability Maturity Model Integration for Systems Engineering and Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior, do “Software Engineering Institute / Carnegie Mellon University” (SEI/CMU) para todo o Software fornecido, sendo que:
  • 5. Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, na representação em estágios “Staged Representation”; A Contratada deve comprovar pelo “Standard CMMI Appraisal Method for Process Improvement” (SCAMPI) [CMU/SEI 2001], o emprego desta metodologia por toda equipe envolvida no projeto. Nível de Integridade de Segurança (SIL) A Especificação Técnica de Software apresenta o seguinte requisito com relação ao Nível de Integridade de Segurança de Software, que juntamente com os parâmetros de Segurança do Hardware irão determinar a Segurança do Sistema, traduzido em valores na Figura 3. Os conceitos de “Fail Safe” devem ser utilizados no Software relacionado às funções de Segurança Crítica ou Vitais. Deve atender ao “Software Safety Integrity Level” (SIL) quatro (4), conforme a norma IEC 61508 “Functional Safety of Electrical/Electronic/Programmable Electronic Safety- Related Systems”. SIL Falhas inseguras / hora 4 10-9 < λu < 10-8 3 10-8 < λu < 10-7 2 10-7 < λu < 10-6 1 10-6 < λu < 10-5 Figura 3 – Nível de Integridade de Segurança [IEC 1999] Conformidade com a Norma CENELEC 50128 Um importante requisito na Especificação Técnica de Software é a conformidade com a Norma CENELEC 50128 [CENELEC 2001], específica para o Software aplicado a Sistemas de Sinalização e Controle: Devem ser atendidas as recomendações da norma CENELEC 50128 “Railway applications – Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”. Conforme podemos observar no diagrama seguinte, presente na Figura 4, as atividades específicas para a obtenção do Software estão vinculadas às especificações do Sistema onde ele é empregado.
  • 6. Integração de Sistema Especificação de Requisitos de Sistema Especificação de Requisitos de Segurança de Sistema Descrição da Arquitetura de Sistema Plano de Segurança de Sistema Especificação dos Requisitos de Software Especificação de teste de Requisitos de Software Especificação de Arquitetura de Software Plano de Integração de Software Especificação de Projeto de Software Especificação de Teste de Módulo de Software Especificação de Projeto de Módulo de Software Código Fonte de Software, e documentação de suporte Relatório de Teste de Módulo de Software Relatório de Teste de Integração de Software Relatório de Teste de Integração de Software e Hardware Documentos de Integração e Teste de Sistema Verificação do Sistema Verificação dos Requisitos de Software Verificação da Arquitetura de Software Verificação do Projeto de Software Verificação dos módulos de Software Verificação de Código Validação de Software Validação de Sistema Teste de Software Implementação / Codificação Projeto de Software Requisitos de Software Integração de Software e Hardware Documentos de Projeto Verificação Etapa Documentos de Instalação do Sistema Documentos de Manutenção do Sistema Validação do Sistema Desenvolvimento do Sistema Projeto de Módulo de Software Validação de Software Transição para Suporte Figura 4 - Ciclo de Vida e Artefatos [CENELEC 2001]
  • 7. Planejamento de Software Antes do início do desenvolvimento do Software, foi detectada a necessidade de solicitar à empresa fornecedora e projetista a elaboração de Planos específicos aos processos de obtenção de Software com o nível de Segurança adequado à aplicação no sistema de Sinalização e Controle: • Plano de Gerenciamento de Software; • Plano de Garantia da Qualidade de Software; • Plano de Gerência de Configuração de Software; • Plano de Verificação de Software de Aplicação Crítica e de Segurança; e • Plano de Validação de Software. Estes documentos deverão ser submetidos à aprovação, incluindo eventuais alterações ao longo do fornecimento. Ciclo de Vida A Especificação Técnica de Software apresenta, ainda, uma descrição das fases de um Ciclo de Vida do Software de referência, listadas a seguir: • Especificação de Requisitos de Software; • Arquitetura de Software; • Projeto de Software; • Implementação de Software; • Integração e Testes de Software; • Validação de Software; • Aceitação de Software; e • Operação e Manutenção. Conclusões Este trabalho tem por objetivo obter uma maior garantia do nível de Segurança do Software e, ainda, a redução do re-trabalho e conseqüente otimização dos recursos empregados, possibilitando também um maior controle sobre o processo e as tecnologias em implantação. Não deixando de observar as limitações impostas pelo estágio de desenvolvimento atual da indústria nacional, é importante vislumbrar esta oportunidade e necessidade de progresso,
  • 8. aproveitando a experiência e capacidade de inovação, e incorporando a iniciativa dos maiores consumidores de Software mundiais e a produção científico-acadêmica disponível nesta área. Referência Bibliográfica [CMU/SEI 2002] Carnegie Mellon University Software Engineering Institute: “CMMI-SE/SW – Capability Maturity Model Integration (CMMI), Version 1.1: CMMI for Systems Engineering and Software Engineering, Staged Representation”, CMU/SEI-2002-TR-002, 2002. [CMU/SEI 2001] Carnegie Mellon University Software Engineering Institute: “SCAMPI – Standard CMMI Appraisal Method for Process Improvement Version 1.1: Method Definition Document”, CMU/SEI-2001-HB-001, 2001. [CENELEC 2001] European Committee for Electrotechnical Standardization: “Railway Applications – Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”, BS-EN 50128, 2001. [Dale 1990] Dale, C.; Paul Rook (ed.) – “Software Reliability Handbook” – Elsevier Applied Science, 1990. [Johson 1989] Barry W. Johnson –“Design and Analyses of fault-Tolerant Digital Systems” – Addison-Wesley, 1989. [Lyu 1996] Michael R. Lyu (ed.) – “Handbook of Software Reliability Engineering”, McGraw-Hill, 1996. [Musa 1999] Musa J.D. – “Software Reliability Engineering”, McGraw-Hill, 1999. [ANSI 1991] ANSI/IEEE, "Standard Glossary of Software Engineering Terminology", STD-729-1991, ANSI/IEEE, 1991. [GRAD 1987] Grady, Robert B.; Caswell, Deborah L.- “Software Metrics: Establishing a Company-Wide Program.” Prentice Hall, 1987. [GRAD 1992] Grady, Robert B. - “Practical Software Metrics for Project Management and Process Improvement”. Prentice Hall, 1992. [IEEE 2005] IEEE Standard for Communications-Based Train Control (CBTC) Performance and Functional Requirements, Institute of Electrical and Electronics Engineers, IEEE 1474-1, 2005. [IEC 1999] Functional safety of electrical/electronic/programmable electronic safety-related systems - General requirements, IEC 61508-1, 1999. Eng. Christian Becker Bueno de Abreu e-mail: cbecker@metrosp.com.br – tel. 55-11-3371-7222 Engenheiro de Projeto da Companhia do Metropolitano de São Paulo – METRÔ Departamento de Projeto de Sistemas de Controle e Comunicações – GEP/EPS Prof. Dr. Paulo Sérgio Cugnasca Escola Politécnica da Universidade de São Paulo (EPUSP) Departamento de Engenharia de Computação e Sistemas Digitais (PCS) Grupo de Análise de Segurança (GAS)
  • 9. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { 11ª Semana de Tecnologia Metroferroviária Importância da Qualidade de Software em Segurança Crítica Eng. Christian Becker Bueno de Abreu Prof. Dr. Paulo Sérgio Cugnasca
  • 10. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Software - Definições “Software”: Criação intelectual compreendendo os programas, procedimentos, regras e qualquer documentação correlata de um sistema de processamento de dados NOTA: O “software” não depende do meio no qual é registrado. Desenvolvimento: Todas as atividades a serem realizadas para a criação de um produto de Software. [NBR ISO 9000-3] Natureza do Software ???
  • 11. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Software - Definições “Software”: Criação intelectual compreendendo os programas, procedimentos, regras e qualquer documentação correlata de um sistema de processamento de dados NOTA: O “software” não depende do meio no qual é registrado. Desenvolvimento: Todas as atividades a serem realizadas para a criação de um produto de Software. [NBR ISO 9000-3]
  • 12. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Qualidade & Segurança - Definições Qualidade - indicadores ● Confiabilidade ● Funcionalidade ● Facilidade de uso ● Desempenho ● Capacidade ● Documentação ● Suporte, Instalação e Manutenção Segurança - S(t) Probabilidade de um sistema efetuar suas operações de forma correta ou descontinuar seu funcionamento de forma a não comprometer a operação de outros sistemas ou comprometer a Segurança
  • 13. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Qualidade ∩ Segurança - Confiabilidade Confiabilidade - R(t) Probabilidade de operação livre de falhas por um período de tempo especificado em um determinado ambiente QUALIDADEQUALIDADE CONFIABILIDADECONFIABILIDADE MTTF 0 R t . dt
  • 14. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Qualidade & Segurança - Definições Qualidade - indicadores ● Confiabilidade ● Funcionalidade ● Facilidade de uso ● Desempenho ● Capacidade ● Documentação ● Suporte, Instalação e Manutenção Segurança - S(t) Probabilidade de um sistema efetuar suas operações de forma correta ou descontinuar seu funcionamento de forma a não comprometer a operação de outros sistemas ou comprometer a Segurança
  • 15. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Qualidade & Segurança - Definições Qualidade - indicadores ● Confiabilidade ● Funcionalidade ● Facilidade de uso ● Desempenho ● Capacidade ● Documentação ● Suporte, Instalação e Manutenção Segurança - S(t) Probabilidade de um sistema efetuar suas operações de forma correta ou descontinuar seu funcionamento de forma a não comprometer a operação de outros sistemas ou comprometer a Segurança
  • 16. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Medição da Confiabilidade Medir a Confiabilidade: Observação de falhas + Análise estatística. Problemas: - Início na etapa de testes: Produto deve estar terminado - Tempo necessário: Software Ultra-confiabilidade - Informações ignoradas: Métodos empregados Alternativa: Especificação e Análise dos Processos de Desenvolvimento de Software. Conformidade com Normas Técnicas adequadas e Modelos de ampla aceitação. Avaliação da Confiabilidade sobre Artefatos Intermediários de cada fase do Processo de Desenvolvimento.
  • 17. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Medição da Confiabilidade Medir a Confiabilidade: Observação de falhas + Análise estatística. Problemas: - Início na etapa de testes: Produto deve estar terminado - Tempo necessário: Software Ultra-confiabilidade - Informações ignoradas: Métodos empregados Alternativa: Especificação e Análise dos Processos de Desenvolvimento de Software. Conformidade com Normas Técnicas adequadas e Modelos de ampla aceitação. Avaliação da Confiabilidade sobre Artefatos Intermediários de cada fase do Processo de Desenvolvimento.
  • 18. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CMU/SEI - CMMi Representação em estágios: A Capacidade do Processo estabelece o seu grau de refinamento e institucionalização.
  • 19. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CMU/SEI - CMMi Visibilidade: CMMi nível 2
  • 20. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Requisito Técnico de Software - Qualidade Deve ser adotada a metodologia estabelecida no “Capability Maturity Model Integration for Systems Engineering and Software Engineering” (CMMI-SE/SW), versão 1.1 ou superior, do “Software Engineering Institute / Carnegie Mellon University” (SEI/CMU) para todo o Software fornecido, sendo que: ● Deve ser adotado CMMI-SE/SW nível dois (2) ou superior, na representação em estágios “Staged Representation”; ● Deve ser comprovado pelo “Standard CMMI Appraisal Method for Process Improvement” (SCAMPI), o emprego desta metodologia por toda equipe envolvida no projeto. [EPS 2004]
  • 21. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Fail Safe (Falha Segura) A validade deste conceito é, em geral, baseada na experiência, mas tem aplicação limitada ao desenvolvimento e uso de sistemas grandes e complexos empregando microprocessadores comerciais. O crescimento exponencial no número de combinações de falhas a serem consideradas quando usando tais componentes significam que uma abordagem determinística é, geralmente impraticável. Com tais sistemas complexos, a abordagem probabilística pode ser usada efetivamente. [CENELEC 50126] Exemplos de aplicação em Software: - Rotinas de diagnóstico - Programação Defensiva
  • 22. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Níveis de Risco Determinação dos Níveis de Risco *Freqüênciada ocorrênciadeum eventodeameaça NíveisdeRisco Freqüente Indesejável Intolerável Intolerável Intolerável Provável Tolerável Indesejável Intolerável Intolerável Ocasional Tolerável Indesejável Indesejável Intolerável Remoto Negligenciável Tolerável Indesejável Indesejável Improvável Negligenciável Negligenciável Tolerável Tolerável Inacreditável Negligenciável Negligenciável Negligenciável Negligenciável Insignificante Marginal Crítico Catastrófico Níveisdegravidadedaconseqüênciadaameaça.
  • 23. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { IEC 61508 - Parâmetros para determinar SIL Conseqüência do Risco C1 Perdas Pequenas. C2 Perdas sérias e permanentes para uma ou mais pessoas, ou morte de uma pessoa. C3 Morte de várias pessoas. C4 Muitas pessoas assassinadas. Freqüência e Tempo de Exposição F1 Exposição de rara a freqüente na região de perigo. F2 Exposição de freqüente a permanente na região de perigo. Possibilidade de evitar o evento P1 Possível sob certas condições. P2 Quase impossível. Probabilidade de ocorrências indesejáveis W1Probabilidade muito pequena de que as ocorrências acontecerão. W2Probabilidade pequena de que as ocorrências acontecerão. W3Probabilidade relativamente alta de que as ocorrências acontecerão.
  • 24. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { IEC 61508 - Parâmetros para determinar SIL Conseqüência do Risco C1 Perdas Pequenas. C2 Perdas sérias e permanentes para uma ou mais pessoas, ou morte de uma pessoa. C3 Morte de várias pessoas. C4 Muitas pessoas assassinadas. Freqüência e Tempo de Exposição F1 Exposição de rara a freqüente na região de perigo. F2 Exposição de freqüente a permanente na região de perigo. Possibilidade de evitar o evento P1 Possível sob certas condições. P2 Quase impossível. Probabilidade de ocorrências indesejáveis W1Probabilidade muito pequena de que as ocorrências acontecerão. W2Probabilidade pequena de que as ocorrências acontecerão. W3Probabilidade relativamente alta de que as ocorrências acontecerão.
  • 25. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { IEC 61508 - Parâmetros para determinar SIL Conseqüência do Risco C1 Perdas Pequenas. C2 Perdas sérias e permanentes para uma ou mais pessoas, ou morte de uma pessoa. C3 Morte de várias pessoas. C4 Muitas pessoas assassinadas. Freqüência e Tempo de Exposição F1 Exposição de rara a freqüente na região de perigo. F2 Exposição de freqüente a permanente na região de perigo. Possibilidade de evitar o evento P1 Possível sob certas condições. P2 Quase impossível. Probabilidade de ocorrências indesejáveis W1Probabilidade muito pequena de que as ocorrências acontecerão. W2Probabilidade pequena de que as ocorrências acontecerão. W3Probabilidade relativamente alta de que as ocorrências acontecerão.
  • 26. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { IEC 61508 - Parâmetros para determinar SIL Conseqüência do Risco C1 Perdas Pequenas. C2 Perdas sérias e permanentes para uma ou mais pessoas, ou morte de uma pessoa. C3 Morte de várias pessoas. C4 Muitas pessoas assassinadas. Freqüência e Tempo de Exposição F1 Exposição de rara a freqüente na região de perigo. F2 Exposição de freqüente a permanente na região de perigo. Possibilidade de evitar o evento P1 Possível sob certas condições. P2 Quase impossível. Probabilidade de ocorrências indesejáveis W1Probabilidade muito pequena de que as ocorrências acontecerão. W2Probabilidade pequena de que as ocorrências acontecerão. W3Probabilidade relativamente alta de que as ocorrências acontecerão.
  • 27. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Redução de Risco Nível de Integridade de Segurança - Sem Requisitos de Segurança A Sem Requisitos Especiais de Segurança B, C SIL 1 D SIL 2 E, F SIL 3 G SIL 4 H Sistemas de Proteção não Suficientes IEC 61508 - Determinar Redução de Risco e SIL W3 W2 W1 C1 A - - C2 F1 P1 B A - P2 C B A F2 P1 D C B P2 E D C C3 F1 F E D F2 G F E C4 H G F SIL Falhas inseguras / hora 4 10-9 < u < 10-8 3 10-8 < u < 10-7 2 10-7 < u < 10-6 1 10-6 < u < 10-5
  • 28. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { SIL Falhas inseguras / hora 4 10-9 < u < 10-8 3 10-8 < u < 10-7 2 10-7 < u < 10-6 1 10-6 < u < 10-5 W3 W2 W1 C1 A - - C2 F1 P1 B A - P2 C B A F2 P1 D C B P2 E D C C3 F1 F E D F2 G F E C4 H G F IEC 61508 - Determinar Redução de Risco e SIL Redução de Risco Nível de Integridade de Segurança - Sem Requisitos de Segurança A Sem Requisitos Especiais de Segurança B, C SIL 1 D SIL 2 E, F SIL 3 G SIL 4 H Sistemas de Proteção não Suficientes
  • 29. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { IEC 61508 - Determinar Redução de Risco e SIL Redução de Risco Nível de Integridade de Segurança - Sem Requisitos de Segurança A Sem Requisitos Especiais de Segurança B, C SIL 1 D SIL 2 E, F SIL 3 G SIL 4 H Sistemas de Proteção não Suficientes W3 W2 W1 C1 A - - C2 F1 P1 B A - P2 C B A F2 P1 D C B P2 E D C C3 F1 F E D F2 G F E C4 H G F SIL Falhas inseguras / hora 4 10-9 < u < 10-8 3 10-8 < u < 10-7 2 10-7 < u < 10-6 1 10-6 < u < 10-5
  • 30. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Software & Segurança: EN50128 SWSIL Tendo caracterizado o Nível de Integridade de Segurança (SIL) para o Sistema Metro-ferroviário, o Software na área de Sinalização para tal Sistema deverá possuir o mesmo valor. 5.2.2 Os requisitos de nível de integridade de segurança de software (SWSIL) deverão ser decididos com base no nível de risco associado com a utilização do software no sistema e no nível de integridade de segurança de software. [CENELEC 50128]
  • 31. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CENELEC 50128 4 3 2 1 0 4 3 2 1 0 SWSILSIL Freqüência de Ameaça Conseqüência Ameaça Equipamentos Sujeitos a Controle Nível Risco: Ausência Proteção Exige Redução Riscos 4 3 2 1 0 4 3 2 1 0 SWSIL Freqüência de Ameaça Conseqüência Ameaça Equipamentos Sujeitos a Controle Nível Risco: Ausência Proteção Exige Redução Riscos
  • 32. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CENELEC 50128 - Ciclo de Vida I
  • 33. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CENELEC 50128 - Ciclo de Vida II
  • 34. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { CENELEC 50128 - Ciclo de Vida III
  • 35. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Requisito Técnico de Software - Segurança Os conceitos de “Fail Safe” devem ser utilizados no Software relacionado às funções de Segurança Crítica ou Vitais. Deve atender ao “Software Safety Integrity Level” (SIL) quatro (4), conforme a norma IEC 61508 “Functional Safety of Electrical/Electronic/Programmable Electronic Safety-Related Systems”. Devem ser atendidas as recomendações da norma CENELEC 50128 “Railway applications – Communications, Signaling and Processing Systems – Software for Railway Control and Protection Systems”. [EPS 2004]
  • 36. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { Emprego de Software em Sinalização - Horizonte Considerações: ● Uso Intensivo de SW em Tempo Real e Segurança Crítica; ● Fatores de aumento natural do risco; ● Transmissão por meio aberto de Sinais Vitais; ● Determinação de distância por múltiplos sensores; ● Emprego limitado de Hardware fail-safe; Os conceitos consagrados de Segurança de um Sistema de Sinalização e Controle devem ser implementados de forma completa e claramente verificáveis. [IEEE 1474-1]
  • 37. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { O Software com Qualidade: ● Maior Garantia do Nível de Segurança ● Redução do Retrabalho ● Otimização de Recursos ● Controle sobre o Processo ● Controle sobre Tecnologias em Implantação ● Integra Experiência e Capacidade de Inovação ● Incorporação de Iniciativas dos maiores Consumidores de Software mundiais e da Produção Científico-acadêmica na área.
  • 38. 202 3 FtxBAC[UFtxBAC].m[i+1] = msg[i]; 203 3 i++; 204 3 } 205 2 206 2 FtxBAC[UFtxBAC].m[0] = n; 207 2 208 2 209 2 /* Atualiza indices da fila de transmissao. */ 210 2 if (UFtxBAC >= (MAXFTXBAC-1)) 211 2 UFtxBAC = 0; 212 2 else 213 2 UFtxBAC ++; 214 2 QFtxBAC ++; 215 2 216 2 return(TRUE); 217 2 } 218 1 return(FALSE); 219 1 } 248 BYTE ObtemMsgBAC (BYTE *msg) 249 { 250 1 BYTE i; 251 1 252 1 /* Existe mensagens na Fila de Recepcao. */ 253 1 if (QFrxBAC > 0) 254 1 { 255 2 /* Sim. Copia a mensagem para o ponteiro. */ 256 2 i = 0; 257 2 while (i < FrxBAC[PFrxBAC].m[0]) 258 2 { 259 3 msg[i] = FrxBAC[PFrxBAC].m[i+1]; 260 3 i++; 261 3 } 262 2 263 2 /* [02] */ 264 2 /* Atualiza indices da fila de recepcao. */ 265 2 disable(); 266 2 if (PFrxBAC >= (MAXFRXBAC-1)) 267 2 PFrxBAC = 0; 268 2 else 269 2 PFrxBAC ++; 270 2 QFrxBAC --; 271 2 enable(); 272 2 273 2 return(i); 274 2 } 275 1 276 1 return(0); 277 1 } 302 void EnviaAckBAC (void) 303 { 304 1 TxMsgAckBAC(); 305 1 FlagTxBAC = 2; 306 1 TimerTimeoutBAC = TimerRelogio3; 307 1 return; 308 1 } 333 void EnviaNackBAC (void) 89 void IniciaBAC (void) 90 { 91 1 Diagnostico[0x07] ++; 92 1 UFtxBAC = 0; 93 1 PFtxBAC = 0; 94 1 AFtxBAC = 0; 95 1 QFtxBAC = 0; 96 1 UFrxBAC = 0; 97 1 PFrxBAC = 0; 98 1 QFrxBAC = 0; 99 1 FlagTxBAC = 0; 100 1 FlagEstadoBAC = 0; 101 1 FlagCpcBAC = 0; 102 1 FalhasBAC = 0; 103 1 NrtxBAC = MAXRETXBAC; 104 1 SemaforoTxBAC = 0x0F; 105 1 TimerTimeoutBAC = TimerRelogio3; 106 1 TimerJanelaBAC = TimerRelogio2; 107 1 ProgramaRS232C(); 108 1 InsereTarefa(14, NIL, NIL, (14 ^ NIL ^ NIL)); 109 1 110 1 #if MESTREBAC == 1 #endif 113 1 return; 114 1 } 141 void TestaFilaBAC (void) 142 { 143 1 Diagnostico[0x44]++; 144 1 145 1 disable(); 146 1 if ((PFrxBAC >= MAXFRXBAC) || 147 1 (UFrxBAC >= MAXFRXBAC) || 148 1 (QFrxBAC > MAXFRXBAC) || 149 1 (PFtxBAC >= MAXFTXBAC) || 150 1 (UFtxBAC >= MAXFTXBAC) || 151 1 (QFtxBAC > MAXFTXBAC)) 152 1 { 153 2 /* Erro. */ 154 2 FalhaFatal = 0x09; 155 2 ErroFatal(); 156 2 halt(); 157 2 } 158 1 enable(); 159 1 return; 160 1 } 190 BYTE EnviaMsgBAC (BYTE *msg, BYTE n) 191 { 192 1 BYTE i; 193 1 194 1 /* [01] */ 195 1 if ((SemaforoTxBAC == 0) && (QFtxBAC < MAXFTXBAC) && 196 1 (n < MAXBFTXBAC)) 197 1 { 198 2 /* Copia a mensagem para a fila. */ 199 2 i = 0; 200 2 while (i < n) 201 2 { + + + “Nada disso é tudo, Tudo isso é fundamental.” [H Gessiger, Engenheiros do Hawaii] Christian Becker Bueno de Abreu cbecker@metrosp.com.br