Geração de graficos em tempo real

2 respostas
I

Fala galera,
to com um probleminha ao usar umas classes do JFreeChart para a geração de gráficos em tempo real. Minha aplicação faz uso de uma Placa de Aquisição de dados. Existe uma função que me retorna 100 amostras de um sinal senoidal de frequencia 100 Hz. se eu utilizar a classes de série de tempo para gerar estaticamente o grafico do sinal eu consigo uma representação perfeita do sinal, no entanto eu preciso de uma representação dinâmica, em tempo real. Qd eu uso as classes para a geração de gráficos dinâmicos, o sinal mostrado no gráfico aparece todo retorcido, diferente da imagem de uma senoide. No entanto os limites superior e inferior da senoide são respeitados no gráfico. Sempre que eu aumento ou dominuo a amplitude do sinal o programa responde na mesma hra atualizando a amplitude do mesmo. Gostaria de saber o que pode estar errado, infelizmente não tem como postar aki as imagens dos gráficos.
A parte principal do código relativo à geração dinamica está listada abaixo:

class DataGenerator extends Timer implements ActionListener {

/**
     * Constructor.
     * 
     * @param interval  the interval (in milliseconds)
     */
    
short[] wTotalBoards = new short[1] ;
 
short[] wAddrTimer = new short[1] ;
short[] wAddrCtrl = new short[1] ;
short[] wAddrDio = new short[1] ;
short[] wAddrAdda = new short[1] ;

short[] wStatus = new short[1] ;
int[] dwLowAlarm = new int[1] ;
int[] dwHighAlarm = new int[1] ;

float[] fVal = new float[1000] ;


TesteDll td = new TesteDll();

short res1 = td.P1602_DriverInit(wTotalBoards);

short r = td.P1602_ActiveBoard((short)0); // ativa a placa

short res2 = td.P1602_GetConfigAddressSpace((short) 0,wAddrTimer,wAddrCtrl,wAddrDio,wAddrAdda);

short res3 = td.P1602_SetChannelConfig((short)0, (short)0x00);

short res4 = td.P1602_DelayUs((short)3);

DataGenerator(int interval) {
        super(interval, null);
        addActionListener(this);
    }

    /**
     * Adds a new free/total memory reading to the dataset.
     *
     * @param event  the action event.
     */
    public void actionPerformed(ActionEvent event) {
     //   long f = Runtime.getRuntime().freeMemory();
     
    short res5 = td.P1602_AdsPacer(fVal, (short)100,(short)800);
     
           for(int i=0;i<100;i++){
        
        //double t = (double)fVal[i];
        System.out.println("fVal: "+fVal[i]);
        addTotalObservation((double)fVal[i]);
        }
   
    }

}

A classe acima é um timer que de 10 em 10 milisegundo faz a atualização do gráfico colocando novos valores de amostragem do sinal obtidos a partir da função “P1602_AdsPacer”

2 Respostas

T

Acho que o JFreeChart não é muito adequado para geração de gráficos em tempo real. Pelo menos o pessoal do Profiler do NetBeans desistiu dele e reimplementou os gráficos:
http://www.netbeans.org/issues/show_bug.cgi?id=53646
Só não sei se eles disponibilizaram o código-fonte.

I

alguém poderia dar uma dica a respeito de que tecnologia devo utilizar para a geração de graficos em tempo real…?
Desde já agradeço
Igor P. Simões

Criado 9 de agosto de 2005
Ultima resposta 9 de ago. de 2005
Respostas 2
Participantes 2