{ "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": 1, "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": 2, "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": 46, "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.2\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.1\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": 145, "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.stepSD = 0.9*timing() \n", " print(\"stepSD = {:.4f}\".format(moveSD.stepSD))\n", " moveSD.counter += 1\n", "#\n", " pSD = posSD + step*moveSD.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", " moveMD.stepMD = 0.008\n", " print(\"stepMD = {:.4f}\".format(moveMD.stepMD))\n", " moveMD.counter += 1\n", "#\n", " pMD = posMD + step*moveMD.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", " moveAll.lockMD = -10\n", " moveAll.lockSD = -12\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", "# 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", " if (command == 1 and moveAll.locked == 1):\n", " moveAll.locked = 0\n", " print(\"unset lock\")\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": 146, "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 = -10, lockSD = -12\n", "countM = 0, countSMD = 0\n", "moveSD called.\n", "stepSD = 0.0090\n", "moveMD called.\n", "stepMD = 0.0080\n", "Time is 0.0000.\n", "Position MD 1.0420, position SD 1.0910, command 2, state 3\n", "Locked 0\n", "set countM = -10 and countS = -12\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.9140, position SD 0.8840, command 2, state 1\n", "Locked 1\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "Time is 0.6000.\n", "Position MD 1.0740, position SD 1.0640, command 1, state 3\n", "Locked 0\n", "Time is 0.8000.\n", "Position MD 1.2340, position SD 1.2440, command 1, state 3\n", "Locked 0\n", "Time is 1.0000.\n", "Position MD 1.3780, position SD 1.4060, command 2, state 3\n", "Locked 0\n", "Time is 1.2000.\n", "Position MD 1.2180, position SD 1.2260, command 2, state 3\n", "Locked 0\n", "Time is 1.4000.\n", "Position MD 1.0580, position SD 1.0460, command 2, state 3\n", "Locked 0\n", "set countM = -10 and countS = -12\n", "set lock\n", "Time is 1.6000.\n", "Position MD 0.9140, position SD 0.8840, command 2, state 1\n", "Locked 1\n", "Time is 1.8000.\n", "Position MD 0.9140, position SD 0.8840, command 2, state 1\n", "Locked 1\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "set lock\n", "unset lock\n", "Time is 2.0000.\n", "Position MD 1.0740, position SD 1.0640, command 1, state 3\n", "Locked 0\n", "Time is 2.2000.\n", "Position MD 1.2180, position SD 1.2260, command 2, state 3\n", "Locked 0\n", "Time is 2.4000.\n", "Position MD 1.0580, position SD 1.0460, command 2, state 3\n", "Locked 0\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", "# 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 < 2.2):\n", " command = 1\n", " else:\n", " command = 2\n", "# \n", " tArray[i] = t\n", " posSarray[i] = posMD\n", " posMarray[i] = posSD\n", " commandArray[i] = command\n", " stateArray[i] = state\n", "#\n", " state = stateAll(posMD,posSD)\n", " posM, posS = moveAll(command,posMD,posSD)\n", " posMD = posM\n", " posSD = posS\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": 147, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nkqRs/x9HHG6VQBQAlgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(tArray[:],commandArray[:],\"r\")\n", "plt.plot(tArray[:],stateArray[:],\"b\")\n", "plt.xlim([0,totalT])\n", "plt.ylim([-1,4])\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\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot master and slave door positions as a function of time" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n69atG91S5T/5RRf5hTdpks9bSDX/+AesXg3DhsUdiUh2qlsXLr0UrrvORwvTZTn3e+/Bgw/CjBle\nKVRS1pw5c5gzZ84O29avX1+qY2Nf/ZF4/LEB6BxCeDRp+yygTgihYFHo5GOr4snFauBiYGIIodCy\njim/+iPZhAneBnT5cvjVr+KO5idbtsBBB0GrVj73Q0Ti8eWX0KABDBiQ+k2D8nXv7stIly3zkRZJ\nK2mz+iOEsAVYCByfv83MLPH5ghKO3RZC+DwxB6Mr8FhFxlpp+vTxmd5TpsQdyY7uvBM++SS9yvmJ\nZKJ69bzo3LRpXoQu1X34odf6HzJECUWGiz2pSLga6Glm55jZIcDNQC38kQZmNsHMbs/f2cwOMrOz\nzayxmR1lZvcATYHM+GtXuzb06+fDhGsLTjWJybZt/ljmtNPgd7+LOxoRGTjQ5zhdf33ckZRs4kTY\ne2+fjC4ZLSWSihDCfXjhqzHAYuAw4MQQwrrELvWB5LWLVYGBwJv4pM1dgN+HED6ttKArWt++/tzx\n6qvjjsTde68PW+bkxB2JiADsuy/07AnXXOM1Y1LVihUwe7ZPQq9ZM+5opIKlRFIBEEK4MYTQMIRQ\nM4TQOoTwRtJr54cQjkv6fGkIoUUIYbcQwu4hhNNDCCle3KGM9tjDH4PceKMv34xTfr/lDh3An6mJ\nSCoYPNgTiptvjjuSok2e7JNLL7447kikEmgKbiobMMBnePftC8ceG18cH33kM7f//vf4YhCRnzvg\nAG82NnWq/+FONVu3eguC0aPhF7+IOxqpBEoqUtlee3lb4CuugLvvjjeWrl2hdVG1yEQkNkOHekGp\niy6KO5LCHXywj7pKVlBSkeqGDVNNCBEpWqNG8PnncUchAqTQnAoRERFJb0oqREREJBJKKkRERCQS\nSipEREQkEkoqREREJBJKKkRERCQSSipEREQkEkoqREREJBJKKkRERCQSSipEREQkEkoqREREJBJK\nKkRERCQSSipEREQkEkoqREREJBJKKkRERCQSSipEREQkEkoqREREJBJKKkRERCQSSipEREQkEkoq\nREREJBJKKkRERCQSSipEREQkEkoqREREJBJKKkRERCQSSipEREQkEkoqREREJBJKKkRERCQSSipE\nREQkEkoqREREJBJKKkRERCQSKZNUmFkfM/vYzH40s1fMrGUJ+59tZm+a2Q9m9rmZzTSzPSorXimf\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(tArray[:],posMarray[:],\"r\")\n", "plt.plot(tArray[:],posSarray[:],\"b\")\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)." ] } ], "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 }