Hochstrom-Netzgerät


Networkinterface

Die Netzzgeräte werden von eim C Programm angesteuert. Dieses verwendet libfesl um die Register im Accu anzusprechen und dadurch das Gerät fahren. Dieses Programm kann auf einem TCP netzwerk port einen server aufmachen. Hier können verschiedene Parameter gesetzt werden, die es erlauben:
  • das Netzgerät zu parametrieren
  • Rampensteilheiten vorzugeben
  • anzufahrenden Werte festzulegen und
  • das Abfahren der Werte anzustossen.
Das Programm ist "single threaded".

Starten des Servers

Der Server wird mit der option '-P port' auf der Kommandozeile gestartet. Auf diesem Port öffnet das Programm einen Server, der einen einzelnen Client bedient. Soll z.B: das Port 1234 geöffnet werden so muss folgendes Kommando eingegeben werden:
power_converter_test_automatic.sh -P 1234

Sobald der Server das Port geöffnet hat, schickt er eine Statusmeldung mit dem letzten internen Status (siehe Protokoll).

Protokoll

Die Kommandos werden als "strings" geschickt und der server antwortet mit "strings". Alle Kommandos haben das Format <\S*/>. Der Server beantwortet jede Anfrage mit '<status value = "0x%2x" />'; das heißt er schickt einen integerwert hex codiert zurück, der den Status anzeigt. Typische Werte sind:
  • 0 : Alles verstanden
  • 2 : "parse error": kommando wurde nicht verstanden
  • 7 : "Wert zu gross": zu setzender Wert höher als erlaubt
  • 8 : "Wert zu klein": zu setzender Wert kleiner als erlaubt
  • 16 : "bad user input": vom User gesetzer wert ist nicht erlaubt
Die Standardantwort ist also '<status value = "0x00" />' und heißt: alles gut! Negative Statuswerte sind Warnungen oder ähnlichem zuzuordenen z.B:
  • -5: Keine Aktion musste ausgeführt werden. Ein Beispiel ist, dass die gesetzten Stromwerte im Zyklus so nahe beieinander sind, dass sie am Ausgang des Netzgerätes keinen Unterschied ergeben.
Der Server erwartet zwei Arten von Anfragen:
  • Parameterabfragen oder
  • Werte die gesetzt werden.
Parameter werden folgendermaßen gesetzt: Der Client schickt ein Kommando:

<cmd value = "TOP:PC:RAMP_RATE_UP" set = "1000.0" />

Es besteht aus einer Variablenbezeichung, hier 'TOP:PC:RAMP_RATE_UP' und einem Wert, der gesetzt werden soll. Dieser beträgt hier 1000.0 (A/s), Beachte, daß die Leerzeichen exakt eingehalten werden müssen!

Der Server antwortet dann mit dem Status. Der Wert ist null wenn alles gut gegangen ist.

Wenn Werte gelesen werden solllen, so schickt der Client ein Kommando der Art:

<cmd value = "TOP:PC:RAMP_RATE_UP" />

Der Server antwortet dann
  • mit dem Status (<status value = "0x00" />).
  • Nur wenn der Status 0 ist, also das Kommando erfolgreich ausgeführt wurde antwortet der Server mit einem zweiten Text.
In diesem Beispiel lautet die Antwort

'<ans size = "0x002c" value = " +1.0000000000000000e+03" />'

Diese wird folgendermassen gelesen:
  • Zuerst werden 19 bytes gelesen. Dies enthält den Text bis zu '<ans size = "0x%3x"'; HIer wird die Länge des verbleibenden Strings angegeben.
  • Nach value = wird dann der gesetzte Wert angegeben. Momentan werden nur Ganzzahlwert oder Fließkommawerte zurückgegeben.

Parameterraum

Die Parameter sind hierachisch organisert und spiegeln den internen Aufbau wider. Alles Parameter beginnen mit

TOP

Die unterschiedlichen Ebenen werden mit ':' getrennt.

Im folgenden werden die wichtigsten Parameter dargestellt. Alle Parameter werden in SI Einheiten übergeben.

Modell der Last

Die Last wird als stromabhängige Induktivität und als konstanter Widerstand modelliert. Es wird angenommen, dass bis zu einem gewissen Strom die Induktivität konstant ist. Danach wird der Induktivtätsabfall durch ein Polynom dargestellt. Die Details sind in Referenz (Anlage!) dargestellt.

Für die Last ergeben sich als folgende Parameter:
  • TOP:PC:LOAD:INDUCTANCE: entspricht dem konstanten Wert der Induktivität. Bei Magneten entspricht sie diesem Teil, in dem das Eisen nicht sättigt.
  • TOP:PC:LOAD:RESISTANCE: enstpricht dem konstanten Widerstand der Last. Dies ist nicht nur der Widerstand des Magneten sondern auch der Zuleitungskabel.
  • TOP:PC:LOAD:MAXIMUM_CURRENT: Maximalstrom, mit der die Last bestromt werden darf. Dies dient nur um eine Fehlbedienung abzufangen. Dies ist keine Sicherheitsfunktion.
  • Die folgenden zwei Parameter werden benötigt um die Induktivitätsvariation zu modellieren. Diese sind
    • TOP:PC:LOAD:NOMINAL_CURRENT: der Nominal Strom und
    • TOP:PC:LOAD:THRESHOLD_CURRENT: der Strom, bis zu dem die Induktivität konstant ist.
Zwischen diesen beiden wird intern ein Wert linear λ inpoliert, der bei TOP:PC:LOAD:THRESHOLD_CURRENT 0 und bei TOP:PC:LOAD:NOMINAL_CURRENT 1 ist. Somit ergibt sich λ zu

λ = (I - Ith) / (Inom - Ith)

mit I dem Strom, Ith dem Schwellwertstrom (THRESHOLD_CURRENT), Inom dem Nominalstrom (NOMINAL_CURRENT) und I dem momentan vom Netzgerät auszugebender Strom.

Zwischen diesen Strömen wird die stromabhängige Induktivität dann berechnet zu

ind(I) = ind0 * (1 + c1 λ + c2 λ^2 + c3 λ^3)

Die Parameter werden gesetzt mit:
  • c1 : TOP:PC:LOAD:INDUCTANCE:CORRECTION_LINEAR
  • c2 : TOP:PC:LOAD:INDUCTANCE:CORRECTION_QUADRATIC
  • c3 : TOP:PC:LOAD:INDUCTANCE:CORRECTION_CUBIC
Für den SIS100 Dipol ergeben sich damit (ungefähr) folgende Parameter.

TOP:PC:LOAD:MAXIMUM_CURRENT='17e3'
TOP:PC:LOAD:NOMINAL_CURRENT='13100'
TOP:PC:LOAD:THRESHOLD_CURRENT='10000'

TOP:PC:LOAD:RESISTANCE='110e-6'
# To be measured on the power converter
TOP:PC:LOAD:INDUCTANCE='0.55e-3'
# Correction factor applied to INDUCTANCE
TOP:PC:LOAD:INDUCTANCE_CORRECTION:LINEAR='-0.0'
TOP:PC:LOAD:INDUCTANCE_CORRECTION:QUADRATIC='-0.296'
TOP:PC:LOAD:INDUCTANCE_CORRECTION:CUBIC='-0.077'

Parameter des Stromzyklus

Dem Netzgerät wird ein Zyklus übergeben. Dieser besteht aus
  • den erwarteten eingestelleten Strom am Netzgerät
  • den anzufahrenden Strömen
  • den Pausen, die eingehalten werden sollen, bevor der nächste Stromwert angefahren werden soll
  • die Anzahl mit der der Zyklus wiederholt werden soll.
  • den Werten der Stromrampen für die Rampen zum Hochfahren und den Rampen zum Abfahren.
    • TOP:PC:RAMP_RATE_UP bezeichnet den Parameter für die Rampen zum Hochfahren
    • TOP:PC:RAMP_RATE_DOWN bezeichnet den Parameter für die Rampen zum Hochfahren
Beachte, dass das Netzgerät die Rampen intern verrundet. Daher sind die Stromrampen die Maximalwerte, die nicht erreicht werden, wenn der Stromhub klein ist. Intern werden die Werte in einem Array abgelegt. Jeder Zeile bestehet aus einem Verzögerungswert und einem Stromwert. Der niedrigste Wert ist mit Index Null. Es wird mit den folgenden Parametern gefüllt:
  • TOP:PC:RAMP_DATA:SIZE: Mit diesem wird die Anzahl der Stromwerte bekannt gegeben werden. Dieser Wert kann
    • bis zu 127 gesetzt werden
    • muss mindestens 2 sein (ein Startwert, ein Endwert).
    • Wenn er über 3 ist muss der erste und der letzte Wert ident sein. Dies wird vom Netzgerät nicht vorab überprüft. Sind diese unterschiedlich, wird das Netzgerät am Ende des Zykluses feststellen, dass es nicht am richtigen Strom steht und in der Fehlermodus übergehen.
  • TOP:PC:RAMP_DATA:INDEX: Hier muss zuerst der Index gesetzt werden. Typischerweise wird dieser auf Null gestetzt.
  • TOP:PC:RAMP_DATA:DELAY: Mit diesem Parameter wird der Delay gesetzt. Dieser bestimmt wie lange es warten soll bis der nächste Wert angefahren wird.
  • TOP:PC:RAMP_DATA:NEXT_CURRENT. Mit diesem Parameter wird der Strom gesetzt und gleichzeitig der Index um 1 erhöht. Dieser Parameter kann nur gesetzt werden.
  • TOP:PC:RAMP_DATA:CURRENT: Mit diesem Parameter können die Ströme gesetzt oder gelesen werden.
  • TOP:PC_RAMP_DATA:N_CYCLES: Mit diesem Parameter wird bestimmt, wie oft ein Zyklus wiederholt wird. Folgende Werte sind zulässig:
    • 1: eine Wiederholung. Auch wenn nur zwei Stromwerte gesetzt werden muss N_CYCLES auf 1 gesetzt werden
    • eine positive Zahl. Dann wird der Zyklus für die gegebene Anzahl wiederholt.
    • -1: für unendlich viele Wiederholungen.
Typischerweise wird eine Rampe folgendermassen gesetzt:
  • Der Index wird auf 0 gesetzt.
  • Der Delay Wert wird gesetzt. Dieser ist typischerweise 0.
  • Mit "NEXT_CURRENT" wird der nächste Stromwert übergeben.
  • Am Ende muss der Index wieder auf 0 gesetzt werden!
  • Die Anzahl der Zyklen wird gesetzt.
Danach kann das Netzgerät aktiviert werden.

Netzgerät Aktivierung

Mit dem Parameter TOP:SERVER:REAL_TIME wird das Netzgerät aktiviert werden. Dieser kann folgende Werte annehmen:
  • 0: nicht aktiv
  • 1: Netzgerät soll den Zyklus ausführen
  • 2: Netzgerät hat den Zyklus beendet.
  • 3: Netzgerät führt momentan den Zyklus aus.
Vom Klienten können nur folgende Werte gesetzt werden:
  • Wenn der Wert auf 0 ist, kann er auf 1 gesetzt werden. Dann wird das Netzgerät aktiv
  • Wenn der Wert 2 ist, kann er auf 0 gesetzt werden. Er kann nicht direkt auf 1 gesetzt werden.

Parameter zur Interne Überprüfung des Zykluses

Diese Parameter werden beim Start des Netzgerätes automatisch gesetzt.

# Which current jump is accepted when a ramp is started (difference between
# requested and actual current)
TOP:PC:CURRENT_EPS_ABSOLUTE=200
TOP:PC:VOLTAGE_EPS_ABSOLUTE=1
# The current and voltage is read back. Now which error is to be tolerated on
# the ramp?
# Currently no reading on the ramp
TOP:PC:CURRENT_RAMP_EPS_ABS=2000
TOP:PC:VOLTAGE_RAMP_EPS_ABS=20
# This value is multiplied with the ramp rate (in Amps per second. Which error
# is to be acceptable then.
# 1e-3 means: 1 Ampere / 1 Volt per kA ramp rate
TOP:PC:CURRENT_RAMP_EPS_REL=10e-3
TOP:PC:VOLTAGE_RAMP_EPS_REL=1e-3

Parameter und Limits des Netzgeräts

Diese Parameter werden beim Start des Netzgeräts gesetzt. Hier ein Auszug des 20 kA Geräts.

Wenn der GAIN Wert umgesetzt wird, müssen alle Limits neu gesetzt werden. Der GAIN Wert wird nur intern in der Rechnung verwandt, und sollte daher nur verändert werden, wenn die Interna der Netzgeräte Steuerung bekannt sind. Die Limits werden intern in Registerwerte umgerechnet. Werden sie zurückgelesen erhält man den konvertierten Registerwert.

# Models an old anlog converter: 1 V corresponds to which Ampere value

TOP:PC:CURRENT:GAIN='2.2e3'

# The maximum current in A
TOP:PC:CURRENT:POSITIVE_LIMIT=17.1e3

# Minimum Current
TOP:PC:CURRENT:NEGATIVE_LIMIT=-100

# The maximum ramp rate up kA/s
TOP:PC:CURRENT:RAMP_RATE:POSITIVE_LIMIT=30e3

# The maximum ramp rate down kA/s
TOP:PC:CURRENT:RAMP_RATE_NEGATIVE_LIMIT=-30e3

# The voltage channel
# the gain of the power converter in V / V
# thus describes how many Volts the power converter will take as a feed forward
# for one volt output on the DAC

# The maximum voltage in V
TOP:PC:VOLTAGE:POSITIVE_LIMIT=20

# The minimum voltage in V
TOP:PC:VOLTAGE:NEGATIVE_LIMIT=-20

# The maximum positive ramp voltage V/s
TOP:PC:VOLTAGE:RAMP_RATE_POSITIVE_LIMIT=3000

# The maximum negative ramp voltage V/s
TOP:VOLTAGE:RAMP_RATE_NEGATIVE_LIMIT=-3000

Weitere Kommandos

Failure stop wird durch
TOP:PC:FAILURE_STOP

ausgelöst.

Kommandozeileninterface

Das Netzgerät kann von der Kommandozeile aus betrieben werden. Die wichtigeste Option ist die Hilfeoption. Sie wird aufgerufen mit:


#./power_converter.sh -h

Die wichtigsten Optionen sind hier aufgeführt:
  • -F: fahre im Fehlermode auf 0 Strom
  • -t : Zielwert (target value)
  • -d: Verzögerung (delay)
  • -c: Anzahl der Zyklen (muss explizit auf 1 gesetzt werden)
  • -A: Ramp Rate, die beim Hochfahren gewählt wird. Diese muss positiv sein.
  • -a: Ramp Rate, die beim Abfahren gewählt wird. Diee muss negativ sein.
Ein typisches Kommando sieht dann folgendermassen aus:


#./power_converter.sh -c10 -t 0 -d 0.05 -t 3e2 -d 0.25 -t 0 -A 2 -a -1

Dies bedeutet:
  • fahre 10 Zyklen
  • der Startwert sollte 0 sein
  • warte 50 ms bevor der nächste Wert angefahren wird
  • fahre auf 300 A
  • warte 25 ms bevor der nächste Wert angefahren wird
  • fahre auf 0
  • Aufwärtsrampe mit 2 A/s
  • Abfahrrampe mit -1 A/s

Spezifika für Netzgeräte mit SCU

Files im Development Cluster asl

Die Netzgeräte werden auch an den Testständen (in Zukunft) mit SCU' s angesteuert.Auf den Entwicklungsrechnern asl73x.acc.gsi.de sind die gemeinsamen Dateien unter

/common/export/powerconverter

zusammengefasst. Hier befinden sich
  • das spezifiische startup script "/common/export/powerconverter/powerconverter.sh"
  • die Programm Datein unter "bin/"
  • die verschiedene Scripts unter "scripts/"
Während des Booten wird die Datei

 /common/export/powerconverter/powerconverter.sh

durch die Datei

 /common/export/nfsinit/scuxl0063/60_powerconverter

aufgerufen.Diese Datei ist auf allen SCU's die an den Testständen für Netzgeräte verwendet werden in nfsinit anzulegen. Als Referenz kann die Datei für die scuxl0063 dienen. Diese findet man unter
 /common/export/nfsinit/scuxl0063/60_powerconverter

Zum jetzigen Zeitpunkt sind folgende Programme unter 'bin/' abgelegt:
  • powerconverter.bin:
  • scudisplay
Im Verzeichnis script liegen:
  • Dateien die auf die SCU kopiert werden
    • powerconverter_shutdown.sh: wird verwendet, dass das Netzgerät am scu display mitteilt, wenn es runter gefahren wird,
    • powerconverter_profile.sh: wird verwendet, damit das Netzgerät am Display den Rechner anzeigt, von dem ein (ssh) login stattgefunden hat
    • ash_history
  • clear_logs.py: erlaubt leere Logdateien, die das Programm powerconverter.bin angelegt hat zu löschen.

Löschen der Log dateien

Das Programm powerconverter.bin legt log Dateien an. Diese sind auf dem Cluster unter "/common/fesadata/scratch/$SCUNAME/log/" zu finden, wobei "$SCUNAME" mit dem host namen der jeweilgen SCU zu ersetzen sind. Dateien, die leer sind oder nur einen Platzhalter enthalten, können mittels des Kommandos
$python clear_logs.py

gelöscht werden. Warnung: diese Löschung erfolgt rekursiv über den gesammten Baum!

SCU Startup

Durch einschalten der SCU wird ein Startprozess aus gelöst. Dieser führt die Datei, die unter diesem Pfad auf dem Entwicklungscluster liegt
/common/export/powerconverter/powerconverter.sh

aus. Während dieses ausgeführt wird, ist dieses Verzeichnis auf der SCU unter

BASESRCDIR=/opt/powerconverter/

zugänglich. Dieses Verzeichnis wird, nachdem das Script "powerconverter.sh" ausgeführt wurde, wieder ausgehängt.

Diese führt dann folgende Aktionen aus:
  • ändert das root Passwort, um eine Fehlbedienung zu vermeiden,
  • legt einen zusätzlichen user mole mit dem zugehörigen Passwort an.
  • und kopiert verschiedene Dateien auf die SCU, die benötigt werden
    • das Netzgerät zu steueren
    • das DISPLAY vom script heraus anzusprechen.
    • Für den mole user wird ein vorgegebenes historyfile (scripts/ash_history) im "home" Verzeichnis abgelegt. Dies erlaubt dem user durch scrollen die typischen Kommandos des Netzgeräts abzurufen.
    • Ferner wird ein shut_down script installiert.

Dieses script führt auch die lokale Datei "powerconverter_inc.sh" aus. Diese muss zwei Variablen enthalten:
  1. den Typ
  2. und die Beschreibung
# include for startup ... must be installed in any SCU which is used for
# operating a power converter for testing the superconducting magnets
POWER_CONVERTER_TYPE=pc_20_kA_STF_1
POWER_CONVERTER_DESCRIPTION="20 kA Power converter at STF: No. 1"

Der Typ wird im skript /common/export/powerconverter/powerconverter.sh behandelt. In einer case structure wird untersucht, ob dieser Typ bekannt ist. Wenn ja wird eine entsprechende Meldung (/etc/motd) installiert, damit der user beim login sieht, auf welchem Netzgerät er arbeitet.

Am Ende der boot prozesses wird der Erfolg oder Misserfolg auch am SCU Display angezeigt.Während des boot prozesses werden verschiedene Statusmeldungen in der Datei
/var/log/powerconverter_startup_script.txt

abgelegt. Diese kann man durch Einloggen auf der SCU einsehen. Wird die SCU heruntergefahren, wird dies am SCU Display angezeigt. Jeder diese Statusmeldungen:
  1. löscht zuerst das SCU Display
  2. schreibt als erste Zeile das momentane Datum:
    1. aktueller Monat (numerisch) gefolgt von einem '/'
    2. aktueller Tag
    3. aktuelle Stunde gefolgt von einem ':'
    4. aktuelle Minute
  3. und dann die Statusmeldung.

SCU Einloggen

Die SCU bieten einen SSH login service an. Ein einloggender User wird nicht angezeigt, da dies das Netzgerät stören könnte.

Alle scu's werden im Beschleunigernetzwerk acc.gsi.de betrieben. Der Name der SCU ist auf der Einschubleiste vermerkt. Momentan sind die scuxl0064 im Netzgerät 1 und scuxl0117 im Netzgerät 2 der STF verbaut.

-- PierreSchnizer - 18 Feb 2016
Topic revision: r12 - 2016-11-24, PierreSchnizer
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding GSI Wiki? Send feedback | Legal notice | Privacy Policy (german)