{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Model CHEC lid control\n", "\n", "First import numpy, matplot lib, 3D plotting routines and ensure plots are produced inline." ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more complete documentation see [FirmwareOverview.pdf](FirmwareOverview.pdf).\n", "Doors are steered by the Safety Board (SB) via the Master (Large) Door (MD). Two bits are used for all **comands** issued by the SB:\n", "\n", "| Line A | Line B | Number | Action |\n", "|:------:|:------:|:------:|:------------|\n", "| 0 | 0 | 0 | Stop motion |\n", "| 0 | 1 | 1 | Open doors |\n", "| 1 | 0 | 2 | Close doors |\n", "| 1 | 1 | 3 | Stop motion |\n", "\n", "The MD passes commands to the Slave (Small) Door (SD) and returns state information to the SB. The same commands as issued by the SB are passed to the SD. Two bits used to describe the **state**:\n", "\n", "| Line A | Line B | Number | State |\n", "|:------:|:------:|:------:|:------------|\n", "| 0 | 0 | 0 | Error (may be temporary) |\n", "| 0 | 1 | 1 | Doors closed (could be at S1 or S2) |\n", "| 1 | 0 | 2 | Doors open |\n", "| 1 | 1 | 3 | One or both doors in unknown position (could be in motion) |\n", "\n", "In addition, Alternate 0 0 (0) and 1 0 (2) signals are sent as error warning after doors have closed to S1 but failed to seal (move to S2) correctly.\n", "\n", "There is a further connection, the Allow line, between the MB and the SB. This can take two values, 0 or 1. The meaning of these signals is dependent on the state of the doors and control system.\n", "\n", "In order to simulate the performance of this system, write subroutines representing each of the above elements which each only communicate in the same way as the SB, MD and SD.\n", "\n", "The position of the doors is defined as a number of degrees to make visualisation easier. Shut positions are shut2MD and shut2SD (about 0 degrees in both cases), positions at which sensors detect doors are shut1MD and shut1SD (about 1 degree), open positions are openMD and openSD.\n", "\n", "Need to define consistently the the time step used in the simulation (without passing it as an argument everywhere). This is treated as being the time the motor needs to make a step." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def timing():\n", " if not hasattr(timing,\"counter\"):\n", " timing.counter = 0 # counter doesn't exist, so initialize it\n", " timing.step = 0.01 # seconds\n", " print(\"timing called.\")\n", " print(\"step = {:.4f}.\".format(timing.step))\n", " return timing.step" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need routines that determine state from position for both SD and LD." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def stateSD(posSD):\n", " if not hasattr(stateSD,\"counter\"):\n", " stateSD.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"stateSD called.\")\n", " stateSD.shut1SD = 1.0\n", " stateSD.shut2SD = 0.9\n", " stateSD.openSD = 220.0\n", " stateSD.small = 0.1\n", " print(\"shut1SD = {:.4f}, shut2SD = {:.4f}, openSD = {:.4f}\".\\\n", " format(stateSD.shut1SD,stateSD.shut2SD,stateSD.openSD))\n", "#\n", " stateSD.counter += 1\n", "#\n", " if (posSD < stateSD.shut1SD):\n", " state = 1\n", " elif (posSD > stateSD.openSD):\n", " state = 2\n", " else:\n", " state = 3\n", " return state\n", "#\n", "def stateMD(posMD):\n", " if not hasattr(stateMD,\"counter\"):\n", " stateMD.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"stateMD called.\")\n", " stateMD.shut1MD = 1.0\n", " stateMD.shut2MD = 0.9\n", " stateMD.openMD = 220.0\n", " stateMD.small = 0.1\n", " print(\"shut1MD = {:.4f}, shut2MD = {:.4f}, openMD = {:.4f}.\".\\\n", " format(stateMD.shut1MD,stateMD.shut2MD,stateMD.openMD))\n", "#\n", " stateMD.counter += 1\n", "#\n", " if (posMD < stateMD.shut1MD):\n", " state = 1\n", " elif (posMD > stateMD.openMD):\n", " state = 2\n", " else:\n", " state = 3\n", " return state\n", "#\n", "def stateAll(posMD,posSD):\n", " if not hasattr(stateAll,\"counter\"):\n", " stateAll.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"stateAll called.\")\n", "#\n", " stateAll.counter += 1\n", "#\n", " stateSlave = stateSD(posSD)\n", " stateMaster = stateMD(posMD)\n", " if ((stateMaster == 1) and (stateSlave == 1)):\n", " state = 1\n", " elif ((stateMaster == 2) and (stateSlave == 2)):\n", " state = 2\n", " else:\n", " state = 3\n", " return state" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also need to be able to respond to commands." ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def moveSD(step,posSD):\n", " if not hasattr(moveSD,\"counter\"):\n", " moveSD.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"moveSD called.\")\n", " moveSD.counter += 1\n", "#\n", " pSD = posSD + step*moveAll.stepSD\n", " return pSD\n", "#\n", "def moveMD(step,posMD):\n", " if not hasattr(moveMD,\"counter\"):\n", " moveMD.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"moveMD called.\")\n", " \n", " moveMD.counter += 1\n", "#\n", " pMD = posMD + step*moveAll.stepMD\n", " return pMD\n", "#\n", "def moveAll(command,posMD,posSD):\n", " if not hasattr(moveAll,\"counter\"):\n", " moveAll.counter = 0 # counter doesn't exist, so initialize it\n", " print(\"moveAll called.\")\n", " moveAll.locked = 0\n", "# moves to smaller angle during locking, so these directions/steps are negative \n", " moveAll.lockDegMD = stateMD.shut2MD - stateMD.shut1MD\n", " moveAll.lockDegSD = stateSD.shut2SD - stateSD.shut1SD\n", " moveAll.stepMD = 0.8*timing()\n", " moveAll.stepSD = 0.9*timing()\n", " moveAll.lockMD = int(moveAll.lockDegMD/moveAll.stepMD)\n", " moveAll.lockSD = int(moveAll.lockDegSD/moveAll.stepSD)\n", " moveAll.countM = 0\n", " moveAll.countS = 0\n", " print(\"locked = {:1d}, lockMD = {:1d}, lockSD = {:1d}\".\\\n", " format(moveAll.locked,moveAll.lockMD,moveAll.lockSD))\n", " print(\"countM = {:1d}, countSMD = {:1d}\".\\\n", " format(moveAll.countM,moveAll.countS))\n", " print(\"stepMD = {:.4f}\".format(moveAll.stepMD))\n", "# how can the correct initial value of locked be determined?\n", " moveAll.counter += 1\n", "#\n", " stateM = stateMD(posMD)\n", " stateS = stateSD(posSD)\n", "#\n", "# stepM = 0\n", "#\n", "# master: if open requested, do this as long as the door isn't already open\n", " if (command == 1) and (stateM != 2):\n", " stepM = 1\n", "# if close requested, do this as long as the door isn't already at S1\n", " elif (command == 2) and (stateM != 1):\n", " stepM = -1\n", " else:\n", " stepM = 0\n", "#\n", "# stepS = 0\n", "#\n", "# slave: if open requested, do this as long as the door isn't already open\n", " if (command == 1) and (stateS != 2):\n", " stepS = 1\n", "# if close requested, do this as long as the door isn't already shut\n", " elif (command == 2) and (stateS != 1):\n", " stepS = -1\n", " else:\n", " stepS = 0\n", "#\n", "# both doors: if have reached S1 but not S2, set the number of steps that the doors must close\n", " if (command == 2 and stateM == 1 and stateS == 1 and \\\n", " moveAll.locked == 0 and moveAll.countS == 0 and moveAll.countM == 0):\n", " moveAll.countM = moveAll.lockMD\n", " moveAll.countS = moveAll.lockSD\n", " print(\"set countM = \",moveAll.countM,\" and countS = \",moveAll.countS)\n", "#\n", " if moveAll.locked == 0:\n", " if moveAll.countM < 0:\n", " moveAll.countM = moveAll.countM + 1\n", " stepM = - 1\n", "#\n", " if moveAll.countS < 0:\n", " moveAll.countS = moveAll.countS + 1\n", " stepS = - 1\n", "#\n", " if (moveAll.countM == 0 and moveAll.countS == 0 and stateM == 1 and stateS == 1):\n", " moveAll.locked = 1\n", " print(\"set lock\")\n", "#\n", "# need to ensure that if doors locked and start to open, open at least as far as S1 \n", "# (i.e. to point at which state switches from shut to unknown)\n", "#\n", " if (command == 1 and moveAll.locked == 1 and moveAll.countM == 0 and moveAll.countS == 0):\n", " moveAll.countM = -1*moveAll.lockMD \n", " moveAll.countS = -1*moveAll.lockSD\n", " print(\"set countM = \",moveAll.countM,\" and countS = \",moveAll.countS)\n", "#\n", " if (moveAll.locked == 1):\n", " if moveAll.countM > 0:\n", " moveAll.countM = moveAll.countM - 1\n", " stepM = 1\n", "#\n", " if moveAll.countS > 0:\n", " moveAll.countS = moveAll.countS - 1\n", " stepS = 1\n", "#\n", " if (moveAll.countS == 0 and moveAll.countM == 0 and stateM == 2 and stateS == 2):\n", " print(\"unset lock\")\n", " moveAll.locked == 0\n", "#\n", " pSD = moveSD(stepS,posSD)\n", " pMD = moveMD(stepM,posMD)\n", "#\n", " return pMD,pSD" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The top level is the SB, which passes commands to, and receives status information from, the LD. The SB must decide (at some time) to issue a command to open or close the doors, dependent on the status information it has." ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial position of MD 1.050, of SD 1.100. Initial state 3.\n", "Simulation time 2.4 secs, time step 0.0100 secs, number of steps 240.\n", "Interval at which printouts produced 0.2000 secs.\n", "Position MD 1.0500, position SD 1.1000, command 0, state 3\n", "moveAll called.\n", "locked = 0, lockMD = -12, lockSD = -11\n", "countM = 0, countSMD = 0\n", "stepMD = 0.0080\n", "moveSD called.\n", "moveMD called.\n", "Time is 0.0000.\n", "Position MD 1.0420, position SD 1.0910, command 2, state 3\n", "Locked 0\n", "set countM = -12 and countS = -11\n", "Time is 0.2000.\n", "Position MD 0.9220, position SD 0.9110, command 2, state 1\n", "Locked 0\n", "set lock\n", "Time is 0.4000.\n", "Position MD 0.8980, position SD 0.8930, command 2, state 1\n", "Locked 1\n", "set countM = 12 and countS = 11\n", "set countM = 12 and countS = 11\n", "Time is 0.6000.\n", "Position MD 1.0580, position SD 1.0730, command 1, state 3\n", "Locked 1\n", "set countM = 12 and countS = 11\n", "set countM = 12 and countS = 11\n", "Time is 0.8000.\n", "Position MD 1.2180, position SD 1.2530, command 1, state 3\n", "Locked 1\n", "set countM = 12 and countS = 11\n", "Time is 1.0000.\n", "Position MD 1.3780, position SD 1.4150, command 2, state 3\n", "Locked 1\n", "Time is 1.2000.\n", "Position MD 1.2180, position SD 1.2350, command 2, state 3\n", "Locked 1\n", "Time is 1.4000.\n", "Position MD 1.0580, position SD 1.0550, command 2, state 3\n", "Locked 1\n", "Time is 1.6000.\n", "Position MD 0.9940, position SD 0.9920, command 2, state 1\n", "Locked 1\n", "Time is 1.8000.\n", "Position MD 0.9940, position SD 0.9920, command 2, state 1\n", "Locked 1\n", "set countM = 12 and countS = 11\n", "Time is 2.0000.\n", "Position MD 1.0260, position SD 1.0100, command 2, state 3\n", "Locked 1\n", "Time is 2.2000.\n", "Position MD 0.9940, position SD 0.9920, command 2, state 1\n", "Locked 1\n", "Time is 2.4000.\n", "Position MD 0.9940, position SD 0.9920, command 2, state 1\n", "Locked 1\n" ] } ], "source": [ "#\n", "# Pick initial position of doors\n", "posMD = 1.05\n", "posSD = 1.1\n", "state = stateAll(posMD,posSD)\n", "#\n", "print(\"Initial position of MD {:.3f}, of SD {:.3f}. Initial state {:2d}.\".\\\n", " format(posMD,posSD,state))\n", "#\n", "# Set up time loop\n", "deltaT = timing() # seconds\n", "totalT = 2.4 # seconds\n", "nTsteps = int(totalT/deltaT)\n", "tIntSecs = 0.2 # second\n", "tIntSteps = int(tIntSecs/deltaT)\n", "print(\"Simulation time {:.1f} secs, time step {:.4f} secs, number of steps {:4d}.\".\\\n", " format(totalT,deltaT,nTsteps))\n", "print(\"Interval at which printouts produced {:.4f} secs.\".format(tIntSecs))\n", "#\n", "# arrays for plots\n", "tArray = np.zeros(nTsteps+1)\n", "posMarray = np.zeros(nTsteps+1)\n", "posSarray = np.zeros(nTsteps+1)\n", "commandArray = np.zeros(nTsteps+1)\n", "stateArray = np.zeros(nTsteps+1)\n", "stateMarray = np.zeros(nTsteps+1)\n", "stateSarray = np.zeros(nTsteps+1)\n", "lockedArray = np.zeros(nTsteps+1)\n", "countMarray = np.zeros(nTsteps+1)\n", "countSarray = np.zeros(nTsteps+1)\n", "# Go!\n", "command = 0\n", "state = stateAll(posMD,posSD)\n", "print(\"Position MD {:.4f}, position SD {:.4f}, command {:3d}, state {:3d}\".\\\n", " format(posMD,posSD,command,state))\n", "#\n", "for i in range(0,nTsteps+1):\n", " t = i*deltaT\n", " if (t > 0.0) and (t < 0.4):\n", " command = 2\n", " elif (t > 0.4 and t < 1.0):\n", " command = 1\n", " elif (t > 1.0 and t < 1.8):\n", " command = 2\n", " elif (t >1.8 and t < 1.85):\n", " command = 1\n", " else:\n", " command = 2\n", "#\n", " posM, posS = moveAll(command,posMD,posSD)\n", "#\n", " tArray[i] = t\n", " posSarray[i] = posMD\n", " posMarray[i] = posSD\n", " commandArray[i] = command\n", " stateArray[i] = state\n", " stateMarray[i] = stateMD(posMD)\n", " stateSarray[i] = stateSD(posSD)\n", " lockedArray[i] = moveAll.locked\n", " countMarray[i] = moveAll.countM\n", " countSarray[i] = moveAll.countS\n", " state = stateAll(posMD,posSD)\n", "#\n", " posMD = posM\n", " posSD = posS\n", "#\n", " if (i%tIntSteps == 0):\n", " print(\"Time is {:.4f}.\".format(t))\n", " print(\"Position MD {:.4f}, position SD {:.4f}, command {:3d}, state {:3d}\".\\\n", " format(posMD,posSD,command,state))\n", " print(\"Locked {:2d}\".format(moveAll.locked))" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Commands are 0 = stop, 1 = open, 2 = close, 3 = stop.\n", "States are 0 = error, 1 = closed, 2 = open, 3 = unknown.\n" ] }, { "ename": "PermissionError", "evalue": "[Errno 13] Permission denied: 'FigCommandStatus.pdf'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mPermissionError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_xlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Time (s)\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Value\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"FigCommandStatus.pdf\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32mC:\\Users\\green\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 694\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 695\u001b[0m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgcf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m--> 696\u001b[0;31m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 697\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw_idle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# need this if 'transparent=True' to reset colors\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 698\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0;32mC:\\Users\\green\\Anaconda3\\lib\\site-packages\\matplotlib\\figure.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1561\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_frameon\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mframeon\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 1562\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1563\u001b[0;31m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1564\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 1565\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mframeon\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0;32mC:\\Users\\green\\Anaconda3\\lib\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)\u001b[0m\n\u001b[1;32m 2230\u001b[0m \u001b[0morientation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morientation\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 2231\u001b[0m \u001b[0mbbox_inches_restore\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0m_bbox_inches_restore\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2232\u001b[0;31m **kwargs)\n\u001b[0m\u001b[1;32m 2233\u001b[0m \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 2234\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mbbox_inches\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mrestore_bbox\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0;32mC:\\Users\\green\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_pdf.py\u001b[0m in \u001b[0;36mprint_pdf\u001b[0;34m(self, filename, **kwargs)\u001b[0m\n\u001b[1;32m 2526\u001b[0m \u001b[0mfile\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 2527\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2528\u001b[0;31m \u001b[0mfile\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPdfFile\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2529\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 2530\u001b[0m \u001b[0mfile\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnewPage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwidth\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0;32mC:\\Users\\green\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_pdf.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, filename)\u001b[0m\n\u001b[1;32m 420\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtell_base\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 421\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_string_like\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m--> 422\u001b[0;31m \u001b[0mfh\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'wb'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 423\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mis_writable_file_like\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m 424\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0;31mPermissionError\u001b[0m: [Errno 13] Permission denied: 'FigCommandStatus.pdf'" ] }, { "data": { "image/png": "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\nVPkuKtflM3gjaI/gfaCWn/MW4Gt4V/bsAa7Fu2y2Urt9Eu+1eRBvhCCPN0LwJeBC5+cZ1RDV3234\nX5xzt+FdXv1p4CG812k3Xnv/G97fWJS/h/Qgc67uvCsRERGRpvTcCId5Syhfb96yySUze1HZ/deE\nlyP2b9/tVH1FRESkBwMOvEurxoE3Un0o9Xt4Gfwj/m1te6omIiIilfTcVSrOue/jzc1Tdolc2EHn\n3Pb21UpERERm04sjHPW42N+p8F4z+5SZLe50hUREROaynhvhqMP3gG/gXdK4Am/Toe+a2flOGbIi\nIiId0XcBh3Pua6H/3mVmd+BdpnUx3nXoh/GXEn4u8DDeduMiIiJSn/l4i7zd4JzbWe2kvgs4yjnn\nNpnZDuAUqgQceMHGl9tXKxERkb7zamZZrbnvAw4zOw5vV8fNs5z2MMCXvvQlzjzzzFlOkzhdccUV\nXH311Z2uxpym16Dz9Bp0ltq/cffccw+vec1rwP8srabnAg4zG8IbrQiuUDnZzEbxVg/chbck7zeA\nLf55/4S3udANsxR7AODMM89k9erVMdVcalm4cKHav8P0GnSeXoPOUvu3ZNaUhJ4LOPA2+fkRh5bd\nvco/fh3e2hxn4y1nvQh4Ai/QeJe/hLOIiIh0QM8FHM65nzD75bzPa1ddREREpD79ug6HiIiIdBEF\nHNI11q7VCvSdpteg8/QadJbaPz7aLRYws9XA+vXr1ytZSEREpAFjY2OsWbMGYI1zbqzaeRrhEBER\nkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR\n2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHY\nKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp\n4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeAQERGR2CngEBERkdgp4BAREZHYKeCQluxfv587\nXnIHruQiL7s4UWTDb2/gwCMHIi8b4P4/u58d1++IpewnPvcEm96zKZay42xzkXaJu39L91HAIS3Z\nv34/O7+1k6mHpiIv++DjB9n9w93s+sGuyMsG2PGtHWz76rZYyt5z4x42f3ZzLGXH2eYi7RJ3/5bu\n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\nKHHf5CQr3QC5J3IKOEREZM5RwBGzdMm4ezhHCTj1MW9nWAUcIiIy1yjgiFnKwZb5RRLACeMFEkMJ\nBlYMdLpaIiIibdVTAYeZvcPMfm5mE2a2q8o5x5vZ//jnbDGzfzazjv2eSeeNapwxOEjhtkmGR4ex\nhHWqOiIiIh3RUwEHkAa+BvxbpTv9wOK7eLvgnge8Dng98L421e8waW+jWCWMiojInNZTAYdz7r3O\nuY8Bd1Q55bnAGcCrnXN3OOduAN4JvMnMUu2qZ1jKH+E4e94Qk/dOKuAQEZE5qacCjjqcB9zhnNsR\nOnYDsBB4cicqlPIWFuX07UkoKWFURETmpn4LOEaArWXHtobua7u0P8Jx8t0lSMDQyqFOVENERKSj\nOh5wmNmVZlaa5VY0s9M6Xc9mpZ2xdCLB/PUHGDxjkORAstNVEhERabuO5DWU+TBwTY1zNtZZ1hbg\n3LJjy0L3zeqKK65g4cKFM46tXbuWtWvX1vn0h3vF2Dwu3TGghFEREel569atY926dTOO7d27t67H\ndjzgcM7tBHZGVNwvgHeY2ZJQHsdzgL3A3bUefPXVV7N69eqIquJZsSfFafkkuzbsYslLlkRatoiI\nSDtV+hI+NjbGmjVraj624wFHI8zseGAxcCKQNLNR/64HnXMTwA/wAosvmtnbgGOA9wOfcM7lO1Ln\ntDF53ySliZJGOEREZM7qqYADbz2N14b+P+b/ewnwU+dcycxeiLdOx83ABHAt8O52VjLMUsbkPZMA\nDI8q4BARkbmppwIO59wfAX9U45zHgBe2p0a1JdIJcJBZniGzNNPp6oiIiHREx69S6XeW0oZtIiIi\nCjhipoBDREREAUfsLK2AQ0RERAFHzDTCISIiooAjdpYyEkMJBlYMdLoqIiIiHdNTV6n0ooUXLSQx\nmMAS1umqiIiIdIwCjpgte+Uylr1yWe0TRURE+pimVERERCR2CjhEREQkdgo4REREJHYKOERERCR2\nCjhEREQkdgo4REREJHYKOERERCR2CjhEREQkdgo4REREJHYKOERERCR2CjhEREQkdgo4REREJHYK\nOERERCR2CjhEREQkdgo4REREJHYKOERERCR2CjhEREQkdgo4REREJHYKOERERCR2CjhEREQkdgo4\nREREJHYKOERERCR2CjhEREQkdgo4REREJHYKOERERCR2CjhEREQkdgo4REREJHYKOERERCR2CjhE\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"Commands are 0 = stop, 1 = open, 2 = close, 3 = stop.\")\n", "print(\"States are 0 = error, 1 = closed, 2 = open, 3 = unknown.\")\n", "plt.plot(tArray[:],commandArray[:],\"r\")\n", "#plt.plot(tArray[:],stateArray[:],\"b\")\n", "plt.plot(tArray[:],stateMarray[:],\"b\")\n", "plt.plot(tArray[:],stateSarray[:],\"g\")\n", "plt.plot(tArray[:],lockedArray[:],\"y\")\n", "plt.plot(tArray[:],countMarray[:],\"m\")\n", "plt.plot(tArray[:],countSarray[:],\"c\")\n", "plt.xlim([0,totalT])\n", "plt.ylim([-15,15])\n", "ax = plt.gca()\n", "ax.set_title(\"Command and status lines\", size = 12, weight = \"bold\")\n", "ax.set_xlabel(\"Time (s)\")\n", "ax.set_ylabel(\"Value\")\n", "plt.savefig(\"FigCommandStatus.pdf\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot master and slave door positions as a function of time" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sh1Marray =stateMD.shut1MD*np.ones(nTsteps+1)\n", "sh2Marray =stateMD.shut2MD*np.ones(nTsteps+1)\n", "sh1Sarray =stateSD.shut1SD*np.ones(nTsteps+1)\n", "sh2Sarray =stateSD.shut2SD*np.ones(nTsteps+1)\n", "plt.plot(tArray[:],posMarray[:],\"r\")\n", "plt.plot(tArray[:],posSarray[:],\"b\")\n", "plt.plot(np.linspace(0.0,totalT,5),stateMD.shut1MD*np.ones(5),\"r.\")\n", "plt.plot(np.linspace(0.0,totalT,10),stateMD.shut2MD*np.ones(10),\"ro\")\n", "plt.plot(np.linspace(0.0,totalT,5),stateSD.shut1SD*np.ones(5),\"b.\")\n", "plt.plot(np.linspace(0.0,totalT,10),stateSD.shut2SD*np.ones(10),\"bo\")\n", "plt.xlim([0,totalT])\n", "#plt.ylim([-1,4])\n", "ax = plt.gca()\n", "ax.set_title(\"Master and slave positions\", size = 12, weight = \"bold\")\n", "ax.set_xlabel(\"Time (s)\")\n", "ax.set_ylabel(\"Position (deg)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Next steps \n", "Check that resetting of lock when doors open is correct.\n", "Check what happens when a command to close is given before the doors have opened (e.g. before they have got past S1).\n", "Make sure that guarding against this doesn't stop movement to S2 after having reached S1!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }