/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: HP6624A.java * Written by David Hopkins and Tom O'Neill, Sun Microsystems. * * Copyright (c) 2004 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; /** * This class extends the generic equipment class to include methods specific to * the HP6624A 4-channel power supply. * <P> * Rather than using this class directly, you should use {@link HP6624AChannel} */ public class HP6624A extends Equipment { String s = new String("null"); /** Number of channels (value = 4) */ public static final int NUM_CHANNELS = 4; /** Resolution of each channel in Volts */ private static final float VOLTAGE_RESOLUTION = 0.01f; /** Creates a new instance of HP6624A */ protected HP6624A(String newName) { super(newName); } static void checkChannel(int channel) { if (channel < 1 || channel > NUM_CHANNELS) { throw new IllegalArgumentException("Channel " + channel + " outside allowed range 1.." + NUM_CHANNELS); } } /** * Returns string indicating state of one of the channels * * @throws IllegalArgumentException * if channel not in range 1..3 */ public String getState(int channel) { checkChannel(channel); String result; result = "Set: " + getVoltageSetpoint(channel) + " V, " + getCurrentSetpoint(channel) + " A\n"; result += "Got " + readVoltage(channel) + " V, " + readCurrent(channel) + " A"; return result; } /** * Returns voltage resolution of channel * * @param channel * Supply channel number * @return Voltage resoluton of channel * @throws IllegalArgumentException * if channel not in range 1..4 */ public static float getVoltageResolution(int channel) { checkChannel(channel); return VOLTAGE_RESOLUTION; } /** * Measures the voltage on one of the 4 channels * * @throws IllegalArgumentException * if channel not in range 1..4 */ public float readVoltage(int channel) { checkChannel(channel); write("VOUT ?" + channel); s = read(200); return Float.parseFloat(s); } /** * Reads back the voltage setpoint from one of the 3 channels * * @throws IllegalArgumentException * if channel not in range 1..4 */ public float getVoltageSetpoint(int channel) { checkChannel(channel); logOther("Reading voltage setpoint on HP6624A " + getName() + ", channel " + channel); write("VSET?" + channel); //System.out.println("Setpoint " + s); s = read(200).trim(); return Float.parseFloat(s); } /** Sets the voltage on one of the 4 channels */ public void setVoltage(int channel, float voltage) { checkChannel(channel); write("VSET " + channel + " , " + voltage); // Infrastructure.waitSeconds(.3f); } /** Reads back the current from one of the 4 channels */ public float readCurrent(int channel) { checkChannel(channel); write("IOUT? " + channel); String s = read(200).trim(); return Float.parseFloat(s); } /** * Reads back the current setpoint from one of the 4 channels * * @throws IllegalArgumentException * if channel not in range 1..4 */ public float getCurrentSetpoint(int channel) { checkChannel(channel); write("ISET? " + channel); String s = read(10); return Float.parseFloat(s); } /** * Changes the current setpoint on channel <code>channel</code> to * <code>setAmps</code> Amps. * * @throws IllegalArgumentException * if channel not in range 1..4 */ public void setCurrent(int channel, float setAmps) { checkChannel(channel); write("ISET " + channel + ", " + setAmps); } /** * Changes the voltage for the over voltage protection on channel * <code>channel</code> to * <code>setVolts</code> Volts. * * @param channel selects which channel * @param setVolts the new over-voltage limit * @throws IllegalArgumentException * if channel not in range 1..4 */ public void setOverVoltageProtection(int channel, float setVolts) { checkChannel(channel); write("OVSET " + channel + ", " + setVolts); } /** * Changes the current for the over current protection on channel * <code>channel</code> to * <code>setAmps</code> Amps. * * @param channel selects which channel * @param setAmps the new over-current limit * @throws IllegalArgumentException * if channel not in range 1..4 */ public void setOverCurrentProtection(int channel, float setAmps) { checkChannel(channel); write("OCP " + channel + ", " + setAmps); } public static void main(String args[]) { Infrastructure.gpibControllers = new int[] { 1 }; HP6624A supply = new HP6624A("hHP6624A"); // supply.setVoltage(3, 1.8f); //System.out.println("current " + supply.readCurrent(3)); for (int chan = 1; chan <= 4; chan++) { System.out.println(chan + ": " + supply.getState(chan)); } supply.interactive(); }//end main }