예제 #1
0
  /** {@inheritDoc} */
  @SuppressWarnings("nls")
  @Override
  public void pvChanged(final PVReaderEvent<List<VType>> event) {
    final PVReader<List<VType>> pv = event.getPvReader();
    // Check for error
    final Exception error = pv.lastException();
    if (error != null)
      Activator.getLogger().log(Level.FINE, "PV " + pv.getName() + " error", error);

    final List<VType> values = pv.getValue();
    if (values == null) { // No current value
      current_value = null;
      // In 'monitor' mode, mark in live sample buffer
      if (period <= 0) logDisconnected();
      return;
    } else {
      boolean added = false;
      for (VType value : values) {
        // Cache most recent for 'scanned' operation
        current_value = value;
        // In 'monitor' mode, add to live sample buffer
        if (period <= 0) {
          Activator.getLogger()
              .log(Level.FINE, "PV {0} received {1}", new Object[] {getName(), value});
          samples.addLiveSample(value);
          added = true;
        }
      }
      if (automaticRefresh
          && added
          && samples.isHistoryRefreshNeeded(model.getStartTime(), model.getEndTime())) {
        model.fireItemRefreshRequested(this);
      }
    }
  }
예제 #2
0
 /** Add one(!) 'disconnected' sample */
 private void logDisconnected() {
   synchronized (samples) {
     final int size = samples.getSize();
     if (size > 0) {
       final String last = VTypeHelper.getMessage(samples.getSample(size - 1).getValue());
       // Does last sample already have 'disconnected' status?
       if (Messages.Model_Disconnected.equals(last)) return;
     }
     samples.addLiveSample(new PlotSample(Messages.LiveData, Messages.Model_Disconnected));
   }
 }
예제 #3
0
 /** @param value Value to log with 'now' as time stamp */
 private void logValueAsNow(final VType value) {
   if (value == null) logDisconnected();
   else
     // Transform value to have 'now' as time stamp
     samples.addLiveSample(VTypeHelper.transformTimestampToNow(value));
 }