<< Clique para Mostrar o Sumário >>
Escrita de Séries Temporais em Basic Variables |
O EPM SDK em Linguagem Python contém uma função para a escrita de valores históricos em Basic Variables, porém é preciso observar os seguintes aspectos:
•A Basic Variable não deve ter uma fonte de dados associada. Tentativas de escrita em Basic Variables associadas a fontes de dados geram uma exceção
•Os dados devem estar no formato array do NumPy com os cabeçalhos Value, Timestamp e Quality, observando maiúsculas e minúsculas
•Os valores da coluna Value devem ser de tipos de dados do módulo NumPy que são suportados pelo EPM Server (int16, int32, int64, bool, float16 ou float32) além dos tipos de dados datetime e str, ambos nativos do Python
•A coluna Timestamp deve conter dados em ordem crescente de estampa de tempo e no formato UTC, necessariamente do tipo de dados datetime nativo do Python
•A coluna Quality deve conter dados do tipo ValueQuality do módulo epmsdk.dataaccess
•Novos valores com a mesma estampa de tempo de valores previamente armazenados resulta na sobrescrita dos valores antigos por estes últimos
•Basic Variables que estão com a opção Store milliseconds precision desmarcada armazenam as estampas de tempo com precisão de segundos, truncando e descartando a parte dos milissegundos
•A opção Record da Basic Variable está relacionada apenas à gravação ou não de valores provenientes das interfaces de comunicação, portanto esta opção não se aplica à solicitação de escrita através da função epmTagHistoryUpdate, que escreve séries temporais mesmo com esta opção desmarcada
•Independente do valor informado para gravação, caso a qualidade seja ruim, este valor é sempre armazenado no EPM Server como nulo
A escrita de valores históricos segue o mesmo fluxo inicial descrito anteriormente, iniciando pelo estabelecimento de conexão com um EPM Server seguido da criação do objeto de dados, necessariamente uma Basic Variable neste caso.
O passo seguinte é dispor os dados na terna Valor, Estampa de Tempo e Qualidade no formato array do NumPy. Por fim, execute a função epmTagHistoryUpdate informando a Basic Variable e os dados a escrever. Não ocorrendo problemas, os dados devem ser escritos na variável correspondente no EPM Server, e passam a estar disponíveis para consultas a partir de qualquer outra ferramenta cliente do sistema, como o EPM Studio Chart Analysis ou mesmo através do EPM Add-in for Microsoft Excel.
O script a seguir mostra um breve exemplo de escrita de 20 valores gerados aleatoriamente em uma variável previamente criada com o nome randEPMSdkPython utilizando uma conexão previamente criado com o nome de srvConnection. no mesmo EPM Server utilizado no exemplo anterior.
try:
bv02 = epmda.epmGetDataObject(srvConnection, 'randEPMSdkPython')
except epmsdk.EpmException as ex:
print('Search failed: {}'.format(epmsdk.EpmExceptionCode[ex.Code]))
print('Details: {!r}'.format(ex))
raw_input('Program must stop now!')
exit(1)
# número de valores a serem escritos
numValues = 20
# vetor com os valores aleatórios
nvValue = np.random.rand(numValues)
# Montando o vetor com as estampas de tempo
nvTimestamp = []
for h in range(numValues):
nvTimestamp.append(dt.datetime(2009, 9, 1, h + 3))
# Montando o vetor com as qualidades,
# todas boas, com exceção do último valor
nvQuality = np.empty(numValues, dtype='object')
# Good Quality
nvQuality[:] = epmda.ValueQuality(severity = epmda.QualitySeverity.Good)
# Bad Quality
nvQuality[-1] = epmda.ValueQuality(severity = epmda.QualitySeverity.Bad)
# Tipo do array do numpy suportado pelo EPM Server
# (coluna de valores como float)
# Dados a serem escritos no EPM Server
nvData = np.empty(numValues, dtype = epmhda.DefaultNumpyValuesArrayType)
nvData['Value'] = nvValue
nvData['Timestamp'] = nvTimestamp
nvData['Quality'] = nvQuality
# Apresentação dos dados que serão escritos no EPM Server
plt.plot(nvData['Timestamp'] - dt.timedelta(hours = 3),\
nvData['Value'], color = 'b', drawstyle = 'steps')
plt.show()
# Escrevendo na Basic Variable 'randEPMSdkPython' do EPM Server
epmhda.epmTagHistoryUpdate(bv02, nvData)
A imagem a seguir é apresentada durante a execução do script anterior, sendo estes valores os mesmos a serem escritos no EPM Server.
Valores no EPM Server
Criando um Dataset Analysis no EPM Studio e realizando uma consulta no mesmo período para a variável anterior, podemos verificar o mesmo resultado, conforme apresentado na imagem a seguir.
Valores no Dataset Analysis
A conexão com o EPM Server é liberada assim que é concluída a execução do script, ou seja, quando sair do escopo ao qual pertencia, ou pode ser encerrada sob demanda através do comando del. No caso dos exemplos anteriores, acrescente a linha a seguir.
del(srvConnection)
Deve-se ater ao fato de que, uma vez encerrada a sessão, todos os objetos do EPM no ambiente Python que a utilizavam perdem sua conexão com o EPM Server, ou seja, não é mais possível executar consultas ou realizar escritas no servidor a partir destes objetos.