1. INTRODUÇÃO
A ferramenta de importação e exportação do E3 Studio permite gravar arquivos do tipo CSV que contém informações sobre objetos do Elipse E3, e posteriormente utilizá-lo para criar novos objetos através de modelos. As informações do arquivo incluem propriedades, associações e coleções dos objetos.
O processo de importação e exportação foi reformulado a partir da versão 2.5 do E3, e portanto agora é baseado na utilização de modelos. Modelos são arquivos com extensão INI (arquivos de inicialização do Windows) utilizados para configurar a ferramenta de importação e exportação. Através deles, é possível especificar itens tais como o separador de colunas que será utilizado no arquivo CSV, suas colunas, etc. Alguns modelos são fornecidos pela Elipse Software juntamente com a instalação da nova versão do E3, mas também é possível criar modelos específicos para cada necessidade do usuário.
Neste artigo, mostraremos como criar modelos adequados a cada situação, além de dicas para melhor usufruir as funcionalidades dessa nova ferramenta.
2. ENTENDENDO A ESTRUTURA DOS MODELOS
Embora sejam arquivos de texto, os modelos devem respeitar uma determinada estrutura para que possam ser compreendidos pela ferramenta de importação e exportação. Essa estrutura é a mesma dos arquivos de inicialização do Windows, com extensão INI. Estes arquivos são organizados em seções; posteriormente, em cada uma delas, é possível definir variáveis para o que se deseja configurar. Por exemplo, na seção Configuration, encontra-se a variável Separator, que define qual o separador de colunas a ser utilizado.
O trecho abaixo
[Configuration] Separator=','
significa que será utilizada a vírgula como separador de colunas do arquivo CSV.
2.1 Formato dos arquivos INI
Os arquivos INI, de um modo geral, seguem este formato:
- O arquivo é organizado em seções, e cada seção portanto contém uma ou mais variáveis. As seções são identificadas por nomes entre colchetes.
- As variáveis são as palavras antes do símbolo “=”. Sendo assim, uma seção não pode conter duas variáveis com o mesmo nome.
- Igualmente, linhas em branco são ignoradas.
- O texto a partir de um caractere “;” é considerado comentário, sendo então desconsiderado na interpretação do arquivo.
Seu formato é user-friendly, e portanto facilmente alterável pelo usuário. Um novo modelo pode ser gerado com um editor de textos comuns, baseado em um modelo antigo ou começando do zero.
Os modelos utilizados no E3 permitem a redefinição de valores para os nomes das colunas do arquivo CSV, bem como para os outros tipos de objetos. Além disso, também permitem o agrupamento de mais de uma propriedade em uma mesma coluna. Isto tudo é feito através da definição de identificadores, que são palavras-chave utilizadas no arquivo CSV e associadas a propriedades ou classes de objetos no arquivo INI.
No Elipse E3, os modelos da ferramenta de importação e exportação devem ser definidos com as seções e variáveis apresentadas a seguir. Algumas são obrigatórias para a exportação e serão indicadas no decorrer do texto, mas para a importação, são todas opcionais. Caso sejam omitidas, o E3 assume um comportamento padrão.
[Header]
Nesta seção, são definidos os identificadores permitidos para os nomes de colunas e tipos de objetos; do mesmo modo, também é definida a ordem das colunas no arquivo CSV na exportação. Essa seção é obrigatória para a exportação, e as variáveis definidas são:
header: Nesta variável, deve-se listar todas as colunas, separadas por vírgula e na ordem em que devem ser exibidas no arquivo CSV. Se o nome da coluna não for igual ao nome de uma propriedade, utilize o identificador na variável header e logo depois relacione-o com o nome real da propriedade através de uma variável na seção [Columns]. A variável header é obrigatória no processo de exportação.
types: Define os identificadores para os tipos de objetos permitidos no arquivo CSV. Os identificadores deverão ser listados nesta variável separados por vírgulas. Esta variável deve ser definida caso algum identificador seja diferente do nome da classe do objeto. Neste caso, deve haver também uma variável para cada identificador na seção [Types].
[Header] header=ObjectType,Name,DocString,N1/B1,N2/B2,N3/B3,N4/B4,Scan,AllowRead types=Tag,Bloco,Elemento
[Configuration]
Nesta seção, são definidas as configurações gerais da ferramenta. As variáveis definidas são:
separator: Define o separador que será utilizado para delimitar as colunas no arquivo CSV.
root: Define se o objeto raiz (objeto de onde a opção de importação ou exportação foi chamada) será importado/exportado juntamente com os objetos filhos. Essa opção é exclusiva desta versão ou posteriores; na versão anterior desta ferramenta, o objeto raiz (Driver de Comunicação ou Área de Alarmes) não podia ser exportado. No caso da importação, o objeto raiz não será criado, apenas terá suas propriedades atualizadas.
link: Define se as associações dos objetos serão importadas/exportadas. A versão mais recente da ferramenta permite que as associações definidas nos objetos sejam exportadas para o arquivo CSV e posteriormente importadas para novos objetos do E3. Na exportação, uma nova linha é adicionada ao arquivo CSV a cada nova associação, identificando seu tipo; e para cada propriedade da associação é criada uma coluna extra no arquivo. Na importação, para cada linha identificada, é gerada uma associação na propriedade correspondente.
collection: Define se as coleções dos objetos serão importadas/exportadas. Na exportação, uma nova linha é adicionado ao arquivo .CSV a cada nova coleção; da mesma forma, as propriedades das coleções geram novas colunas no arquivo. Na importação, não é possível criar uma coleção, apenas alterar os valores das propriedades. Logo, é preciso que a coleção esteja previamente criada no objeto para que só então seja realizada a operação de importação.
objectduplicated: Define o comportamento a ser adotado quando um objeto com o mesmo nome de um outro já existente for importado, a saber: sobrescrever o objeto antigo, criar um novo objeto com um novo nome, ou manter o objeto existente.
bindduplicated: Define se uma associação antiga deve ser substituída por uma nova quando importada em uma propriedade que já a possui.
[Configuration] separator=',' root=true link=true collection=true objectduplicated=askalways bindduplicated=askalways
[Types]
Nesta seção, os identificadores de tipos de objetos são relacionados às classes reais. Todo identificador listado na variável types da seção [Header] que não seja igual a um nome de classe de objeto do E3 deve ser documentado nesta seção. Será criada uma variável para cada um dos identificadores, no formato = .
[Types] Tag=IOTag Bloco=IOBlock Elemento=IOBlockElement
[Columns]
Nesta seção, os identificadores de nomes de colunas são relacionados aos nomes de propriedades. Todo identificador listado na variável header da seção [Header] que não seja igual a um nome de propriedade deve ser documentado nesta seção. Será criada uma variável para cada um dos identificadores, no formato = .
[Columns] N1/B1=N1,B1 N2/B2=N2,B2 N3/B3=N3,B3 N4/B4=N4,B4
[Filter]
Nesta seção, são definidas as classes de objetos com a finalidade de serem importadas ou exportadas. Apenas uma das variáveis a seguir pode ser definida de cada vez.
include: São listadas as classes de objetos do E3 que podem ser importadas ou exportadas. Quando esta variável for definida, apenas as classes aqui listadas serão importadas ou exportadas.
exclude: São listadas as classes de objetos do E3 que não podem ser importadas ou exportadas. Quando esta variável for definida, todas classes encontradas exceto as listadas serão importadas ou exportadas.
[Filter] exclude=IOFolder ; importa/exporta tudo, exceto IOFolders
EXEMPLO DE MODELO:
[Header] header=ObjectType,Name,DocString,N1/B1,N2/B2,N3/B3,N4/B4,Scan,AllowRead types=Tag,Bloco,Elemento[Configuration] separator=',' ; utiliza a vírgula como separador de colunas no CSV root=true ; exporta/importa o objeto-raiz link=true ; exporta/importa as associações collection=true ; exporta/importa as coleções ; sempre pergunta o que fazer quando encontrar um objeto duplicado objectduplicated=askalways ; sempre pergunta o que fazer quando encontrar uma associação duplicada bindduplicated=askalways[Types] Tag=IOTag ; Tag na coluna ObjectType significa objeto da classe IOTag Bloco=IOBlock Elemento=IOBlockElement[Columns] ; N1/B1 como nome de coluna significa uma das duas propriedades: N1 ou B1 N1/B1=N1,B1 N2/B2=N2,B2 N3/B3=N3,B3 N4/B4=N4,B4[Filter] exclude=IOFolder ; importa/exporta tudo, exceto IOFolders
3. CRIANDO UM MODELO
É possível se criar um modelo não apenas através de um editor de texto, mas também através do Gerenciador de Modelos do E3. A primeira opção requer conhecimentos sobre a estrutura dos modelos (vista no capítulo anterior); por outro lado, o Gerenciador apresenta uma interface que facilita a configuração das opções desejadas.
3.1. Criando um modelo simples via editor de texto
Neste caso, é preciso seguir algumas regras:
- Nomes de seções devem necessariamente estar entre colchetes e isolados na própria linha.
- Não há diferença entre maiúsculas e minúsculas tanto para nomes de seções e variáveis como para valores. Já que não são permitidas duas variáveis com o mesmo nome em uma mesma seção, não é possível diferenciá-las deste modo.
- Espaços em branco são ignorados ao redor do sinal =, mas são considerados ao redor de vírgulas que separam os valores de uma mesma variável.
Por exemplo, o seguinte trecho
[Header] Header=ObjectType, Name
significa que o nome da coluna é Name, com um espaço no início. Já que isto não é considerado um nome de propriedade, ele será tratado como um identificador. Caso esta variável não seja relacionada à propriedade correta, a coluna será desconsiderada. Para que isto não aconteça, o trecho correto deve ser
[Header] Header=ObjectType, Name [Columns] Name = Name
(com o espaço em branco antes da variável) ou
[Header]
Header=ObjectType,Name
(sem espaço em torno da vírgula).
- O caractere ; não pode ser utilizado como parte do nome de um identificador, pois em modelos este caractere significa início de comentário. Portanto, a interpretação do arquivo se dará apenas até este caractere, e tudo o que estiver depois dele será desconsiderado.
Por exemplo, o seguinte trecho
[Header] Header=ObjectType,Na;me,DocString,Value
será lido apenas até a metade da variável Name e desconsiderará as colunas posteriores, ou seja: o valor efetivamente lido para a variável header será “ObjectType,Na”.
- Linhas em branco são ignoradas na interpretação do arquivo, portanto estas podem ser utilizadas livremente para a organização visual do modelo.
- As operações de importação e exportação não falham mesmo se alguma seção ou variável tenha sido escrita de maneira incorreta (exceção: seção [Header] ou variável header na exportação), pois as variáveis possuem valores padrão que são assumidos quando elas não são definidas. Portanto, caso a operação não tenha sido executada de acordo com o esperado, recomendamos verificar o modo como as variáveis foram escritas no modelo.
3.2. Criando um modelo via Gerenciador de Modelos do E3Studio
Para utilizar o Gerenciador de Modelos do E3, é preciso primeiramente clicar na opção Importar/Exportar; uma vez aberta a janela da opção, clicar então no botão Configurar. Defina as opções disponíveis nas abas descritas abaixo, e para finalizar a operação clique em OK.
a) aba Configuração
Nesta aba, são definidas as opções válidas com a finalidade de exportação/importação, tais como o separador de colunas, nome do modelo, etc.
Figura 1: Aba Configurações
b) aba Importação
Nesta aba, são definidas as opções válidas apenas com a finalidade de importação, tal como o comportamento durante a importação de uma associação ou objeto duplicado.
Figura 2: Aba Importação
c) aba Filtros
Nesta aba, são definidas as classes a serem importadas ou não, através do botão Alterar.
Figura 3: Aba Filtros
d) aba Identificadores
Nesta aba, são definidos os identificadores para as classes de objetos. Seu preenchimento é facultativo, sendo necessária apenas caso alguma classe seja importada/exportada com um identificador no lugar do nome.
Figura 4: Aba Identificadores
e) aba Propriedades
Nesta aba, são listadas as propriedades a ser importadas/exportadas. No caso de exportação, a lista deverá estar na ordem correta e seu preenchimento é obrigatório.
No caso de importação, a ordem é definida pelo próprio arquivo CSV e não pelo modelo. Esta lista só precisará ser preenchida caso alguma coluna esteja utilizando um identificador no lugar do nome da propriedade. Também é possível definir o agrupamento de duas ou mais propriedades em uma mesma coluna.
Figura 5: Aba Propriedades
4. DICAS DE UTILIZAÇÃO
4.1. Separador de colunas
A base da estrutura de um arquivo CSV são suas colunas. A fim de identificá-las corretamente, é preciso que o separador de colunas seja o mesmo tanto na importação quanto na exportação. Para isto, uma opção é utilizar o separador de listas configurado no Windows. Essa configuração é feita através do menu Iniciar – Configurações – Painel de Controle – Opções Regionais e de Idioma.
Figura 6: Configurações regionais do Windows
Como esta configuração varia de computador para computador, é importante conferir que o mesmo separador foi utilizado não só para geração do arquivo CSV mas também para a importação.
Outra opção é configurar o separador de colunas manualmente através da variável Separator, na seção [Configuration] do modelo. Neste caso, a configuração está no modelo, e basta utilizar o mesmo modelo na exportação e na importação para garantir que o separador será configurado corretamente.
4.2. Agrupando colunas para um arquivo mais versátil
Às vezes, objetos diferentes e sem propriedades em comum são exportados em um mesmo arquivo CSV, o que gera um número excessivo de colunas em branco. Por exemplo, tags de comunicação possuem as propriedades N1 a N4, mas não B1 a B4; já blocos de comunicação possuem B1 a B4, mas não N1 a N4. Um arquivo CSV com tags e blocos de comunicação a princípio seria assim:
ObjectType;Name ;N1;N2;N3;N4;B1;B2;B3;B4 IOTag ;Tag1 ;1 ;1 ;1 ;1 ; ; ; ; IOBlock ;Bloco1; ; ; ; ;1 ;1 ;1 ;1
No entanto, é possível reduzir este arquivo a apenas seis colunas se as propriedades N1 a N4 forem agrupadas com B1 a B4. Isto é possível porque objetos que possuem um destes dois tipos de propriedades não possuem o outro tipo. Mas note: caso as propriedades combinadas sejam comuns a mais de um tipo de objeto importado ou exportado, haverá perda de informação pois o valor de uma propriedade irá sobrescrever a outra.
Para agrupar estas propriedades, basta selecioná-las, clicar no botão Agrupar propriedades, e editar o nome da coluna.
Figura 7: Agrupar propriedades
O modelo gerado neste caso será semelhante a este:
ObjectType;Name ;N1/B1;N2/B2;N3/B3;N4/B4 IOTag ;Tag1 ;1 ;1 ;1 ;1 IOBlock ;Bloco1;1 ;1 ;1 ;1
4.3. Importando arquivos gerados pelo Elipse SCADA
O Elipse SCADA pode exportar seus tags, telas e alarmes para arquivos E2F, que são facilmente importados pelo Elipse E3 sem que seja necessária a utilização um modelo. Antes de tudo, alguns detalhes devem ser observados:
- Tags de comunicação ou tags OPC devem ser importados a partir de um driver de comunicação ou driver OPC, respectivamente, com o mesmo nome dos drivers do Elipse SCADA, para que as referências para os tags sejam importadas corretamente.
- Tags RAM e Demo devem ser importados no Elipse E3 a partir de um servidor de dados chamado “Dados”; dessa forma, garante-se que as referências para os tags estarão corretas.
- Quando o Elipse SCADA exporta tags, ele também cria um arquivo E2F com o sufixo _Alarms, que contém a configuração de alarmes. Logo depois, no Elipse E3, os alarmes são importados a partir de uma área previamente criada dentro de um Configurador de Alarmes. Caso os tags do Elipse SCADA tenham sido importados corretamente, as referências nestes alarmes aparecerá em azul, indicando que o link está correto.
- Antes que as telas do Elipse SCADA sejam importadas pelo E3 pela primeira vez, é preciso registrar os controles ActiveX dos E2Controls no E3Studio. Para isso, acesse Ferramentas–Adicionar ActiveX, selecione um dos controles da biblioteca E2Controls e clique OK.
4.4. Mantendo um modelo básico para cada objeto
Para facilitar a configuração da ferramenta e poupar tempo durante o procedimento, procure manter sempre pronto um modelo para cada um dos objetos frequentemente importados/exportados, como drivers, alarmes, telas, etc. Estes modelos podem conter, por exemplo, as propriedades a serem utilizadas e os objetos desejados.
Assim, ao iniciar um novo procedimento de importação ou exportação, basta selecionar o modelo básico e clicar em Configurar para que todas as configurações encontradas neste modelo sejam carregadas. Na opção Salvar as alterações deste modelo em um arquivo INI, escolha um novo nome para o modelo, para que o básico não seja sobrescrito, e altere nele apenas o que for necessário.
4.5. Importando arquivos de tags gerados por versões antigas do E3Studio
O formato dos arquivos CSV gerados pela exportação de versões antigas do Elipse E3 é do mesmo modo suportado pela ferramenta atual. O modelo apropriado para esta operação está disponível no diretório de instalação do E3, na pasta Templates.
A fim de configurar um novo modelo, siga estes procedimentos:
a. Na aba Configurações: em primeiro lugar, selecione o separador de listas do Windows como separador de colunas, desabilite as opções importar/exportar objeto raiz, associações e coleções; então, escolha um novo nome para o modelo.
b. Logo depois, na aba Importação, mantenha a configuração padrão.
c. Na aba Filtros, selecione Incluir apenas estes objetos e então clique em Alterar para incluir as classes IOTag, IOBlock e IOBlockElement.
d. Na aba Identificadores, clique em (+) a fim de incluir as classes IOTag, IOBlock e IOBlockElement, e defina os identificadores PLC Tag, Block Tag e Element, respectivamente.
Figura 8: Definição de identificadores para classes de objetos
e. Na aba Propriedades, defina as propriedades a serem exportadas pela versão antiga e logo depois relacione-as aos identificadores utilizados no arquivo CSV. Para a propriedade ObjectType, associe o identificador type. Para as demais, siga as instruções a seguir:
Figura 9: Escolha das propriedades
- Antes de tudo, clique (+) para adicionar as propriedades.
- Logo após, selecione a classe IOTag e adicione as propriedades Name, DocString, N1, N2, N3, N4, Scan, AllowRead, AlowWrite, EnableScaling, DeviceLow, DeviceHigh, EULow, EUHigh, ParamDevice, ParamItem.
- Posteriormente, selecione a classe IOBlock e adicione as propriedades B1, B2, B3, B4, Size.
- Depois, selecione a classe IOBlockElement e adicione a propriedade Index.
- Então, selecione as propriedades N1 a N4 e B1 a B4 aos pares e clique em Agrupar propriedades. Depois, altere o nome de cada coluna (N1/B1, N2/B2, N3/B3 e N4/B4).
- Por fim, altere o nome das colunas para as seguintes propriedades: DocString = Description; Scan = ScanTime; AdviseType = Advise; EnableScaling = Scaling; EUHigh = High2.
f. Clique em OK. O modelo será salvo e estará pronto para ser utilizado pela ferramenta. Como resultado, o arquivo INI resultante será semelhante ao mostrado a seguir:
[HEADER] Header=Type,Name,Description,N1/B1,N2/B2,N3/B3,N4/B4,ScanTime,AllowRead, AllowWrite,Advise,Scaling,DeviceLow,DeviceHigh,EULow,EUHigh,EU,Size, Index,ParamDevice,ParamItem Types=Element,Block Tag,PLC Tag[TYPES]Element=IOBlockElement Block Tag=IOBlock PLC Tag=IOTag[COLUMNS] N1/B1=N1,B1 N2/B2=N2,B2 N3/B3=N3,B3 N4/B4=N4,B4 Scaling=EnableScaling ScanTime=Scan Type=ObjectType Advise=AdviseType Description=DocString[CONFIGURATION] Root=FALSE Link=FALSE Collection=FALSE ObjectDuplicated=AskAlways BindDuplicated=AskAlways[FILTER] Include=IOTag,IOBlock,IOBlockElement
4.6. Alterando os tipos de objetos em quatro passos
Com a nova ferramenta de importação e exportação do E3, é possível alterar os tipos de objetos sem perder as propriedades anteriormente configuradas. Este procedimento pode ser feito em quatro etapas:
Figura 10: Aplicação exemplo
a. Primeiramente, exporte os objetos cujos tipos serão alterados, criando um modelo com todas as suas propriedades. No exemplo, serão exportados os objetos filhos da TelaInicial. Assim, na configuração do modelo, foram incluídas todas as propriedades da classe DrawRect, e um identificador foi criado na aba Identificadores do Gerenciador de Modelos.
b. Logo após, altere o tipo de objeto no modelo utilizado para a exportação. No exemplo, objeto DrawRect foi substituído por um DrawCircle diretamente no valor da variável. Então, salve o modelo.
c. Então, apague os objetos antigos no E3. No exemplo, foram removidos os quatro retângulos filhos da TelaInicial.
d. Por fim, importe os objetos do arquivo CSV gerado no item a através do modelo alterado no item b. No exemplo, foram criados quatro novos círculos que mantêm as propriedades definidas para os retângulos, como cor, posição, tamanho, etc.
Figura 11: Aplicação exemplo após substituição dos tipos de objetos
No entanto, este procedimento é vantajoso apenas quando os objetos em questão compartilham uma série de propriedades; objetos muito distintos entre si não podem ser aproveitados neste caso.
Um exemplo de uso para esta funcionalidade é quando a biblioteca contendo diversos XControls de uma Tela for perdida. Sabendo o significado das propriedades definidas para o XControl, é possível não apenas criar uma nova biblioteca como também redefinir o ElipseX e, através deste passo-a-passo, substituir na Tela os ElipseX antigos pelos novos.