/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: Agilent6031AChannel.java
* Written by Tom O'Neill and Nathaniel Pinckney, Sun Microsystems.
*
* Copyright (c) 2008 Sun Microsystems and Static Free Software
*
* Electric(tm) is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Electric(tm) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Electric(tm); see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, Mass 02111-1307, USA.
*/
package com.sun.electric.tool.simulation.test;
/**
* Class for setting a voltage level supplied by an Agilent 6031A 20V/120A
* programmable DC power supply, using the device-independent interface
* {@link PowerChannel}.
* <P>
* This class should now be instantiated from a {@link Model#createPowerChannel(String, String, int, int, String)}
*/
public class Agilent6031AChannel extends PowerChannel {
/**
* The Agilent 6031A programmable DC power supply that provides the voltage level
* in question
*/
private final Agilent6031A supply;
/**
* Creates an object to control a Agilent 6031A power supply using the methods of
* the device-independent PowerChannel abstract class.
* <P>
* Instead of this, you should use
* {@link Model#createPowerChannel(String, String, int, int, String)}.
* I have left it public for backwards compatability.
*
* @param channelName
* name of signal on this power supply
* @param supplyName
* <code>gpibconf</code> identifier for the power supply
*/
public Agilent6031AChannel(String channelName, String supplyName) {
this.name = channelName + " (" + supplyName + ")";
supply = new Agilent6031A(supplyName);
logInit("Initialized Agilent6031AChannel " + this.name);
}
/** @return Returns the name of the Agilent6031A */
public String getSupplyName() {
return supply.getName();
}
/**
* Returns string indicating state of the channels
*/
public String getState() {
return supply.getState();
}
/**
* Reads back the voltage provided by this channel of the power supply.
*
* @return voltage drawn over this channel, in Volts
*/
public float readVoltage() {
logOther("Reading voltage on " + getName());
return this.supply.readVoltage();
}
/**
* Set the channel's voltage to the value provided
*
* @param volts
* new voltage for the channel, in Volts
*/
public void setVoltageNoWait(float volts) {
logSet("Agilent6031AChannel setting voltage on " + getName() + " to "
+ volts + " V");
supply.setVoltage(volts);
}
public void waitForVoltage(float setVolts) {
if (supply.isDisabled())
return;
super.waitForVoltage(setVolts);
}
/**
* Get the channel's voltage setpoint
*
* @return voltage setpoint for the channel, in Volts
*/
public float getVoltageSetpoint() {
logOther("Reading voltage setpoint on " + getName());
return this.supply.getVoltageSetpoint();
}
/**
* Returns voltage resolution of power supply.
*
* @return voltage resolution of power supply
*/
public float getVoltageResolution() {
logOther("Getting voltage resolution on " + getName());
return Agilent6031A.getVoltageResolution();
}
/**
* Reads back the current provided by this channel of the power supply.
*
* @return current drawn over this channel, in Amps
*/
public float readCurrent() {
logOther("Reading current on " + getName());
return this.supply.readCurrent();
}
/**
* Set the channel's current limit to the value provided
*
* @param amps
* new current limit for the channel, in Amps
*/
public void setCurrent(float amps) {
logSet("Setting current limit on " + getName() + " to " + amps);
supply.setCurrent(amps);
}
/**
* Get the channel's current setpoint
*
* @return current setpoint for the channel, in Amps
*/
public float getCurrentSetpoint() {
logOther("Reading current setpoint on " + getName());
return supply.getCurrentSetpoint();
}
/**
* Gets the foldback mode or turns it off.
*
*/
public int getFoldback() {
return supply.getFoldback();
}
/**
* Sets the foldback mode or turns it off.
*
* @param mode
* Foldback mode to set. Can be <code>Agilent6031A.FOLDBACK_CV</code>,
* <code>FOLDBACK_CC</code>, or <code>FOLDBACK_OFF</code>.
* @throws IllegalArgumentException
* if mode not in 0..2
*/
public void setFoldback(int mode) {
supply.setFoldback(mode);
}
/**
* Gets the over voltage protection value.
*
*/
public float getOverVoltageProtection() {
return supply.getOverVoltageProtection();
}
/**
* Unit tests, prints current as function of voltage for channel 1. Should
* disconnect supply from any chips before waiting.
*
* @param args
* Ignored
*/
public static void main(String[] args) {
Infrastructure.gpibControllers = new int[] { 1 };
Agilent6031AChannel channel = new Agilent6031AChannel("aAgilent6031A", "power");
System.out.println(channel.getState());
System.out.println("res " + channel.getVoltageResolution() + "\n");
}
}