BRPI0806143B1 - Aparelhos para medição de multi-canal de eletricidade - Google Patents
Aparelhos para medição de multi-canal de eletricidade Download PDFInfo
- 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
Links
- 230000005611 electricity Effects 0.000 title claims abstract description 46
- 238000004891 communication Methods 0.000 claims abstract description 83
- 230000002441 reversible effect Effects 0.000 claims abstract description 7
- 238000005259 measurement Methods 0.000 claims description 49
- 238000005265 energy consumption Methods 0.000 claims description 3
- 230000009977 dual effect Effects 0.000 claims 2
- 239000013307 optical fiber Substances 0.000 claims 1
- 238000001514 detection method Methods 0.000 abstract description 8
- 208000036758 Postinfectious cerebellitis Diseases 0.000 description 83
- 239000011800 void material Substances 0.000 description 62
- 239000000872 buffer Substances 0.000 description 60
- 238000010586 diagram Methods 0.000 description 22
- 230000007935 neutral effect Effects 0.000 description 10
- 230000007704 transition Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 101100496104 Mus musculus Clec2d gene Proteins 0.000 description 7
- 101100274534 Rattus norvegicus Clec2d11 gene Proteins 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 7
- 238000010276 construction Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000000034 method Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000005070 sampling Methods 0.000 description 5
- DCPDZFRGNJDWPP-UHFFFAOYSA-N 1,2,3,4,5-pentachloro-6-(2,4,5-trichlorophenyl)benzene Chemical compound C1=C(Cl)C(Cl)=CC(Cl)=C1C1=C(Cl)C(Cl)=C(Cl)C(Cl)=C1Cl DCPDZFRGNJDWPP-UHFFFAOYSA-N 0.000 description 4
- 230000002457 bidirectional effect Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- JDZUWXRNKHXZFE-UHFFFAOYSA-N 1,2,3,4,5-pentachloro-6-(2,4,6-trichlorophenyl)benzene Chemical compound ClC1=CC(Cl)=CC(Cl)=C1C1=C(Cl)C(Cl)=C(Cl)C(Cl)=C1Cl JDZUWXRNKHXZFE-UHFFFAOYSA-N 0.000 description 3
- JPOPEORRMSDUIP-UHFFFAOYSA-N 1,2,4,5-tetrachloro-3-(2,3,5,6-tetrachlorophenyl)benzene Chemical compound ClC1=CC(Cl)=C(Cl)C(C=2C(=C(Cl)C=C(Cl)C=2Cl)Cl)=C1Cl JPOPEORRMSDUIP-UHFFFAOYSA-N 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000010363 phase shift Effects 0.000 description 3
- 230000000630 rising effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- VTYYLEPIZMXCLO-UHFFFAOYSA-L Calcium carbonate Chemical compound [Ca+2].[O-]C([O-])=O VTYYLEPIZMXCLO-UHFFFAOYSA-L 0.000 description 2
- CYTYCFOTNPOANT-UHFFFAOYSA-N Perchloroethylene Chemical compound ClC(Cl)=C(Cl)Cl CYTYCFOTNPOANT-UHFFFAOYSA-N 0.000 description 2
- 230000003321 amplification Effects 0.000 description 2
- 239000003990 capacitor Substances 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000003199 nucleic acid amplification method Methods 0.000 description 2
- 230000002265 prevention Effects 0.000 description 2
- 229940056345 tums Drugs 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- JFIMDKGRGPNPRQ-UHFFFAOYSA-N 1,2,3,4,5-pentachloro-6-(2,3,4,5-tetrachlorophenyl)benzene Chemical compound ClC1=C(Cl)C(Cl)=CC(C=2C(=C(Cl)C(Cl)=C(Cl)C=2Cl)Cl)=C1Cl JFIMDKGRGPNPRQ-UHFFFAOYSA-N 0.000 description 1
- RMPWIIKNWPVWNG-UHFFFAOYSA-N 1,2,3,4-tetrachloro-5-(2,3,4-trichlorophenyl)benzene Chemical compound ClC1=C(Cl)C(Cl)=CC=C1C1=CC(Cl)=C(Cl)C(Cl)=C1Cl RMPWIIKNWPVWNG-UHFFFAOYSA-N 0.000 description 1
- HOPMUCXYRNOABF-UHFFFAOYSA-N 1,2,3,4-tetrachloro-5-(2,3,5-trichlorophenyl)benzene Chemical compound ClC1=CC(Cl)=C(Cl)C(C=2C(=C(Cl)C(Cl)=C(Cl)C=2)Cl)=C1 HOPMUCXYRNOABF-UHFFFAOYSA-N 0.000 description 1
- TZMHVHLTPWKZCI-UHFFFAOYSA-N 1,2,3,5-tetrachloro-4-(2,3,4-trichlorophenyl)benzene Chemical compound ClC1=C(Cl)C(Cl)=CC=C1C1=C(Cl)C=C(Cl)C(Cl)=C1Cl TZMHVHLTPWKZCI-UHFFFAOYSA-N 0.000 description 1
- 238000006066 Comins reaction Methods 0.000 description 1
- 229910000831 Steel Inorganic materials 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- XAGFODPZIPBFFR-UHFFFAOYSA-N aluminium Chemical compound [Al] XAGFODPZIPBFFR-UHFFFAOYSA-N 0.000 description 1
- 229910052782 aluminium Inorganic materials 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000011109 contamination Methods 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000010616 electrical installation Methods 0.000 description 1
- ZZUFCTLCJUWOSV-UHFFFAOYSA-N furosemide Chemical compound C1=C(Cl)C(S(=O)(=O)N)=CC(C(O)=O)=C1NCC1=CC=CO1 ZZUFCTLCJUWOSV-UHFFFAOYSA-N 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000000370 laser capture micro-dissection Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 229920000729 poly(L-lysine) polymer Polymers 0.000 description 1
- 150000003071 polychlorinated biphenyls Chemical class 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000012419 revalidation Methods 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 239000010959 steel Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000002747 voluntary effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
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)
- REIVINDICAÇÕES1. 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. 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. 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. 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. 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/972/8
- 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. 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. 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. 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. 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. 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. Aparelho de acordo com reivindicação 1, caracterizado pelo fato dePetição 870180163276, de 14/12/2018, pág. 90/973/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. 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. 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. 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. 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/974/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. 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. 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. 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. 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. 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. 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. Aparelho de acordo com reivindicação 16, caracterizado pelo fato de que compreende ainda uma memória legível por computador em comunicação comPetição 870180163276, de 14/12/2018, pág. 92/975/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. 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. 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. 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. 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. 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. 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. 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. Aparelho de acordo com reivindicação 16, caracterizado pelo fato dePetição 870180163276, de 14/12/2018, pág. 93/976/8 ser operável para transmitir dados diretamente ao transponder a freqüências dentro da faixa de 10 a 25 kHz.
- 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. 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/977/8 com o computador localizado remotamente.
- 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. 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. 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. Aparelho para medição de multi-canal de eletricidade, caracterizadoPetição 870180163276, de 14/12/2018, pág. 95/978/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.
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) |
-
2008
- 2008-06-27 BR BRPI0806143-2A patent/BRPI0806143B1/pt active IP Right Grant
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 & 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 |