BRPI0806143B1 - Aparelhos para medição de multi-canal de eletricidade - Google Patents

Aparelhos para medição de multi-canal de eletricidade Download PDF

Info

Publication number
BRPI0806143B1
BRPI0806143B1 BRPI0806143-2A BRPI0806143A BRPI0806143B1 BR PI0806143 B1 BRPI0806143 B1 BR PI0806143B1 BR PI0806143 A BRPI0806143 A BR PI0806143A BR PI0806143 B1 BRPI0806143 B1 BR PI0806143B1
Authority
BR
Brazil
Prior art keywords
operable
pic
communication
fact
status
Prior art date
Application number
BRPI0806143-2A
Other languages
English (en)
Inventor
Sayre A. Swarztrauber
Doron Shafrir
Siddharth Malik
Robert Hayward
Original Assignee
Quadlogic Controls Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Quadlogic Controls Corporation filed Critical Quadlogic Controls Corporation
Priority to BRPI0806143-2A priority Critical patent/BRPI0806143B1/pt
Publication of BRPI0806143A2 publication Critical patent/BRPI0806143A2/pt
Publication of BRPI0806143B1 publication Critical patent/BRPI0806143B1/pt

Links

Landscapes

  • Arrangements For Transmission Of Measured Signals (AREA)
  • Remote Monitoring And Control Of Power-Distribution Networks (AREA)

Abstract

aparelhos para medição de multi-canal de eletricidade. em um aspecto, a invenção inclui um dispositivo para medir uso de eletricidade, incluindo: meio para desconexão remota por comunicação de linha de potência; meio para detecção de roubo de eletricidade; meio para detecção de fraude; e meio para detecção de tensão inversa. em outro aspecto, a invenção inclui um aparelho para medição de multi-canal de eletricidade, incluindo: (a) uma cabeça de medidor operável para medir uso de eletricidade para uma pluralidade de linhas de consumidor de eletricidade; (b) um transponder operável para transmitir dados recebidos da cabeça de medidor por comunicação de linha de potência para um computador localizado remotamente, e para transmitir dados recebidos por comunicação de linha de potência do computador localizado remotamente para a cabeça de medidor; e (c) um módulo de controle de carga operável para atuar conexão e desconexão de cada um de uma pluralidade de relés, cada relé da pluralidade de relés correspondendo a uma da pluralidade de linhas de consumidor de eletricidade.

Description

“APARELHOS PARA MEDIÇÃO DE MULTI-CANAL DE ELETRICIDADE” Referência Cruzada a Pedidos Relacionados [0001] Este pedido reivindica o benefício de Pedido de Patente Provisório US N° 60/737.580, depositado em 15 de novembro de 2005, Pedido de Patente Provisório US N° 60/739.375, depositado em 23 de novembro de 2005, e Pedido Provisório N° 60/813.901, depositado em 15 de junho de 2006, e é uma continuação em parte de Pedido de Patente US N° 11/431.849, depositado em 9 de maio de 2006, que é uma parte de Pedido de Patente US N° 11/030.417, depositado em 6 de janeiro de 2005 (agora Patente No. 7.054.770), que é uma parte de Pedido de Patente US N° 09/795.838, depositado em 28 de fevereiro de 2001 (agora Patente US N° 6.947.854). Os conteúdos inteiros de cada um desses pedidos estão incorporados aqui por referência.
Fundamento e Resumo [0002] Uma concretização da presente invenção inclui um dispositivo de medição que está relacionado à família de medidores baseada em ASIC Quadlogic (veja Patente US N° 6.947.854, e Publicação de Pedido de Patente US N° 20060036388, os conteúdos inteiros de quais estão incorporados aqui por referência). Especificamente, esta concretização (referida aqui para conveniência como Guarda de Energia) é um medidor de multi-canal que preferivelmente é capaz de prover muita da funcionalidade da família supracitada de medidores, e ademais provê as melhorias, características e componentes listados abaixo.
[0003] Usado em pelo menos uma concretização, um 'MiniCloset' é um dispositivo de medição de 24 canais que pode medir uso elétrico para até 24 clientes monofásicos, 12 clientes bifásicos, ou 8 clientes trifásicos. Preferivelmente conectado ao MiniCloset estão um ou mais Módulos de Controle de Carga (LCMs), discutidos abaixo.
[0004] Guarda de energia inclui preferivelmente um módulo de cabeça de medidor de MiniCloset e dois LCMs montados em uma caixa de aço. Relés que permitem para um cliente de eletricidade ser remotamente desconectado e reconectado, junto com transformadores de corrente, também estão montados na
Petição 870180163276, de 14/12/2018, pág. 12/97
2/77 caixa. Veja a Figura 1.
[0005] Na instalação, a linha de provisão de eletricidade de um cliente de eletricidade é derivada do alimentador elétrico principal, passado pelo aparelho de Guarda de Energia, e corre diretamente à casa do cliente. A construção e uso do Guarda de Energia serão aparentes àqueles qualificados na arte na revisão da descrição abaixo e figuras relacionadas. Código fonte é provido no Apêndice anexo. [0006] Medidores de Guarda de Energia preferivelmente são operáveis para prover:
(A) Desconexão/Reconexão Remota: O medidor suporta comunicação duplex total (bidirecional) por comunicação de linha de potência (PLC) e pode ser equipado com relês operados remotamente (60 A, 100 A, ou 200 A) que permitem desconexão e reconexão de usuários elétricos remotamente.
(B) Prevenção de Roubo: O sistema é projetado com três características específicas para prevenir roubo. Primeira, um aparelho de Guarda de Energia preferivelmente é instalado em um poste de utilidade acima das linhas de média tensão, fazendo difícil para clientes alcançarem e fraudarem. Segunda, porque não há nenhum fio de sinal adicional com o sistema (isto é, toda a comunicação é pela linha de potência), quaisquer fios de comunicação cortados são imediatamente detectáveis. Quer dizer, se um fio de comunicação for cortado, o serviço é cortado, que é prontamente aparente. Uma terceira característica de prevenção de roubo é que o medidor pode ser usado para medir a energia de transformador a fim de validar os totais medidos de clientes individuais. Discrepâncias podem indicar roubo de energia.
(C) Detecção de Fraude: O Guarda de Energia preferivelmente provê dois modos de detecção de fraude óptica. Cada unidade contém uma luz que reflete contra um pequeno adesivo como espelho. A ausência desta luz reflexiva indica que a caixa foi aberta. Esta detecção desconectará automaticamente todos os clientes medidos por aquela unidade de Guarda de Energia. Além disso, se o invólucro de Guarda de Energia for aberto e luz ambiente entrar, isto também desconectará automaticamente todos os clientes medidos por aquela unidade de
Petição 870180163276, de 14/12/2018, pág. 13/97
3/77
Guarda de Energia. Estes dois modos de detecção de fraude são comprometidos continuamente e múltiplas vezes alternadas por segundo para segurança máxima.
(D) Detecção de Tensão Inversa: Em alguns casos, uma companhia de utilidade pode desconectar energia a um cliente individual e esse cliente é capaz de obter energia por uma alimentação alternativa. Se a utilidade fosse reconectar energia sob estas condições, dano podería ocorrer ao equipamento de medição e/ou ao sistema de distribuição. Guarda de energia preferivelmente é capaz de detectar esta condição de falha. O Guarda de Energia pode detectar qualquer tensão que realimenta na desconexão aberta pelas linhas que conectam às instalações dos clientes. Se tensão for detectada, o firmware do Guarda de Energia prevenirá automaticamente a reconexão.
(E) Pré-pagamento: Pré-pagamento por energia pode ser feito por telefone, transação eletrônica, ou pessoalmente. A quantidade de kWh comprada é transmitida ao medidor e armazenada em sua memória. O medidor contará abaixo, mostrando quanta energia ainda está disponível antes de alcançar zero e desconectar. Contanto que o cliente continue comprando energia, não haverá nenhuma interrupção no serviço, e a companhia de utilidade terá um relatório de atividade diário.
(F) Limitação de Carga: Como uma alternativa à desconexão por não pagamento ou parte de um sistema de pré-pagamento, medidores de Guarda de Energia podem permitir a utilidade limitar remotamente a potência entregue a um nível fixo, desconectando quando essa carga é excedida. Se o cliente exceder essa carga e for desconectado, o cliente pode reajustar um botão na unidade de exibição remota opcional para restabelecer carga contanto que a carga conectada seja menos do que o limite prefixado. Altemativamente, clientes podem chamar uma linha de serviço de utilidade elétrica por telefone para ter o serviço restabelecido. Esta característica permite a utilidades elétricas proverem eletricidade para sistemas críticos até mesmo, por exemplo, no caso de um cliente não pagante.
(G) Limitação de Consumo Mensal: Alguns clientes se beneficiam de taxas subsidiadas e são dados um consumo total máximo por mês. O firmware de
Petição 870180163276, de 14/12/2018, pág. 14/97
4/77
Guarda de Energia é capaz de interromper energia quando um certo nível de consumo é alcançado. Porém, este tipo de programa é implementado melhor quando notificação avançada para clientes é provida. Isto pode ser alcançado tanto com uma exibição na casa, por meio de que uma mensagem ou série de mensagens notifica os clientes que sua taxa de consumo está chegando ao consumo projetado para o mês. Alternativamente (ou em conjunto), interrupções de serviço temporizadas podem ser programadas de forma que quando o limite está se aproximando, energia seja desconectada para períodos de tempo com incrementos cada vez mais longos para notificar os residentes. Estas interrupções planejadas em serviço atuam como uma advertência para clientes que seu limite está se aproximando de forma que eles tenham tempo para alterar seus padrões de consumo.
(H) Validação de Medidor: O módulo integrado do sistema preferivelmente é removível. Isto permite re-validação de laboratório fácil de precisão de medidor no evento de disputas de fatura de cliente.
(I) Benefícios Operacionais para Utilidade: O Guarda de Energia tem registros de evento e funções de diagnóstico a bordo, provendo os técnicos de campo com uma riqueza de dados para comissionar e reparar os sistemas elétrico e de comunicação. Parâmetros de não faturamento incluem: ampères, volts, temperatura, distorção harmônica total, frequência, valores instantâneos de Watts, VARs e volt-ampères, V2 horas, 12 horas, fator de potência, e ângulo de fase.
[0007] Estas características e outras serão aparentes àqueles qualificados na arte depois de revisar as descrições anexas, código de software e esquemas.
[0008] Em um aspecto, a invenção inclui um dispositivo para medir uso de eletricidade, incluindo: meio para desconexão remota por comunicação de linha de potência; meio para detecção de roubo de eletricidade; meio para detecção de fraude; e meio para detecção de tensão inversa.
[0009] Em outro aspecto, a invenção inclui um aparelho para medição de multicanal de eletricidade, incluindo: (a) uma cabeça de medidor operável para medir uso de eletricidade para uma pluralidade de linhas de consumidor de eletricidade; (b) um
Petição 870180163276, de 14/12/2018, pág. 15/97
5/77 transponder em comunicação com a cabeça de medidor e operável para transmitir dados recebidos da cabeça de medidor por comunicação de linha de potência a um computador localizado remotamente, e para transmitir dados recebidos por comunicação de linha de potência do computador localizado remotamente à cabeça de medidor; e (c) um módulo de controle de carga em comunicação com a cabeça de medidor e operável para atuar conexão e desconexão de cada um de uma pluralidade de relês, cada relê da pluralidade de relês correspondendo a uma da pluralidade de linhas de consumidor de eletricidade.
[0010] Em várias concretizações: (1) o aparelho ademais inclui um detector de fraude em comunicação com a cabeça de medidor; (2) o detector de fraude inclui uma luz e uma superfície reflexiva, e a cabeça de medidor é operável para instruir o módulo de controle de carga para desconectar todas as linhas de cliente se o detector de fraude prover notificação que a luz não é detectada refletindo da superfície reflexiva; (3) o aparelho ademais inclui uma caixa contendo a cabeça de medidor, o módulo de controle de carga e os relês, e em que o detector de fraude inclui um detector de luz ambiente entrando na caixa; (4) o aparelho ademais inclui uma caixa contendo a cabeça de medidor, o módulo de controle de carga e os relês, e em que a caixa é instalada em um poste de utilidade; (5) o aparelho ademais inclui meio para comparar energia de transformador à energia total usada pelas linhas de consumidor; (6) o aparelho ademais inclui meio para detectar fluxo de tensão inversa pelas linhas de consumidor; (7) o aparelho ademais inclui uma memória legível por computador em comunicação com a cabeça de medidor e um contador em comunicação com a cabeça de medidor, o contador correspondendo a uma linha de cliente e operável para contar abaixo uma quantidade de energia armazenada na memória, e a cabeça de medidor operável para enviar um sinal de desconexão ao módulo de controle de carga para desconectar a linha de cliente quando o contador alcança zero; (8) o aparelho ademais inclui uma memória legível por computador em comunicação com a cabeça de medidor, a memória operável para armazenar um limite de carga para uma linha de cliente, e a cabeça de medidor operável para enviar um sinal de desconexão ao módulo de controle de carga para desconectar a
Petição 870180163276, de 14/12/2018, pág. 16/97
6/77 linha de cliente quando o limite de carga é excedido; (9) o aparelho ademais inclui uma memória legível por computador em comunicação com a cabeça de medidor, a memória operável para armazenar um limite de uso para uma linha de cliente, e a cabeça de medidor operável para enviar um sinal de desconexão ao módulo de controle de carga para desconectar a linha de cliente quando o limite de uso é excedido; (10) o transponder é operável para se comunicar com o computador localizado remotamente através de linhas de potência de média tensão; (11) o aparelho ademais inclui uma unidade de exibição em comunicação com a cabeça de medidor e operável para exibir dados recebidos da cabeça de medidor; (12) a unidade de exibição é operável para exibir informação relativa a consumo de energia de um cliente; (13) a unidade de exibição é operável para exibir advertências relativas a uso de energia de um cliente ou roubo de energia suspeito; e (14) a unidade de exibição é operável para transmitir para dita cabeça de medidor informação entrada por um usuário.
Breve Descrição dos Desenhos [0011] A Figura 1 é um diagrama de bloco/fiação mostrando a conexão de concretizações preferidas.
[0012] A Figura 2 é um diagrama de bloco mostrando a configuração física de concretizações preferidas.
[0013] As Figuras 3A-3B são diagramas esquemáticos de uma placa de CPU preferida de um Transponder de Varredura e MiniCloset.
[0014] A Figura 4 é um diagrama esquemático de uma fonte de energia de Transponder de Varredura preferida.
[0015] A Figura 5 é um diagrama esquemático de uma fonte de energia de MiniCloset preferida.
[0016] A Figura 6 é um diagrama esquemático de uma placa de circuito preferida para retornar informação de transformador de corrente a uma cabeça de medidor de MiniCloset.
[0017] As Figuras 7A-7C são diagramas esquemáticos de uma placa de circuito de Módulo de Controle de Carga preferida.
Petição 870180163276, de 14/12/2018, pág. 17/97
7/77 [0018] As Figuras 8A-8D são diagramas esquemáticos de uma placa de fonte de energia preferida que provê detecção de fraude óptica.
[0019] As Figuras 9A-9C são diagramas esquemáticos de uma placa de conexão de Guarda de Energia preferida.
[0020] A Figura 10 é um diagrama esquemático para uma placa de circuito de controle operável para prover controle de relé.
[0021] A Figura 11 é um diagrama de montagem de base de Guarda de Energia preferida.
[0022] As Figuras 12 e 13 são diagramas de barramentos de fase preferidos e construção dos mesmos.
[0023] A Figura 14 é um diagrama descrevendo construção e montagem de estrutura de barra de neutro preferida.
[0024] A Figura 15 descreve barras de transição preferidas;
[0025] A Figura 16 descreve colocação preferida de barras de transição.
[0026] As Figuras 17 e 18 descrevem construção de módulo de aceitante preferido.
[0027] A Figura 19 descreve um módulo sensor de corrente e relé integrado preferido.
[0028] A Figura 20 descreve uma vista explodida de um módulo sensor de corrente e relé integrado preferido.
[0029] A Figura 21 mostra vistas explodidas de módulos de medição preferidos.
[0030] A Figura 22 mostra os módulos de medição colocados em uma montagem de estrutura de EG e módulo de aceitante.
[0031] A Figura 23 mostra uma vista explodida de uma concretização preferida de Guarda de Energia.
[0032] A Figura 24 mostra uma vista explodida de uma montagem de EG preferida e montagem de base.
[0033] A Figura 25 mostra uma disposição de EG preferida.
[0034] As Figuras 26 e 27 são esquemas de módulo de medição preferidos.
[0035] A Figura 28 tem esquemas preferidos para uma placa de lugar traseiro.
Petição 870180163276, de 14/12/2018, pág. 18/97
8/77 [0036] A Figura 29 tem esquemas preferidos para uma placa de potência.
[0037] A Figura 30 tem esquemas preferidos para uma placa de extensão de 1/0.
[0038] A Figura 31 tem esquemas preferidos para uma placa de CPU.
[0039] A Figura 32 tem esquemas preferidos para um módulo de controle.
[0040] A Figura 33 tem esquemas preferidos para circuitos de medição e fonte de energia para um módulo de exibição de cliente;
[0041] A Figura 34 tem esquemas preferidos para uma placa de exibição para o CDM.
[0042] A Figura 35 é um diagrama de bloco de uma extremidade dianteira analógica preferida para medição.
[0043] As Figuras 36 e 37 descrevem implementações de DSP preferidas.
[0044] A Figura 38 ilustra características de resposta a impulso e freqüência de filtro em fase preferidas.
[0045] A Figura 39 ilustra injetar sinais de PLC a harmônicos meio-ímpares de 60 Hz.
[0046] A Figura 40 descreve 12 possíveis modos nos quais um quadro de FFT recebido por um medidor pode estar fora de fase com um quadro de FFT transmitido por transponder de varredura.
[0047] A Figura 41 ilustra especificações de filtro de FIR preferidas.
[0048] A Figura 42 descreve tensão e corrente resultando de uma FFT preferida. Descrição Detalhada de Concretizações Preferidas [0049] Em uma concretização, um aparelho de medição de Guarda de Energia inclui um MiniCloset (quer dizer, um aparelho de medição operável para medir uma pluralidade de linhas de cliente); um Transponder de Varredura; um ou mais relês operáveis para desconectar serviço para clientes selecionados; um Módulo de Controle de Carga; e meio de detecção de fraude óptica.
[0050] O MiniCloset e Transponder de Varredura referidos aqui são em grande parte os mesmos como descritos na Patente US N° 6.947.854. Quer dizer, embora cada um tenha sido melhorado através dos anos, a funcionalidade e estrutura pertinentes a esta descrição podem ser tomadas para serem as mesmas como
Petição 870180163276, de 14/12/2018, pág. 19/97
9/77 descrito nessa patente.
[0051] Um aspecto da invenção inclui tomar a funcionalidade de medição de multicanal existente achada no MiniCloset e adicionar conexão e desconexão remotas por PLC. Prover tal funcionalidade adicional requerida adicionando novo hardware e software. O hardware adicionado inclui um Módulo de Controle de Carga (LCM) e relês de conexão/desconexão. Também adicionado eram circuitos de suporte para dirigir rastros de sinal para e do processador de medidor principal - a Cabeça de Medidor de MiniCloset. As adições de software incluem módulos de código que se comunicam com o hardware adicionado, como descrito nas tabelas abaixo. Figura 1 é um diagrama de bloco de conexões de uma concretização preferida. Linhas de potência de média tensão A, B, C e N (neutro) alimentam em Transformador de Distribuição 110. Linhas de baixa tensão conectam (por transformadores de corrente 120) o Transformador de Distribuição 110 à unidade de Guarda de Energia 140. A unidade de Guarda de energia 140 monitora os transformadores de corrente 120, e alimenta linhas de cliente monofásicas 1-24.
[0052] A Figura 2 é um diagrama de bloco de estrutura preferida de uma unidade de Guarda de Energia 140.
[0053] Transponder de Varredura 210 é o coletor de dados preferido para a unidade 140, pode estar localizado externo ou dentro do MiniCloset, e pode ser o coletor de dados principal para mais de um MiniCloset de cada vez. O Transponder de Varredura 210 preferivelmente: (a) verifica dados (cada comunicação preferivelmente começa com a verificação de relógio e identidade de medidor para assegurar integridade de dados); (b) coleta dados (coleta periodicamente um bloco de dados de cada unidade de medidor, com cada bloco contendo leituras de medidor previamente coletadas, leituras de intervalo, e registros de evento); (c) armazena dados (preferivelmente os dados são armazenados em memória não volátil por um período especificado (por exemplo, 40 dias)); e (d) relata dados (tanto por PLC, modem de telefone, conexão de RS-232, ou outro meio).
[0054] A placa de deslizamento 280 inclui uma cabeça de medidor de Minicloset e um módulo de controle de carga 240, que provê os sinais de controle para ativar
Petição 870180163276, de 14/12/2018, pág. 20/97
10/77 os relés. Toda a eletrônica preferivelmente é energizada por fonte de energia 250. A montagem de placa traseira 270 inclui múltiplos (por exemplo, 24) Transformadores de corrente e relés - agrupados, neste exemplo, como três conjuntos de 8 TCs e relés. Cabos de cliente são conectados por fios pelos TCs e se conectam ao circuito nas instalações de cliente 290. O Transponder de Varredura remotamente localizado 210 acessa a cabeça de medidor de Guarda de Energia e se comunica de modo bidirecional usando comunicação de portadora de linha de potência.
[0055] O fluxo de sinal mostrado nas Figuras 1 e 2 é preferivelmente realizado implementando módulos de código de software diferentes que trabalham simultaneamente para habilitar a habilidade de conexão/desconexão remota no Minicloset. Estes módulos de software, providos no Apêndice abaixo, são:
Módulo de Código Localização Função
Icm.def e pic.def Módulo de Controle de Carga Atuar conexão e desconexão de relés
pulse.c e pulse.h Cabeça de Medidor Estabelecer Comunicação com LCM
picend.def e picvars.def Cabeça de Medidor Prover sinais de controle para LCM
pulselink.def e pulseoutm.c Cabeça de Medidor Provê LCM com pulsos a serem usados para conectar e desconectar relés
[0056] Figuras 3-10 são esquemas de componentes preferidos, como descrito abaixo. Os relés de conexão/desconexão preferidos são relés de série K850 KG, mas aqueles qualificados na arte reconhecerão que outros relés podem ser usados sem partir da extensão da invenção.
Figura esquema Detalhe
3 PCB 107D Placa de CPU do Transponder de Varredura e MiniCloset
4 PCB 135C Fonte de energia para Transponder de Varredura
Petição 870180163276, de 14/12/2018, pág. 21/97
11/77
5 PCB 144C Fonte de energia para MiniCloset
6 PCB 146C Esta placa trás de volta informação de Transformador de Corrente para cabeça de medidor de MiniCloset
7 PCB 160A Placa para Módulo de Controle de Carga
8 PCB 170 Placa de fonte de energia de EG que adiciona capacidade para detecção de fraude óptica
9 PCB 171 Placa de conexão de EG. Uma placa com trilhas para rotear o sinal
10 PCB 172 Placa de circuitos de controle para controle de relé
[0057] Em outra concretização, a implementação de Guarda de Energia tira vantagem da semelhança de arquitetura de painéis de disjuntor tradicionais, com o ambiente de medição de multicanal. Em um painel de disjuntor, eletricidade é alimentada ao painel e distribuída entre vários circuitos de cliente por disjuntores que provêem a habilidade para conectar ou desconectar os circuitos de cliente.
[0058] No MiniCloset/Guarda de Energia, múltiplos transformadores de corrente medem a corrente em circuitos de cliente e trazem estes dados de volta a uma unidade de processamento central, onde as quantidades de medição são calculadas. Porém, o MiniCloset/Guarda de Energia tem várias diferenças principais com um painel de disjuntor. Por exemplo, enquanto os disjuntores são achados perto de instalações de cliente, o Guarda de Energia tipicamente é instalado perto do transformador de distribuição de utilidade. As vantagens oferecidas por esta concretização alternada serão aparentes àqueles qualificados na arte. Por exemplo, esta concretização oferece dimensões melhoradas e tamanho global sobre as concretizações discutidas acima. Espaço é sempre um constrangimento quando adições de equipamento são feitas a instalações elétricas existentes. Esta versão do Guarda de Energia (EG), com dimensões preferidas de 71,12 cm X 55,88 cm X 27,94 cm provê uma vantagem significativa em situações onde constrangimentos volumétricos existem.
[0059] A descrição seguinte inclui detalhes de construção preferidos, esquemas detalhados, e descrições de software. Como com as concretizações discutidas
Petição 870180163276, de 14/12/2018, pág. 22/97
12/77 acima, esta concretização é operável para prover operações de desconexão/conexão remotas, prevenir roubo, detectar fraude, detectar tensão inversa, executar pré-pagamento e limitar carga, e executar validação de medidor. Detalhes de Construção de EG Preferidos [0060] Nesta concretização, componentes primários do EG são:
1. Montagem de Base de Guarda de Energia
2. Montagem de Guarda de Energia
a. Barramentos de Fase e Barramentos de Neutro
b. Barras de transição
c. Módulo de Aceitante
3. Módulos de Medição de Guarda de Energia
a. Módulos de Medição
Módulos de Sensor de Corrente e Relé Integrados
4. Eletrônica de Guarda de Energia
a. PCB 203
b. PCB 204
c. PCB 234
d. PCB 235
e. PCB 202
f. PCB 210
g. PCB 230
h. PCB 206
Base de Montagem de EG [0061] A base de EG inclui um fundo de invólucro com parafusos e arruelas de retenção como um mecanismo de travamento para a cobertura de topo de EG, que está conectada em um lado por dobradiças. Veja Figura 11.0 fundo de invólucro provê roteamento para os cabos de cliente.
Montagem de EG - Barramentos de Fase [0062] Três barramentos de fase de alumínio são colocados para o centro da montagem de Guarda de Energia e alternados. Veja Figuras 12 e 13. Estes provêem
Petição 870180163276, de 14/12/2018, pág. 23/97
13/77 conexão aos módulos de medição de cliente pelo uso de barras de transição. Uma disposição de barramento alternada é descrita na Figura 13. Barramentos são mostrados em preto.
Barras de Neutro [0063] O EG preferivelmente inclui 4 barras de neutro que formam um quadro para montagem de EG, por esse meio provendo um caminho para a corrente de neutro. Isto é mostrado na Figura 14. O borne na barra cruzada provê a alimentação de neutro do transformador de distribuição de utilidade. Também, há 2 barras de neutro de placa-mãe que levam a corrente de neutro ao módulo de controle.
Barras de Transição [0064] As barras de transição completam a conexão mecânica e elétrica entre os módulos de medição de cliente e os barramentos de fase. Veja a Figura 15. Uma barra de transição para fase A e C é mostrada na Figura 15A; uma barra de transição para fase B é mostrada na Figura 15B. Figura 16 mostra as barras de transição em preto.
Módulo de Aceitante [0065] Um módulo de aceitante preferivelmente é feito de plástico e aceita mecanicamente os módulos de medição que podem ser encaixados facilmente na montagem de EG. Cada EG tem 4 módulos de aceitante que são empilhados juntos e podem acomodar tanto 12 módulos de medição bifásicos ou 8 trifásicos. Veja Figura 17. O módulo de aceitante também provê uma rota mecânica para a barra neutra de placa-mãe que conecta ao módulo de controle. Veja Figura 18.
Módulos de Medição de Cliente [0066] Módulos de medição de cliente preferidos provêem a metrologia requerida para medir o consumo para um cliente monofásico, bifásico ou trifásico. Um módulo individual funciona como um medidor independente completo que pode ser testado e avaliado como uma unidade de medição separada. Cada módulo preferivelmente inclui um módulo de sensor de corrente e relé integrado e eletrônica de metrologia, e provê uma conexão entre o circuito de cliente e os barramentos de fase. Figura 19 descreve um módulo de sensor de corrente e relé integrado preferido. Figura 20
Petição 870180163276, de 14/12/2018, pág. 24/97
14/77 descreve uma vista explodida de um módulo de sensor de corrente e relé integrado preferido.
[0067] Figura 21 mostra vistas explodidas de módulos de medição preferidos. Figura 22 mostra os módulos de medição (mostrados em preto) colocados na montagem de quadro de EG e módulo de aceitante.
[0068] Figura 23 mostra uma vista explodida de Guarda de Energia, e Figura 24 mostra uma vista explodida de uma Montagem de EG e Montagem de Base de EG preferidas.
Eletrônica [0069] As caixas de Módulo de Controle preferivelmente incluem várias PCBs que funcionam simultaneamente para coletar dados de medição dos módulos de medição individuais e comunicar através de linhas de potência para transmitir estes dados a um dispositivo mestre, tal como um Transponder de Varredura (ST).
[0070] Figura 25 mostra uma disposição de Guarda de Energia preferida para esta concretização. Cada linha de cliente tem um Módulo de Medição correspondente (PCB 203 e PCB 204, discutido abaixo) (esquemas mostrados nas Figuras 26 e 27).
[0071] Uma Placa de Colocação Atrás 2510 mostrada na Figura 25 (PCB 234; veja Figura 28 para diagrama de construção e esquemático) é o barramento comum que dirige sinais dentro do EG. Há dois tipos de opções de comunicação na Placa de Colocação Atrás 2510 para habilitar transferência de dados de Módulo de Controle 2520 para Módulos de Medição individuais PCB 203. Isto pode ser feito tanto usando a opção de I2C de 2 fios ou a opção serial de 1 fio.
[0072] O Módulo de Controle 2520 inclui uma Placa de Potência (PCB 210; veja Figura 29 para esquemático) é a placa de fonte de energia que também tem os circuitos de transmissão e recepção de PLC nela. A Placa de Potência provê energia à placa de CPU e às placas de eletrônica 203. O Módulo de Controle 2520 também inclui uma Placa de Extensão de l/O (PCB 230; veja Figura 30 para esquemático) é uma placa com várias opções de extensão de l/O que habilitam comunicação de Módulos de Medição à placa de CPU.
Petição 870180163276, de 14/12/2018, pág. 25/97
15/77 [0073] Módulo de Controle 2520 também inclui uma Placa de CPU (PCB 202; veja Figura 31 para esquemático), que tem um processador de Processamento de Sinal Digital (DSP) a bordo.
[0074] Finalmente, Módulo de Controle 2520 inclui uma placa de roteamento (PCB 235; veja Figura 32 para esquemático) com trilhas e um coletor sem componentes eletrônicos nele.
[0075] Cada Módulo de Exibição de Cliente (CDM) 2530 é instalado nas instalações do cliente e pode se comunicar de modo bidirecional com o EG instalado no transformador de distribuição servindo o cliente. PLC bidirecional habilita comunicação de utilidade-cliente através de linhas de potência de baixa tensão e permite a utilidade enviar informação regular, advertências, informação especial sobre interrupções, etc., para o cliente. Cada CDM 2530 inclui uma combinação selecionada de medição e fonte de energia junto com circuitos de PLC na mesma placa (PCB 240; veja Figura 33 para esquemático). Cada CDM preferivelmente também tem uma placa de exibição de 9 dígitos (PCB 220; veja Figura 34 para esquemático). Esta exibição se comunica com EG e mostra informação sobre consumo, precauções, advertências e outras mensagens de utilidade.
Implementação de Hardware [0076] Em uma concretização, o Guarda de Energia implementa Transformada de Fourier Rápida (FFT) no sinal de comunicação de PLC ambos no ST e no medidor, e para propósitos de medição executa análise de harmônico detalhada. Esta seção discute um esquema de implementação dos Módulos de Medição, comunicação com Módulos de Controle e comunicação de PLC do Módulo de Controle com um Transponder de Varredura remotamente localizado.
[0077] O Módulo de Controle 2520 inclui fonte de energia e circuitos de PLC (PCB 210; veja Figuras 25 e 29); extensão de l/O (PCB 230; veja Figura 30) e placa de CPU nomeada Medidor D (PCB 202; veja Figura 31). A fonte de energia provê energia ao medidor D e extensão de l/O e contém os circuitos de transmissor e receptor de PLC. PCB 235 provê um roteamento de trilha e conexão de coletor entre várias placas.
Petição 870180163276, de 14/12/2018, pág. 26/97
16/77 [0078] O Módulo de Medição pode ter duas versões: bifásica ou trifásica. A versão bifásica pode ser programada por software para funcionar como um único medidor bifásico ou dois medidores monofásicos. A versão bifásica inclui um medidor B2 (PCB 203, esquemático mostrado na Figura 26), enquanto a versão trifásica inclui um medidor B3 (PCB 204 esquemático mostrado na Figura 27). Os medidores B atuam como escravos para o medidor D no Módulo de Controle 2520. Os medidores D e B podem se comunicar por um protocolo de ASCII serial.
[0079] Os vários medidores B são interconectados por BPB 2510 a 2520, que provê energia, uma referência de 1 Hz e comunicações seriais para o medidor D. A máquina de DSP preferida para o medidor B é o chip 56F8014VFAE Freescale. O microprocessador preferido usado para implementar a CPU no medidor D é o entre a família de ColdFire Integrated Microprocessadores, MCF5207. O uso de um processador específico é determinado por requisitos de RAM e Flash ditados pela versão de medidor. Uma fonte de energia separada e placa de LCD completam a porção eletrônica do medidor D como um produto. À parte de atuar como um mestre para medidores Β, o medidor D também é um medidor trifásico e mede a saída de transformador total em que o EG está instalado. Como uma característica anti-roubo, este total é comparado com o consumo total relatado pelos vários medidores B.
= Saída de Transformador Total w=l [0080] A constituição de fluxos de sinal é como segue:
B2: Duas tensões, Duas correntes e Nenhum Canal de Portadora de Linha de Potência (PLC).
B3: Três tensões, Três correntes e Nenhum Canal de PLC.
D: Três tensões, Três correntes e um Canal de PLC.
[0081] Cada fluxo tem um circuito associado para efetuar amplificação analógica e 'antialiasing'.
[0082] Específico para o medidor D é a implementação preferida de:
• Uma Malha Travada por Fase (PLL) para travar a amostragem dos fluxos de sinal a um múltiplo da linha de A/C entrante (amostragem síncrona para a
Petição 870180163276, de 14/12/2018, pág. 27/97
17/77 linha de potência).
• Um Oscilador Controlado por Tensão (VCO) a 90-100 MHz controlado por processador de DSP por dois módulos de PWM acionando diretamente o relógio de sistema, conseqüentemente fazendo o DSP coerente com o PLL.
• Um detector de fase síncrono que só responde ao fundamental da onda de freqüência de linha entrante e não a seus harmônicos.
• Opção para executar esquemas de modulação de FSK e PSK.
[0083] Cada canal de medição e comunicação preferivelmente inclui circuitos analógicos de extremidade dianteira seguidos pelo processamento de sinal. Único aos circuitos analógicos é um filtro 'anti-aliasing' com ganho fixo que provê rastreamento de temperatura de primeira ordem, conseqüentemente eliminando a necessidade para recalibrar medidores quando derivas de temperatura são encontradas. Isto é discutido a seguir, e então uma implementação de processamento de sinal preferida é discutida.
Cadeia de Sinal Analógico de Tensão e Corrente [0084] A extremidade dianteira analógica para canais de tensão (corrente) inclui elementos sensores de tensão (corrente) e um atenuador programável, seguido por um filtro 'antialiasing'. O atenuador reduz o nível de sinal entrante de forma que nenhum corte ocorra depois do filtro 'anti-aliasing'. O filtro 'anti-aliasing' de ganho constante restabelece o sinal a valor total na entrada do Conversor Analógico para Digital (ADC). Para medição, o filtro 'anti-aliasing' corta fora freqüências acima de 5 kHz. As entradas são então alimentadas no ADC que faz parte do DSP. Veja Figura 35, que é um diagrama de bloco de uma extremidade dianteira analógica preferida para medição.
[0085] Enquanto uma implementação típica incluiría um Amplificador de Ganho Programável (PGA) seguido por um filtro 'anti-aliasing' de baixo ganho, a invenção, nesta concretização, implementa um atenuador programável seguido por um filtro de ganho fixo grande. Além disso, a implementação de ambos os filtros 'anti-aliasing' em um único chip é a mesma usando os mesmos Amplificadores Operacionais Quádruplos junto com resistores de 25 ppm e capacitares de NPO/COG. Esta
Petição 870180163276, de 14/12/2018, pág. 28/97
18/77 implementação única casando os filtros 'anti-aliasing' assegura que as derivas de fase encontradas em ambos os canais de tensão e corrente sejam exatamente idênticas e conseqüentemente precisão do cálculo de potência (dado pelo produto de V e I) não é comprometido. Isto provê um meio para ambos canais de V e I rastrearem derivas de temperatura até primeira ordem sem recalibrar o medidor.
[0086] Em contraste, usando um PGA junto com um filtro de ganho baixo não pode rastrear o deslocamento de fase nos sinais V e I introduzidos devido à temperatura. Isto é porque o deslocamento de fase introduzido por PGA é uma função do ganho.
Cadeia de Sinal Digital de Tensão, Corrente e PLC [0087] Figura 36 é um diagrama de bloco da placa de PCB 202; as funções de cada bloco serão aparentes àqueles qualificados na arte. Figura 36 mostra uma implementação de DSP preferida.
[0088] Esta concretização preferivelmente usa uma PLL para travar a amostragem dos fluxos de sinal a um múltiplo da freqüência de linha de A/C entrante. Na concretização discutida acima, a amostragem é a uma taxa assíncrona à linha de potência. No medidor D, há um VCO a 90-100 MHz que é controlado pela máquina de DSP por dois módulos de PWM. O VCO excita diretamente o relógio de sistema do chip de DSP (desabilitando a PLL interna), assim o DSP se toma uma parte integrante da PLL. Travar o relógio de sistema do DSP à linha de potência facilita o alinhamento da amostragem para a forma de onda da linha de potência. O detector de fase deveria funcionar assim para só responder ao fundamental da onda de 60Hz entrante e não a seus harmônicos. Figura 37 é um diagrama de bloco desta implementação de DSP preferida.
[0089] Um DSP BIOS ou código de comutação de contexto voluntário provê três pilhas, cada uma para fundo, comunicações de PLC e comunicações seriais. O pequeno micro se comunica com o DSP usando um excitador I2C. O circuito integrado MSP430F2002 mede as fontes de energia, porta de fraude, temperatura e tensão de batería. As tarefas do MSP430F2002 incluem:
manter um RTC;
Petição 870180163276, de 14/12/2018, pág. 29/97
19/77 ii. medir a tensão de batería;
iii. medir a temperatura;
iv. medir a fonte de energia +U;
v. reajustar o DSP na interrupção parcial;
vi. prover um circuito de vigilância adicional; e vii. prover uma referência de 1 segundo para entrar no DSP para uma referência de tempo para medir a referência de 1 segundo contra o relógio de sistema do VCO.
Cadeia de Sinal de Comunicação de PLC de Medidor D [0090] Uma instalação típica consiste em múltiplos EGs e STs se comunicando através das linhas de potência. O medidor D se comunica de modo bidirecional com um Transponder de Varredura localizado remotamente pelo transformador de distribuição. Para habilitar isto, esta concretização usa uma banda de 10-25 kHz para comunicação de PLC. O sinal de PLC é amostrado a cerca de 240 kHz (212 * 60), síncrono com tensão de linha, seguindo o que um filtro de Resposta a Impulso Finita (FIR) é aplicado para dizimar os dados. Especificações de FIR preferidas são dadas abaixo: Banda de 10-25 kHz
Número de Derivações 65
Atenuação de Banda de Parada 71,23 dB
Freqüência Superior de Banda Passante 25 kHz
Freqüência Inferior de Banda de Parada 35 kHz
Entrada Amostrada 60 * 4096
Saída Mostrada 30* 2048
[0091] Veja Figura 38 para características preferidas de resposta de freqüência de filtro em fase e resposta a impulso.
[0092] Depois que a dizimação é feita a 60 kHz (211 * 30), uma FFT de 2048 pontos é então executada nos dados dizimados. A taxa de dados é assim determinada ser 30 baud dependendo da escolha de filtros de FIR. Toda FFT produz dois bits aproximadamente a todo 66 ms ao usar FIR na banda de 10-25 kHz para se comunicar por transformadores de distribuição.
Petição 870180163276, de 14/12/2018, pág. 30/97
20/77 [0093] Para evitar o problema de se comunicar na presença de ruído de linha, esta concretização preferivelmente implementa uma técnica única para comunicação robusta e segura. Isto é feito injetando sinais de PLC a freqüências que são harmônicos meio-ímpares da freqüência de linha (60Hz). Isto é discutido abaixo, para uma concretização usando um espectro de ruído típico achado em linhas de CA na gama de 12-12,2 kHz. Figura 39 ilustra injetar sinais de PLC a harmônicos meioímpares de 60 Hz. Desde que FFT é feita a todo 30 Hz e os harmônicos são separados por 60 Hz, os bits de dados residem na caixa correspondendo ao 201,5° e 202,5° harmônico de 60 Hz na Figura 39. O algoritmo considera estas duas caixas de freqüências e compara a amplitude do sinal nos dois para determinar 1 ou 0. Este esquema de FSK usa duas freqüências e produz uma taxa de dados de 30 baud. Alternativamente, QFSK, que usa 4 freqüências, pode ser implementado para produzir 60 baud.
[0094] Ao atravessar por transformadores, preferivelmente ambos STs e medidores D executam FFT no PLC e sinais de dados a todo 30 Hz em uma gama de 10-25 kHz. Porque as Malhas Travadas em Fase (PLLs) implementadas ambos no ST e no medidor D estão travadas à linha, os quadros de dados estão sincronizados à freqüência de linha (60 Hz) igualmente. Porém, os quadros de dados podem se deslocar em fase devido a:
1. várias configurações de transformador que podem existir no caminho entre o ST e medidor (delta -ípsilon, etc.); e
2. um deslocamento em fase devido ao fato que STs estão travados em uma fase particular, enquanto medidores mono e polifásicos podem ser energizados por outras fases.
[0095] A relação de sinal para ruído (SNR) é maximizada quando o quadro de dados de medidor e quadros de dados de ST estão alinhados perto de perfeição. Do ponto de vista de um medidor, isto requer receber sinal de PLC de todos os possíveis STs que pode ouvir, decodificar o sinal, verificar por SNR alinhando quadros de dados, e então responder ao ST que está produzindo SNR máxima. Figura 40 descreve os 12 possíveis modos nos quais o quadro de FFT recebido pelo
Petição 870180163276, de 14/12/2018, pág. 31/97
21/77 medidor pode estar fora de fase com quadro de FFT de ST. Linhas pontilhadas correspondem a uma rotação de 30 graus considerando um transformador delta no caminho de sinal entre ST e o medidor.
[0096] Além disso, porque os quadros de dados estão disponíveis a todo 30 Hz em uma linha de 60 Hz, há duas possibilidades correspondendo às 2 possíveis fases obtidas dividindo 60 Hz por 2. Conseqüentemente, há 24 modos que os quadros de dados de medidor podem estar desalinhados com quadros de dados de ST.
[0097] Em cada quadro do ST, há um número integral ímpar de ciclos da freqüência de portadora. Desde que o esquema de modulação preferido é Chaveamento por Deslocamento de Freqüência (FSK), se houver n ciclos para transmitir bit 1, bit 0 é transmitido usando n+2 ciclos da freqüência de portadora. Fica vital para o medidor reconhecer seus próprios 2 ciclos de 60 Hz a fim de ser capaz de decodificar seus bits de dados que estão disponíveis a todo 1/30 de um segundo.
[0098] Se o medidor D decodificar sinais com quadros de dados desalinhados, há energia que transborda nas freqüências adjacentes (meio-ímpares separadas). Se o nível de sinal que cai na caixa de freqüência adjacente for menos do que o fundo de ruído, o sinal pode ser decodificado corretamente. Porém, se o derramamento for mais do que o fundo de ruído, a habilidade para distinguir entre 1 e 0 diminui, e conseqüentemente a SNR global cai, resultando em um erro em decodificação. Em conclusão:
a. Se os quadros estiverem desalinhados, contaminação de bits de dados ocorre e a SNR degrada.
b. No evento que a freqüência muda e há quadros de dados desalinhados, há uma quantia significativa de energia que transborda nas caixas de FFT adjacentes, conseqüentemente interferindo com os outros STs no sistema que se comunicam usando freqüências nessas caixas específicas.
[0099] Uma vez que o deslocamento de relógio seja determinado correspondendo à SNR mais alta, o medidor então se trava até que uma mudança significante em relação de SNR seja encontrada pelo medidor, em qual caso o processo repete.
Petição 870180163276, de 14/12/2018, pág. 32/97
22/77
Implementação de Medição em Medidor D e B usando FFT [00100] Enquanto versões do medidor B e do medidor D executam medição, o medidor D também é responsável por coletar a informação de medição dos vários medidores B por PCB 234. Cada fluxo de dados nos medidores tem um circuito associado para efetuar amplificação analógica e 'anti-aliasing'. Cada uma das seções de extremidade dianteira analógica tem um atenuador programável que é controlado pelo código de nível mais alto. O fluxo de dados é amostrado a 60 kHz (210 * 60) e então um filtro de FIR é aplicado para dizimar o fluxo de dados a ~15 kHz (28 * 60). Especificações de filtro preferidas são mostradas na tabela abaixo e Figura 41.
Número de Derivações 29
Atenuação de Banda de Parada 80,453dB
Freqüência Superior de Banda Passante 3kHz
Freqüência Inferior de Banda de Parada 12kHz
[00101] Desde que só os dados até 3 kHz são de interesse, preferivelmente uma faixa de 3-12 kHz no FIR de dizimação é usada com taxa de amostra de -15KHZ. As freqüências de 0-3 kHz ou 12-15 kHz são mapeadas em 0-3 kHz. Uma FFT real é executada para produzir 2 fluxos de dados que podem ser decompostos ademais em 4 fluxos de dados: Tensão Real e Imaginária e Corrente Real e Imaginária. Isto é alcançado adicionando e subtraindo freqüências de espelho positivas e negativas para as partes real e imaginária, respectivamente. Desde que o sinal 'aliased' na gama de 12-15 kHz cai abaixo de 80 dB, a precisão é alcançada usando o filtro de FIR acima discutido. Alternativamente, uma FFT complexa de 256 pontos pode ser executada em toda fase do fluxo de dados dizimado. Isto produz 2 pares de fluxos de dados: uma parte real, que é a tensão, e uma parte imaginária, que é a corrente. Esta abordagem requer uma FFT complexa de 256 pontos a todo 16,667 milissegundos.
[00102] Os resultados de executar qualquer FFT são a tensão e corrente mostradas na Figura 42, onde a notação Vm,n denota o m-ésimo harmônico do nésimo número de ciclo. Por exemplo, Vn e In correspondem ao fundamental do
Petição 870180163276, de 14/12/2018, pág. 33/97
23/77 primeiro ciclo, e V21 e I21 para o primeiro harmônico do primeiro ciclo, etc., como mostrado na Figura 42, que descreve quadros de FFT para tensão, indicando os harmônicos.
[00103] As partes real e imaginária do conteúdo harmônico de qualquer k-ésimo ciclo são dadas por:
Vmk = Re (Vmk) + Ílm(Vmk)] ΓΠ = 1, ..., M
Imk = Re (Imk) + ilm(lmk); k = 1, ..., n [00104] A parte imaginária de tensão é a medida de falta de sincronização entre a PLL e a freqüência de linha. A fim de calcular quantidades de medição, os cálculos são feitos no domínio de tempo. No domínio de tempo, a funcionalidade de FFT oferece a flexibilidade para calcular quantidades de medição tanto usando só o fundamental ou incluindo os harmônicos. Usando a forma complexa da tensão e corrente obtidas da FFT, as quantidades de medição são calculadas como:
P = Vmk * Imk*
W = Re(P) = Re(Vmk * Re(lmk + Im(lmk) * Im(Vmk)
Var = lm(P) = Re(lmk) * Im(Vmk) - Re(Vmk) * Im(lmk)
Fator de Potência = W/P [00105] Porém, nas fórmulas anteriores, quando os harmônicos estão incluídos (Vmk e Imk; m = 1, ... M; k = 1, ... n), todas as quantidades de medição incluem os efeitos de harmônicos. Por outro lado, quando só o fundamental é usado (Vik e hk), todas as quantidades calculadas representam só a contribuição de 60 Hz. Como um exemplo, nós mostramos os cálculos só quando o fundamental é usado para executar cálculos. Só Vie h são usados de todos os quadros de dados de FFT. As quantidades seguintes são calculadas para um dado conjunto de N quadros e uma freqüência de linha de fiine:
kWh = 2 [Re(Vü) * Re(hi) + Im(Vii) * Im(lii)] *Ati * 10'3 /=1 kVAr = [Re(hi) * lm(Vii) - Re(Vik) * lm(hk)] *Ati * 10’3
Petição 870180163276, de 14/12/2018, pág. 34/97
24/77
Ν kVAh = 2 |Vii| * |lii| *Ati * 10-3 ; At = 1/fiine /=1
V2h = Σ I Vii |2 * Ihil *Ati /=1 l2h = Σ I Iii 12 * Ihil *Ati /=1 [00106] O fator de potência de deslocamento é dado por:
I W I
Cos (Θ) = — ;
VA onde W e VA incluem só os fundamentais e
VAi = ViRMS *hRMS; onde
V M-ι V H=1 para N ciclos.
[00107] Esta flexibilidade para tanto incluir ou excluir os harmônicos ao calcular quantidades de medição se traduz a uma melhoria significante sobre as capacidades oferecidas pela concretização acima descrita. Ainda outra característica oferecida por esta concretização é o cálculo de Distorção Harmônica Total (THD). A THD é a medição da distorção harmônica presente, e é definida como a relação da soma das potências de todos os componentes harmônicos para a potência do fundamental. Para o n-ésimo ciclo, isto é avaliado como:
VTHD
7 *1η
Vmn (Imn) é o m-ésimo harmônico do n-ésimo ciclo obtido da FFT, onde V2m,n = Re(Vm,n)2 + lm(Vm,n )2 Θ l2m,n = Re(lm,n)2 + lm(lm,n)2.
Módulo de Exibição de Cliente [00108] O módulo de exibição de cliente é instalado nas instalações de cliente, se comunica com o Guarda de Energia perto do transformador, e inclui: PCB 240, fonte de energia e circuitos de PLC (veja a Figura 33); e PCB 220, mostrador de LCD (veja a Figura 34). Em uma concretização, a unidade de exibição de cliente instalada na
Petição 870180163276, de 14/12/2018, pág. 35/97
25/77 residência do cliente é um unidade de PLC bidirecional que se comunica com EG. Por exemplo, não só pode a utilidade enviar mensagens, o cliente também pode pedir uma verificação de consumo com o EG instalado no poste.
[00109] Enquanto certas concretizações específicas da invenção foram descritas aqui para propósitos ilustrativos, a invenção não está limitada aos detalhes específicos, dispositivos representativos, e exemplos ilustrativos mostrados e descritos aqui. Várias modificações podem ser feitas sem partir do espírito ou extensão da invenção definida pelas reivindicações anexas e seus equivalentes.
Petição 870180163276, de 14/12/2018, pág. 36/97
26/77
APÊNDICE
LCM.DEF ; QLC LCM (Load Control Module) program for PIC 16C63 A;
$ includc 'C:\pictools\16c63a-inc' ; include 'C:\pictools\16c63.inc' ;
; Configuration bits
FUSES _BODEN_OFF ; Brown-out reset disabled
FUSES _CP_OFF ; No code protect
FUSES _PWRTE_OFF ; Disable power-up timer
FUSES _WDT_ON ; Watchdog Timer Enabled
FUSES RC OSC ; Oscillator = RC
; Program Parameter Equates
Software_type equ 7 ; Which PIC program is this? ; 7 = LCM program
Sofitware_version equ 2 ; Version #
LCM_base_addr equ 16 ; Address of fírst LCM
Ram_start equ 020h ; Beginning of available RAM
RESETVECTOR equ 0 ; Location of reset vector
ROM_start equ 00 8h ; fírst available program location
Num_start_bits equ 12 ; Number of start bits
; Port definitions
comm_port equ PORTA
data_out equ 3
data__in equ 4
clock_in equ 5
ctl__portequ PORTA
driver_enable equ 0 ; output bit to turn on the drivers
Driver_enable_ mask equ 1 « driver_enable
Initialization values for I/O ports
initTRISA equ 00110000b ; Data direction for port A
initjrRISB equ OOOh ; B port data direction - all ports output
initTRISC equ OOOh ; C port data direction - all out
Petição 870180163276, de 14/12/2018, pág. 37/97
27/77 read__TRISC equ Olfh ; C port data direction for jumper read - 0-4 in
Init comm_port_value equ 1 « data out + Driverenablemask option reg vai equ 10001111b; Option register init value ; bit 7 = 1: Port B pullups disabled ; bit 6 = 0: Int on falling edge ; bit 5 — 0: Timer 0 uses inst clock ; · bit 4 = 0: Timer 0 counts on rising edge ; bit 3 = 1: Prescaler used by WDT ; bit 2,1,0 = 111 :Prescaler divide by 128 ; NOTE - interrupts and timer 0 are not used by this program ms_preset equ 700 ; Time set for millisecond delay ; RAM Iocations
ORG Ram_start
Status reg ds 4 ; status register
ORG Status, reg
Status_MSB ds 1
Clk_trmeout_flag equ 7 ; Timeout waiting for comm clock edge
bad reset flag equ 6 ; Non-POR, non-WDT reset encountered
POR_flag equ 5 ; Power-on reset detected
WDT_reset_flag equ 4 ; WDT reset, not from sleep
Status_LSB ds 1
CPU reset_flag equ 7
Need_param_reíresh_flag equ 6
Parity_err_flag equ 5
Global-Cmdtimer ds 1
Jumper_state ds 1 ; current state of input jumpers
Parameter_reg ds 4 ; Communication parameters
org Parameter_reg
ds 1 s
ds 2
ds 1 9
; Fast communication variables
Comm_state Wstate Comm_bit_count Comm buffer ds 1 ; Stored state of fast comm uart ds 1 ; Stored state of fast comm word handler ds 1 ; Bit counter for fast comm ds 1 ; fast comm word buffer
Petição 870180163276, de 14/12/2018, pág. 38/97
28/77
Work_addr ds 1 ; Address read from jumpers
Temp ds 1 ; temporaiy register
Tpar ds 1 ; Transverse parity
Word_count ds 1 ; Counter for sending and receiving 5-bit words
Command ds 1 ; Command received over comm link r
Register ID ds 1 ; Register specified in comm command
PIC_addr ds 1 ; Address of this PIC chip
Commbuf ds 5 ; Communication buffer
Input_hold ds 1
Output_bit_reg ds 4
Flags ds 1
Clk_wait_flag equ 7
Global_cmd_flag equ
scratch ds 1
Timeout_ctr ds 2
Millisecs ds 1
Clktimeoutctr ds
NPRtimer ds 2
; Hold register for comm rev value ; Hold register for output bit mask ; Program control flags ; indicates which clock edge we are waiting for ; Processing global command ; Work register ; Counter for pulse duration ; Counter for pulse duration milliseconds ; counter for clock timeout ; counter for need parameter refresh
ORG OaOh ; Bank 1 RAM locations
IF $ - 1 and OlOOh error - RAM overflow ENDIF
ORG RESET_VECTOR jmp start
Start of program space
ORG ROM_start ; Jump to first program location
Initialization
Start
setb RPO ; point to upper register bank
jnb NOT POR,got POR ; Power on reset, set flags
clrb RPO ; point to RAM bank 0
jnb NOT_TO,WDT_reset ; Watchdog reset
setb status_MSB.bad_reset_ flag ; Indicate unknown reset condition
jmp Do_initialize
Petição 870180163276, de 14/12/2018, pág. 39/97
29/77
WDT jeset
setb StatusJMSB.WDT, resetflag
jmp doinitializo
got POR
clrb RP0 ; point to RAM bank 0
mov Status_MSB,#l « POR__fíag; Set POR flag
clr Status_LSB
Do initialize
mov F SR,#Ramstart+2 ; Point past status flags
:clr_loop
clr INDF ; Clear RAM Iocation
inc FSR ; Increment pointer
A Init state ; If zero, done
mov W,FSR ; get pointer
and W,#7fH ; look at 7 LSB’s
jnz :clr loop ; Not end of segment, continue
add FSR,#20h ; Point to next segment
jmp :clr_loop ; Not last segment, continue
Init_state
setb Status_LSB.CPU_reset_flag ; Indicate CPU reset
setb Status_LSB.Need_param_refresh_flag ; Indicate parameter refresh needed
mov comm_port,#Init_comm_port_value ; initialize comm port state
mov Comm_state,#Edge_wait
mov Comm bit count,#Num start bits ; Initialize fast comm state
machine
clr PORTB
clr PORTC
jmp Main_loop ; start running main program
; Comm Receive routines
Edge_wait mov !OPTION,#option_reg_val setb comm_port.data_out dec Commbitcount jz See_edge_one jb Input_hold.data_in,Set_edge jmp Comm_ret
See_edge_one jnb Input__hold.data_in,Set_edge mov Wstate,#Rcv_addr mov Tpar,#Olfh jmp Rcv_next_word ; Initialize Watchdog timer ; Set option reg ;senda 1 ; decrement bit count ; if zero, looking for a 1 wait ; Looking for 0, reset bit count if 1 ; done wait; looking for 1, reset if 0 ; First word is address ; Init parity
Rcv_stop mov Comm_state,#Edge_wait mov Comm_bit_count,#Num_start_bits ; Preset state to wait for edge jnb Input_hold.data_in,Parity_error ; stop bit must be 1 jmp Cmd_exec ; Done, process received buffer
Rcv_bits clc
Petição 870180163276, de 14/12/2018, pág. 40/97
30/77
snb Input_hold.data_jn ; ... input bit...
sete ; ... to carry
rl Comm_buffer ; shift buffer
jmP Rcv_word_handler ; Check for complete word
; Comm Transmit routínes
Send_edge
dec Comm_bit_count ; decrement bit count
jz :One ; if zero, send a 1
clrb comm_port.data_out ;send a 0
jmp Comm_ret
:One
setb comm__port.data_out ;send a 1
jmp Do_xmit_word
Send bits
rl Comm_buffer ; put xmit bit into carry
j° :one
clrb cominjiortdataout ; send a '0'
jmp :check
:one
setb comm_port.data_out ; send a '1'
:check jmp Xmit_word_handler ; Comm receive word handler routínes
Rcv_word_handler djnz Comm_bit_count,Comm_ret and Comm_buffer,#03fh clc mov W,»Comm_buffer call paritylookup xor W,Comm_buffer jnz Parity_error rr Comm_buffer and Comm_buffer,#01fh xor Tpar,Comm_buffer mov PCLATH,#Rcv_addr< mov W,Wstate jmp W
Rcv_addr clrb Flags.Globalcmdflag mov W,Comm_buffer mov PIC_addr,W xor W,#lfh jnz See__if_us setb Flags.Global_cmd_flag jmp Its_us
See_jf_us ; If word not complete, continue ; only 6 bits ; get 5 MSBs of received word ; compare with received word ; extract 5-bit value ; calculate total parity ; Execute word handler routine ; Clear global command flag ; Get received address ; save it ; is it global command ; No, check for address match ; Set global command flag ; process rest of command
Petição 870180163276, de 14/12/2018, pág. 41/97
31/77 mov clrb mov :loop djnz mov mov setb mov mov and add cjne Its_us mov >P !PORTC,#read_TRISC ctl_jport.driver_enable temp,#9 temp,:loop W,/PORTC Work_addr,W ctl_port.driver_enable !PORTC,#init_TRISC ; Switch C port bit 0-4 to input ; Disable output drivers, enable jumper read ; Wait at least 20 uSec ; Get inverse of jumpers in W ; Save jumper value ; Enable output drivers ; Restore C port status
Jumper_state,Work_addr ; Save jumper state Work_addr,#03h ; Ignore all but 2 LSBs
Work_addr,#LCM_base_addr ; Add base offset
Work_addr,PIC_addr,Set_edge_wait
Wstate,#Rcv_cmd
Rcv next word ; point to next routine
Rcv_cmd
rnov Command,Comm_buffer ; save comm and
jnb Command.4,Comm get fast ; Fast read command, skip Reg ID
mov Wstate,#Rcv reg ID ; point to next routine
jmP Rcv_next_word
Comm get fast
mov W state,#Rcv_tpar ; point to next routine
jmp Rcv_next_word
Rcv reg ID
mov register_ID,Comm_buffer ; save register number
mov W state,#Rcv_tpar ; point to next routine
jnb Command.3,Rcv_next_word ; If no value, done
mov word_count,#7 ; Init word count
mov Wstate,#Rcv_value ; point to next routine
jmp Rcv_next_word
Rcv value
rl Comm_buffer
rl Comm_buffer
rl Commbuffer ; Shift rcvd bits to MSBs
mov Comm__bit_count,#5 ; shift 5 bits
:shift_loop
rl Comm_buffer
rl Comm_buf+4
rl Comm_buf+3
rl Comm_buf+2
rl Comm_buf+1
rl Comm_buf ; Shift a bit from Comm_buf to comm_buf
djnz Comm_bit_count,:shift_loop
djnz word_count,Rcv_next_word ; any more words?
mov Wstate,#Rcv_tpar ; point to next routine
jmp Rcv_next_word
Rcv_tpar
mov W,Tpar ; Get result of parity calculations
jnz Parity_error ; If not 0, parity error
jinp Set_rcv_stop ; set up to receive stop bit
Petição 870180163276, de 14/12/2018, pág. 42/97
32/77 ; Conun transmit word handler routines
Xrnit word handler djnz Comm bit count,Comin ret Do xmitword mov PCLATII,#$<
mov W,Wstatc jmp W ; If word not complete, continue ; Execute word handler routine
Send_addr
mov Wstate,#Send cmd> ; point to next word routine
mov W,PIC_addr ; get address
jmp Send_next_word
Sendcmd
mov Wstate,#Send_value> ; point to send value
jnb Command.4,Value_is_next ; Is it fast read command?
mov W state,#Send_reg_ID> ; point to next word routine
Value_is_next
mov W,Command ; get command
jmp Send_next_word
Send reg ID
mov W state,#Send_value> ; point to next word routine
mov W,Register_ID ; get Register ID
jmp Send_next_word
Send_value
mov Wstate,#Next_value> ; point to next word routine
mov Word_count,#7 ; value is 7 words long
Next_value
mov Comm_bit_count,#5
rloop
rl comm_buf+4
rl comm_buf+3
rl Comm_buf+2
rl Comm_buf+1
rl Comm_buf
rl Comm_buffer
djnz Comm_bit_count,:loop
mov W,Comm_buffer ; Get 5-bit word
djnz word_count,Send_next_word ; if not last word, all set
mov Wstate,#Send_Tpar> ; send parity next
mov W,Comm_buffer
jmp Send_next_word
Send_Tpar
mov W state,#Send_stop ; point to next word routine
mov W,Tpar ; get transverse parity
Petição 870180163276, de 14/12/2018, pág. 43/97
33/77 jmp Send next_word
Send_stop jmp Set_edge_wait ; Go back to receive mode ; Process received buffer org lOOh
Gmd_exec Process_cmd cjbe Command,#7h,Fast_register_read ; is it fast read?
cje Command,# 1 Oh,readjregister ; is it read register command?
cje Command,# 18h,write_register ; is it write register?
cje Command,# 19h,reset_status__bits ; is it reset status?
jmp Cmd_process_done
Fast_register_read
mov register_ID,command ; Register number is same as command code
Read_register
mov W,#27
mov W,register_TD-W ; Get index of register to read
jnc Cmd_process_done ; if negative, not a valid register
mov Temp,W ;save index
mov PCLATH,#$< ; set up High-order PC bits
mov W,Temp ; get index
jmp PC+W
jmp cpy_output_reg
jmp cpy reg 28
jmp cpy reg 29
jmp cpy reg 30
cpy_reg_31 ; Reg 31 = Status register
mov Comm buf,Status reg
mov Comm_buf+1 ,Status_reg+1
mov Comm_buf+2,Status_reg+2
mov Comm_buf+3 ,Status_reg+3
jmp Setupjreply
Cpy reg 30 ; Reg 30 = Serial number
call semo
mov comm_buf+3, W
call semo+1
mov comm_buf+2,W
call semo+2
mov comm_buf+1 ,W
call semo+3
mov comm_buf,W
jmp Setup_reply
Cpy_reg_29 ; Reg 29 = Software type and version
mov Comm_buf,#Software_type
mov Comm buf+l,#Software version
mov Comm_buf4-2,#0
mov Comm_buf+3 ,#0 ; Send Software type and version
Petição 870180163276, de 14/12/2018, pág. 44/97
34/77
jmp Setup_reply
cPX_reg_28 mov mov mov mov jmp ; Reg 28 = Parameter reg Comm_buf,Parameter_reg Comm_buf+l,Parameter_reg+l Comm_buf+2,Parameter_reg+2 Comm_buf+3 ,Parameter_reg+3 Setup_reply
Cpy_output_reg ; Reg 27 = Output state mov Comm_buf,Output_bit_reg mov Comm_buft-l9Output_bit_reg+l mov Comm_buf+2,Output_bit_reg+2 mov Comm_buf+3,Output_bit_reg+3 jmp Setup_reply
Write_register
mov Comm_bit_count,#5 ; need to shift buffer by 5
bits :loop rl comm_buf+4
rl comm_buf+3
rl comm_buf+2
rl comm_buf+l
rl comm_buf
djnz Comm_bit_count,: loop
cjne Register_lD,#28,See_write_output_reg ; Not reg 28, see if output reg
mov Parameter_reg,Comm_buf
mov Parameter_reg+1 ,Comm_buf+1
mov Parameter_reg+2,Comm_buf+2
mov Parameter_reg+3 ,Comm_buf+3 ; Copy received data to reg
clrb Status_LSB.Need_param_refresh_flag ; Reset need parameter refresh flag
jmp Cpy_regJ28 ; send contents back in reply
See_write_output_reg
cjne mov mov mov mov call jmp Register_ID,#27,Cmdjprocess_done Output_bit_reg,Comm_buf Output_bit_reg+1 ,Comm_buf+1 Output_bit_reg+2,Comrn_buf+2 Output_bit_reg+3,Comm_buf+3 Update_outputs Cpyoutputreg ; if not output reg, ignore ; Copy received data to reg ; send contents back in reply
Reset status bits
mov Comm_bit_count,#5 ; need to shift buffer by 5
bits
:loop
rl comm_buf+4
rl comm_buf+3
rl comm_buf+2
rl comm_buf+l
rl commbuf
djnz Comm_bit_count,:loop
mov W,/Comm_buf+1 ; get byte
and Status_reg+1 ,W ; Clear bits
f mov W,/Comm_buf ; get MSB
Petição 870180163276, de 14/12/2018, pág. 45/97
35/77 and Status_reg,W ; Clear bits mov RegisterJD,#31 ; indicate status reg in reply jmp Cpy_reg_31
Setupjreply jb Flags.Global—cmd_flag,Set edge wait ; If it was global, don't reply mov W,Status_LSB mov Comm_buf+4,W and W,#01fh or W,Status_MSB sz setb Comm_buf+4.7
MSB mov Tpar,#lfh mov Comm_state,#Send_edge mov Wstate,#Send_addr mov Comm_bit_count,#Nurn_start jmp Comm_ret ; Get status LSB ; preset stored flags ;Tumoff3MSBs ; Combine 5 LSbs with Status_MSB ; If any other flag bits set, indicate in ; Initialize parity word ; Go to send_edge state ; Point to next routine bits ; Init number of bits
Cmd_process_done jmp Setedgewait ; No reply needed, done ; Exit routines for comm ·>
Parityerror setb statusJLSB.Parity_err_flag ; Indicate parity error Set_edge_wait mov Comm_state,#Edge_wait ; Go to edge wait state mov Comm_bit_count,#Num_start_bits ; Init number of bits jmp Comm_ret
Set_send_reply mov Comm_state,#Send_edge mov Comm_bit_count,#Num_start_bits jmp Comm_ret ; Go to send edge state
Rcv_next_word mov Comm_state,#Rcv_bits mov Comm_bit_count,#6 jmp Comm_ret
Send_next_word
and W,#01fh
xor Tpar,W
call paritylookup
mov Comm_buffer,W
rl Comm_buffer
rl Comm_buffer
mov Com m_state,#Send_bits
mov Comm_bit_count,#6
jmp Comm_ret
; set up to receive 6-bit word ; only 5 bits ; update parity calculation ; Save word with parity (6 bits) ; move to MSbs ; set up to send 6-bit word
Set rcv stop
Petição 870180163276, de 14/12/2018, pág. 46/97
36/77
mov Comrn_state,#Rcv_stop ; point to next routine
jmp Commret
ORG 200h
Semo
; retw 05áh,092h,05fh,000h
; retw 0ffh,0ffh,0ffh,0ffh
ds 4
ret
; Retums 6-bit value corresponding to passed 5-bit value with odd parity parity_lookup
mov Temp,W ; Save index
mov PCLATH,#:table< ; Set up high-order bits
mov W,Temp ; get index
jmp pc+w
retw
Sets output bits according to received data Comm_buf = Pulse duration in milliseconds
0: Continuous output (iníinite duration)
1-255: Set output state for specified duration After duration is over, turn all outputs off
Comm_buf+1[3] = Bit map of output states - MSB first bits 23-18: Unused bits 17-0: Outputs 18-1
Update_outputs
mov W,Comm buf+3 ; get lsbs
and W,#03h ; only need 2 bits
mov Temp,W
add Temp,W ; Shift into bits 1 and 2 (XI and X2)
mov W,PORTA ; Get present status of port A pins
and W,#0f9h ; olear output control bits
or W,Temp ; Set desired output state
mov PORTA,W ; output new value
rr comm_buffl
rr comm_buf+2
rr comm_buf+3
rr comm_buf+-l
rr comm_buf+2
rr comm_buf+3 ; shift buffer left 2 bits
mov PORTB,comm_buf+2
mov PORTC,comm buf+3
mov ÍPORTA,#init_TRISA
Petição 870180163276, de 14/12/2018, pág. 47/97
37/77 mov ! PORTB,#init_TRISB mov ÍPORTC,#init_TRISC mov Millisecs,Comm_buf ; first byte is pulse duration jz done_output_set ms_loop mov Timeout_ctr,#ms_preset<
mov Timeout_ctr+1 ,#ms_preset>
:loop djnz Timeout_ctr+1loop djnz Timeout_ctr,:loop djnz Millisecs,ms_loop and PORTA,#0f9h clr PORTB clr PORTC done_output_set ret ; delay for pulse duration ; tum ofTXl and X2 ; tum off other outputs
Main Program start
Main_loop !PORTA,#Init TRISA 1 PORTB,#Init TRISB !PORTC,#Init_TRISC C lk_timeout_ctr,# 12 Clk_timeout_ctr+1 Flags.Clk_wait_flag ; Initialize port A direction ; Initialize port B direction ; Init port C direction ; preset ... ;... clock timeout counter ; Indicate waiting for clock low
mov mov mov mov clr c.lrb
Clkwait_loop
djnz scratch,Clk cont
clr WDT ; Reset watchdog
djnz Clk_timeout_ctr+1 ,Clk_ cont
djnz Clk_timeout_ctr,Clk_cont
jb Status MSB.POR_flag,got_POR ; Ignore clock timeout until POR
flag cleared
setb Status MSB.Clk timeout flag ; Indicate timeout on comm clock
jmp doinitialize
Clk cont
jb Comm_port.clock_in,:high ; clock high
:low
jb Flags.Clk_wait_flag,Clkwait_loop
mov Input_hold,Comm_port ; Save Data port value
setb Flags.Clk_wait_flag ; Indicate waiting for clock high
jmp Clkwait_loop
:high
jnb Flags.Clk_wait_flag,Clkwait_loop
djnz NPR_timer+1,: cont ; Dec LSB of need parm timer
djnz NPR timer,:cont ; Dec MSB
setb Status_LSB.Need_param_refresh_flag ; set flag every 64k clocks
:cont
mov PCLATH,#0 ; Set up high-order bits for routines in page 0
mov W,Comm state ; get vector
jmp W.. ; Execute comm state machine
Petição 870180163276, de 14/12/2018, pág. 48/97
38/77
Comni _ret jinp Mainjoop
Petição 870180163276, de 14/12/2018, pág. 49/97
39/77
PIC.DEF /* include file for serial cornmunication with PIC chips */ #pragma switch(ALL,FREQ) switch (PIC_serial_status) {
case sending_bits:
case sending st5 bits:
#ifdefVATEST out_bit_value = (PICxmitBuf.bits.bufLongfO] and 0x80000000) != 0; /* out bit value = MSB */
PICxmitBuf.bits.bufLongfO] = PICxmitBuf.bits.bufLongfO] « 1;
if (PICxmitBuf.bits.bufLongfl] and 0x80000000)
PICxmitBuf.bits.bufLong[0]++;
PICxmitBuf.bits.bufLongfl] = PICxmitBuf.bits.bufLongfl] « 1;
if (PICxmitBuf.bits.bufLong[2] and 0x80000000)
PICxmitBuf.bits.bufLong[l]++;
PICxmitBuf.bits.bufLongf2] = PICxmitBuf.bits.bufLong[2] « 1; /* Shift 96-bit buffer */
Jtelse out_bit_value = 0;
shift LSB_ptr = andPICxmitBuf.bits.bufBytef 121; /* point past least signifícant word of 96-bit register */ asm( MOVE.L _shift_LSB_ptr,AO, /* Get pointer to buffer, clear carry */
ROXL.W -(A0), ROXL.W -(A0),
ROXL.W ROXL.W ROXL.W ROXL.W -(A0), -(A0), -(A0), -(A0),
*/
ROXL.W outbitvalue
/* rotate left and decrement pointer */ /* rotate left and decrement pointer ♦/ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* 96 bits have been shifted, MSB is in cany /* Put MSB in out_bit_value */ irendif break;
case do_send_cmd:
bitcounf = NUM_START_BITS-1; PIC_serial_status = sending_start; outbitvalue = 0;
break;
case do_PIC_start:
bit_count = 3 * BITS_PER_SEC; out_bit_value — 1;
PIC_serial_status = sending_PlC_start; break;
case sendingstart: out_bit_value = 0; break;
Petição 870180163276, de 14/12/2018, pág. 50/97
40/77 case sending stop:
case sending start 1:
out_bit_value = 1;
break;
default:
out_bit_value= 1;
} if (out_bit_value) fsl004.io.pulse0ut20ff= 1;
else fsl004.io.pulsê0ut20ff = 0; /* Send bit out */ in__bit value = fsl004.io.pulseInlState; /* Get rcvd bit value */ fsl004.io.puíse0utl0ff= 1; /* Send clock rising edge */ switch (PIC_serial_status) {
case waiting_for_start:
if (in_bit_value — 0) zero_count++;
else {
if (zero_count = (NUM_START_BITS-1)) {
PIC_serial_status = rcvingbits; bit_count = PICrcvBuf.bitCount + 1; ) else zero_count = 0;
} break;
case rcving bits:
#ifdefVATEST
PICrcvBuf,bits.bufLong[0] = PICrcvBuf.bits.bufLongfO] « 1; if (PlCrcvBuf.bits.bufLong[l] and 0x80000000)
PICrcvBuf.bits.bufLong[0]++;
PlCrcvBuf.bits.bufLong[l] = PICrcvBuf.bits.bufLongfl] « 1; if (PICrcvBuf.bits.bufLong[2] and 0x80000000)
PlCrcvBuf.bits.bufLong[ 1 ]++;
PICrcvBuf.bits.bufLong[2] = (PICrcvBuf.bits.bufLong[2] « 1) + inbitvalue;
#else shift_LSB_ptr = andPICrcvBuf.bits.bufByte[12J; of 96-bit register */ asm( MOVE.L _shift_LSB_ptr,A0”,
ROXL.W -(AO),
ROXL.W -(A0),
ROXL.W -(A0), , ROXL.W -(AO),
ROXL.W -(A0), ' ROXL.W -(AO) /* point past least significant word /* Get pointer to buffer, clear carry */ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* rotate left and decrement pointer */ /* 96 bits have been shifted, LSb is unknown
Petição 870180163276, de 14/12/2018, pág. 51/97
41/77 );
PICrcvBuf.bits.bufBytefl 1] = (PICrcvBuf.bits.bufBytefll] and Oxfe) | injbit_value; /* add in received bit */ #endif break;
default:
{ }
if (—bit_count <= 0) {
switch (PICserialstatus) {
case rcving_bits:
PIC_seriai_status = rcving stop;
bit_count = 1;
break;
case sending_bits:
PlC_serial_status = sending_stop;
bit_count = 1; .
br.eak;
case sending stop:
if (PICxinitBuf.PIC_addr = GLOBAL_PIC_ADDR)
PIC_serial_status = idle;
else {
PIC_seriaI_status = waiting for start;
bit_count = PIC_wait_limit;
zero_count = 0;
} break;
case sending_PIC_start:
PIC_serial_status = idle;
break;
case sending_start:
PIÇ_serial_status = sending start 1;
bit_count= 1;
break;
case sending start 1:
PIC_serial_status = sending_bits;
bit__count = PICxmitBuf.bitCount;
break;
case waiting for start:
PICrcvBuf.flags |= rcv_timeout_flag | rcv_data_ready_flag;
PIC_serial_status = idle;
break;
case rcving stop:
if ,(in_bit_value = 0)
PICrcvBuf.flags |= rcv_bad_length_flag;
PJC_serial_status = idle;
PICrcvBuf.flags j= rcv_data_ready_flag;
bit_count = 1;
Petição 870180163276, de 14/12/2018, pág. 52/97
42/77 break;
default:
PlC_serial_status = idle; } }
#pragma switch(ALL,NOFREQ)
Petição 870180163276, de 14/12/2018, pág. 53/97
43/77
PULSE.C #include mtrlink.def” /* #include flash.def' */ #defíne PSTRU__DEFINED #include pulselink.def #include pulse.h #include ufloat.h ttinclude ”log.h tfinclude alarm.h #include copymem.h tfinclude plcctrl.h #include <stdio.h>
#ifdeffakeMC5 #undefNUMPH
- tfdefinc NUMPH 24 í/endif /* define WDT flags for the PIC communication routine */ #pragma region (ram=WDTFIags) short int WDTpulseSec;
#pragma region (ram=ram) #pragma region (data=secondBack) void (*pulseSecondp)(void)=pulseSecond;
#pragma region (data=data) #ifndef ISJMC5 #pragma region (data=everySubsecond) //ifdef IS_RSM void (*pulseSubsecp)(void)=pulseSubsecond;
#else void (*pulseSubsecp)(void)=pulseService;
^endif #pragma. region (data=data) #endif #pragma region (data=powerUp) void (*pulseStartupp)(void)=pulseStartup;
tfpragnja region (”data=data) í/pragma region (data=dayBack) void (*pulseDayp)(void)=pulseDay;
#pragma region (data=data)
Petição 870180163276, de 14/12/2018, pág. 54/97
44/77 /* clear out PIC */ void pulseColdstart(), r λ int i;
for (i=0; i<num_PICs; i-H-) if (PIC_status[i].software_type ==3) {
PIC_status[i].clear_puIse_regs = TRUE; PIC_status[i] ,get_status = TRUE; } . clear state = SEND_GLOBAL_CLR;
I void pulseStartup(void) t
i int i;
#ifndef ISJRSM int work_PIC_addr;
ftendif #ifdefIS_MC5 int work_num_pulses;
ftendif tfifdefVATEST /* test*/ temp__command = SYSTEM_CONTROL;
temp reg BD = 0;
temp_command_data = READENCODERID; temp_flags = rcv_datajready_flag;
#endif for (i=0;(!dont_clear_PIC_stats) andand (i<(2*NUMPH));í-H-) {
pulseData[i].error_cnt = 0;
pulseData[i].ID_fíeld[0]=0;
pulscData[i].reading — 0;
} for (i=0; i<MAX_PICS; í++)
PIC_status[í].PIC_addr = 0;
hold_nurn_pulse_ctrs = releaseCodep->option.numPulseCounters;
if (hold_num_pulse_ctrs > NUMPH) num_pulse_ctrs = NUMPH;
else num_pulse_ctrs = hold_num_pulse_ctrs;
num__PJCs - 1;
#ifdef IS_MC5 . PlÇ_statús[O].PIC_addr = MC5_MUX_PIC_ADDR; /* If MC5, add PDM PIC(s) to PIC table */
Petição 870180163276, de 14/12/2018, pág. 55/97
45/77 if (int_configltmessg.confígLTM[PULSE 1 ] .accum) {
work_num_pulses = num_pulse_ctrs;
work—PICaddr = 0;
while (work_num jpulses > 0) {
PIC_status[num_PICs++].PIC_addr = work_PIC_addr-H-; /* Pulse counters for Q13 */ work_numvpulses -= 4;
} · · }
. if(int_confígltmessg.confígLTM[PULSE2].accum) { · ·. · · work_num_pulses — num_pulse_ctrs;
work_PIC_addr = 6;
while (work_num__pulses > 0) f t
PIC_status[num_PICs++].PIC_addr = work__PIC_addi4-+; /* Pulse counters for Q14 “/ work_num_pulses -= 4;
} }
numJLCMs = releaseCodep->option.LCM_fIags and 0x03;
workPICaddr = LCM_BASE_ADDR;
for (i=0;i<num_LCMs;i++) {
PIC_status[num_PICs++].PIC_addr = work_PIC_addr++; /* LCM's */ }
#else íifdef ISST5
PIC_status[0].PIC_addr = ST5_MUX_PIC_ADDR; /* If ST5, add mux to PIC table */ ATM_work = releaseCodep->option.couplers_mask;
workPICaddr = ATM_BASE_ADDR;
for (i=0;i<4;i++) {
if ((ATM_work and 0x08) != 0) { /* Bit is set in mask, add ATM PIC to table */
PIC_status[num_PICs++].PIC_addr = work_PIC_addr;
} work_PIC_addr++;
ATM__work = ATMwork « 1;
} #else if (num_pulse_ctrs = 0) numPICs = 0;
#endif #endíf for (i=0; i<MAX_PICS; i++) { /* Build PIC table */ • PIC_status[i] .get_semo = TRUE;
PIC_status[i].get_version = TRUE;
PIC_status[i].get_status = FALSE;
PlC^statusfiJ.resetjítatus = FALSE;
PIC_status[i].update_parameter = FALSE;
Petição 870180163276, de 14/12/2018, pág. 56/97
46/77 if(!dont clear PIÇ_statsj {‘
PIC_status[i].PIC_reset count = 0;
PIC_status[i].comm_error_count = 0;
PIC_status[i].PICdata_err__count — 0;
PIC_status[i].software_type = 0;
PlC_status[i].softwareversion = 0;
PIC_status[i].serial_number ~ 0;
}
PIC_status[i].curr_puIse_reg = 0;
#ifdefIS_MC5 . ' if (PIC_status[i] .PICaddr >= ST5_MUX_PIC_ADDR) PIC_status[i].reply_waitJimit = DIRECT_PIC_WAIT_LIMIT; else
PlC_status[i].reply_wait_limit = BUFFERED_PIC_WAIT_LIMIT;
tfelse
PlC_status[i].reply_wait_limit = DIRECT_PIC_WAIT_LIMIT;
#endif if (PIC_status[i].PIC_addr <= MAX_PULSE_PIC_ADDR)
PlC_status[i].num_pulse_regs = PULSES_PER_PIC;
else·
PIC_status[i].num_pulse_regs = 0;
} current_PIC_index = 0;
rcv_PJC_index = 0;
if (dont_clear_PIC_stats) dont_clear_PIC_stats = FALSE; /* Clear flag */ else {
PIC_bad_addr_count = 0;
PICrcvBuf.flags = 0;
PlC^serialstatus = do_PIC_start;
PIC_clk_state = clk_low; /* Initialize serial comm variables */ }
clear_state=NO_GLOB AL_SEND;
pulseOutMode = releaseCode.option.picMode ; /* for compatibility with old code */ if (startup.coIdStart) {
pulseColdstart();
}
J
Petição 870180163276, de 14/12/2018, pág. 57/97
47/77 const unsigned char parity6[32] = {1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,37,3 8,41,42,44,47,49,50,52,55,56,59,61,62 };
void pulseDay() {
dont_clear_PIC_stats = TRUE; /* Tell pulseStartup not to clear error counts */ rebuild__timer = REBUILD_DELAY; /* Set up for delayed table rebuild */ } void pulseSecond() {
#ifndef 1S_ST5 pulseService();
#endif if (Comm_background_flags.do_rebuild) {
pulseStartupQ;
Comm_background_flags.do_rebuild = FALSE;
}
,. if (Cornm_background_flags.do_alarm) . { putAlarm(andPIC_aIarm,4);
Comm_background_flags.do_alann = FALSE;
} »
i /* set_PLC_relays function */ /* Called from PLC routines to request update of */ /* PLC port multiplexer PIC chip on ST5 power board */ £ifdefIS_ST5 void setjPLC_relays(int xmitRelay,int rcvRelay) t
- while (MUX_control.active_flag || MUX_control.request_flag) {
ccwaitQ;
}
MUX_oontrol.xmit_mask = xmitRelay;
MUX_control.rcv_mask = rcvRelay;
MUX_control.done_flag = FALSE;
MUX_control.request_flag = TRUE;
if ((MUX_control.xmit_mask != MUX_control.last_xmit_mask) || (MUX_control.rcv_mask != MUX_control.last_rcv_mask)) {
while (!MUX_control.done_flag andand !(MUX_control.active_flag andand (PIC_serial_status — rcving bits)) ) { ccwai,t();
} )
}
Petição 870180163276, de 14/12/2018, pág. 58/97
48/77 #endif void pulseService(void) r
λ
BOOLEAN need_pulse_read, copy_rcvd_data, rcv_buf_err;
#ifdefIS_MC5
BOOLEAN got_ver_3, got_ver_3_3;
int j;
unsigned char *work_char_ptr;
unsigned long work_bit_inask;
#endif , int \vork_pulse_index; phaccum accumXfer;
int i;
if (numJPICs “ 0)
PIC_serial_status = idle;
if (PICserialstatus — idle) {
if (IWDTpulseSec)
WDTpulseSec=l; /*Tell WDT controller that we are OK*/ if (hold_numjpulse_ctrs != releaseCodep->option.numPulseCounters) { /* hdwr -n has changed */ dont_clear_PIC_stats = FALSE;
rebuild_timer =1; /* Force immediate table rebuild */ }
. if ((PIC_serial_status = idle) andand (rebuild timer != 0) andand (—rebuild_timer = 0)) {
Comm_background_flags.do_rebuild = TRUE;
} else if ((PIC_seriabstatus = idle) andand (numJPICs != 0) andand (pulseOutMode != PIC MC SERIAL) andand (!Comm_backgronnd_flags.do_rebuild)) /* Serial processing enabled? */ { if (PICrcvBuf.ílags and rcv_data_ready_flag)
{. /* Process received message */
PICrcvBuf.ílags and= ~rcv_data_ready flag;
Petição 870180163276, de 14/12/2018, pág. 59/97
49/77 rcv_buf_err — !decode_rov_buffer0;
if ((PICçcomm_mon.control_flags and RCV_DATA_RDY) = 0) {
PIC_comm_mon.rcv_buf = PICrcvBuf;
PIC_comm_mon.control_flags |= RCV_DATA_RDY;
} if ((ext_comm.control_flags and CPY RCV DATA) != 0) r
í ext_comm.rcv_buf = PICrcvBuf;
ext_comm.control_flags and= -CP.Y RCV DATA;
ext_comm.control_flags |= RCV_DATA_RDY;
} #ifdefIS_ST5 if (ATM_control.active_flag) {
ATM_control.result_flags = PICrcvBuf.flags;
if (rcv_buf_err) {
if (ATMcontrol, state != WAIT_ALIGN) {
ATM_controI.error_flag = TRUE;
ATM_control.active_ílag = FALSE;
ATM_control.done_flag = TRUE;
' } )
else { .
switch (ATM_control. state) {
case DO_PRESET:
{
ATM_control.xmit_level — PICrcvBuf.command_data » 24; ATM__control.coupler_level = (PICrcvBuf.command_data » 16) and OxOff; ATM_control.active_flag = FALSE;
} break;
case SET_AL1GN:
{
ATM_control.state = WAIT_ALIGN;
} break;
case WÀIT_ALIGN:
{
ATM_control.optimum_cap_code = PICrcvBuf.commanddata and ATMJRC_CAP_MASK;
ATM_control.optimum_reading = PICrcvBuf.command_data » 16; ATM_control.result_flags |= (PICrcvBuf.command_data and OxeOOO);
/* Copy flags from reply */ , if ((ATM_control.result_flags and OxeOOO) != 0) { /* Analog leveis out of range */
ATM_control.error_flag = TRUE;
Petição 870180163276, de 14/12/2018, pág. 60/97
50/77 if(ATM_control.optimum_reading < ATM_M1N_READING) {
ATM_control.result_flags |= 0x1000; /* Indicate reading too low */ ATM_controI.error_flag = TRUE;
}
ATM_controI.active_flag = FALSE;
} break;
case DO_PLC_SET:
case DO_ATM_DISCONNECT:
{
ATM_control.active_flag= FALSE;
} break;
default:
{
ATM_control.activeflag = FALSE;
ATM_controI.error_flag = TRUE;
} break;
} }
if (!ATM_control.active_flag)
ATM_control.doneflag = TRUE;
if (MUX_control.active_flag) {
MUX_controI.resuIt_flags = PICrcvBuf.flags;
if (rcv_buf_err) {
MUX_control.error_flag = TRUE;
MUX_control.last_xmit_mask = 0;
MUX_control.last_rcv_mask = 0;
} else {
MUX_control.last_xmit_mask = PICrcvBuf.command_data and Oxff;
MUX_control.last_rcv_mask = (PICrcvBuf.command_data » 8) and Oxff; }
MUX_control.active__flag — FALSE;
MUX_control.done_flag = TRUE;
} #endif if (rcv_buf_err) {
#ifdefIS_ST5 if (!ATM_control.active_flag || (ATM_control.state != WAIT_ALIGN)) tfendif {
last_comm_err_flag = PICrcvBuf.flags;
copymem(sizeof (PICbitBuf), (char *) (andHoldrcvBuf), (char *) (andPICrcvBuf));
if ((PICrcvBuf.flags and rcv_bad_addr_flag) != 0)
Petição 870180163276, de 14/12/2018, pág. 61/97
51/77 { /* past end of valid PICs, address error */
PIC_bad_addr_count++;
setPICalaiin(PICadderr_O,PICrcvBuf.PIC_addr, (PICxmitBuf.PIC_addr « 8)+PICxrnitBuf.command);
} else { /* PIC address was valid, but comm failed */
PIC_status[rcv_PIC_index].comm_enor_count++; if (PIC_status[rcv__PIC_index].comm_error_count > 2) { set_PIC_alarm(PIC_comerr_0,PIC_status[rcv_PIC_index].PIC_addr, PICrcvBuf.flags);
) /* Lost contact with PIC, read serial number and software version */ PIC_status[rcv_PIC_index].get_semo = TRUE; PIC_status[rcv_PIC_index].get_version = TRUE;
} } } else { /* Valid message received */ if ((PICrcvBuf. command = READ_REGISTER) andand (PICrcvBuf.regJTD = STATUS_REG)) { process_status_bits();
} else if (PICrcvBuf.command = SYSTEM CONTROL) {
if (PICrcvBuf.reg_ID = STATUS_REG) { /* Response frome reset status bits cmd */
PIC_status[rcv_PIC_index].reser_status = FALSE; process_status_b itsQ;
} /£ifdef 1S_MC5 else if ( (PIC_statusLrcv_PIC_index].software__type — 4) andand ((PIC_status[rcv_PICJndex].last_cmd_data and OxffffiOOOO) — READ_ENCODER_1D) ) { /* response from encoder read ID comd */ work__pulse_index - (PlCrcvBuf.PIC_addr * PULSES_PER_PIC) + PICrcvBuf.reg_PD;
i = (PIC_status[rcv_PIC_index].last_cmd_data and OxOOOOfíDO) » 8; work_char_ptr — (unsigned char *) andPICrcvBuf.command_data; for (j=0; j<4; j++) .
{ if ((*work_char_ptr == 0) || (i >= ID_FIELD_LENGTH)) { · .
j = 10; /* indicate end of message foiind */ }
else { pulseData[workjpulse_index].ID_buffer[i] = *work_char_ptr; i++;
work_char_jptr++;
}
Petição 870180163276, de 14/12/2018, pág. 62/97
52/77 { /* found end of 1D fíeld frorn remote encoder */ for (i=0; i<ID FIELI\ LENGTH; i+ r) {
pulseDatafworkjpu lsejndex] .ED_fíeld[i] pulseDatafworkj>ulse_index].ID_buffer[i];
puIseData[workjpulse_index].ID_buffer[i] = 0;
} }
> j }
else if ((PICrcvBuf.command = READ_REGISTER) andand (PICrcvBuf.regJD — ERRORREG)) {
if (PIC_status[rcv_PIC_index].sofhvare_type = 4) { /* Remote encoder interface module */ work__pulse_index = (PICrcvBuf.PIC_addr * PULSES_PER_PIC) + (PICrcvBuf.command_data » 24);
if (work_pulse_index < (2 * NUMPH)) { pulseData[work_pulse_index].error_cnt-H-; for (i=0; i<ID_FIELD_LENGTH; nulseData[work_pulse_index].ID_buffer[i++] = 0);
} }
#endif else if ((PICrcvBuf.command~= WR1TE_REG1STER) andand (PICrcvBuf.reg_ID =·= PARM-REG)) • {
PIC_status[rcv_PICJndex].update_parameter = FALSE;
else if ((PICrcvBuf.command — READ_REGISTER) andand (PICrcvBuf.reglD = VERS_REG)) { PIC_status[rcv_PIC_index].get_version = FALSE; PIC_status[rcv_PIC_index].software_type = (PlCrcvBuf.command_data and OxffOOOOOO) » 24;
, PIC_status[rcv_PIC_index].software_version = (PlCrcvBuf.command_data and OxOOfTOOOO) » 16; PIC_status[rcv_PIC_index] .loopjrate = (PICrcvBuf.command_data and OxOOOOffDO) » 8;
} else if ((PICrcvBuf.command = READ REGISTER) andand (PICrcvBuf.reg_ID “ SERNOJREG)) < PIC_status[rcv_PIC_index].get_semo = FALSE; PIC_status[rcv_PIC_index].serial_number = PICrcvBuf.command_data;
} ... · v .
else if (((PICrcvBuf.command = READ_REGISTER) || (PICrcvBuf.command <MAX_FAST_READ)) andand (PICrcvBuf.reg_ID <= MAX_PULSE_REG)) { /* Pulse reading */ work_pulse_index v (PlCrcvBuf.PIC_addr *. PULSES_PER_P1C) + PICrcvBuf.reglD;
Petição 870180163276, de 14/12/2018, pág. 63/97
53/77 if (work pulseindex < (NUMPH * 2)) {
pulseData[workj)u]se_index].reading = PICrcvBuf.command_data; copy rcvd data = FALSE; . · if (PIC status [rcv_PIC_index].get versiou) {
} else if (PIC_status[rcv PIC_index].software_type — 4) { /* Remote encoder interface module */ • copy_rcvd_data - TRUE;
accumXfer.low ~ pulseData[work_pulse_index].reading;
} else if (PIC_status[rcv_PIC_index],software_type — 3) { /* Remote pulse counter module */ copy_rcvd_data = TRUE;
if (!PIC_status[rcv_PIC_index].get_semo) {
sprintf((char *) pulseData[work_pulse_index].ID_field,S%081dP%d, PIC_status[rcv_PIC_index].serial_number, PICrcvBuf.regJD);
} if (releaseCode.option.countEveryEdge) { accumXfer.low = pulseData[work__pulse_index].reading;
else { · accumXfer.low = pulseData[work_pulse_index].reading » 1;
} }
accumXfer.high = OL;
#ifndef VATEST if (copy_rcvd_data) {
//ifndef IS_MC5 /* It is an RSM or ST5, so mapping for pulse 1 thru 4 is M1Q13, M1Q14, M2Q13, M2Q14 */ ph[0][work_pulse_index/2][(work_pulse_indexand0x0l)?PULSE2:PULSEl].accuni = ph[l][work_pulse_index/2][(work_pulse_indexand0x01)?PULSE2:PULSEl].accum = accumXfer;
//else /* It is an MC5, so mapping for pulse 1 thru 48 is M1Q13..M24Q13, M1Q14..M24Q14 */ ph[0][work_pulse_index%NUMPH][(workjpulse_index/NUMPH)?PULSE2:PULSEl].accu m =
Petição 870180163276, de 14/12/2018, pág. 64/97
54/77 ph[ 1 ] [work_pulse_index%NUMPH] [(work__pulse_index/NUMPH)?PULSE2 :PULSE 1 ] .accu
m = accumXfer;
ftendif }
tfendif } } if ((PICrcvBuf.flags and (PIC_error_flag | PIC_invalid_data_flag)) != 0) PlC_status[rcv_PIC_index].get_status = TRUE; ... if ((PICrcvBuf.flags and PIC_need_refresh_flag) != 0) PIC_status[rcv_PIC_index].update_jparameter = TRUE; /* check status flags */ /
·>
i í* Decide what command to send */
PlCxmifBuf.flags = 0;
jíifndef IS_ST5 .· /* MC5 or RSM, check for cold-start processing to clear pulse registers */ if (c!ear_state = SEND_GLOBAL_CLR) { /* Cold start, send global clr */
PICxmitBuf.PIC_addr = GLOBAL_PIC_ADDR; PICxmitBuf.command = CLEAR_PULSE_REGISTERS; format_xmit_buffer();
clearstate = SENDING_GLOBAL_CLR;
PIC_serial_status - dosendcmd; /* Start UART */ }
else if (clear_state = SENDING_GLOBAL_CLR).
{ clear_state = GLOBAL_CLR_SENT;
} i/else /* ST5, check for ATM (Automatic Tuning Module) operations */ if (ATM_control.request_flag) {
ATM_control.rcqucst_flag = FALSE;
ATM_control. errorJflag = FALSE;
ATM_control.aciive_flag = TRUE;
ATM_control.state = ATM._DONE;
PlCxmitBuf.PlÇ_addr - ATM_control,ATM_nuinber + ATM_BASE_ADDR;
switch (ATM control.operation) { · case. SET_PRÇ_ALIGN:.
Petição 870180163276, de 14/12/2018, pág. 65/97
55/77
PICxmitBuf.command = WRITE_REGISTER;
PICxmitBuf.regJD = OUTPUT_REG;
PICxmitBuf.command_data = ATM_control.start_cap_code and ATM_RC_CAP_MASK;
PICxmitBuf.command_data |= ATMPRESETCODE;
ATM_controI.state = DO_PRESET;
break;
case DOJLIQN :
PICxmitBuf.command = WRITE_REGISTER;
PICxmitBuf.regJD = CONTROLREG;
if (ATM_control.start_cap_code > ATM_control.end_cap_code) ATM_contrpl.end_cap_code = ATMcontrol.startcapcode;
PICxmitBuf.commanddata = ATM_control.start_cap_code and ATM_RC_CAP_MASK;
PICxmitBuf.command_data = (PICxmitBuf.command Jata « 12 ) | (ATM_control.end_cap_code and ATM_RC_CAP_MASK) I (ATM_MEAS_TIME « 24);
ATM_control. state = SET_AL1GN;
ATM_control.align_timer — ATM_control.end_cap_code ATM_control .start_cap_code;
ATM_control.alignJimer *= ((ATM_DISCJTME + ATM_MEAS_TIME + 4) * (1.25/62.5));
ATMJontrol.alignjimer += 13; /* Time in 1/64 sec to wait before checking result */ /* Number of steps * time per step + 25% + .2 second */ break;
case SET_NORMAL_PLC:
PICxmirBuf.command = WR1TEREGISTER;
PICxmitBuf.regJD = OUTPUTJREG;
PICxmitBuf.command data = ATM_control.optimum_cap_code and ATM_RC_CAP_MASK;
PICxmitBuf.command data |= ATM_PLC_CODE;
ATM_control.state = DOPLCSET;
break;
case DISCONNECTJCOUPLER:
PICxmitBuf.command = WRITEREG1STER;
PICxmitBuf.regJD = OUTPUT_REG;
PICxmitBuf.commandJata - ATM_controLoptimum_cap_code and ATM_RC_CAP_MASK;
PICxmitBuf.commandJata }= ATM_DISC_CODE; .
ATM_control.state = DO_ATM__DISCONNECT; break;
default:
case READ_XMIT_LEVEL:
. ATM_control.error_flag = TRUE; ATM_control.done_flag = TRUE; ATM_control.active_flag ·= FALSE; break;
Petição 870180163276, de 14/12/2018, pág. 66/97
56/77 if (ATM_control.active_flag) {
format__xmit^buffer();
PIC_wait_limit = DIRECT_PIC_WAITJ JMIT;
PIC_serial_status = do_send cmd; /* Start UART */ )
i }
else if (ATM_control.active_flag) {
if ((ATM_control.state != WAIT_ALIGN) || (—ATM_control.align_timer <= 0)) {
ATM_control.error_flag = TRUE;
ATM_control.done_flag - TROE;
ATM_control.active_flag = FALSE;
} else { /* poli ATM for auto-tune end */
PICxmitBuf.command = 0; format_xmit_buffer();
PIC_waítJimit = DfRECT_PIC_WAIT_LIMIT;
PICserialstatus = do_send_cmd; /* Start UART */ }
} else if (MUX_control.request_flag) {
MUX_control.request_flag = FALSE;
MUX_control.error_flag = FALSE;
if ((pulseOutMode = P1C_ST_SERIAL)) {
PICxmitBuf.bits.bufByte[O] = ((MUX_control.rcv_mask and 0x03) « 5) | ((MUX_control.xmit_mask and 0x7f) » 2);
PICxmitBuf.bits.bufByte[l] = ((MUX_control.xmit_mask and 0x03) « 6);
bit_count = 11;
PIC_serial_status = sending st5 bits; /* Start UART */ MUX_control.last_xmit_mask = MUX_control.xmit_mask; MUX_control Jast_rcv_mask = MUX_control.rcv_mask; MUX_control.done_flag = TRUE;
.} else {
MUX__control.active_flag — TRUE;
PICxmitBuf.PIC_addr = ST5_MUX_PIC_ADDR;
PICxmitBuf.command = WRITEREGISTER;
PICxmitBuf.regJD = OUTPUT_REG;
PICxmitBuf.command_data = (MUX_controI.rcv_mask « 8) + MUX_control.xmit_mask;
format_xmit_buffer0;
PlC_wait_limit = DIRECT_PIC_WA1T_LIMIT;
PIC_serial__status = do_send_cmd; /*. Start UART */
Petição 870180163276, de 14/12/2018, pág. 67/97
57/77 #endif else if «ext_comm.control_flags and (XMITJDATAJRJDY | XMIT_REQUEST)) = • (XMIT_DATA_RDY | XMIT_REQUEST)) { , /* Send command for externai routine */
PICxmitBuf = ext_comm.xmit_buf;
ext_comm,control_flags and= ~XMIT_REQUEST; ext_comm.control_flags |= CPY_RCV_DATA;
* /* Look up correct PIC_status index for reuested PIC */ for (i=0; ((i<MAX_PICS) andand (PIC_status[i].PIC_addr != PICxmitBuf.PIC_addr)); i++); · if (i < num_P!Cs) {
PIC_status[i].last_cmd_data = PICxmitBuf.command_data; PlC_status[i].last_command = PICxmitBuf.command;
} #ifdefIS_MC5 if (ext_comm.xmit_buf.PIC_addr < ST5 JVlUXJPICADDR) PIC_wait_ limit = BUFFERED_PIC_WAIT_LIMIT;
else /íendif
PIC .waitjimit = DIRECT_PIC_WAIT_LIMIT;
format_xihit_buffer();
PIC_seria'_status = do_send_cmd; /* Start UART */ }
else if ( ((ext_comm.control_flags and SUPPRESS_NORMAL_COMM) — 0) tfifdef IS_ST5 andand (—ST5_PIC_delay_ctr <= 0)) {
ST5_PlC_delay_ctr = ST5_P1C_DELAY; /* Slow down routine communications in the ST5 */ #else )
{ //endif
PICxmitBuf.PlC_addr = PIC_status[current_PlC_index].PIC_addr; need_pulse_read = TRUE; /* Set defaults */ #ifdefIS_ST5 if ((pulseOutMode — PIC_ST_SERIAL) andand (P!CxrnitBuf.PIC_addr = ST5_MUX_PIC_ADDR)) { else
Petição 870180163276, de 14/12/2018, pág. 68/97
58/77 #endif if (PIC_status[current_PIC_index].force_pulse_read andand (!PIC_status[current_PIC_índex].get_version) andand (PIC_status[current_PIC_index].PIC_addr < ST5_MUX_PIC_ADDR) ) {
PIC_status[current_PIC_index].force_pulse_read = FALSE:
} · else . ·
PIC_status[current_PIC_index].force__pulse_read = TRUE;
Ztifndef IS_ST5 if (PIC_status[current_PIC_index].clear_pulse_regs andand (clear_state = GLOBAL_CLR_SENT) ) { /* Global clear sent, get status */ need__pulse_read = FALSE;
PICxmitBuf.command = READ_REGISTER; PICxmitBuf.regJfD = STATUSJREG; format_xmit_buffer();
} else //endif if (PIC_status[current_PIÇ_index].get_version) { needpulsejread = FALSE;
PICxmitBuf.command = READ_REGISTER; PICxmitBuf.regJD = VERS_REG; format_xm it_buffer();
} else if (PIC_status[current_PlC_mdex].get_semo) {
need_pulse_read = FALSE;
PICxmitBuf.command = REAJD_REG1STER; PICxmitBuf.reglD .= SERNO_REG; format_xm it_buffer();
} else if (PIC_status[current_PIC_mdex].update_parameter) {
PICxmitBuf.command = WRITEREGISTER;
if (PIC_status[current_PIC_index].software_type = 3) { /* Pulse ctr */
- /* Pulse ctr parameters: */ /* Power-On sample rate: , 42/sec */ /* Power-off sample rate: 1/sec */ /* Days to count if rcving pulses: */ /* . RSM: 5 days*/ /* PDM: 35 days*/ /* Days to count if no pulses rcvd: */ /* RSM: 1 day*/ /* PDM: 3 days . */ nn R SM tbe 9. labe nf*/
Petição 870180163276, de 14/12/2018, pág. 69/97
59/77 /* !oad_shed_jnask[0) are sent to */ /* the PIC ouiput bits */ #ifdefIS_RSM
PICxmitBuf.command_data = 0x01150507 and (load_shed_state[0] | Oxfffffffc);
//else
PICxmitBuf.command_data = 0x011523Od; //endif }
í/ifdef IS_MC5 else if (PIC_status[current_PIC_index].software_type = 4) { /* Remote encoder reader */
PICxmitBuf.command_data = READ_ENCODER_PARM; if ((releaseCodep->option.couplers_mask and 0x01) = 0) • { /* If mask bit 0 is 0, no touch-pad compatibility */
PICxmitBuf.command_data and= OxffOOffff;
} }
else if (PIC_status[current_PlC_index].software_type == 5) { /* MC5 naux */ got_ver_3 = got_ver_3_3 = FALSE;
for (i=0; i<num_PICs; i++) {
if (PIC_status[i].get_version) {
got_ver_3 = TRUE; got_ver_3_3 = TRUE;
} else if (PIC_status[i].software_type — 3) {
got_ver_3 = TRUE;
if (PIC_status[i].software_version — 3) got_ver_3_3 = TRUE;
} }
if (got_ver_3) f
<.
jf (got_ver_3_3 andand ((releaseCodep->option.coupIers_mask and 0x02) != 0)) {
PICxmitBuf.command_data = 0x0c007000; /* 32 bps, periodic wake-up */ }
else {
PICxmitBuf.command_data = 0x0c007080; /* 32 bps, no wake-up */ }
else
PICxmitBuf.command_data = 0x02030080; /* 205 bps, no wake-up */ #endif //ifdef IS_ST5
Petição 870180163276, de 14/12/2018, pág. 70/97
60/77 else if.(PIC status[cuirent PICJndex].software Jype == 8) { /* Auto tune module */
PICxrnitBuf.commanddata — 0x02030000 | (ATM_DISC TIME « 8) |· (ATM^RC XMIT .ON » 8) | ATM_NUM_CAP_BITS;
!* xmit offset “ 2, cplr offset — 3, */ /* relay delay - ATM_DISCTIME, Xmit mask -- ATM_RC_XMIT_ON, */ /* number of capacitor relays « ATM_NUM_ CAP BITS */ }
else if (PIC_status[current_PIC_index].software_type =-= 6) { /* ST5 mux */
PICxmitBuf.command_data = 0x00000000;
} ' · tfendif else if (PIC_status[current_PIC_index].software_type = 7) { /* Load Control Module */ ’ PICxmitBuf.command_data = 0x00000000;
} else { ' PIC_status[current_PIC_index].update_parameter = FALSE;
/* unknown software type, cancel command */ }
if (PIC_status[current_PIC_index].updatejparameter) { need_pulse_read = FALSE; PICxmitBuf.reglD = PARM_REG; format_xmit_buffer();
} }
else if (PIC_status[current_PIC_index].reset_status) { need_pulse_read = FALSE; PICxmitBuf.command = SYSTEM_CONTROL; PICxmitBuf.command_data = (PIC status [current_PIC_index].status_reg_value and Oxffbf); PICxmitBuf.command_data = PICxmitBuf.command_data « 16; /* Move status bits to MSb's */
PICxmitBuf.rcg_ID = STATUS_REG; format_xmit_buffer();
} else if (PIC_status[current_PlC_index].get_status) { need_pulse_read = FALSE;
PICxmitBuf.command = READREGISTER; PICxmitBuf.reg_.ID = STATUS_REG; format_xmit_buffer();
} #ifdefIS_MC5 if (need_pulse_read andand (PlC_status[current_PIC_index].soflware_type = 4)) { need_pulse_read = FALSE;
PICxmitBuf.command = SYSTEM_CONTROL;
Petição 870180163276, de 14/12/2018, pág. 71/97
61/77 if (++PIC_status[current_PIC_index].curr_ID_reg >= PULSES_PER_PIC)
P1C_status[current_PIC_index],curr_ID_reg = 0;
if ( (((PIC_status[current_PIC_index].PIC_addr * PULSES_PER_PIC) + PIC_status[current_ PIC_index].curi_ID reg) % 24) >= num_pulse ctrs) PIC_status[current_PIC_index].curr_ID_reg ~ 0;
PICxmitBuf.reg ID = PIC_status[current_PIC_index].curr_IDreg; work_pulse_index = (PIC_status[current_PIC_index].PIC_addr * PULSESJPERPIC) + PICxmitBuf.reg_ID;
for (i=0; i<lD_FIELD_LENGTH; i++) if (pulseData[work_pulse_index].ID_buffer[i] — 0) í i = ID_FIELD_LENGTH;
} }
if(j<0) { j = 0;
} else if (j > (ID_FIELD_LENGTH-4)) {
j = IDJFffiLDJLENGTII-4;
}
PICxmitBuf.command_data = READ_ENCODER_ID | (j « 8);; · form at_xmit_buffer();
} #endif }
if (need_pulse_read) { //ifdef IS_MC5 if (PIC_status[current_PIC_index].software_type = 7) { i = PIC_status[current_PIC_index].PIC_addr - LCM_BASE_ADDR; /* get LCM # */ work_bit_mask = (load_shed_state[0] » (9 * i)) and OxOOOOOlff; PICxmitBuf.command_data = 0;
for (i=0;i<9;i++).
{ if ((work_bit_mask and 0x100) != 0) PICxmitBuf.command_data = (PICxmitBuf.commanddata « 2) + 1; /* lsb tums relay on */ else
PICxmitBuf.command data = (PICxmitBuf.command_data « 2) + 2; /* msb tums relay on */ work_bit_mask = work_bit_mask « 1;
)
PICxmitBuf.command data |= 0x32000000; /* Set pulse time = 50 mS */
Petição 870180163276, de 14/12/2018, pág. 72/97
62/77
PICxmitBuf.command = WRITEREGISTER;
PICxmitBuf.regJD = OUTPUT_REG;
format_xmit_buffer();
needjpulseread = FALSE;
} else i/endif if (PIC_status[cnrrent_PIC_index].nujn_pulse_regs — 0) . { ííifhdef IS_ST5
PICxmitBuf.command = READ_REGISTER;
. PICxmitBuf.reg_LD = VERS_REG;
format_xmit_bufferO;
need_pulse_read = FALSE;
#endif }
else {
Zíifdef IS_MC5 if ( (((PIC_status[current_PIC_index].PIC_addr * PULSES_PER_PIC) + PIC_status[current_PIC_index].curr_pulse_reg) % 24) >= num_pulse_ctrs)
PIC_status[current_PIC_index].curr_pulse_reg = 0; <7endíf if (PIC_status[current_PIC_index].curr_pulse_reg <= MAX FAST READ) PICxmitBuf.command = PIC_status[currentJPIC_index].curr_pulse_reg;
else
PICxmitBuf.command = READ_REGISTER;
PICxmitBuf.reg_ID = PIC_status[current_PIC_index].currl_pulse_reg;
' format_xmit_buffer();
need_pulse_read = FALSE;
. if (++PIC_status[current_PIC_index] .curr_pulse_reg >= PIC_status[cun'ent_PIC_index].num_pulse_regs) {
. PICjstatus[current_PIÇ_index].curr_pulse_reg = 0;
#ifdef IS__RSM PIC_status[currenl_PIC_index].update_parameter = TRUE;
í/endif }
} }
PIC_stalus[current_PIC_index].last_cmd_data = PICxmitBuf.cominand_data; PIC_status[current_PIC_index].last_command = PICxmitBuf.command;
PIC_wait_limit = PTC_status[current_PICJndex].reply_wait_limit;
rcv_PIC_index = current_PIC_index;
if (++current_PIC_index = num_PICs) current_PIC_index = 0;
if (!need_pulse_read)
PIC_seriàl_status = do_send^cm.d; /* Start UART */
Petição 870180163276, de 14/12/2018, pág. 73/97
63/77 }
} }
#ifdef IS_RSM 7* In RSM, generate serial stream from subseconds ♦/ void pulseSubsecond(void) {
if (num_PICs != 0) { · .
if (PIC_clk_state = clk_high) {
/* Falling edge, just set clock low */ fsl004.io.puls'e0utl0ff = 0;
PIC_clk_state = clk_low;
} else {
PIC_clk_state = clkhigh;
r/include pic.def /* Do PIC serial comm on clock rising edge */ } } }
/‘endif void process_status_bits(void) c
unsigned int work_pulse_index, work_status_bits;
PIC_status[rcv_PIC_index].get_status = FALSE;
PIC statusfrcv PIC index] .status reg value = PICrcvBuf.command data» 16;
PIC statusjrcv PIC indexl.time since global — (PICrcvBuf.command data» 8) and Oxff;
if(PIC statusírcv PIC index-].status reg value != 0) {
PIC_status[rcv_PIÇ_index].reset_status = TRUE;
if ((PIC statusfrcv PIC index].status reg value and 0x8fl0) 1= 0) {
PIC_status[rcv_PIC_index].PIC_data_err count++; /* PIC detected bad data */ set_PIC_alarm(PIC_flags_O,PIC__status[rcv_PIÇ_index].PIC_addr,
PIC statusfrcv PIC indexl.status reg value);
work_status_bits = (PIC statusfrcv PIC indexl.status reg value» 8) and OxOf; work_pulse_index = PIC_status[rcv_PIC_index].PIC_addr * PULSES PER PIC; while (work status_bits > 0) {
if (work_status_bits and 0x01) pulseData[work_j>ulse_index].error_cnt-H-;
Petição 870180163276, de 14/12/2018, pág. 74/97
64/77 work_status_bits = work_status_bits » 1;
work_pulse_index++;
} } . . . ’ · · if «(PICstatus[rcv PIC indexl.status reg value and 0x20) != 0) andand ! PIC_status[rcv_PICJndex] .clear_pulse_regs) { ·'
P]C_status[rcv_PIC_index].comm_error_count++; /* PIC detected comm parity err */ if (PIC_status[rcv_PIC_index].comm_error_count > 2) { set_PIC_alarm(PlC_comerr_0,PIC_status[rcv_PIC_index].PIC_addr, PICrcvBuf.flags | 0x0800);
} }
if ((PIC_status[rcv_PIC_index].status_reg_value and 0x3080) != 0) {
PlC_status[rcv_PIC_indexJ.PIC_reset_count-H-; /* PIC xvas reset */ if (PIC_status[rcv_PIC_index].PIC_reset_count >1) ( { set_PIC_alarm(PIC_reset_O,PIC_status[rcv_PIC_index].PIC_addr, PIC_status[rcv_PIC_index].status_reg_value);
} }
} if (PIC_status[rcv_PIC_index].clear_pulse_regs andand (clear_state = GLOBAL_CLR_SENT) ) < ·
PIC_status[rcv_PIC_index].clear_pulse_regs = FALSE;
if ( «PIC statusírcv PIC indexl.status reg value and OxOf) != OxOf) andand (PIC_status[rcv_PIC_index].software_type — 3) ) {
PlC_status[rcv_PIC_index].PIC_data_err_count-H-; /* Clear cmd failed */ set_PIC_alarm(PIC_flags_OJPIC_status[rcv_PIC_index].PIC_addr,
PIC statiisfrcv PIC indexl.status reg value);
} · . · } else if ( «PIC statusfrcv PIC . indexl.status reg value and OxOf) != 0) andand «PIC status[rcv PIC indexl.status reg value and OxflO) = 0) ) {
PIC_status[rcv_PIC Jndex].PIC_data_err_count +— 1000; /* Spurious clr cmd */ set_PIC_alarm(PIC_flags_O,PIC_status[rcv_PIC_index].PIC_addr,
PIC statuslrcv PIC indexl.status reg value);
} }
void set_PIC_alarm(alarmcodes pass_alarm_codes, int pass_PIC_addr, unsigned int pass_alarm_data) (
l if (!Comm_background_flags.do_alarm) {
PIC_alarm.alarm_codes = passalarincodes + pass_PIC_addr;
Petição 870180163276, de 14/12/2018, pág. 75/97
65/77
PlC alann.ack = pass alarm__data;
Comm_background_flags.do_alarm = TRUE;
} }
unsigned char workTpar;
BOOLEAN decode_rcv_buffer(void) int i;
unsigned int worklnt;
workTpar — 0x1 f;
if (PICrcvBuf.flags — 0) (
work_PIC_addr = Get5();
if (PICrcvBuf.flags = 0)
PICrcvBuf.PIC_addr = work_PIC_addr; /* Valid address received */
PICrcvBuf.command = Get5();
if (PICrcvBuf.command > OxÓf)
PJCrcvBuf.regJD = Get5();
else
PICrcvBuf.reg_ID = PICrcvBuf.eommand;
PICrcvBuf.command_data = 0;
for (i=0; i.<6; i Ή-)
PlCrcvBuf.command_data = (PICrcvBuf.command_data « 5) + Get5();
worklnt = Get5();
PICrcvBuf.command_data = (PICrcvBuf.command_data « 2) + (worklnt» 3);
PICrcvBuf.flags |= worklnt and 0x07;
worklnt = Get5();
if (workTpar != 0)
PICrcvBuf.flags |= rcv_tpar_error_flag;
} /* Look up correct PIC status index for data in rcv buffer */ for (i=0; ((i<MAX_PICS) andand (PIC_status[i].PIC_addr != PICrcvBuf.PIC_addr)); i++);
if (i >= num_PICs)
PICrcvBuf.flags |= rcv__bad addr_flag; /* past end of valid PICs, address error */ if (i =r MAXJPIÇS).
rcvPICindex = 0;
else rcv_PJC_index = i;
difdef VATEST
7/ifVAT£ST=l ,
PICrcvBuf.command = temp_command;
PICrcvBuf.reglD = temp_reg_ID;
PICrcvBuf.command_data = tempJ_command_data;
PICrcvBuf.flags = temp_flags;
#endif //endif
Petição 870180163276, de 14/12/2018, pág. 76/97
66/77 retum((PICrcvBuf.flags and ~(PIC_error_flag | PICneedrefreshflag | PIC_invalid_data_flag)) == 0);
void format_xinit_buffer(void) f
int ij, ShiftCount;
unsigned int Worklnt;
unsigned long WorkData;
PICxmítBuf.bitCount = 0;'
PICxmitBuf.bits.bufLongfO] == 0;
PlCxmitBuf.bits.bufLóng[l] — 0; ,
PICxrriitBuf.bits.bufLong[2] = 0; /* Clear xmit bit buffer */ workTpar = Ox lf; /* Initializa Tpar */
StufT6(P!CxmitBuf.PIC_addr);
Stuffóf PICxmitBuf.command);
if (PTCxmitBuf.conimand > OxOf) {
Stuff6(P ICxm i tBuf.regJCD);
if (PíCxinitBuf.command 0x17) {
WorkData ~ PICxmitBuf.command_data;
ShiftCount = 32;
for (i - 0,i<7;i++) r
Worklnt — 0;
-for (j=0y<5y++) {
Worklnt = Worklnt « 1;
if (WorkData and 0x80000000)
Worklnt +=.l;
WorkData = WorkData « 1;
if (-ShiftCount = 0) (
Worklnt = (Worklnt « 3) + (PICxmitBuf.flags and 0x07);
- j“5;..
• } · . ·}. ·
Stuff6(Worklnt);
• } ·} }
Stuff6(workTpar); .
·. /* Buffer set, set up UART control */
PlCrcvBuf-bitCount = 66;
if ((PíC_comm_mon.control_flags and XMIT_DATA_RDY) — 0) {
PIC _comni_mon.xmit_buf — PICxmitBuf;
PIC comm_inon.control_f!ags |= XMIT_DATA_RDY;
Petição 870180163276, de 14/12/2018, pág. 77/97
67/77
PICrcvBuf.flags ~ 0;
PICrcvBuf.PICaddr = PICxmitBuf.PIC addr; /* preset address of remote PIC */ }
unsigned int Get5(void) {
int byte_index, bit_index;
unsigned int work_result;
workjresult = 0;
if ((PICrcvBuf.flags and ~(PIC_error_flag | PIC_need_refresh_flag | PIC invalid data flag)) == 0) { byte_index = 96 - PICrcvBuf.bitCount;
bit_index = byte_index and 0x07; byte_index = byte_index » 3;
work_result = (PICrcvBuf.bits.bufByte[byte_index] « 8) + PICrcvBuf.bits.bufByte[byte_index+1 ];
workjresult = work_result» (10 - bit_index); work_result and= 0x3 f;
if (parity6[work_result» 1] != workresult) { work_result — 0; PICrcvBuf.flags |= rcv_parity_err_flag;
} else { work_result = work_result» 1; workTpar Λ= work_result; PICrcvBuf.bitCount -= 6;
if (PICrcvBuf.bitCount < 0)
PICrcvBuf.flags ]= rcv_bad_length flag;
} } return(work_result);
} void Stuff6(int pass_data) int byte_index, bit_index; workTpar pass_data; byteindex = PICxmitBuf.bitCount» 3;
bit index = PICxmitBuf.bitCount and 0x07;
pass_data = parity6[pass_data] « (10 - bit_index); PICxmitBuf.bits.bufByte[byte_index] |= pass_data» 8; PICxmitBuf.bits.bufByte[byte_index+l] |= passjdata and Oxff; PICxmitBuf.bitCount += 6;
}
Petição 870180163276, de 14/12/2018, pág. 78/97
68/77
PULSE.H /* */ #ifndef BOOLEAN JDEFINED #defirie BOOLEAN_DEFINED typedef int BOOLEAN;
#endif /* subsecond processing for pulse counters */ void pu!seSubsecond(void);
/* Daily PIC table rebuild */ void pulseDay(void);
/* Main PIC communication routine */ void pulseService(void);
/* PIC comm routine - once-per-second code */ void pulseSecond(void);
/* Subroutines for PIC communication */ void Stuff6(int pass_data);
void format—xmit_buffer(void);
BOOLEAN decode_rcv_buffer(void);
void process_status_bits(void); unsigned int Get5(void);
void set_PIC_alarm(alarmcodes pass_alarm_type, int pass_PIC_addr, unsigned int pass_alarm_data);
/* Startup code for PIC communication */ void pulseStartup (void);
/* Routine to clear pulse registers after cold start */ void pulseColdstart(void);
/* defined in pt.c */ #define RELAY_A 0 #define RELAYJB 1 void pulseOut(int picNbr.int relayNbr,int ONoff); void ptEveryMinute(void);
void ptEverySecond(void);
void set_PLC_relays(int xmitRelay,int rcvRelay);
Petição 870180163276, de 14/12/2018, pág. 79/97
69/77
PICEND.DEF /* include file at end of mtrsamp to control MC and ST pic chips from mtrsamp interrupt */ #ifdefIS_MC5 if (pulseOutMode==PIC_MC_SERIAL) {
asm ( MOVE.L #Ox80400E,AO);
asm ( AND.W #0xFCFF,(A0)); /* Clear clock and data ports */ }
#endif #ifdefIS_ST5 asm( MOVE.L #0x804O0E,A0>;
asm ( AND.W #0xFEFF,(A0)); /* Insert clock falling edge */ if (PIC serial status — sending st5 bits) {
asm( NOP);
asm( NOP);
asm( NOP);
asm( NOP);
asm ( NOP”);
asm( NOP”);
asm ( NOP);
asm ( NOP);
asm( NOP);
asm( NOP);
asm( NOP);
asm ( NOP);
asm( NOP);
asm ( MOVE.L #0x80400E,A0);
asm( OR.W #0x0100,(AO)); /* If sending bits, activate clock*/ }
#endif
PICVARS.DEF /* local variables to control MC and ST pic chips from mtrsamp interrupt meter/c/lib/picvars.def */ unsigned long bitOneFlag;
Petição 870180163276, de 14/12/2018, pág. 80/97
70/77
PULSELINK.DEF /* determine if variables are extemal or defined here */ #undef ref //ifdef PSTRUDEFINED //define ref #else #define ref extem #endif //if (NUMPH > 6) //define IS_MC5 #else //ifdef MAX_SCAN_METERS //define IS_ST5 #else //define IS_RSM #endif //endif !* Values for hdwr -p (pulseOutMode) */ //define STANDARD_PIC_COMM 0 #if 0 /* remove these equates fforn mtrlink.def */ //define PIC_PULSE_SERIAL 1 #defme PIC_MC_SERIAL 2 //define PIC_ST_SERIAL 3 sfendif /* then uncomment them here */ /* //define VATEST 1 */ #ifdefVATEST //undef IS_MC5 //undef ISJRSM #undefIS_ST5 # define IS_RSM //undefNUMPH #define NUMPH 3 //undef MAX_SCAN_METERS //endif /* Uncomment for water meters (Oakville Hydro) */ //define READJENCODERJD Ox49ffOOOO //define READ ENCODERJPARM 0x0312500c /* Uncomment for gas meters (Sonix) //define READ ENCODER TD 0x49fe0389
Petição 870180163276, de 14/12/2018, pág. 81/97
71/77 //define READ_ENCODER_PARM 0x0300500c */ #define ID_FIELD_LENGTH 13 //define PULSESJPERJPIC 4 #ifdefIS_MC5 //define BITSJPERJSEC 822 //define MAX_PICS 16 #else #ifdefIS_ST5 #define BITS_PER_SEC 942 //define MAXJPICS 5 #else //define BITS_PER_SEC 32 #define MAX_PICS 1 #endif f/endif #define DIRECTPICWAITJLIMIT 24 //define BUFFERED_PIC_WAIT_LIMIT 10 * BITS_PER_SEC //define NUM_START_BITS 12 //ifdef IS_ST5 //define REBUILD_DELAY 30000 í/else
Sdefine REBUILD_DELAY 1000 #endif typedef struct { unsigned long serial_number; unsigned long last_cmd_data;
unsigned char unsigned char unsigned char unsigned char unsigned int unsigned char unsigned char unsigned char unsigned char curr_ID_reg;
PICaddr; softwaretype; software_version;
loopjrate; status reg vai ue; time since global; num_pulse_regs; curr_pulse_reg;
unsigned char last_command;
unsigned int unsigned int unsigned int unsigned int unsigned unsigned unsigned unsigned unsigned reply_wait_1 imit; PIC_data_err_count; PIC_reset_count; comm_error_count; force_pulse_read: 1; get_semo : 1;
get_version :1;
get_status :1;
reset_status :1;
Petição 870180163276, de 14/12/2018, pág. 82/97
72/77 unsigned updateparameter: 1;
unsigned clear_pulse_regs: 1;
}
PICstatust;
typedef enum { sendingbits, sending st5_bits, rcvingbits, doPIC_start, sending_PIC_start, dosendcmd, sending-Start, sending_start_l, sending_stop, waiting_for_start, rcving_stop, idle }
PIC_s_stat_t;
typedef enum {
SET_PRE_ALIGN,
DO_ALIGN, SET_NORMAL_PLC, DISCONNECT_COUPLER, READ_XMIT_LEVEL }
ATM_op_t;
typedef enum {
DOJPRESET, DO_PLC_SET, SET_ALIGN, WAIT_ALIGN, DO_ATMJDISCONNECT, ATMJDONE }
ATM_state_t;
typedef structf unsigned char unsigned char unsigned char unsigned long
PIC_addr; command; reg_ID; command_data;
unsigned int int bitCount;
union { flags;
unsigned long bufLong[3]; unsigned char bufByte[12J;
Petição 870180163276, de 14/12/2018, pág. 83/97
73/77 } bits;
}
PICbitBuf;
#ifndef BOOLEAN_DEFINED //define BOOLEAN_DEFINED typedef int BOOLEAN ;
#endif /* Definition of bits in Flags field of PIC comm buffers */ /* NOTE- Top 4 bits (OxfDOO) reserved for use by ATM code */ #defin e rcv_bad_addr_flag 0x0100 #defíne rcv_tpar_error_flag 0x0080 #defíne rcv_data_ready_flag 0x0040 #defme rcv__bad_length_flag 0x0020 f/defme rcv_timeout__flag 0x0010 #define rcv_parity_err_flag 0x0008 //define PlC_error_flag 0x0004 /rdefme PIC_need_refresh_flag 0x0002 //define PIC_invalid_data_flag 0x0001 /* Command codes for PIC communication */ //define MAX_FAST_READ 0x07 //define CLEAR_PULSE_REGISTERS 0x08 f/define READREGISTER Οχ 10 //define WRITE_REGISTER 0x18 //define SYSTEM_CONTROL 0x19 /* Register ID codes for PIC communication */
//define MAX PULSE REG 15
//define CONTROL REG 16
//define ERROR REG 26
//define OUTPUT REG 27
//define PARM REG 28
//define VERS REG 29
//define SERNO REG 30
//define STATUS REG 31
/* Special-purpose PIC addresses */ //define GLOBALJPIC_ADDR 31 //define MC5_MUX_PIC_ADDR 30 //define ST5JMUX_PIC_ADDR 29 //define LCM_BASE_ADDR 16/* First LCM is at address 16*/ //define ATM_BASE_ADDR 20 /* First ATM is at address 20 */ //define MAX_PULSE_PIC_ADDR 15 /* pulse couters are from 0 to 15 */ /* Bit usage in the ATM relay control word */
Petição 870180163276, de 14/12/2018, pág. 84/97
74/77 fldefine ATM_RC_XMIT_ON 0x00008000 #defíne ATM_RC_MEAS_XMIT 0x00004000 tfdefme ATM_RC_MEAS_CPLR 0x00002000 #define ÀTM_RC_RES_SHORTED 0x00001000 #define ATM_RC_CAP_MASK 0x000003ff tfdefíne ATM_NUM_CAP_BITS 10 #defme ATM_PRESET_CODE ATM_RC_XM1T_ON | ATM_RC_MEAS_XMIT | ATM_RC_MEAS_CPLR tfdefine ATM_PLC_CODE ATM_RC_XMIT_ON | ATM_RC_RES_SHORTED #define ATM_DISC_CODE 0 /* Other ATM control equates */ ^define ATM_MEAS_TIME 20L /* mSec to wait between cap change and ADC reading */ #define ATM_DISC_TIME 20L /* mSec to wait before switching cap relays */ #defme ATM_MIN_READING 0x0038 /* If reading at end of autotune less than this, fail */ /* Equates for ST5 comm */ tfdefine ST5_PIC_DELAY 66 #pragma region (ram=ram) ref unsigned short current_PIC_index, rcv_PIC_index;
ref PIC_status_t PIC_status[MAX_PICS];
struct { unsigned long reading; int error_cnt;
unsigned char ID_fieId[ID_FIELD_LENGTH]; unsigned char ID_buffer[LD_FlELD_LENGTH];
} ref pulseData[2*NUMPH];
struct {
PICbitBuf xmitbuf;
PICbitBuf rcv_buf; int control_flags;
} ref ext_comm, PIC_comm_mon;
struct {
ATMopt operation; unsigned int ATM_number; ATM_state_t state;
unsigned request_flag: 1; unsigned donejflag : 1;
unsigned error_flag : 1;
unsigned active_flag: 1; unsigned int start_cap_code; unsigned int end_cap_code; unsigned int optimum cap code;
Petição 870180163276, de 14/12/2018, pág. 85/97
75/77 unsigned int optimum reading; unsigned int xmit_level; unsigned int couplerjevel; unsigned int resultflags; long int align timer;
} ref ATM control;
struct { unsigned unsigned unsigned unsigned unsigned int unsigned int unsigned int unsigned int unsigned int request_flag : 1; donejflag: 1; error flag: 1; active_flag: 1;
xmitmask; rcvjmask; resultflags; last_xmit_mask; lastrcvmask;
} ref MUX_control;
struct { unsigned do_rebuild: 1; unsigned do_alarm : 1;
} ref Comm_background_flags;
/* Bit defínitions in ext_buf.control_flags */ #defme SUPPRESS__NORMAL_COMM ffdefíne XMITJREQUEST 0x0002 #defíne CPY_RCV_DATA 0x0004 rcv_buf */ #defíne RCV_DATA_RDY 0x0008 rcv_buf */ #defíne XMIT_DATA_RDY 0x0010
0x0001 /* Externai routine requests send of xmit_buf */ /* Externai cmd was sent, copy rcvd buffer to /* Got reply from externai cmd, reply is in /* xmit_buf has copy of last cmd sent */ refPICbitBuf ref PIC_s_stat_t ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned int ref unsigned char ref unsigned char ref unsigned int lef unsigned int ref unsigned int refBOOLEAN ref int ref unsigned int ref alarmstru
PICxmitBuf, PICrcvBuf, HoldrcvBuf; PIC_serial_status; num_PICs; numLCMs; rebuild_timer;
ATM_work; work_PIC_addr; num_pulse_ctrs; hold_numjpulse_ctrs; bit_count;
out_bit_value; *shift_LSB_ptr; m_bit_value; PIC_wait_limit; zero_count; last_comm_err_flag; dont_clear_PIC_stats;
ST 5_PIC_delay_ctr;
PIC_bad_addr_count;
PIC_alarm;
#ifdefVATEST
Petição 870180163276, de 14/12/2018, pág. 86/97
76/77 /* test !!í! */ ref int temp command;
fef int temp_reg_ID;
ref long tempcommanddata;
rcf int temp flags;
/* test !!!!*/ #cndif ref enum { clk_high, clk_low } PIC_clk_state;
ref enum {
NO_GLOBAL_SEND,
SEND_GLOBAL_CLR,
SENDINGGLOB ALCLR,
GLOBAL_CLR_SENT } clearjstate;
/* Old equates maintained for compatibility */ //if 0 //define RELAY_A_BIT 1 //define RELAY_B_BIT 2 //define IDLE 0 //define TX 1 #defíne RX 2 //define DATA READY 3 //define WAKE 4 •//define PICJRESET 5 //define WAKECOUNTRELOAD (64*4) /* Four Seconds */ //define RESETCOUNTRELOAD 10 /* 1/4 Seconds */ #define RELAY_A_OFF_CMD 5 /*active low trigger*/ //define RELAY_A_ON_CMD 4 //define RELAY_B_OFF_CMD 7 //define RELAY_B_ON_CMD 6 #define CLEAR_ACC_CMD 8 //define SUBACC_CMD 12 tfdefine ECHO_CMD 14 //define SLEEPCMD 15 //define PULSE_SERLAL_COM_MAX 15 //define WAKE CMD 16 //define RESET_CMD 17 //define PULSE_COM_NUM 18 //define NO_PULSE_BIT_DATA OxFFFFFFFF //define RELAY_CMD_MTN 4 //define RELAY_CMD_MAX 7 #endif
Petição 870180163276, de 14/12/2018, pág. 87/97
77/77
PULSEOUTM.DEF rfinclude clklink.def #include mtilink.def' #include plc.def' #include serlink.def' #include pnlselink.def #ifndefNO_PULSES #include scan.h #include pulse.h ííinclude log.h void pulseout_second_back(void);
void pulseout_ram_initl(void);
ADDRFN pulseoutaddrfn ;
#pragma region (data=ramlnitl) void (*pulseout_ram_initlp)(void)=pulseout_ram_initl;
#pragma region (data=data”) #pragma region (data=secondBack) void (*pulseout_second_backp)(void)=pulseout_second_back;
#pragma region (data=data)
ADDRFNJR.ET pulseoutaddrfh(reg8stru reg8) {
/*’write the load shed event to flash */ putEvent(LOAD_SHED_EVENT, 1 sandreg8.ulong);
retum(O);
} void pulseout_ram_initl() (
addrfn_tbl[GET_FROM_SLAVE][PULSEOUT_STATE] = pulseoutaddrfn ;
} void pulseout_second_back() r
} #endif
Petição 870180163276, de 14/12/2018, pág. 88/97

Claims (37)

  1. REIVINDICAÇÕES
    1. Aparelho para medição de multi-canal de eletricidade, caracterizado pelo fato de que compreende:
    uma cabeça de medidor localizada em um lado secundário de um transformador e operável para separadamente medir uso de eletricidade para cada uma de uma pluralidade de linhas de consumidor de eletricidade;
    a dita cabeça de medidor em comunicação direta com um transponder localizado em um lado primário do dito transformador e operável para transmitir dados para e receber dados do dito transponder por comunicação de linha de potência direta, o dito transponder operável para transmitir dados e para receber dados de um computador localizado remotamente;
    um módulo de controle de carga em comunicação com dita cabeça de medidor e operável para atuar a conexão e desconexão de cada um de uma pluralidade de relês, cada relê de dita pluralidade de relês correspondendo a uma da dita pluralidade de linhas de consumidor de eletricidade; e uma caixa contendo a dita cabeça de medidor, o dito módulo de controle de carga e os ditos relês.
  2. 2. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende adicionalmente um detector de fraude em comunicação com dita cabeça de medidor.
  3. 3. Aparelho de acordo com reivindicação 2, caracterizado pelo fato de que dito detector de fraude compreende uma luz e uma superfície reflexiva, e em que dita cabeça de medidor é operável para instruir dito módulo de controle de carga para desconectar todas de ditas linhas de cliente se dito detector de fraude provê notificação de que dita luz não é detectada refletindo de dita superfície reflexiva.
  4. 4. Aparelho de acordo com reivindicação 2, caracterizado pelo fato de que dito detector de fraude compreende um detector de luz ambiente entrando na dita caixa.
  5. 5. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que a dita caixa é instalada em um poste de utilidade.
    Petição 870180163276, de 14/12/2018, pág. 89/97
    2/8
  6. 6. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende ainda um dispositivo para comparar energia de transformador à energia total usada por ditas linhas de consumidor.
  7. 7. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende adicionalmente um dispositivo para detectar fluxo de tensão inversa por ditas linhas de consumidor.
  8. 8. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende adicionalmente uma memória legível por computador em comunicação com dita cabeça de medidor e um contador em comunicação com dita cabeça de medidor, dito contador correspondendo a uma linha de cliente e operável para contar regressivamente uma quantidade de energia armazenada em dita memória, e dita cabeça de medidor operável para enviar um sinal de desconexão para o dito módulo de controle de carga para desconectar dita linha de cliente quando dito contador alcança zero.
  9. 9. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende adicionalmente uma memória legível por computador em comunicação com dita cabeça de medidor, dita memória operável para armazenar um limite de carga para uma linha de cliente, e dita cabeça de medidor operável para enviar um sinal de desconexão para o dito módulo de controle de carga para desconectar dita linha de cliente quando dito limite de carga é excedido.
  10. 10. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que compreende adicionalmente uma memória legível por computador em comunicação com dita cabeça de medidor, dita memória operável para armazenar um limite de uso para uma linha de cliente, e dita cabeça de medidor operável para enviar um sinal de desconexão para um módulo de controle de carga para desconectar dita linha de cliente quando dito limite de uso é excedido.
  11. 11. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de que dito transponder é operável para se comunicar com dito computador localizado remotamente através de linhas de potência de média tensão.
  12. 12. Aparelho de acordo com reivindicação 1, caracterizado pelo fato de
    Petição 870180163276, de 14/12/2018, pág. 90/97
    3/8 que compreende adicionalmente uma unidade de exibição em comunicação com dita cabeça de medidor e operável para exibir dados recebidos de dita cabeça de medidor.
  13. 13. Aparelho de acordo com reivindicação 12, caracterizado pelo fato de que dita unidade de exibição é operável para exibir informação relativa a consumo de energia de um cliente.
  14. 14. Aparelho de acordo com reivindicação 12, caracterizado pelo fato de que dita unidade de exibição é operável para exibir advertências relativas a uso de energia de um cliente ou a suspeito roubo de energia.
  15. 15. Aparelho de acordo com reivindicação 12, caracterizado pelo fato de que dita unidade de exibição é operável para transmitir para dita cabeça de medidor informação entrada por um cliente.
  16. 16. Aparelho para medição remota de multi-canal de eletricidade usando comunicação de linha de potência, caracterizado pelo fato de que compreende:
    uma pluralidade de pontos medidores localizados em um lado secundário de um transformador e operáveis para medir separadadamente uso de eletricidade para cada uma de uma pluralidade de linhas de consumidor de eletricidade;
    o aparelho em comunicação direta com um transponder localizado em um lado primário do transformador e operável para transmitir dados para e receber dados do transponder por comunicação de linha de potência direta, o transponder operável para transmitir dados para e para receber dados de um computador localizado remotamente;
    o aparelho operável para controlar um ou mais módulos de controle de carga operáveis para atuar conexão e desconexão de cada um de uma pluralidade de relês, cada relê da pluralidade de relês correspondendo a uma da pluralidade de linhas de consumidor de eletricidade; e uma caixa contendo a pluralidade de pontos medidores, o módulo de controle de carga, e os relês, em que o transformador de distribuição converte voltagens de distribuição de média tensão em voltagens de baixa tensão apropriadas para fornecer energia aos consumidores, e em que o aparelho é
    Petição 870180163276, de 14/12/2018, pág. 91/97
    4/8 operável para injetar sinais em e receber sinais de linhas de potência de baixa tensão que abastecem consumidores com energia elétrica; ditos sinais provendo comunicação de via dupla entre a cabeça de medidor e o transponder, e atravessando o transformador de distribuição
  17. 17. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda um detector de fraude em comunicação com dita cabeça de medidor.
  18. 18. Aparelho de acordo com reivindicação 17, caracterizado pelo fato de que dito detector de fraude inclui uma luz e uma superfície reflexiva, e em que dita cabeça de medidor é operável para instruir dito módulo de controle de carga para desconectar todas de ditas linhas de cliente se dito detector de fraude prover notificação que dita luz não é detectada refletindo de dita superfície reflexiva.
  19. 19. Aparelho de acordo com reivindicação 17, caracterizado pelo fato do dito detector de fraude incluir um detector de luz ambiente entrando na caixa.
  20. 20. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda um dispositivo para comparar energia de transformador à energia total usada por ditas linhas de consumidor.
  21. 21. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda um dispositivo para detectar fluxo de tensão inversa por ditas linhas de consumidor.
  22. 22. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda uma memória legível por computador em comunicação com dita cabeça de medidor e um contador em comunicação com dita cabeça de medidor, dito contador correspondendo a uma linha de cliente e operável para contar regressivamente uma quantidade de energia armazenada em dita memória, e dita cabeça de medidor operável para enviar um sinal de desconexão ao módulo de controle de carga para desconectar dita linha de cliente quando dito contador alcança zero.
  23. 23. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda uma memória legível por computador em comunicação com
    Petição 870180163276, de 14/12/2018, pág. 92/97
    5/8 dita cabeça de medidor, dita memória operável para armazenar um limite de carga para uma linha de cliente, e dita cabeça de medidor operável para enviar um sinal de desconexão para o módulo de controle de carga para desconectar dita linha de cliente quando dito limite de carga é excedido.
  24. 24. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda uma memória legível por computador em comunicação com dita cabeça de medidor, dita memória operável para armazenar um limite de uso para uma linha de cliente, e dita cabeça de medidor operável para enviar um sinal de desconexão para o módulo de controle de carga para desconectar dita linha de cliente quando dito limite de uso é excedido.
  25. 25. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que dito transponder é operável para se comunicar com dito computador localizado remotamente através de linhas de potência de média tensão.
  26. 26. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda uma unidade de exibição em comunicação com dita cabeça de medidor e operável para exibir dados recebidos de dita cabeça de medidor.
  27. 27. Aparelho de acordo com reivindicação 26, caracterizado pelo fato de que dita unidade de exibição é operável para exibir informação relativa a consumo de energia de um cliente.
  28. 28. Aparelho de acordo com reivindicação 26, caracterizado pelo fato de que dita unidade de exibição é operável para exibir advertências relativas a uso de energia de um cliente ou a suspeito roubo de energia.
  29. 29. Aparelho de acordo com reivindicação 26, caracterizado pelo fato de que dita unidade de exibição é operável para transmitir para dita cabeça de medidor informação entrada por um cliente.
  30. 30. Aparelho de acordo com reivindicação 16, caracterizado pelo fato do transponder ser operável para se comunicar com o computador localizado remotamente via pelo menos um de: comunicações de rádio, fibra óptica, e linhas telefônicas.
  31. 31. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de
    Petição 870180163276, de 14/12/2018, pág. 93/97
    6/8 ser operável para transmitir dados diretamente ao transponder a freqüências dentro da faixa de 10 a 25 kHz.
  32. 32. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de ser operável para transmitir dados diretamente ao transponder a freqüências correspondendo a harmônicos meio ímpares de 60 Hz.
  33. 33. Aparelho para medição de multi-canal de eletricidade, caracterizado pelo fato de que compreende:
    um módulo de controle em comunicação com um circuito secundário de um transformador de distribuição, em que o transformador de distribuição converte voltagens de distribuição de média tensão em voltagens de baixa tensão apropriadas para fornecer energia aos consumidores;
    o módulo de controle em comunicação direta com um transponder em comunicação com um circuito primário do transformador e operável para transmitir dados para e receber dados do transponder por comunicação de linha de potência direta, através do transformador de distribuição, o transponder operável para transmitir dados para e para receber dados de um computador localizado remotamente;
    uma pluralidade de módulos de medição em comunicação com o módulo de controle, cada módulo de medição operável para medir uso de eletricidade em uma de uma pluralidade de linhas de consumidor de eletricidade alimentadas pelo circuito secundário do transformador de distribuição;
    um ou mais relês em comunicação com o módulo de controle e operáveis para atuar conexão e desconexão de eletricidade às linhas de consumidor de eletricidade; e uma caixa contendo o módulo de controle, os módulos de medição e os relês, em que o aparelho é operável para injetar sinais em e receber sinais de linhas de potência de baixa tensão que abastecem consumidores com energia elétrica;
    ditos sinais provendo comunicação de via dupla entre a cabeça de medidor e o transponder, e atravessando o transformador de distribuição para se comunicar, pelo menos parcialmente, sobre linhas de potência de média tensão,
    Petição 870180163276, de 14/12/2018, pág. 94/97
    7/8 com o computador localizado remotamente.
  34. 34. Aparelho de acordo com reivindicação 33, caracterizado pelo fato do um ou mais relês serem operáveis para controlar cada fase das linhas de consumidor de eletricidade.
  35. 35. Aparelho de acordo com reivindicação 16, caracterizado pelo fato do transponder ser operável para transmitir dados para e receber dados de um computador localizado remotamente via um ou mais transponders intermediários.
  36. 36. Aparelho para medição remota de multi-canal de eletricidade usando comunicação de linha de potência, caracterizado pelo fato de que compreende:
    uma pluralidade de pontos medidores localizados em um lado secundário de um transformador e operáveis para medir separadadamente uso de eletricidade para cada uma de uma pluralidade de linhas de consumidor de eletricidade;
    o aparelho em comunicação com um transponder localizado em um lado primário do transfornmador e operável para transmitir dados para e receber dados do transponder por comunicação de linha de potência, o transponder operável para transmitir dados para e para receber dados de um computador localizado remotamente;
    um ou mais módulos de controle de carga em comunicação com a cabeça de medidor e operáveis para atuar cada um de uma pluralidade de relês, cada relê da pluralidade de relês operável para serviço de conectar e desconectar em uma da pluralidade de linhas de consumidor de eletricidade; e uma caixa contendo a pluralidade de pontos medidores, o módulo de controle de carga, e os relês, em que o transformador de distribuição converte voltagens de distribuição de média tensão em voltagens de baixa tensão apropriadas para fornecer energia aos consumidores, e em que o aparelho é operável para injetar sinais em e receber sinais de linhas de potência de baixa tensão que abastecem consumidores com energia elétrica; ditos sinais provendo comunicação de via dupla entre a cabeça de medidor e o transponder, e atravessando o transformador de distribuição.
  37. 37. Aparelho para medição de multi-canal de eletricidade, caracterizado
    Petição 870180163276, de 14/12/2018, pág. 95/97
    8/8 pelo fato de que compreende:
    um módulo de controle em comunicação com um circuito secundário de um transformador de distribuição;
    o módulo de controle em comunicação direta com um transponder em comunicação com um circuito primário do transformador e operável para transmitir dados para e receber dados do transponder por comunicação de linha de potência direta, através do transformador de distribuição, o transponder operável para transmitir dados para e para receber dados de um computador localizado remotamente;
    uma pluralidade de módulos de medição em comunicação com o módulo de controle, cada módulo de medição operável para medir uso de eletricidade em uma de uma pluralidade de linhas de consumidor de eletricidade alimentadas pelo circuito secundário do transformador de distribuição;
    um ou mais relês em comunicação com o módulo de controle e operáveis para atuar conexão e desconexão de eletricidade para as linhas de consumidor de eletricidade; e uma caixa contendo o módulo de controle, os módulos de medição, e os relês.
BRPI0806143-2A 2008-06-27 2008-06-27 Aparelhos para medição de multi-canal de eletricidade BRPI0806143B1 (pt)

Priority Applications (1)

Application Number Priority Date Filing Date Title
BRPI0806143-2A BRPI0806143B1 (pt) 2008-06-27 2008-06-27 Aparelhos para medição de multi-canal de eletricidade

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
BRPI0806143-2A BRPI0806143B1 (pt) 2008-06-27 2008-06-27 Aparelhos para medição de multi-canal de eletricidade

Publications (2)

Publication Number Publication Date
BRPI0806143A2 BRPI0806143A2 (pt) 2012-05-08
BRPI0806143B1 true BRPI0806143B1 (pt) 2019-04-30

Family

ID=46001902

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0806143-2A BRPI0806143B1 (pt) 2008-06-27 2008-06-27 Aparelhos para medição de multi-canal de eletricidade

Country Status (1)

Country Link
BR (1) BRPI0806143B1 (pt)

Also Published As

Publication number Publication date
BRPI0806143A2 (pt) 2012-05-08

Similar Documents

Publication Publication Date Title
US7596459B2 (en) Apparatus and methods for multi-channel electric metering
US5994892A (en) Integrated circuit design automatic utility meter: apparatus &amp; method
US7126493B2 (en) Utility meter with external signal-powered transceiver
US9161102B2 (en) Meter device with supporting communications
EP3367111B1 (en) Energy metering system
ES2441617T3 (es) Sistema y método para supervisión y facturación en línea de consumo de potencia
US8253585B2 (en) Three-phase multifunction verifier
ES2564948T3 (es) Dispositivo y procedimiento de determinación de la tensión y de la potencia de cada fase en una red de media tensión
CA2677499C (en) Self contained kilowatt-hour meter integral to standard load center
WO1999046606A2 (en) Electrical power metering system
RO122167B1 (ro) Sistem şi metodă pentru compensarea frecvenţeiîntr-un contor de energie
CN118837599A (zh) 基于双模通信的多功能小型智能电能表
CN101351803B (zh) 用于多通道电力计量的装置和方法
BRPI0806143A2 (pt) aparelhos para medição de multi-canal de eletricidade
EP0742443A2 (en) Improvements in or relating to electricity meters
CA2527068C (en) Apparatus and methods for multi-channel metering
CA2567955A1 (en) Apparatus and methods for multi-channel metering
MX2008007018A (en) Apparatus and methods for multi-channel metering
KR100316485B1 (ko) 다세대용전자식전력량계
BR202023010862U2 (pt) Dispositivo de comunicação sem fio para medidores de energia elétrica dotados de porta serial unidirecional assíncrona.
EP0742442B1 (en) Improvements in or relating to modulised utility meters
EP0742444A2 (en) Improvements in or relating to electricity meters
TR2025013271U5 (tr) Bi̇r elektri̇k enerji̇si̇ ölçüm sayaci
KR20050007627A (ko) 도전방지기능을 갖는 원격검침 단말기

Legal Events

Date Code Title Description
B06G Technical and formal requirements: other requirements [chapter 6.7 patent gazette]

Free format text: SOLICITA-SE A REGULARIZACAO DA PROCURACAO, UMA VEZ QUE BASEADO NO ARTIGO 216 1O DA LPI, O DOCUMENTO DE PROCURACAO DEVE SER APRESENTADO NO ORIGINAL, TRASLADO OU FOTOCOPIA AUTENTICADA.

B03A Publication of a patent application or of a certificate of addition of invention [chapter 3.1 patent gazette]
B06T Formal requirements before examination [chapter 6.20 patent gazette]
B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 10 (DEZ) ANOS CONTADOS A PARTIR DE 30/04/2019, OBSERVADAS AS CONDICOES LEGAIS. (CO) 10 (DEZ) ANOS CONTADOS A PARTIR DE 30/04/2019, OBSERVADAS AS CONDICOES LEGAIS