Tabela de Dados para historico


#1

Boa noite.

O sistema do SCADABR não prevê tabelas de histórico nas telas de IHM. Como isso é muito útil em praticamente todas as aplicações de sistemas supervisórios. Desta forma me dediquei para criar uma forma de tornar esta função possível.

Primeiro precisamos do banco de dados mySQL já que não conhecia ninguém que trabalha-se com Derbi.kkk

Precisamos criar um arquivo de texto com o nome de historico.jsp. o código para o arquivo esta abaixo.


<%@ page import = “java.io.,java.util.,java.sql."%>
<%@ page import = "javax.servlet.http.
,javax.servlet.*” %>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix = “c”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/sql” prefix = “sql”%>

SELECT Operation
  <sql:query dataSource = "${snapshot}" var = "result">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations

left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 29 order by id desc limit 10;
</sql:query>

  <sql:query dataSource = "${snapshot}" var = "result1">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations

left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 30 order by id desc limit 10;
</sql:query>

  <sql:query dataSource = "${snapshot}" var = "result2">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations

left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 31 order by id desc limit 10;
</sql:query>

  <sql:query dataSource = "${snapshot}" var = "result3">
  Select DATE_FORMAT(from_unixtime(ROUND(ts/1000)),'%d/%m/%Y - %H:%i:%s') as tempo from pointValues where dataPointId = 31 order by id desc limit 10;
  </sql:query>
  <table border = "1" width = "100%">
 <col width = "25%">
 <col width = "25%">
 <col width = "25%">
 <col width = "25%">
     <tr>
        <th>Data-hora</th>
        <th>Moldagem</th>
        <th>Resfriamento</th>
        <th>Carregamento</th>
     </tr>
  </table>
  <table border = "1" width = "25%"  style="float: left">
  <c:forEach var = "row" items = "${result3.rows}">
        <tr>
           <td><c:out value = "${row.tempo}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%"  style="float: left">
  <c:forEach var = "row" items = "${result.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%" style="float: left">
  <c:forEach var = "row" items = "${result1.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%" style="float: left">
  <c:forEach var = "row" items = "${result2.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>

Este arquivo precisa ser colocado dentro da pasta C:\Program Files\ScadaBR\webapps\ScadaBR

Para chamar a tabela dentro do SCADABR vamos utilizar um componente HTML com o código:

O resultado é uma tabela com 10 linhas e 4 colunas que através do arquivo jsp pode facilmente ser alterada.

Como antes do SCADABR nunca havia trabalhado com banco de dados ou javascript meu socorro foram dois professores maravilhosos, que na verdade criaram a função e eu apenas dei ideias de como queria.
Nosso amigo Luciano Topolniak Professor do IFRO.
Meu irmão Lauan que é programador para infraestrutura.
O credito desta maravilhosa ferramenta é deles.

Espero que sirva a todos.


#2

Parabéns pelo código e por postar no fórum. Você estará ajudando muita gente com esse código.


#3

resolvi testar o código, falta alguma coisa, estou colocando o arquivo que fiz aqui, nao esta compilando por algum motivo bizarro:
O que estava faltando era a tag
sql:setDataSource e definir nele a variável “snapshot

Esta tag contem as credenciais para a página jsp logar no banco de dados mysql.

Aqui esta o código:

<%@ page import = "java.io.,java.util.,java.sql."%>
<%@ page import = "javax.servlet.http.,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix = "c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix = "sql"%>


  <sql:setDataSource var = "snapshot" driver = "com.mysql.jdbc.Driver"
         url = "jdbc:mysql://localhost/scadabr"
         user = "scadabr"  password = "scadabr"/>

  <sql:query dataSource = "${snapshot}" var = "result">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 29 order by id desc limit 10;
</sql:query>
<sql:query dataSource = "${snapshot}" var = "result1">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 30 order by id desc limit 10;
</sql:query>

<sql:query dataSource = "${snapshot}" var = "result2">
  Select pointvalueannotations.textPointValueShort from pointvalueannotations left Join pointvalues ON pointvalueannotations.pointValueID=pointValues.id where pointValues.dataPointId = 31 order by id desc limit 10;
</sql:query>

  <sql:query dataSource = "${snapshot}" var = "result3">
  Select DATE_FORMAT(from_unixtime(ROUND(ts/1000)),'%d/%m/%Y - %H:%i:%s') as tempo from pointValues where dataPointId = 31 order by id desc limit 10;
  </sql:query>
  <table border = "1" width = "100%">
 <col width = "25%">
 <col width = "25%">
 <col width = "25%">
 <col width = "25%">
     <tr>
        <th>Data-hora</th>
        <th>Moldagem</th>
        <th>Resfriamento</th>
        <th>Carregamento</th>
     </tr>
  </table>
  <table border = "1" width = "25%"  style="float: left">
  <c:forEach var = "row" items = "${result3.rows}">
        <tr>
           <td><c:out value = "${row.tempo}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%"  style="float: left">
  <c:forEach var = "row" items = "${result.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%" style="float: left">
  <c:forEach var = "row" items = "${result1.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>

  <table border = "1" width = "25%" style="float: left">
  <c:forEach var = "row" items = "${result2.rows}">
        <tr>
           <td><c:out value = "${row.textPointValueShort}"/></td>
        </tr>
  </c:forEach>
   </table>