diff --git a/Jupyter_Pages/DTS_LL_Thermal_Tests.ipynb b/Jupyter_Pages/DTS_LL_Thermal_Tests.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ac0c542fbf967bee4a13c3e78abee4d9ea493d6d --- /dev/null +++ b/Jupyter_Pages/DTS_LL_Thermal_Tests.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e73610a1", + "metadata": {}, + "source": [ + "# DTS-Lab-Light Thermal Testing\n", + "Measurements done by: Jeroen and Gijs<br>\n", + "## Goal of the measurement\n", + "Verify that the DTS can run at summer temperatures\n", + "## Measurement setup\n", + "- 1x UniBoard2c<br>\n", + "- 1x APSCT<br>\n", + "- 1x APSPU<br>\n", + "- 4x RCU2L_QM<br>\n", + "- 28x RCU2_Heater<br>" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "c2ace952", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import numpy as np\n", + "import pylab as pl" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "875c84fc", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ambient temperature in °C:22.5\n" + ] + } + ], + "source": [ + "ambient_temperature = input(\"Ambient temperature in °C:\")" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "dd54c19e", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "warning, expected RCU device to be in on state, is: FAULT\n", + "warning, expected APSCT device to be in on state, is: FAULT\n", + "warning, expected APSPU device to be in on state, is: FAULT\n" + ] + }, + { + "ename": "CommunicationFailed", + "evalue": "DevFailed[\nDevError[\n desc = TRANSIENT CORBA system exception: TRANSIENT_CallTimedout\n origin = Connection::command_inout()\n reason = API_CorbaException\nseverity = ERR]\n\nDevError[\n desc = Timeout (3000 mS) exceeded on device lts/unb2/1, command initialise\n origin = Connection::command_inout()\n reason = API_DeviceTimedOut\nseverity = ERR]\n]", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mCommunicationFailed\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_117/3795550939.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0mstate\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munb2c\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mstate\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"OFF\"\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mstate\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"FAULT\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 60\u001b[0;31m \u001b[0munb2c\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minitialise\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 61\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0mstate\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munb2c\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tango/device_proxy.py\u001b[0m in \u001b[0;36mf\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 273\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 275\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcommand_inout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 276\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 277\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdoc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tango/green.py\u001b[0m in \u001b[0;36mgreener\u001b[0;34m(obj, *args, **kwargs)\u001b[0m\n\u001b[1;32m 193\u001b[0m \u001b[0mgreen_mode\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0maccess\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'green_mode'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 194\u001b[0m \u001b[0mexecutor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_object_executor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgreen_mode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 195\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mexecutor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwait\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 196\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 197\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mgreener\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tango/green.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fn, args, kwargs, wait, timeout)\u001b[0m\n\u001b[1;32m 107\u001b[0m \u001b[0;31m# Sychronous (no delegation)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masynchronous\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0min_executor_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 109\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 110\u001b[0m \u001b[0;31m# Asynchronous delegation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0maccessor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdelegate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tango/connection.py\u001b[0m in \u001b[0;36m__Connection__command_inout\u001b[0;34m(self, name, *args, **kwds)\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m*\u001b[0m \u001b[0mparameter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 107\u001b[0m \"\"\"\n\u001b[0;32m--> 108\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mConnection\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcommand_inout_raw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 109\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDeviceData\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/tango/connection.py\u001b[0m in \u001b[0;36m__Connection__command_inout_raw\u001b[0;34m(self, cmd_name, cmd_param)\u001b[0m\n\u001b[1;32m 135\u001b[0m \"\"\"\n\u001b[1;32m 136\u001b[0m \u001b[0mparam\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m__get_command_inout_param\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmd_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmd_param\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 137\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__command_inout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmd_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparam\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 138\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mCommunicationFailed\u001b[0m: DevFailed[\nDevError[\n desc = TRANSIENT CORBA system exception: TRANSIENT_CallTimedout\n origin = Connection::command_inout()\n reason = API_CorbaException\nseverity = ERR]\n\nDevError[\n desc = Timeout (3000 mS) exceeded on device lts/unb2/1, command initialise\n origin = Connection::command_inout()\n reason = API_DeviceTimedOut\nseverity = ERR]\n]" + ] + } + ], + "source": [ + "#\n", + "# Open de OPC-UA devices\n", + "#\n", + "rcu=DeviceProxy(\"LTS/RECV/1\")\n", + "apsct=DeviceProxy(\"LTS/APSCT/1\")\n", + "apspu=DeviceProxy(\"LTS/APSPU/1\")\n", + "unb2c=DeviceProxy(\"LTS/UNB2/1\")\n", + "aps_dev=[]\n", + "aps_dev.append(DeviceProxy(\"LTS/UNB2/1\"))\n", + "#\n", + "# Check RCU interface\n", + "#\n", + "state = str(rcu.state())\n", + "if state == \"OFF\":\n", + " rcu.initialise()\n", + " time.sleep(1)\n", + "state = str(rcu.state())\n", + "if state == \"STANDBY\":\n", + " rcu.on()\n", + "state = str(rcu.state())\n", + "if state == \"ON\":\n", + " print(\"RCU device is now in on state\")\n", + "else:\n", + " print(\"warning, expected RCU device to be in on state, is: \", state)\n", + "#\n", + "# Check APSCT interface\n", + "#\n", + "state = str(apsct.state())\n", + "if state == \"OFF\":\n", + " apsct.initialise()\n", + " time.sleep(1)\n", + "state = str(apsct.state())\n", + "if state == \"STANDBY\":\n", + " rcu.on()\n", + "state = str(apsct.state())\n", + "if state == \"ON\":\n", + " print(\"APSCT device is now in on state\")\n", + "else:\n", + " print(\"warning, expected APSCT device to be in on state, is: \", state)\n", + "#\n", + "# Check APSPU interface\n", + "#\n", + "state = str(apspu.state())\n", + "if state == \"OFF\":\n", + " apspu.initialise()\n", + " time.sleep(1)\n", + "state = str(apspu.state())\n", + "if state == \"STANDBY\":\n", + " rcu.on()\n", + "state = str(apspu.state())\n", + "if state == \"ON\":\n", + " print(\"APSPU device is now in on state\")\n", + "else:\n", + " print(\"warning, expected APSPU device to be in on state, is: \", state)\n", + "#\n", + "# Check is UNB2_HW device is running or else start it up\n", + "#\n", + "state = str(unb2c.state())\n", + "if state == \"OFF\" or state == \"FAULT\":\n", + " unb2c.initialise()\n", + " time.sleep(1)\n", + "state = str(unb2c.state())\n", + "if state == \"STANDBY\":\n", + " unb2c.on()\n", + "state = str(unb2c.state())\n", + "if state == \"ON\":\n", + " print(\"UNB2_HW_MON is now in on state\")\n", + "else:\n", + " print(\"warning, expected device to be in on state, is: \", state)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "2029f51f", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FPGA power consumption\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|----------|\n", + "| BRD nr. | Node nr. | Core pwr | ERAM pwr | TrRx pwr | TrTx pwr | TxHx pwr | IO pwr | Tot.FPGA |\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|----------|\n", + "| 0 | 0 | 5.7 W | 0.1 W | 0.4 W | 0.1 W | 1.1 W | 0.3 W | 7.6 W |\n", + "| 0 | 1 | 1.8 W | 0.2 W | 0.3 W | 0.1 W | 1.2 W | 0.3 W | 3.7 W |\n", + "| 0 | 2 | 3.6 W | 0.1 W | 0.4 W | 73091088.0 W | 1.6 W | 0.4 W | 73091094.1 W |\n", + "| 0 | 3 | 2.8 W | 0.1 W | 0.4 W | 0.1 W | 1.3 W | 0.2 W | 4.8 W |\n", + "| 1 | 0 | nan W | nan W | nan W | nan W | nan W | nan W | nan W |\n", + "| 1 | 1 | nan W | nan W | nan W | nan W | nan W | nan W | nan W |\n", + "| 1 | 2 | nan W | nan W | nan W | nan W | nan W | nan W | nan W |\n", + "| 1 | 3 | nan W | nan W | nan W | nan W | nan W | nan W | nan W |\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|----------|\n", + "\n", + "Board power consumption\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|\n", + "| BRD nr. | QSFP N01 | QSFP N23 |Switch 1v2|Switch PHY| clk pwr | FPGAs pwr| Tot. BRD |\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|\n", + "| 0 | 5.18 W | 4.19 W | 2.11 W | 0.52 W | 2.21 W | nan W | 44.94 W |\n", + "| 1 | nan W | nan W | nan W | nan W | nan W | nan W | nan W |\n", + "|---------|----------|----------|----------|----------|----------|----------|----------|\n", + "\n", + "APS power consumption\n", + "|---------|----------|\n", + "| BRD | Tot. BRD |\n", + "|---------|----------|\n", + "|32x RCU2 | 82.09 W |\n", + "| UNB2_0 | 44.94 W |\n", + "| UNB2_1 | nan W |\n", + "|---------|----------|\n" + ] + } + ], + "source": [ + "#\n", + "# Power consumption of the RCU's\n", + "#\n", + "if 1:\n", + " print(\"FPGA power consumption\")\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|----------|\")\n", + " print(\"| BRD nr. | Node nr. | Core pwr | ERAM pwr | TrRx pwr | TrTx pwr | TxHx pwr | IO pwr | Tot.FPGA |\")\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|----------|\")\n", + " for brd_cnt in range(2):\n", + " fpgas_pwr = np.zeros(2)\n", + " for node_cnt in range(4):\n", + " stri = \"| {} | {} |\".format(brd_cnt, node_cnt)\n", + " core_pwr = 0.95 * unb2c.UNB2_FPGA_POL_CORE_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(core_pwr)\n", + " eram_pwr = unb2c.UNB2_FPGA_POL_ERAM_VOUT_R[brd_cnt][node_cnt]*unb2c.UNB2_FPGA_POL_ERAM_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(eram_pwr)\n", + " rxgxb_pwr = unb2c.UNB2_FPGA_POL_RXGXB_VOUT_R[brd_cnt][node_cnt]*unb2c.UNB2_FPGA_POL_RXGXB_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(rxgxb_pwr)\n", + " txgxb_pwr = unb2c.UNB2_FPGA_POL_TXGXB_VOUT_R[brd_cnt][node_cnt]*unb2c.UNB2_FPGA_POL_TXGXB_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(txgxb_pwr)\n", + " hgxb_pwre = unb2c.UNB2_FPGA_POL_HGXB_VOUT_R[brd_cnt][node_cnt]*unb2c.UNB2_FPGA_POL_HGXB_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(hgxb_pwre)\n", + " pgm_pwr = unb2c.UNB2_FPGA_POL_PGM_VOUT_R[brd_cnt][node_cnt]*unb2c.UNB2_FPGA_POL_PGM_IOUT_R[brd_cnt][node_cnt]\n", + " stri +=\" {:4.1f} W |\".format(pgm_pwr)\n", + " tot_fpga = core_pwr + eram_pwr + rxgxb_pwr + txgxb_pwr + hgxb_pwre + pgm_pwr\n", + " fpgas_pwr += tot_fpga\n", + " stri +=\" {:4.1f} W |\".format(tot_fpga)\n", + " print(stri)\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|----------|\\n\")\n", + " #\n", + " # Board Powers\n", + " #\n", + " print(\"Board power consumption\")\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|\")\n", + " print(\"| BRD nr. | QSFP N01 | QSFP N23 |Switch 1v2|Switch PHY| clk pwr | FPGAs pwr| Tot. BRD |\")\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|\")\n", + " brd_input=[]\n", + " for brd_cnt in range(2):\n", + " stri = \"| {} |\".format(brd_cnt)\n", + " qsfp_n01 = unb2c.UNB2_POL_QSFP_N01_VOUT_R[brd_cnt] * unb2c.UNB2_POL_QSFP_N01_IOUT_R[brd_cnt]\n", + " stri +=\" {:5.2f} W |\".format(qsfp_n01)\n", + " qsfp_n23 = unb2c.UNB2_POL_QSFP_N23_VOUT_R[brd_cnt] * unb2c.UNB2_POL_QSFP_N23_IOUT_R[brd_cnt]\n", + " stri +=\" {:5.2f} W |\".format(qsfp_n23)\n", + " sw_1v2 = unb2c.UNB2_POL_SWITCH_1V2_VOUT_R[brd_cnt] * unb2c.UNB2_POL_SWITCH_1V2_IOUT_R[brd_cnt]\n", + " stri +=\" {:5.2f} W |\".format(sw_1v2)\n", + " sw_phy = unb2c.UNB2_POL_SWITCH_PHY_VOUT_R[brd_cnt] * unb2c.UNB2_POL_SWITCH_PHY_IOUT_R[brd_cnt]\n", + " stri +=\" {:5.2f} W |\".format(sw_phy)\n", + " clk = unb2c.UNB2_POL_CLOCK_VOUT_R[brd_cnt] * unb2c.UNB2_POL_CLOCK_IOUT_R[brd_cnt]\n", + " stri +=\" {:5.2f} W |\".format(clk)\n", + " stri +=\" {:5.2f} W |\".format(fpgas_pwr[brd_cnt])\n", + " brd_input.append(unb2c.UNB2_DC_DC_48V_12V_VOUT_R[brd_cnt] * unb2c.UNB2_DC_DC_48V_12V_IOUT_R[brd_cnt])\n", + " stri +=\" {:6.2f} W |\".format(brd_input[-1])\n", + " print(stri)\n", + " print(\"|---------|----------|----------|----------|----------|----------|----------|----------|\")\n", + "rcu_ana_pwr = apspu.APSPU_RCU2A_IOUT_R*apspu.APSPU_RCU2A_VOUT_R\n", + "rcu_dig_pwr = apspu.APSPU_RCU2D_IOUT_R*apspu.APSPU_RCU2D_VOUT_R\n", + "print(\"\\nAPS power consumption\")\n", + "print(\"|---------|----------|\")\n", + "print(\"| BRD | Tot. BRD |\")\n", + "print(\"|---------|----------|\")\n", + "stri= \"|32x RCU2 | {:6.2f} W |\".format(rcu_ana_pwr + rcu_dig_pwr)\n", + "print(stri)\n", + "for brd_cnt in range(2):\n", + " stri= \"| UNB2_{} | {:6.2f} W |\".format(brd_cnt, brd_input[brd_cnt])\n", + " print(stri)\n", + "print(\"|---------|----------|\")\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "id": "51d0443c", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hottest UniBoard2 device: Board 0 UNB2_POL_SWITCH_PHY_TEMP_R Temperature 42.6°C, above ambient +21.0\n", + "Hottest RCU2 device: Board 3 RCU_TEMP_R Temperature 31.8°C, above ambient +10.2\n", + "Hottest apspu device: APSPU_RCU2D_TEMP_R Temperature 28.2°C, above ambient +6.6\n", + "Hottest apsct device: APSCT_TEMP_R Temperature 24.4°C, above ambient +2.8\n" + ] + } + ], + "source": [ + "max_temp=0\n", + "attr_names = unb2c.get_attribute_list()\n", + "for i in attr_names:\n", + " if \"TEMP\" in i:\n", + " exec(\"value = unb2c.{}\".format(i))\n", + " for brd_cnt in range(value.shape[0]):\n", + " if (len(value.shape) > 1):\n", + " for node_cnt in range(value.shape[1]):\n", + " if (max_temp < value[brd_cnt][node_cnt]):\n", + " stri = \"Hottest UniBoard2 device: Board {} Item {} {} Temperature {:3.1f}°C, above ambient +{:3.1f}\".format(brd_cnt, node_cnt, i, value[brd_cnt][node_cnt], value[brd_cnt][node_cnt]-float(ambient_temperature))\n", + " else:\n", + " if (max_temp < value[brd_cnt]):\n", + " stri = \"Hottest UniBoard2 device: Board {} {} Temperature {:3.1f}°C, above ambient +{:3.1f}\".format(brd_cnt, i, value[brd_cnt], value[brd_cnt]-float(ambient_temperature))\n", + "print(stri)\n", + "\n", + "max_temp=0\n", + "attr_names = recv.get_attribute_list()\n", + "for i in attr_names:\n", + " if \"TEMP\" in i:\n", + " exec(\"value = recv.{}\".format(i))\n", + " for brd_cnt in range(value.shape[0]):\n", + " if (max_temp < value[brd_cnt]):\n", + " stri = \"Hottest RCU2 device: Board {} {} Temperature {:3.1f}°C, above ambient +{:3.1f}\".format(brd_cnt, i, value[brd_cnt], value[brd_cnt]-float(ambient_temperature))\n", + "print(stri)\n", + "\n", + "max_temp=0\n", + "attr_names = apspu.get_attribute_list()\n", + "for i in attr_names:\n", + " if \"TEMP\" in i:\n", + " exec(\"value = apspu.{}\".format(i))\n", + " stri = \"Hottest apspu device: {} Temperature {:3.1f}°C, above ambient +{:3.1f}\".format(i, value, value-float(ambient_temperature))\n", + "print(stri)\n", + "\n", + "max_temp=0\n", + "attr_names = apsct.get_attribute_list()\n", + "for i in attr_names:\n", + " if \"TEMP\" in i:\n", + " exec(\"value = apsct.{}\".format(i))\n", + " stri = \"Hottest apsct device: {} Temperature {:3.1f}°C, above ambient +{:3.1f}\".format(i, value, value-float(ambient_temperature))\n", + "print(stri)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f18e187", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 126, + "id": "d4f54175", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Atttibutes of pcc are: \n", + "*********\n", + "version_R\n", + "opcua_missing_attributes_R\n", + "APSPUTR_I2C_error_R\n", + "APSPUTR_monitor_rate_RW\n", + "APSPUTR_translator_busy_R\n", + "APSPU_FAN1_RPM_R\n", + "APSPU_FAN2_RPM_R\n", + "APSPU_FAN3_RPM_R\n", + "APSPU_LBA_IOUT_R\n", + "APSPU_LBA_TEMP_R\n", + "APSPU_LBA_VOUT_R\n", + "APSPU_PCB_ID_R\n", + "APSPU_PCB_number_R\n", + "APSPU_PCB_version_R\n", + "APSPU_RCU2A_IOUT_R\n", + "APSPU_RCU2A_TEMP_R\n", + "APSPU_RCU2A_VOUT_R\n", + "APSPU_RCU2D_IOUT_R\n", + "APSPU_RCU2D_TEMP_R\n", + "APSPU_RCU2D_VOUT_R\n", + "State\n", + "Status\n", + "*********\n", + "\n" + ] + } + ], + "source": [ + "#\n", + "# Print the available attributes\n", + "#\n", + "print(\"Atttibutes of pcc are: \\n*********\")\n", + "attr_names = apspu.get_attribute_list()\n", + "for i in attr_names:\n", + " print(i)\n", + "# exec(\"value = print(i, d.{})\".format(i))\n", + "print(\"*********\\n\") \n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "StationControl", + "language": "python", + "name": "stationcontrol" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}