diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..43687c1dbda705d7a266947b654eee4553e4aaab
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+CVS
+*.pyc
+core
+.project
+.pydevproject
+.idea
+
diff --git a/FRTND_E/FRTND_E.py b/FRTND_E/FRTND_E.py
new file mode 100755
index 0000000000000000000000000000000000000000..237b843434f1263eb022528c462c585db20f723d
--- /dev/null
+++ b/FRTND_E/FRTND_E.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+# $Author: claudio $
+#
+# $Name:  $
+#
+# $Log: FRTND_E.py,v $
+# Revision 1.3  2017-02-13 09:30:51  claudio
+# revision tag
+#
+#
+
+import sys
+from PyQt4 import QtCore, QtGui
+#from ui_frntd_e import Ui_frntd_e
+from active_frntd_e import active_frntd_e
+app = QtGui.QApplication(sys.argv)
+window = QtGui.QDialog()
+#ui = Ui_frntd_e()
+ui=active_frntd_e()
+#ui.setupUi(window)
+ui.setup(window)
+
+window.show()
+sys.exit(app.exec_())
diff --git a/FRTND_E/Makefile b/FRTND_E/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..c2aa3aa227560e42c91712ec97a4a2ebf8e0e4b1
--- /dev/null
+++ b/FRTND_E/Makefile
@@ -0,0 +1,4 @@
+#makefile for PyQt4 panel
+
+ui_frntd_e.py::frntd_e.ui
+	pyuic4 frntd_e.ui >ui_frntd_e.py
\ No newline at end of file
diff --git a/FRTND_E/active_frntd_e.py b/FRTND_E/active_frntd_e.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e260e63734f9f3214b9731f82ebba9d82884c37
--- /dev/null
+++ b/FRTND_E/active_frntd_e.py
@@ -0,0 +1,245 @@
+# deirved class to which active beahvoirou is delegated
+# the fatehr class is re-generated by the designer
+
+# $Author: claudio $
+#
+# $Name:  $
+#
+# $Log: active_frntd_e.py,v $
+# Revision 1.5  2019-06-20 08:14:21  claudio
+# #8957, #8947: add new stopper syrmep, tango controlled
+#
+# Revision 1.4  2017-02-13 09:30:51  claudio
+# revision tag
+#
+#
+
+
+from PyQt4 import QtCore, QtGui
+from ui_frntd_e import *
+import blfe
+import tango
+
+
+class Worker(QtCore.QThread):
+    def __init__(self, parent=None):
+        QtCore.QThread.__init__(self, parent)
+        self.BL = blfe.blfe()
+        self.exiting = False
+        self.mode = 'update'
+        # tango device for syrmep - geco device
+        self.syrmepstopper = 0
+        self.syrmepstopperindex = 0
+        self.stopper_value = -1  # 0: closed , 1:open, -1 : unknown
+        try:
+            self.syrmepstopper = tango.DeviceProxy('syrmep-control-01.blcs.elettra.trieste.it:20000/syrmep/beamline/geco')
+        except:
+            self.syrmepstopper = 0
+
+    def run(self):
+        if self.mode == 'update':
+            self.update()
+        if self.mode == 'execute':
+            self.execute()
+
+    def update(self):
+        self.BL.read()
+        self.emit(QtCore.SIGNAL("UpdateThread(PyQt_PyObject)"), self.BL)
+        # read tango status
+        try:
+            self.stopper_value = self.syrmepstopper.r_bs4_v
+        except:
+            self.stopper_value = -1
+
+    def execute(self):
+        errtable = self.BL.closeall()
+
+        #close tango controlloed syrme stopper
+        try:
+            self.syrmepstopper.r_bs4_v=0
+        except:
+            self.emit(QtCore.SIGNAL("ExecuteError(PyQt_PyObject,PyQt_PyObject)"), self.BL, 'geco/r_bs4_v failed')
+        if errtable is None:
+            self.emit(QtCore.SIGNAL("ExecuteThread(PyQt_PyObject)"), self.BL)
+        else:
+            self.emit(QtCore.SIGNAL("ExecuteError(PyQt_PyObject,PyQt_PyObject)"), self.BL, errtable)
+
+
+class active_frntd_e(Ui_frntd_e, QtCore.QObject):
+
+    # ovverride setupUI: create graphics and active object, worker thread , then connects signals and start timer
+    def setup(self, father):
+        # create ancesstor graphic objetcs
+        ui = self.setupUi(father)
+        self.ui = ui
+        self.msgbox = None
+        # connect to slots of this class
+        self.connect(self.pushClose, QtCore.SIGNAL("clicked()"), self.slot_do_close)
+        self.connect(self.tableWidget, QtCore.SIGNAL("destroyed()"), self.slot_quit)
+
+        # create worker thread - does all the slow network activities
+        self.thread = Worker()
+
+        self.connect(self.thread, QtCore.SIGNAL("UpdateThread(PyQt_PyObject)"), self.slot_thread_update)
+        self.connect(self.thread, QtCore.SIGNAL("ExecuteThread(PyQt_PyObject)"), self.slot_thread_execute)
+        self.connect(self.thread, QtCore.SIGNAL("ExecuteError(PyQt_PyObject,PyQt_PyObject)"), self.slot_thread_execute_error)
+        self.connect(self.thread, QtCore.SIGNAL("ExecuteError(PyQt_PyObject,PyQt_PyObject)"), self.slot_thread_tango_error)
+
+        # get reference of BL object from thread
+        # since the class only reads form BL object non synch primitives are used
+        # N.B. python copyes object references
+        self.BL = self.thread.BL
+
+        # configure table widget and create color brushes
+        self.yellowbrush = QtGui.QBrush(QtGui.QColor("yellow"))
+        self.greenbrush = QtGui.QBrush(QtGui.QColor("green"))
+        self.redbrush = QtGui.QBrush(QtGui.QColor("red"))
+        self.graybrush = QtGui.QBrush(QtGui.QColor("gray"))
+        n = self.BL.nentries
+        self.tableWidget.setRowCount(n + 1)
+        row = 0
+        for entry in self.BL.bltable:
+            bname = entry[2]
+            objname = entry[0]
+            stname = entry[4]
+            col0 = QtGui.QTableWidgetItem(bname, 0)
+            col1 = QtGui.QTableWidgetItem(objname, 1)
+            col2 = QtGui.QTableWidgetItem(stname, 2)
+            col2.setBackground(self.graybrush)
+            self.tableWidget.setItem(row, 0, col0)
+            self.tableWidget.setItem(row, 1, col1)
+            self.tableWidget.setItem(row, 2, col2)
+            self.tableWidget.setRowHeight(row, 22)
+            row = row + 1
+        # add Tango managed entries - different
+        bname = 'Syrmep'
+        objname = 'geco/r_bs4_v'
+        stname = 'UNKNOWN'
+        col0 = QtGui.QTableWidgetItem(bname, 0)
+        col1 = QtGui.QTableWidgetItem(objname, 1)
+        col2 = QtGui.QTableWidgetItem(stname, 2)
+        col2.setBackground(self.graybrush)
+        self.tableWidget.setItem(row, 0, col0)
+        self.tableWidget.setItem(row, 1, col1)
+        self.tableWidget.setItem(row, 2, col2)
+        self.tableWidget.setRowHeight(row, 22)
+        self.thread.syrmepstopperindex = row
+        self.syrmepstopperindex = row
+        row = row + 1
+        palette = self.label.palette()
+        palette.setBrush(QtGui.QPalette.Window, self.graybrush)
+        self.label.setPalette(palette)
+        self.label.setAutoFillBackground(1)
+        self.label.setText('UNKNOWN')
+
+        # resize columns
+        self.tableWidget.setColumnWidth(0, 130)
+        self.tableWidget.setColumnWidth(1, 310)
+
+        # do first table update
+        self.update_table()
+        # start timer
+        self.timer = QtCore.QTimer(self)
+        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.update_table)
+        self.timer.start(3000)
+
+        return ui
+
+    def update_table(self):
+        # configure and start thread
+        self.thread.mode = 'update'
+        self.thread.start()
+
+    def redraw_table(self, myBL):
+        # redraw  informations
+        row = 0
+        for entry in myBL.bltable:
+            stname = entry[4]
+            item = self.tableWidget.item(row, 2)
+            item.setText(stname)
+            if stname == 'OPEN':
+                item.setBackground(self.redbrush)
+            if stname == 'CLOSED':
+                item.setBackground(self.greenbrush)
+            if stname == 'ERROR':
+                item.setBackground(self.yellowbrush)
+            if stname == 'UNKNOWN':
+                item.setBackground(self.graybrush)
+            # self.tableWidget.setItem(row,2,item)
+            row = row + 1
+        # check syrmep tango reading
+        idx = self.thread.syrmepstopperindex
+        item = self.tableWidget.item(idx, 2)
+        if self.thread.stopper_value == 1:
+            item.setBackground(self.redbrush)
+            item.setText('OPEN')
+        if self.thread.stopper_value == 0:
+            item.setBackground(self.greenbrush)
+            item.setText('CLOSED')
+        if self.thread.stopper_value == -1:
+            item.setBackground(self.graybrush)
+            item.setText('UNKNOWN')
+        palette = self.label.palette()
+        if (myBL.allclosed() == 1 and self.thread.stopper_value == 0):
+            palette.setBrush(QtGui.QPalette.Window, self.greenbrush)
+            self.label.setText('ALL CLOSED')
+        else:
+            palette.setBrush(QtGui.QPalette.Window, self.redbrush)
+            self.label.setText('OPEN/CLOSED')
+        self.label.setPalette(palette)
+        self.label.setAutoFillBackground(1)
+
+    def slot_do_close(self):
+        # first stop aqcusition thread
+        self.timer.stop()
+        self.thread.wait()
+
+        # start execution thread
+        self.thread.mode = 'execute'
+        self.thread.start()
+
+        # post dialog box since there is some time to wait
+        if self.msgbox is None:
+            self.msgbox = QtGui.QProgressDialog('Closing front-ends...', '', 0, 0)
+            self.msgbox.setLabelText('Closing front-ends...')
+            self.msgbox.setCancelButtonText('')
+            self.msgbox.setWindowTitle('BEAMLINE FRONT END')
+            self.msgbox.setModal(True)
+            # How do you remove a button in a dialog????
+            # butt=self.msgbox.button(QtGui.QMessageBox.Close)
+            # as a work-aroud, remove cancel functionality
+            QtCore.QObject.disconnect(self.msgbox, QtCore.SIGNAL('canceled()'), self.msgbox, QtCore.SLOT('cancel()'))
+            self.msgbox.show()
+            QtCore.SIGNAL
+        else:
+            self.msgbox.show()
+
+    def slot_thread_update(self, myBL):
+        # slot called when read is terminated
+        self.redraw_table(myBL)
+
+    def slot_thread_execute(self, myBL):
+        # called when execution thread is terminated normally
+        self.msgbox.close()
+        self.redraw_table(myBL)
+        self.timer.start(3000)
+
+    def slot_thread_execute_error(self, myBL, myerrtable):
+        # called when execution thread is terminated with error
+        self.msgbox.close()
+        self.redraw_table(myBL)
+        self.timer.start(3000)
+        # shuold improve formatting of beamline errors...
+        QtGui.QMessageBox.critical(self.ui, 'front-end close', repr(myerrtable))
+
+    def slot_thread_tango_error(self, myBL, msg):
+        # called when execution thread is terminated with error
+        self.msgbox.close()
+        self.redraw_table(myBL)
+        self.timer.start(3000)
+        # shuold improve formatting of beamline errors...
+        QtGui.QMessageBox.critical(self.ui, 'syrmep front-end close', msg)
+
+    def slot_quit(self):
+        self.timer.stop()
+        self.thread.wait()
diff --git a/FRTND_E/frntd_e.ui b/FRTND_E/frntd_e.ui
new file mode 100644
index 0000000000000000000000000000000000000000..2d9b84c45bf194a92a12185a7c1032f4a437f086
--- /dev/null
+++ b/FRTND_E/frntd_e.ui
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>frntd_e</class>
+ <widget class="QDialog" name="frntd_e">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>702</width>
+    <height>1021</height>
+   </rect>
+  </property>
+  <property name="font">
+   <font>
+    <pointsize>10</pointsize>
+   </font>
+  </property>
+  <property name="windowTitle">
+   <string>BEAMLINE FRONT END</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout">
+   <item row="0" column="0">
+    <layout class="QHBoxLayout">
+     <item>
+      <layout class="QVBoxLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="font">
+          <font>
+           <pointsize>10</pointsize>
+           <weight>75</weight>
+           <bold>true</bold>
+          </font>
+         </property>
+         <property name="frameShape">
+          <enum>QFrame::Panel</enum>
+         </property>
+         <property name="frameShadow">
+          <enum>QFrame::Sunken</enum>
+         </property>
+         <property name="lineWidth">
+          <number>1</number>
+         </property>
+         <property name="text">
+          <string>ALL CLOSED</string>
+         </property>
+         <property name="textFormat">
+          <enum>Qt::PlainText</enum>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignCenter</set>
+         </property>
+         <property name="margin">
+          <number>1</number>
+         </property>
+         <property name="textInteractionFlags">
+          <set>Qt::NoTextInteraction</set>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushClose">
+         <property name="font">
+          <font>
+           <pointsize>10</pointsize>
+          </font>
+         </property>
+         <property name="text">
+          <string>CLOSE ALL</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer>
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTableWidget" name="tableWidget">
+       <property name="font">
+        <font>
+         <pointsize>9</pointsize>
+        </font>
+       </property>
+       <property name="autoFillBackground">
+        <bool>true</bool>
+       </property>
+       <property name="lineWidth">
+        <number>1</number>
+       </property>
+       <property name="autoScroll">
+        <bool>false</bool>
+       </property>
+       <property name="editTriggers">
+        <set>QAbstractItemView::NoEditTriggers</set>
+       </property>
+       <property name="tabKeyNavigation">
+        <bool>false</bool>
+       </property>
+       <property name="showDropIndicator" stdset="0">
+        <bool>false</bool>
+       </property>
+       <property name="dragDropOverwriteMode">
+        <bool>false</bool>
+       </property>
+       <property name="alternatingRowColors">
+        <bool>true</bool>
+       </property>
+       <property name="selectionMode">
+        <enum>QAbstractItemView::MultiSelection</enum>
+       </property>
+       <property name="selectionBehavior">
+        <enum>QAbstractItemView::SelectRows</enum>
+       </property>
+       <property name="textElideMode">
+        <enum>Qt::ElideNone</enum>
+       </property>
+       <property name="sortingEnabled">
+        <bool>false</bool>
+       </property>
+       <property name="wordWrap">
+        <bool>false</bool>
+       </property>
+       <property name="cornerButtonEnabled">
+        <bool>false</bool>
+       </property>
+       <column>
+        <property name="text">
+         <string>Beamline</string>
+        </property>
+       </column>
+       <column>
+        <property name="text">
+         <string>Point Name</string>
+        </property>
+       </column>
+       <column>
+        <property name="text">
+         <string>Status</string>
+        </property>
+       </column>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/FRTND_E/ui_frntd_e.py b/FRTND_E/ui_frntd_e.py
new file mode 100644
index 0000000000000000000000000000000000000000..3602c35d658e48320202ec7fe50244d7d62d30fb
--- /dev/null
+++ b/FRTND_E/ui_frntd_e.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'frntd_e.ui'
+#
+# Created by: PyQt4 UI code generator 4.12.1
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+try:
+    _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+    def _fromUtf8(s):
+        return s
+
+try:
+    _encoding = QtGui.QApplication.UnicodeUTF8
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig, _encoding)
+except AttributeError:
+    def _translate(context, text, disambig):
+        return QtGui.QApplication.translate(context, text, disambig)
+
+class Ui_frntd_e(object):
+    def setupUi(self, frntd_e):
+        frntd_e.setObjectName(_fromUtf8("frntd_e"))
+        frntd_e.resize(702, 1021)
+        font = QtGui.QFont()
+        font.setPointSize(10)
+        frntd_e.setFont(font)
+        frntd_e.setSizeGripEnabled(True)
+        self.gridlayout = QtGui.QGridLayout(frntd_e)
+        self.gridlayout.setObjectName(_fromUtf8("gridlayout"))
+        self.hboxlayout = QtGui.QHBoxLayout()
+        self.hboxlayout.setObjectName(_fromUtf8("hboxlayout"))
+        self.vboxlayout = QtGui.QVBoxLayout()
+        self.vboxlayout.setObjectName(_fromUtf8("vboxlayout"))
+        self.label = QtGui.QLabel(frntd_e)
+        font = QtGui.QFont()
+        font.setPointSize(10)
+        font.setBold(True)
+        font.setWeight(75)
+        self.label.setFont(font)
+        self.label.setFrameShape(QtGui.QFrame.Panel)
+        self.label.setFrameShadow(QtGui.QFrame.Sunken)
+        self.label.setLineWidth(1)
+        self.label.setTextFormat(QtCore.Qt.PlainText)
+        self.label.setAlignment(QtCore.Qt.AlignCenter)
+        self.label.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
+        self.label.setObjectName(_fromUtf8("label"))
+        self.vboxlayout.addWidget(self.label)
+        self.pushClose = QtGui.QPushButton(frntd_e)
+        font = QtGui.QFont()
+        font.setPointSize(10)
+        self.pushClose.setFont(font)
+        self.pushClose.setObjectName(_fromUtf8("pushClose"))
+        self.vboxlayout.addWidget(self.pushClose)
+        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.vboxlayout.addItem(spacerItem)
+        self.hboxlayout.addLayout(self.vboxlayout)
+        self.tableWidget = QtGui.QTableWidget(frntd_e)
+        font = QtGui.QFont()
+        font.setPointSize(9)
+        self.tableWidget.setFont(font)
+        self.tableWidget.setAutoFillBackground(True)
+        self.tableWidget.setLineWidth(1)
+        self.tableWidget.setAutoScroll(False)
+        self.tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.tableWidget.setTabKeyNavigation(False)
+        self.tableWidget.setProperty("showDropIndicator", False)
+        self.tableWidget.setDragDropOverwriteMode(False)
+        self.tableWidget.setAlternatingRowColors(True)
+        self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
+        self.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.tableWidget.setTextElideMode(QtCore.Qt.ElideNone)
+        self.tableWidget.setWordWrap(False)
+        self.tableWidget.setCornerButtonEnabled(False)
+        self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
+        self.tableWidget.setColumnCount(3)
+        self.tableWidget.setRowCount(0)
+        item = QtGui.QTableWidgetItem()
+        self.tableWidget.setHorizontalHeaderItem(0, item)
+        item = QtGui.QTableWidgetItem()
+        self.tableWidget.setHorizontalHeaderItem(1, item)
+        item = QtGui.QTableWidgetItem()
+        self.tableWidget.setHorizontalHeaderItem(2, item)
+        self.hboxlayout.addWidget(self.tableWidget)
+        self.gridlayout.addLayout(self.hboxlayout, 0, 0, 1, 1)
+
+        self.retranslateUi(frntd_e)
+        QtCore.QMetaObject.connectSlotsByName(frntd_e)
+
+    def retranslateUi(self, frntd_e):
+        frntd_e.setWindowTitle(_translate("frntd_e", "BEAMLINE FRONT END", None))
+        self.label.setText(_translate("frntd_e", "ALL CLOSED", None))
+        self.pushClose.setText(_translate("frntd_e", "CLOSE ALL", None))
+        self.tableWidget.setSortingEnabled(False)
+        item = self.tableWidget.horizontalHeaderItem(0)
+        item.setText(_translate("frntd_e", "Beamline", None))
+        item = self.tableWidget.horizontalHeaderItem(1)
+        item.setText(_translate("frntd_e", "Point Name", None))
+        item = self.tableWidget.horizontalHeaderItem(2)
+        item.setText(_translate("frntd_e", "Status", None))
+
diff --git a/TCPSserver/README b/TCPSserver/README
new file mode 100644
index 0000000000000000000000000000000000000000..f1110217fc675910660a6ce064ad77cf97f120f0
--- /dev/null
+++ b/TCPSserver/README
@@ -0,0 +1,20 @@
+Il servzio TCPS viene gestito da un certo numero di istanze differenti con port number assegnato in modo da ripartire il carico,
+le uscite da bending - per ora - leggono tutte dalla stessa istanza.
+
+Le porte vanno assegnate per corrispondere al range di bcs da 1.1 (11) A 11.2 (112)
+011 	TWIN mIC : 20011
+012 	FEL - Nanospectroscopy : 20012
+022 	SuperESCA - Escamicroscopy : 20022
+032 	VUV photoemission - Spectromicroscopy : 20032
+042 	Circularly Polarized : 20042
+052 	X-ray diffraction - SAXS : 20052
+061 	SYRMEP - MSB : 20061
+062 	Gas Phase : 20062
+072 	ALOISA : 20072
+081 	Lilit - BEAR : 20081
+082 	Bach : 20082
+092 	APE : 20092
+101 	Microfabrication : 20101
+102 	Iuvs BaDElph : 20102
+111 	Exsafs :  20111
+112 	Xrd2  :   20112 (previsto ma non attivato,  ci sara' un srver tango diretto)
\ No newline at end of file
diff --git a/TCPSserver/TCPS2tango.coverage b/TCPSserver/TCPS2tango.coverage
new file mode 100644
index 0000000000000000000000000000000000000000..6be62e646ae741c1f75f2a69a24eb48b40ea61f7
Binary files /dev/null and b/TCPSserver/TCPS2tango.coverage differ
diff --git a/TCPSserver/TCPS2tango.py b/TCPSserver/TCPS2tango.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d3ad64c40ebdec4dd4d64f6319f506a61197233
--- /dev/null
+++ b/TCPSserver/TCPS2tango.py
@@ -0,0 +1,390 @@
+# parse,check,translate TCPS to tango
+# and exec tabled actions
+
+
+import string
+import sys
+import PyTango
+
+#module wide constants
+okmsg = 'Command execution OK'
+errmsg_header = '*** ERROR'
+term = "\r\n"
+
+
+#################################################################################################
+#utilities - taken from tangoclient.py to prpperly convert/assign types to command and attributes
+#from strings
+
+def convertToAttributeValue(pars,  info, logger):
+    logger.debug( 'ConvertToAttribute() entering...')
+    #val = PyTango.AttributeValue()
+    #val.name = info.name
+    logger.debug( 'ConvertToAttribute() entered...')
+    if info.data_format == PyTango.SCALAR:
+        if info.data_type ==  PyTango.DevBoolean:
+            if pars[0] == '0' or pars[0].lower() == 'false':
+                value = False
+            else:
+                value = True
+        elif info.data_type == PyTango.DevFloat or info.data_type == PyTango.DevDouble:
+            value = float(pars[0])
+        elif info.data_type == PyTango.ConstDevString or info.data_type == PyTango.DevString or info.data_type == PyTango.DevUChar:
+            value = pars[0]
+        elif info.data_type == PyTango.DevLong or info.data_type == PyTango.DevShort or info.data_type == PyTango.DevULong or info.data_type == PyTango.DevUShort:
+            value = int(pars[0])
+    elif info.data_format == PyTango.SPECTRUM:
+        temp = list()
+        if info.data_type ==  PyTango.DevBoolean:
+            for p in pars:
+                if p == '0' or p.lower() == 'false':
+                    temp.append(False)
+                else:
+                    temp.append(True)
+        elif info.data_type == PyTango.DevFloat or info.data_type == PyTango.DevDouble:
+            for p in pars:
+                temp.append(float(p))
+        elif info.data_type == PyTango.ConstDevString or info.data_type == PyTango.DevString or info.data_type == PyTango.DevUChar:
+            temp = pars
+        elif info.data_type == PyTango.DevLong or info.data_type == PyTango.DevShort or info.data_type == PyTango.DevULong or info.data_type == PyTango.DevUShort:
+            temp.append(int(p))
+        value = temp
+    return value
+
+####---------------------------------------------------------------------------------------------
+
+def convertToCommandInput(pars, mtype):
+    if mtype == PyTango.DevBoolean:
+        if pars[0] == '0' or pars[0].lower() == 'false':
+            return False
+        else:
+            return True
+    elif mtype == PyTango.DevFloat or mtype == PyTango.DevDouble:
+        return float(pars[0])
+    elif mtype == PyTango.ConstDevString or mtype == PyTango.DevString or mtype == PyTango.DevUChar:
+        return pars[0]
+    elif mtype == PyTango.DevLong or mtype == PyTango.DevShort or mtype == PyTango.DevULong or mtype == PyTango.DevUShort:
+        return int(pars[0])
+
+    if mtype == PyTango.DevVarBooleanArray:
+        temp = list()
+        for p in pars:
+            if p == '0' or p.lower() == 'false':
+                temp.append(False)
+            else:
+                temp.append(True)
+        return temp
+    elif mtype == PyTango.DevVarFloatArray or mtype == PyTango.DevVarDoubleArray:
+        temp = list()
+        for p in pars:
+            temp.append(float(p))
+        return temp
+    elif mtype == PyTango.DevVarStringArray:
+        return pars
+    elif mtype == PyTango.DevVarLongArray or mtype == PyTango.DevVarShortArray or mtype == PyTango.DevVarULongArray or mtype == PyTango.DevVarUShortArray:
+        temp = list()
+        for p in pars:
+            temp.append(int(p))
+        return temp
+    else:
+        return None
+
+
+#################################################################################################
+
+class ProxyContainer(object):
+
+    """
+     This class parses the configuration files,
+     build the approriate TCPSproxyes and inserts the in a map.
+
+    :version:
+    :author:
+    """
+    def __init__(self):
+        #init to empty dictionaries the two main dispatch tables
+        self.get_dict = {}
+        self.set_dict = {}
+    def add_logger(self, addedlogger):
+        self.logger = addedlogger
+    def parse_conf_file(self, fname):
+        """
+
+        @param string fname : 
+        @return  :
+        @author
+        """
+        self.logger.debug('ProxyContainer.parse_conf_file() parsing: '+fname)
+        try:
+            conf_file = open(fname,'r')
+        except:
+            self.logger.fatal( 'ProxyContainer.parse_conf_file() fatal error opening conf_file: '+fname)
+            raise #impossible to continue....
+        count = 0
+        result = True
+        for rawline in conf_file.readlines():
+            if not rawline.strip():
+                continue  #discard empty lines
+            count = count+1
+            line=' '.join(rawline.split()) # collapse multiple white spaces into single white space
+            if(line[0]=='#' or line[0]=='*' or not line.strip()) : #discard comment and empyt lines
+                continue
+            datum=string.split(line,' ')
+            if (datum[0]!='GET' and datum[0] !='SET'):
+                result = False
+                self.logger.error( 'ProxyContainer: parse_conf_file error on line '+repr(count) +' '+ datum[0])
+                return result
+            if(datum[0]=='GET'):
+                if datum[1] not in self.get_dict:
+                    tangostring = datum[-1]
+                    if tangostring.count('->') ==1:
+                        px = ProxyCommand(tangostring.strip(),self.logger)
+                    elif  tangostring.count('/') >=3:
+                        px = ProxyAttribute(tangostring.strip(),self.logger)
+                    self.get_dict[datum[1]] = px
+                else:
+                    result=False
+                    self.logger.error( 'ProxyContainer: parse_conf_file error on line '+repr(count)+' : SET duplicate '+datum[1])
+                    return result
+
+            if(datum[0]=='SET'):
+                #create special keys for searching - must include also list of parameter names
+                skey = datum[1]
+                for s in datum[2:-1]:
+                    skey = skey+'_'+s
+                if skey not in self.set_dict:
+                    tangostring = datum[-1]
+                    if tangostring.count('->') ==1:
+                        px = ProxyCommand(tangostring.strip(),self.logger)
+                    elif  tangostring.count('/') >=3:
+                        self.logger.debug('Inserting SET attribute '+tangostring.strip()+' with key: '+skey)
+                        px = ProxyAttribute(tangostring.strip(),self.logger)
+                    self.set_dict[skey] = px
+                else:
+                    result=False
+                    self.logger.error( 'ProxyContainer: parse_conf_file error on line '+repr(count)+' : SET duplicate '+repr(datum))
+                    return result
+
+        return result
+
+
+    def dispatch_call(self, data):
+        """
+         use "data" for finding the appropriate TCPSproxy, then invoches the appropriate
+         operation to it.
+
+        @param string data : 
+        @return string :
+        @author
+        """
+        #print 'ProxyContainer: dispacth_call '+data
+        self.logger.debug('processing '+data)
+        try:
+            cleandata=' '.join(data.split()) # collapse multiple white spaces into single white space
+            selector=string.split(cleandata," ")
+            self.logger.debug('processing selector ' +selector[0])
+        except:
+            self.logger.error('message not correctly configured:'+data)
+            return errmsg_header + ' message not correctly configured'+term
+        try:
+            if selector[0]=='GET':
+                if self.get_dict.has_key(selector[1]):
+                    handler=self.get_dict[selector[1]]
+                    resp=handler.get()
+                    if(resp==None):
+                        self.logger.error('not correctly handled: '+data)
+                        return errmsg_header +' not correctly handled'+term
+                    return resp
+                else:
+                    self.logger.error(selector[1] + ' is not configured as GET point')
+                    return  errmsg_header + ' ' +selector[1]+' is not configured as GET point'+term
+
+            elif selector[0]=='SET':
+                self.logger.debug('processing SET...selector : '+selector[1])
+                skey=selector[1]
+                valuelist=[]
+                for s in selector[2:]:
+                    arg=s.split(',')
+                cmd=arg[0]
+                for v in arg[1:]:
+                    valuelist.append(v)
+                    self.logger.debug('processing SET..adding to valuelist: '+v)
+                skey=skey+'_'+cmd
+                self.logger.debug('processing SET...searching for '+skey)
+                if self.set_dict.has_key(skey):
+                    handler=self.set_dict[skey]
+                    if (handler==None):
+                        self.logger.error('SET: handler not found for: '+skey)
+                    self.logger.debug('processing SET...calling set() for device... ')
+                    resp=handler.set(valuelist)
+                    self.logger.debug('processing SET..set() called or device... ')
+                    if(resp==None):
+                        self.logger.error('not correctly handled: '+data)
+                        return errmsg_header + ' not correctly handled'+term
+                    return resp
+                else:
+                    self.logger.debug(selector[1] + ' is not configured as SET point')
+                    return  errmsg_header +' '+selector[1] +' is  not configured as SET point'+term
+            # first field is neither SET nor GET... error!
+            self.logger.error('not correctly configured: '+data)
+            return errmsg_header +' not correctly configured'+term
+        except:
+            self.logger.error('exception processing data:' + data)
+
+##########################################################################################
+# 'abstract' class for Proxy Objects
+class Proxy(object):
+    def get(self):
+        pass
+    def set(self,data):
+        pass
+##########################################################################################
+class ProxyAttribute(Proxy):
+    def __init__(self, attrname, log):
+        pos=attrname.rfind('/')
+        self.__attribute=attrname[(pos+1):].strip() #get read of terminating chrartcers if left
+        self.__devname=attrname[:pos]
+        self.__attrinfo=0
+        self.logger=log
+        try:
+            self.__device=PyTango.DeviceProxy(self.__devname)
+            #self.__attrinfo=self.__device.get_attribute_config(self.__attribute)
+        except:
+            self.logger.error( 'ProxyAttribute.init(): failed to create '+self.__devname+' for: '+attrname)
+            return None
+        try:
+            self.__attrinfo=self.__device.get_attribute_config(self.__attribute)
+        except:
+            self.__attrinfo=0
+            self.logger.error( 'ProxyAttribute.init(): failed to create self.__attrinfo for: '+self.__devname+'/'+self.__attribute)
+            return None
+        self.logger.debug('ProxyAttribute init() OK: '+self.__devname+'/'+self.__attribute)
+
+    def get(self):
+        error=False
+        if self.__attrinfo==0:
+            try:
+                self.logger.debug( 'ProxyAttribute.get(): getting attr config for : '+self.__devname+'/'+self.__attribute)
+                self.__attrinfo=self.__device.get_attribute_config(self.__attribute)
+            except:
+                self.logger.error( 'ProxyAttribute.get(): failed to create self.__attrinfo for: '+self.__devname+'/'+self.__attribute)
+                self.__attrinfo=0
+                error=True
+                #rstat='BEN-------' #simplicistic error notification !
+                #resp='R'+','+'?'+','+rstat+','+0+term
+                return 'R,?,BEN------,0'+term
+        try:
+            #self.logger.debug( 'ProxyAttribute.get(): reading : '+self.__devname)
+            attr=self.__device.read_attribute(self.__attribute) #read_attribute_as_string ????
+            val=attr.value
+            #self.logger.debug( 'ProxyAttribute.get(): reading value ok')
+        except PyTango.DevFailed,myex:
+            des0=myex[0].desc
+            self.logger.error ('GET: '+self.__devname+'/'+self.__attribute+' failed with exception '+des0)
+            #print 'ProxyAttribute: get() '+self.__attribute+' ERROR'
+            val=0
+            error=True
+
+        # analyze result and prepare answer
+        rtype='?'
+        racq='R' #fixed
+        if self.__attrinfo.data_format == PyTango.SCALAR:
+            if self.__attrinfo.data_type ==  PyTango.DevBoolean:
+                rtype='D'
+                if val:
+                    rvalue='1,'+self.__attrinfo.unit
+                else:
+                    rvalue='0,'+self.__attrinfo.unit
+            if self.__attrinfo.data_type ==  PyTango.DevDouble or self.__attrinfo.data_type ==  PyTango.DevFloat:
+                self.logger.debug( 'ProxyAttribute.get(): processing float...')
+                rtype='A'
+                rvalue=self.__attrinfo.format % val + ','+self.__attrinfo.unit
+                self.logger.debug( 'ProxyAttribute.get(): processing float:'+rvalue)
+            if self.__attrinfo.data_type == PyTango.DevLong or self.__attrinfo.data_type == PyTango.DevShort or self.__attrinfo.data_type == PyTango.DevULong or self.__attrinfo.data_type == PyTango.DevUShort:
+                rtype='I'
+                rvalue=self.__attrinfo.format % val + ','+self.__attrinfo.unit
+        if self.__attrinfo.data_type== 19: #pyTango.DevState
+            rtype='I'
+            rvalue= '%d'% int(val) + ','+self.__attrinfo.unit
+            if(error):
+                rstat='BEN-------' #simplicistic error notification !
+            else:
+                rstat='----------'
+        elif self.__attrinfo.data_format == PyTango.SPECTRUM and self.__attrinfo.data_type ==  PyTango.DevBoolean:
+            # special handling of bool spectrum - which are turned into bit masks or Bitmap
+            rtype='B'
+            longval=0
+            mask=0x1
+            count = 0
+            #if self.__attrinfo.writable==PyTango._PyTango.AttrWriteType.READ_WRITE :
+            numbits=attr.dim_x #make sure to get ALWAY the Read values, also with READ_WRITE attributes
+            
+            if self.__devname.rfind('vlvfe') > 0: #workaround for different bitmaps of new valves. Dirty but... C.S. nov. 2016
+                numbits=3 #show only open close local bits - better solution must implelemented
+
+            for p in val:
+                count = count + 1
+                if count >32 or count > numbits:
+                    break
+                # stuff bits into bitmap - max 64 bits
+
+                if p:
+                    longval= longval | mask
+                mask = mask << 1
+            rvalue= '%d' % longval +','+self.__attrinfo.unit
+        if(error):
+            rstat='BEN-------' #simplicistic error notification !
+        else:
+            rstat='----------'
+        resp=racq+','+rtype+','+rstat+','+rvalue+term
+        self.logger.debug( 'ProxyAttribute.get(): about to return:'+resp)
+        return resp
+
+
+#------------------------------------------------------------------
+# set takes value in imput - use python list for arrays    
+    def set(self,data):
+        self.logger.debug( 'ProxyAttribute.set() entering for '+self.__devname+'/'+self.__attribute)
+        if self.__attrinfo==0:
+            try:
+                self.__attrinfo=self.__device.get_attribute_config(self.__attribute)
+            except PyTango.DevFailed,e:
+                des=e[0].desc
+                errmsg= errmsg_header+ ' in perform command : '+des
+                self.logger.error( 'ProxyAttribute.set(): failed to create self.__attrinfo for: '+self.__devname+'/'+self.__attribute)
+                self.__attrinfo=0
+                return errmsg+des+term
+        try:
+            #self.logger.debug( 'ProxyAttribute.set(): converting attribute for '+self.__devname+'/'+self.__attribute)
+            val=convertToAttributeValue(data,self.__attrinfo,self.logger)
+            self.logger.debug( 'ProxyAttribute.set(): for '+self.__devname+'/'+self.__devname+'/'+self.__attribute)
+            self.__device.write_attribute(self.__attrinfo,val)
+            self.logger.info( 'SET: ACCEPT'+self.__devname+'/'+self.__attribute+' '+data[0])
+            return okmsg+term
+        except PyTango.DevFailed,myex:
+            des0=myex[0].desc
+            self.logger.debug ('SET: '+self.__devname+'/'+self.__attribute+' failed with exception '+des0)
+            msg =  errmsg_header +' in perform command : '
+            self.logger.debug('msg:'+msg)
+            if des0.find('RESPINTA')>1:
+                msg =  errmsg_header + ' in access violation : '
+                self.logger.info( 'SET: REJECT '+self.__devname+'/'+self.__attribute+' '+data[0])
+            else:
+                msg =  errmsg_header + ' in perform command : '
+                self.logger.info ('SET: '+self.__devname+'/'+self.__attribute+' failed with exception '+des0)
+            return msg+des0+term
+
+
+########################################################################################
+class ProxyCommand(Proxy):
+    def __init__(self,cmdname,log):
+        pos=cmdname.rfind('->')
+        self.__command=cmdname[(pos+2):].strip()
+        self.__devname=cmdname[:pos]
+        self.logger=log
+        try:
+            self.__device=PyTango.DeviceProxy(self.__devname)
+            self.type=self.__device.command_query(self.__command)
+        except:
+            self.logger.error('ProxyCommand():  failed to create '+self.__devname)
+########################################################################################
diff --git a/TCPSserver/TCPSserver.e4p b/TCPSserver/TCPSserver.e4p
new file mode 100644
index 0000000000000000000000000000000000000000..7ec4265f45d4bf82a88ce98cecfc281c36818ae0
--- /dev/null
+++ b/TCPSserver/TCPSserver.e4p
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Project SYSTEM "Project-4.6.dtd">
+<!-- eric4 project file for project TCPSserver -->
+<!-- Saved: 2012-02-24, 14:20:40 -->
+<!-- Copyright (C) 2012 ,  -->
+<Project version="4.6">
+  <Language></Language>
+  <ProgLanguage mixed="0">Python</ProgLanguage>
+  <ProjectType>Console</ProjectType>
+  <Description></Description>
+  <Version>0.1</Version>
+  <Author></Author>
+  <Email></Email>
+  <Sources>
+    <Source>TCPStwserver.py</Source>
+    <Source>TCPS2tango.py</Source>
+  </Sources>
+  <Forms>
+  </Forms>
+  <Translations>
+  </Translations>
+  <Resources>
+  </Resources>
+  <Interfaces>
+  </Interfaces>
+  <Others>
+  </Others>
+  <MainScript>TCPStwserver.py</MainScript>
+  <Vcs>
+    <VcsType>CVS</VcsType>
+    <VcsOptions>
+      <dict>
+        <key>
+          <string>add</string>
+        </key>
+        <value>
+          <list>
+            <string></string>
+          </list>
+        </value>
+        <key>
+          <string>checkout</string>
+        </key>
+        <value>
+          <list>
+            <string></string>
+          </list>
+        </value>
+        <key>
+          <string>commit</string>
+        </key>
+        <value>
+          <list>
+            <string></string>
+          </list>
+        </value>
+        <key>
+          <string>diff</string>
+        </key>
+        <value>
+          <list>
+            <string>-u3</string>
+            <string>-p</string>
+          </list>
+        </value>
+        <key>
+          <string>export</string>
+        </key>
+        <value>
+          <list>
+            <string></string>
+          </list>
+        </value>
+        <key>
+          <string>global</string>
+        </key>
+        <value>
+          <list>
+            <string>-f</string>
+            <string>-z3</string>
+          </list>
+        </value>
+        <key>
+          <string>history</string>
+        </key>
+        <value>
+          <list>
+            <string>-e</string>
+            <string>-a</string>
+          </list>
+        </value>
+        <key>
+          <string>log</string>
+        </key>
+        <value>
+          <list>
+            <string></string>
+          </list>
+        </value>
+        <key>
+          <string>remove</string>
+        </key>
+        <value>
+          <list>
+            <string>-f</string>
+          </list>
+        </value>
+        <key>
+          <string>status</string>
+        </key>
+        <value>
+          <list>
+            <string>-v</string>
+          </list>
+        </value>
+        <key>
+          <string>tag</string>
+        </key>
+        <value>
+          <list>
+            <string>-c</string>
+          </list>
+        </value>
+        <key>
+          <string>update</string>
+        </key>
+        <value>
+          <list>
+            <string>-dP</string>
+          </list>
+        </value>
+      </dict>
+    </VcsOptions>
+    <VcsOtherData>
+      <dict>
+      </dict>
+    </VcsOtherData>
+  </Vcs>
+  <FiletypeAssociations>
+    <FiletypeAssociation pattern="*.pyw" type="SOURCES" />
+    <FiletypeAssociation pattern="*.idl" type="INTERFACES" />
+    <FiletypeAssociation pattern="*.py" type="SOURCES" />
+    <FiletypeAssociation pattern="*.ptl" type="SOURCES" />
+  </FiletypeAssociations>
+  <Checkers>
+    <CheckersParams>
+      <dict>
+        <key>
+          <string>PYLINT</string>
+        </key>
+        <value>
+          <dict>
+            <key>
+              <string>dialogReport</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableBasic</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableClasses</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableDesign</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableExceptions</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableFormat</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableImports</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableMetrics</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableMiscellaneous</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableNewstyle</string>
+            </key>
+            <value>
+              <bool>False</bool>
+            </value>
+            <key>
+              <string>enableRPython</string>
+            </key>
+            <value>
+              <bool>False</bool>
+            </value>
+            <key>
+              <string>enableSimilarities</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableTypecheck</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>enableVariables</string>
+            </key>
+            <value>
+              <bool>True</bool>
+            </value>
+            <key>
+              <string>htmlReport</string>
+            </key>
+            <value>
+              <bool>False</bool>
+            </value>
+            <key>
+              <string>reportFile</string>
+            </key>
+            <value>
+              <unicode>pylint.html</unicode>
+            </value>
+            <key>
+              <string>txtReport</string>
+            </key>
+            <value>
+              <bool>False</bool>
+            </value>
+          </dict>
+        </value>
+      </dict>
+    </CheckersParams>
+  </Checkers>
+</Project>
\ No newline at end of file
diff --git a/TCPSserver/TCPStwserver.py b/TCPSserver/TCPStwserver.py
new file mode 100755
index 0000000000000000000000000000000000000000..d9368be06c4befb2958d6ff80e262a691e517ed4
--- /dev/null
+++ b/TCPSserver/TCPStwserver.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+#  TCPS server-bridge based on twisted
+from twisted.internet.protocol import Protocol, Factory
+from twisted.internet import reactor
+import time
+import sys
+import TCPS2tango
+import logging
+import logging.handlers
+
+#obsolete! must be switched to argparse
+import optparse
+
+global_logging=logging.getLogger('TCPS') 
+# there should be a cleaner  way ... but now I use a GLOBAL.....
+#--------------------------------------------------------------
+
+class twistedTCPS(Protocol):
+    'adapter of TCPS protocol for twisted package'
+    def __init__(self):
+        self.__myname='default TCPS server'
+    def connectionMade(self):
+        if(self.factory._timeout):
+            self.transport.socket.settimeout(self.factory._timeout) # it is possible to set timeouts!!
+        self.__peer=self.transport.getPeer()
+        global_logging.info ('new connection: ' + self.__peer.host + ':' + repr(self.__peer.port))
+
+    def connectionLost(self, reason):
+        self.transport.loseConnection()
+        global_logging.info('connection closed/lost: ' + self.__peer.host + ':' + repr(self.__peer.port))
+
+    def dataReceived(self, data):
+        try:
+            resp=self.factory.handler.dispatch_call(data.strip())
+            self.transport.write(resp)
+        except:
+            global_logging.error ('exception writing data to ' + self.__peer.host + ':' + repr(self.__peer.port))
+
+# method to associate TCPS object and other initialization data
+def makeTCPSFactory(fname,logger,timeout=None,):
+    factory=Factory()
+    factory.protocol=twistedTCPS
+    factory._fname=fname
+    factory._timeout=timeout
+    factory.handler=TCPS2tango.ProxyContainer()
+    factory.handler.add_logger(logger)
+    factory.handler.parse_conf_file(fname)
+    
+    return factory
+
+#-----------------------------------------------------------------
+#remeber to switch  use argparse for configuring cmd line options with python > 2.7
+
+def main(argv=None):
+    if argv is None:
+        argv = sys.argv # argv for initializing , etc
+
+    #parse comnd line and prepare optinal arguments
+    parser = optparse.OptionParser(description='TCPStwserver options')
+    parser.add_option('-f','--configfile',help='config_file')
+    parser.add_option('-p', '--port', help='tpc port number [20000]')
+    parser.add_option('-l','--logfile',help='log_file')
+    parser.add_option('-v','--loglevel',help='log_level [debug|info|warning|error|critical]')
+    parser.add_option('-s','--logsize',help='log_file_size')
+    parser.add_option('-V','--verbose',help='echo debug to console')
+    (options,argmy) = parser.parse_args()
+    if options.configfile:
+        fname=options.configfile
+    else:
+        print 'usage: '+sys.argv[0] + ' --configfile= '
+        return 1
+
+    if options.port:
+        tcpport=int(options.port)
+    else:
+        tcpport=20000
+
+    if options.logfile:
+        lfile=options.logfile
+    else:
+        lfile='/dev/null'
+
+    if options.loglevel:
+        lev=options.loglevel
+        level=-1
+        if lev=='debug':
+            level=logging.DEBUG
+        elif lev=='info':
+            level=logging.INFO
+        elif lev=='warning':
+            level=logging.WARNING
+        elif lev=='error':
+            level=logging.ERROR
+        elif lev=='critical':
+            level=logging.CRITICAL
+        elif lev=='notset':
+            level==logging.NOTSET
+    else:
+        lev='notset'
+        level=logging.NOTSET
+
+    if options.logsize:
+        mBytes=int(options.logsize)
+    else:
+        mBytes=2196608
+
+    if options.verbose:
+        verbose=True
+    else:
+        verbose=False
+
+    # Set up a specific logger with our desired output level
+    # use INFO for for tracking all SET operations
+    # use ERROR and CRITICAL for errors (non-fatal and fatal)
+    # use INFO and DEBUG for diagnostics
+    # info is set with -V
+    #debug is set
+    logger = logging.getLogger('TCPS')
+    logger.setLevel(level) #default level is NOTSET
+    formatter = logging.Formatter("%(asctime)s\t%(levelname)s\t%(message)s")
+
+    # Add the log message handler to the logger
+    handler = logging.handlers.RotatingFileHandler(lfile, maxBytes=mBytes, backupCount=5)
+
+    # create and add formatter to logger
+    handler.setFormatter(formatter)
+
+    logger.addHandler(handler)
+
+    if verbose:
+        ch = logging.StreamHandler()
+        ch.setLevel(level)
+        ch.setFormatter(formatter)
+        logger.addHandler(ch)
+        logger.info('debug echo to console')
+
+    # use special  builder to associate our data to TCPS object
+    # extra arguments are:
+    #    'internal name'
+    #    timeout for network calls
+    logger.info('using config file '+fname)
+    factory=makeTCPSFactory(fname,logger)
+
+    # 20000 is the port assigned to TPCS - 30 seconds timeount
+    reactor.listenTCP(tcpport, factory,30.0)
+    # we can also  open on multiple ports, just make another instance another reactor object
+    #reactor.listenTCP(30000, factory,30.0)
+    logger.debug('entering loop')
+    reactor.run()
+    logger.debug('exit loop')
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/TCPSserver/TODO b/TCPSserver/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..c727ff6401a3fe4f5684c716659e4d93ea49a3ea
--- /dev/null
+++ b/TCPSserver/TODO
@@ -0,0 +1,2 @@
+- analizzare "exception processing data"
+- Transient CORBA excpetion:come si alza il timeout?
\ No newline at end of file
diff --git a/TCPSserver/elettrabcsbridge.cfg b/TCPSserver/elettrabcsbridge.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..e7dd976a7e664067e06b2d8ab869fe501ef7f5cd
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge.cfg
@@ -0,0 +1,329 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S01M tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s01.03/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P120S012 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S1.7_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P120S101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s10.03/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P120S102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s10.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P120S111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s11.03/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P120S112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s11.07/Pressure
+GET 022F_MACHINE_MACHINE_1_P120S022     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S2.7_PRES_RR
+GET 032F_MACHINE_MACHINE_1_P120S032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s03.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P120S042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s04.07/Pressure
+GET 052F_MACHINE_MACHINE_1_P120S052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S5.7_PRES_RR
+GET 061F_MACHINE_MACHINE_1_P120S061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S6.3_PRES_RR
+GET 062F_MACHINE_MACHINE_1_P120S062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S6.7_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P120S071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S7.3_PRES_RR
+GET 072F_MACHINE_MACHINE_1_P120S072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S7.7_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P120S081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S8.3_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P120S082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S8.7_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P120S092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s09.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s01.01/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s01.01/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s10.01/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s10.02/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s11.01/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s11.02/Pressure
+GET 022F_MACHINE_MACHINE_1_P400S022     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S2.2_PRES_RR
+GET 032F_MACHINE_MACHINE_1_P400S032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s03.02/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s04.02/Pressure
+GET 052F_MACHINE_MACHINE_1_P400S052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S5.2_PRES_RR
+GET 061F_MACHINE_MACHINE_1_P400S061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S6.1_PRES_RR
+GET 062F_MACHINE_MACHINE_1_P400S062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S6.2_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S7.1_PRES_RR
+GET 072F_MACHINE_MACHINE_1_P400S072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S7.2_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S8.1_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S8.2_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S9.1_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s09.02/Pressure
+
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE01M tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s1.1m/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE012 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S1.2_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s10.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s10.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s11.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s12.2/StatRF
+GET 022F_MACHINE_MACHINE_1_VALVE022     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S2.2_STAT_RF
+GET 032F_MACHINE_MACHINE_1_VALVE032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s3.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s4.2/StatRF
+GET 052F_MACHINE_MACHINE_1_VALVE052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S5.2_STAT_RF
+GET 061F_MACHINE_MACHINE_1_VALVE061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S6.1_STAT_RF
+GET 062F_MACHINE_MACHINE_1_VALVE062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S6.2_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S7.1_STAT_RF
+GET 072F_MACHINE_MACHINE_1_VALVE072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S7.2_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S8.1_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S8.2_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S9.1_STAT_RF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s9.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVB011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvbe_s1/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT01M tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.1m/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s10.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s10.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s11.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s11.2/StatRF
+GET 022F_MACHINE_MACHINE_1_SHUT022     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s2.2/StatRF
+GET 032F_MACHINE_MACHINE_1_SHUT032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s3.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s4.2/StatRF
+GET 052F_MACHINE_MACHINE_1_SHUT052     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s5.2/StatRF
+GET 061F_MACHINE_MACHINE_1_SHUT061     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s6.1/StatRF
+GET 062F_MACHINE_MACHINE_1_SHUT062     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s6.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT071 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s7.1/StatRF
+GET 072F_MACHINE_MACHINE_1_SHUT072     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s7.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT081 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s8.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT082 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s8.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT091 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s9.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s9.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+GET 012F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S1
+GET 012F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S1
+GET 012F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S1
+GET 012F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S1
+
+GET 022F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S2
+GET 022F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S2
+GET 022F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S2
+GET 022F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S2
+
+
+GET 032F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S3
+GET 032F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S3
+GET 032F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S3
+GET 032F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S3
+
+
+GET 042F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S4
+GET 042F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S4
+GET 042F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S4
+GET 042F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S4
+
+GET 052F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S5
+GET 052F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S5
+GET 052F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S5
+GET 052F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S5
+
+GET 062F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S6
+GET 062F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S6
+GET 062F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S6
+GET 062F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S6
+
+
+GET 072F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S7
+GET 072F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S7
+GET 072F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S7
+GET 072F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S7
+
+GET 082F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S8
+GET 082F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S8
+GET 082F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S8
+GET 082F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S8
+
+GET 092F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S9
+GET 092F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S9
+GET 092F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S9
+GET 092F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S9
+
+GET 102F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S10
+GET 102F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S10
+GET 102F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S10
+GET 102F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S10
+
+GET 112F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S11
+GET 112F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S11
+GET 112F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S11
+GET 112F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S11
+#beam positions and angles at exit  of bending magnets
+
+GET 061F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B6
+GET 061F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B6
+GET 061F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B6
+GET 061F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B6
+
+GET 071F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B7
+GET 071F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B7
+GET 071F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B7
+GET 071F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B7
+
+GET 081F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B8
+GET 081F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B8
+GET 081F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B8
+GET 081F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B8
+
+GET 091F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B9
+GET 091F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B9
+GET 091F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B9
+GET 091F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B9
+
+GET 101F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B10
+GET 101F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B10
+GET 101F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B10
+GET 101F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B10
+
+GET 111F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B11
+GET 111F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B11
+GET 111F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B11
+GET 111F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B11
+
+#beam positions and angles at short straight sections
+
+
+GET 011F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_SS1
+GET 011F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_SS1
+GET 011F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_SS1
+GET 011F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_SS1
+
+#ID1 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP011       sr/id/id_s1.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP012       sr/id/id_s1.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_PHA011       sr/id/id_s1.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA012       sr/id/id_s1.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS011      sr/id/id_s1.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS012      sr/id/id_s1.2/StatRF
+
+#ID1 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP011 GAP011 sr/id/id_s1.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP012 GAP012 sr/id/id_s1.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_PHA011 PHA011 sr/id/id_s1.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA012 PHA012 sr/id/id_s1.2/Phase
+
+#PSMOD1 readings
+GET FRONTEND_MACHINE_MACHINE_1_IM012       sr/id/psmod_s1/Current
+GET FRONTEND_MACHINE_MACHINE_1_M012        sr/id/psmod_s1/StatRF
+
+#PSMOD1 settings
+SET FRONTEND_MACHINE_MACHINE_1_IM012 IM012 sr/id/psmod_s1/Current
+
+
+#ID2 readings
+GET 022F_MACHINE_MACHINE_1_GAP021       blproxy/id/id_s2/Gap
+GET 022F_MACHINE_MACHINE_1_TAP021       blproxy/id/id_s2/Tapering
+GET 022F_MACHINE_MACHINE_1_GAPS020      blproxy/id/id_s2/StatRF
+
+#ID2 settings
+SET 022F_MACHINE_MACHINE_1_GAP021    VALGAP blproxy/id/id_s2/Gap
+SET 022F_MACHINE_MACHINE_1_TAP021    VALGAP blproxy/id/id_s2/Tapering
+
+
+#ID3 readings
+GET 032F_MACHINE_MACHINE_1_GAP031       sr/id/id_s3/Gap1
+GET 032F_MACHINE_MACHINE_1_GAP032       sr/id/id_s3/Gap2
+GET 032F_MACHINE_MACHINE_1_GAP033       sr/id/id_s3/Gap3
+GET 032F_MACHINE_MACHINE_1_GAPS030      sr/id/id_s3/StatRF
+
+#ID3 settings
+SET 032F_MACHINE_MACHINE_1_GAP031    GAP031 sr/id/id_s3/Gap1
+SET 032F_MACHINE_MACHINE_1_GAP032    GAP032 sr/id/id_s3/Gap2
+SET 032F_MACHINE_MACHINE_1_GAP033    GAP033 sr/id/id_s3/Gap3
+SET 032F_MACHINE_MACHINE_1_GAP030    VALUE sr/id/id_s3/Gapall
+
+#ID4 readings
+GET FRONTEND_MACHINE_MACHINE_1_IHSET042       sr/id/id_s4/CurrentH
+GET FRONTEND_MACHINE_MACHINE_1_IVSET042       sr/id/id_s4/CurrentV
+GET FRONTEND_MACHINE_MACHINE_1_IVSTAT042      sr/id/id_s4/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_IHSTAT042      sr/id/id_s4/StatRF
+GET PSEWH_S4_CURSET_RR                     sr/id/id_s4/CurrentH
+GET PSEWV_S4_CURSET_RR                     sr/id/id_s4/CurrentV
+GET PSEWV_S4_STAT_RF                       sr/id/id_s4/StatRF
+GET PSEWH_S4_STAT_RF                       sr/id/id_s4/StatRF
+
+#id4 settings
+SET FRONTEND_MACHINE_MACHINE_1_IHSET042  GAP040 sr/id/id_s4/CurrentH
+SET FRONTEND_MACHINE_MACHINE_1_IVSET042  GAP041 sr/id/id_s4/CurrentV
+
+#ID5 readings
+GET 052F_MACHINE_MACHINE_1_GAP051       sr/id/id_s5/Gap1
+GET 052F_MACHINE_MACHINE_1_GAP052       sr/id/id_s5/Gap2
+GET 052F_MACHINE_MACHINE_1_GAP053       sr/id/id_s5/Gap3
+GET 052F_MACHINE_MACHINE_1_GAPS050      sr/id/id_s5/StatRF
+
+#ID6 readings
+GET 062F_MACHINE_MACHINE_1_GAP061       sr/id/id_s6/Gap1
+GET 062F_MACHINE_MACHINE_1_GAP062       sr/id/id_s6/Gap2
+GET 062F_MACHINE_MACHINE_1_GAP063       sr/id/id_s6/Gap3
+GET 062F_MACHINE_MACHINE_1_GAPS060      sr/id/id_s6/StatRF
+
+#ID6 settings
+SET 062F_MACHINE_MACHINE_1_GAP061    GAP061 sr/id/id_s6/Gap1
+SET 062F_MACHINE_MACHINE_1_GAP062    GAP062 sr/id/id_s6/Gap2
+SET 062F_MACHINE_MACHINE_1_GAP063    GAP063 sr/id/id_s6/Gap3
+SET 062F_MACHINE_MACHINE_1_GAP060    VALUE sr/id/id_s6/Gapall
+
+#ID7 readings
+GET 072F_MACHINE_MACHINE_1_POS072       blproxy/id/id_s7/UserPosition
+GET 072F_MACHINE_MACHINE_1_STAT070      blproxy/id/id_s7/StatRF
+
+#ID7 settings
+SET 072F_MACHINE_MACHINE_1_POS072    VALUE blproxy/id/id_s7/UserPosition
+
+#ID8 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP081       sr/id/id_s8.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP082       sr/id/id_s8.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_TAP081       sr/id/id_s8.1/Taper
+GET FRONTEND_MACHINE_MACHINE_1_TAP082       sr/id/id_s8.2/Taper
+GET FRONTEND_MACHINE_MACHINE_1_PHA081       sr/id/id_s8.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA082       sr/id/id_s8.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS081      sr/id/id_s8.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS082      sr/id/id_s8.2/StatRF
+
+#ID8 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP081 GAP081 sr/id/id_s8.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP082 GAP082 sr/id/id_s8.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_TAP081 TAP081 sr/id/id_s8.1/Taper
+SET FRONTEND_MACHINE_MACHINE_1_TAP082 TAP082 sr/id/id_s8.2/Taper
+SET FRONTEND_MACHINE_MACHINE_1_PHA081 PHA081 sr/id/id_s8.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA082 PHA082 sr/id/id_s8.2/Phase
+
+
+#ID9 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP091       sr/id/id_s9.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP092       sr/id/id_s9.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_TAP091       sr/id/id_s9.1/Taper
+GET FRONTEND_MACHINE_MACHINE_1_TAP092       sr/id/id_s9.2/Taper
+GET FRONTEND_MACHINE_MACHINE_1_PHA091       sr/id/id_s9.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA092       sr/id/id_s9.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS091      sr/id/id_s9.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS092      sr/id/id_s9.2/StatRF
+
+#ID9 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP091 GAP091 sr/id/id_s9.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP092 GAP092 sr/id/id_s9.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_TAP091 TAP091 sr/id/id_s9.1/Taper
+SET FRONTEND_MACHINE_MACHINE_1_TAP092 TAP092 sr/id/id_s9.2/Taper
+SET FRONTEND_MACHINE_MACHINE_1_PHA091 PHA091 sr/id/id_s9.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA092 PHA092 sr/id/id_s9.2/Phase
+
+#ID10 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP101   sr/id/id_s10.1/Gap1
+GET FRONTEND_MACHINE_MACHINE_1_GAP102   sr/id/id_s10.2/Gap1
+GET FRONTEND_MACHINE_MACHINE_1_GAPS101  sr/id/id_s10.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS102  sr/id/id_s10.2/StatRF
+#ID10 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP101   VALGAP sr/id/id_s10.1/Gap1
+SET FRONTEND_MACHINE_MACHINE_1_GAP102   VALGAP sr/id/id_s10.2/Gap1
+
+#ID12 twin apu  readings
+GET FRONTEND_MACHINE_MACHINE_1_HIGHENPOS  sr/id/id_s12.01/UserPositionHigh
+GET FRONTEND_MACHINE_MACHINE_1_LOWENPOS  sr/id/id_s12.01/UserPositionLow
+GET FRONTEND_MACHINE_MACHINE_1_LOWEN011   sr/id/id_s12.01/LowEnergy
+GET FRONTEND_MACHINE_MACHINE_1_HIGHEN011  sr/id/id_s12.01/HighEnergy
+GET FRONTEND_MACHINE_MACHINE_1_GAPS010     sr/id/id_s12.01/StatRF
+
+#ID12 twin apu settings
+SET FRONTEND_MACHINE_MACHINE_1_LOWENPOS   LOWENPOS sr/id/id_s12.01/UserPositionLow
+SET FRONTEND_MACHINE_MACHINE_1_HIGHENPOS  HIGHENPOS sr/id/id_s12.01/UserPositionHigh
diff --git a/TCPSserver/elettrabcsbridge011.cfg b/TCPSserver/elettrabcsbridge011.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..4b9694e2976e2e1e2027f85c4dd5f20e490bf194
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge011.cfg
@@ -0,0 +1,49 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s01.03/Pressure
+
+GET FRONTEND_MACHINE_MACHINE_1_P400S011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s01.01/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s1.1m/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.1m/StatRF
+
+GET 011F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_SS1
+
+GET 011F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_SS1
+
+GET 011F_MACHINE_MACHINE_1_XANGL  sr/diagnostics/bpmid/XP_SS1
+
+GET 011F_MACHINE_MACHINE_1_YANGL  sr/diagnostics/bpmid/YP_SS1
+
+#ID12 twin apu  readings
+GET FRONTEND_MACHINE_MACHINE_1_HIGHENPOS  sr/id/id_s12.01/UserPositionHigh
+
+GET FRONTEND_MACHINE_MACHINE_1_LOWENPOS  sr/id/id_s12.01/UserPositionLow
+
+GET FRONTEND_MACHINE_MACHINE_1_LOWEN011   sr/id/id_s12.01/LowEnergy
+
+GET FRONTEND_MACHINE_MACHINE_1_HIGHEN011  sr/id/id_s12.01/HighEnergy
+
+GET FRONTEND_MACHINE_MACHINE_1_GAPS010     sr/id/id_s12.01/StatRF
+
+#ID12 twin apu settings
+SET FRONTEND_MACHINE_MACHINE_1_LOWENPOS   LOWENPOS sr/id/id_s12.01/UserPositionLow
+SET FRONTEND_MACHINE_MACHINE_1_HIGHENPOS  HIGHENPOS sr/id/id_s12.01/UserPositionHigh
diff --git a/TCPSserver/elettrabcsbridge011.cfg.old b/TCPSserver/elettrabcsbridge011.cfg.old
new file mode 100644
index 0000000000000000000000000000000000000000..b4b4de6015b89ceb970c1941b3a4bd60c2445db2
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge011.cfg.old
@@ -0,0 +1,48 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_USERBEAM tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s01.03/Pressure
+
+GET FRONTEND_MACHINE_MACHINE_1_P400S011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s01.01/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s1.1m/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT011 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.1m/StatRF
+
+GET 011F_MACHINE_MACHINE_1_XPOS011    sr/diagnostics/bpmid/X_S1
+
+GET 011F_MACHINE_MACHINE_1_YPOS011    sr/diagnostics/bpmid/Y_S1
+
+GET 011F_MACHINE_MACHINE_1_XANGL011  sr/diagnostics/bpmid/XP_S1
+
+GET 011F_MACHINE_MACHINE_1_YANGL011  sr/diagnostics/bpmid/YP_S1
+
+#ID12 twin apu  readings
+GET FRONTEND_MACHINE_MACHINE_1_HIGHENPOS  sr/id/id_s12.01/UserPositionHigh
+
+GET FRONTEND_MACHINE_MACHINE_1_LOWENPOS  sr/id/id_s12.01/UserPositionLow
+
+GET FRONTEND_MACHINE_MACHINE_1_LOWEN011   sr/id/id_s12.01/LowEnergy
+
+GET FRONTEND_MACHINE_MACHINE_1_HIGHEN011  sr/id/id_s12.01/HighEnergy
+
+GET FRONTEND_MACHINE_MACHINE_1_GAPS010     sr/id/id_s12.01/StatRF
+
+#ID12 twin apu settings
+SET FRONTEND_MACHINE_MACHINE_1_LOWENPOS   LOWENPOS sr/id/id_s12.01/UserPositionLow
diff --git a/TCPSserver/elettrabcsbridge012.cfg b/TCPSserver/elettrabcsbridge012.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..0adf6078a5655013598237982b0e38e0e9f9a429
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge012.cfg
@@ -0,0 +1,55 @@
+#configuration  file for elettra-Tango  to BCS bridge - FEL - Nanospectroscopy : 20012
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s01.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s01.01/Pressure
+#questo puo' essere diffente dal vecchio SIP400_S1.2_PRES_RR che non esiet piu'
+
+
+#front-end VLVFE readings
+#GET FRONTEND_MACHINE_MACHINE_1_VALVE01M tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s1.1m/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_VALVE012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s1.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+#GET FRONTEND_MACHINE_MACHINE_1_SHUT01M tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.1m/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT012 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s1.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+GET 012F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S1
+GET 012F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S1
+GET 012F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S1
+GET 012F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S1
+
+#ID1 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP011       sr/id/id_s1.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP012       sr/id/id_s1.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_PHA011       sr/id/id_s1.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA012       sr/id/id_s1.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS011      sr/id/id_s1.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS012      sr/id/id_s1.2/StatRF
+
+#ID1 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP011 GAP011 sr/id/id_s1.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP012 GAP012 sr/id/id_s1.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_PHA011 PHA011 sr/id/id_s1.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA012 PHA012 sr/id/id_s1.2/Phase
+
+#PSMOD1 readings
+GET FRONTEND_MACHINE_MACHINE_1_IM012       sr/id/psmod_s1/Current
+GET FRONTEND_MACHINE_MACHINE_1_M012        sr/id/psmod_s1/StatRF
+
+#PSMOD1 settings
+SET FRONTEND_MACHINE_MACHINE_1_IM012 IM012 sr/id/psmod_s1/Current
diff --git a/TCPSserver/elettrabcsbridge022.cfg b/TCPSserver/elettrabcsbridge022.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..c46fa111dc8858e9ee13a91399159dbd4e12f427
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge022.cfg
@@ -0,0 +1,45 @@
+#configuration  file for elettra-Tango  to BCS bridge 022 	SuperESCA - Escamicroscopy : 20022
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET 022F_MACHINE_MACHINE_1_P120S022     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s02.07/Pressure
+GET 022F_MACHINE_MACHINE_1_P400S022     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s02.02/Pressure
+
+#front-end VLVFE readings
+GET 022F_MACHINE_MACHINE_1_VALVE022     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s2.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET 022F_MACHINE_MACHINE_1_SHUT022     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s2.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+
+GET 022F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S2
+GET 022F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S2
+GET 022F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S2
+GET 022F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S2
+
+
+
+#beam positions and angles at short straight sections
+
+
+#ID2 readings
+GET 022F_MACHINE_MACHINE_1_GAP021       blproxy/id/id_s2/Gap
+GET 022F_MACHINE_MACHINE_1_TAP021       blproxy/id/id_s2/Tapering
+GET 022F_MACHINE_MACHINE_1_GAPS020      blproxy/id/id_s2/StatRF
+
+#ID2 settings
+SET 022F_MACHINE_MACHINE_1_GAP021    VALGAP blproxy/id/id_s2/Gap
+SET 022F_MACHINE_MACHINE_1_TAP021    VALGAP blproxy/id/id_s2/Tapering
diff --git a/TCPSserver/elettrabcsbridge032.cfg b/TCPSserver/elettrabcsbridge032.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..1bd255155ed351454918b649d403ac9e92e0f64b
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge032.cfg
@@ -0,0 +1,45 @@
+#configuration  file for elettra-Tango  to BCS bridge 032 	VUV photoemission - Spectromicroscopy : 20032
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET 032F_MACHINE_MACHINE_1_P120S032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s03.07/Pressure
+GET 032F_MACHINE_MACHINE_1_P400S032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s03.02/Pressure
+
+#front-end VLVFE readings
+
+GET 032F_MACHINE_MACHINE_1_VALVE032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s3.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+
+GET 032F_MACHINE_MACHINE_1_SHUT032     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s3.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+
+GET 032F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S3
+GET 032F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S3
+GET 032F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S3
+GET 032F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S3
+
+#ID3 readings
+GET 032F_MACHINE_MACHINE_1_GAP031       sr/id/id_s3/Gap1
+GET 032F_MACHINE_MACHINE_1_GAP032       sr/id/id_s3/Gap2
+GET 032F_MACHINE_MACHINE_1_GAP033       sr/id/id_s3/Gap3
+GET 032F_MACHINE_MACHINE_1_GAPS030      sr/id/id_s3/StatRF
+
+#ID3 settings
+SET 032F_MACHINE_MACHINE_1_GAP031    GAP031 sr/id/id_s3/Gap1
+SET 032F_MACHINE_MACHINE_1_GAP032    GAP032 sr/id/id_s3/Gap2
+SET 032F_MACHINE_MACHINE_1_GAP033    GAP033 sr/id/id_s3/Gap3
+SET 032F_MACHINE_MACHINE_1_GAP030    VALUE sr/id/id_s3/Gapall
diff --git a/TCPSserver/elettrabcsbridge042.cfg b/TCPSserver/elettrabcsbridge042.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..745fcced078633cf3ba07c6bd138cc11cf2f731a
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge042.cfg
@@ -0,0 +1,50 @@
+#configuration  file for elettra-Tango  to BCS bridge 042 	Circularly Polarized : 20042
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s04.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s04.02/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s4.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT042 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s4.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+
+GET 042F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S4
+GET 042F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S4
+GET 042F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S4
+GET 042F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S4
+
+
+#ID4 readings
+GET FRONTEND_MACHINE_MACHINE_1_IH042       sr/id/id_s4/CurrentH
+GET FRONTEND_MACHINE_MACHINE_1_IV042       sr/id/id_s4/CurrentV
+GET FRONTEND_MACHINE_MACHINE_1_IHSET042    sr/id/id_s4/CurrentH
+GET FRONTEND_MACHINE_MACHINE_1_IVSET042    sr/id/id_s4/CurrentV
+GET FRONTEND_MACHINE_MACHINE_1_IVST042     sr/id/id_s4/FlagV
+GET FRONTEND_MACHINE_MACHINE_1_IHST042     sr/id/id_s4/FlagH
+GET PSEWH_S4_CURSET_RR                     sr/id/id_s4/CurrentH
+GET PSEWV_S4_CURSET_RR                     sr/id/id_s4/CurrentV
+GET PSEWV_S4_STAT_RF                       sr/id/id_s4/FlagV
+GET PSEWH_S4_STAT_RF                       sr/id/id_s4/FlagH
+
+#id4 settings
+SET FRONTEND_MACHINE_MACHINE_1_IH042  GAP040 sr/id/id_s4/CurrentH
+SET FRONTEND_MACHINE_MACHINE_1_IV042  GAP041 sr/id/id_s4/CurrentV
+SET FRONTEND_MACHINE_MACHINE_1_IHSET042  GAP040 sr/id/id_s4/CurrentH
+SET FRONTEND_MACHINE_MACHINE_1_IVSET042  GAP041 sr/id/id_s4/CurrentV
diff --git a/TCPSserver/elettrabcsbridge052.cfg b/TCPSserver/elettrabcsbridge052.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..eba374a529d95e5b8c15c7d17f94e5f83017af8f
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge052.cfg
@@ -0,0 +1,40 @@
+#configuration  file for elettra-Tango  to BCS bridge 052 	X-ray diffraction - SAXS : 20052
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+
+GET 052F_MACHINE_MACHINE_1_P120S052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S5.7_PRES_RR
+GET 052F_MACHINE_MACHINE_1_P400S052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S5.2_PRES_RR
+
+
+
+#front-end VLVFE readings
+GET 052F_MACHINE_MACHINE_1_VALVE052     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S5.2_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+GET 052F_MACHINE_MACHINE_1_SHUT052     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s5.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+
+GET 052F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S5
+GET 052F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S5
+GET 052F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S5
+GET 052F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S5
+
+
+#ID5 readings
+GET 052F_MACHINE_MACHINE_1_GAP051       sr/id/id_s5/Gap1
+GET 052F_MACHINE_MACHINE_1_GAP052       sr/id/id_s5/Gap2
+GET 052F_MACHINE_MACHINE_1_GAP053       sr/id/id_s5/Gap3
+GET 052F_MACHINE_MACHINE_1_GAPS050      sr/id/id_s5/StatRF
diff --git a/TCPSserver/elettrabcsbridge061.cfg b/TCPSserver/elettrabcsbridge061.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..ee401ee0247a1972c6df65b5cac8e9a90bb5640a
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge061.cfg
@@ -0,0 +1,31 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET 061F_MACHINE_MACHINE_1_P120S061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S6.3_PRES_RR
+GET 061F_MACHINE_MACHINE_1_P400S061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S6.1_PRES_RR
+
+#front-end VLVFE readings
+GET 061F_MACHINE_MACHINE_1_VALVE061     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S6.1_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+
+GET 061F_MACHINE_MACHINE_1_SHUT061     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s6.1/StatRF
+
+
+#beam positions and angles at exit  of bending magnets
+
+GET 061F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B6
+GET 061F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B6
+GET 061F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B6
+GET 061F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B6
diff --git a/TCPSserver/elettrabcsbridge062.cfg b/TCPSserver/elettrabcsbridge062.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..5e8c3a2590b8db870114244b83f6ac80de953083
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge062.cfg
@@ -0,0 +1,41 @@
+#configuration  file for elettra-Tango  to BCS bridge 062 	Gas Phase : 20062
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET 062F_MACHINE_MACHINE_1_P120S062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S6.7_PRES_RR
+GET 062F_MACHINE_MACHINE_1_P400S062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S6.2_PRES_RR
+
+#front-end VLVFE readings
+GET 062F_MACHINE_MACHINE_1_VALVE062     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S6.2_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+GET 062F_MACHINE_MACHINE_1_SHUT062     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s6.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+
+GET 062F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S6
+GET 062F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S6
+GET 062F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S6
+GET 062F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S6
+
+#ID6 readings
+GET 062F_MACHINE_MACHINE_1_GAP061       sr/id/id_s6/Gap1
+GET 062F_MACHINE_MACHINE_1_GAP062       sr/id/id_s6/Gap2
+GET 062F_MACHINE_MACHINE_1_GAP063       sr/id/id_s6/Gap3
+GET 062F_MACHINE_MACHINE_1_GAPS060      sr/id/id_s6/StatRF
+
+#ID6 settings
+SET 062F_MACHINE_MACHINE_1_GAP061    GAP061 sr/id/id_s6/Gap1
+SET 062F_MACHINE_MACHINE_1_GAP062    GAP062 sr/id/id_s6/Gap2
+SET 062F_MACHINE_MACHINE_1_GAP063    GAP063 sr/id/id_s6/Gap3
+SET 062F_MACHINE_MACHINE_1_GAP060    VALUE sr/id/id_s6/Gapall
diff --git a/TCPSserver/elettrabcsbridge071.cfg b/TCPSserver/elettrabcsbridge071.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..99fb1be57f47f64c89fd827ac009df35fb9707e6
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge071.cfg
@@ -0,0 +1,30 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S7.3_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S7.1_PRES_RR
+
+#front-end VLVFE readings
+
+GET FRONTEND_MACHINE_MACHINE_1_VALVE071 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S7.1_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT071 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s7.1/StatRF
+
+#beam positions and angles at exit  of bending magnets
+
+GET 071F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B7
+GET 071F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B7
+GET 071F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B7
+GET 071F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B7
diff --git a/TCPSserver/elettrabcsbridge072.cfg b/TCPSserver/elettrabcsbridge072.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..3d9d4aaab3072a42820bd6ba3fc1237147b8e89f
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge072.cfg
@@ -0,0 +1,39 @@
+#configuration  file for elettra-Tango  to BCS bridge 072 	ALOISA : 20072
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET 072F_MACHINE_MACHINE_1_P120S072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S7.7_PRES_RR
+GET 072F_MACHINE_MACHINE_1_P400S072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S7.2_PRES_RR
+
+#front-end VLVFE readings
+
+GET 072F_MACHINE_MACHINE_1_VALVE072     tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S7.2_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+
+GET 072F_MACHINE_MACHINE_1_SHUT072     tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s7.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+
+GET 072F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S7
+GET 072F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S7
+GET 072F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S7
+GET 072F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S7
+
+#ID7 readings
+GET 072F_MACHINE_MACHINE_1_POS072       blproxy/id/id_s7/UserPosition
+GET 072F_MACHINE_MACHINE_1_STAT070      blproxy/id/id_s7/StatRF
+
+#ID7 settings
+SET 072F_MACHINE_MACHINE_1_POS072    VALUE blproxy/id/id_s7/UserPosition
diff --git a/TCPSserver/elettrabcsbridge081.cfg b/TCPSserver/elettrabcsbridge081.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a3f01c3aeb5df25b246643d90542c1b223a3805e
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge081.cfg
@@ -0,0 +1,33 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S8.3_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S8.1_PRES_RR
+
+
+#front-end VLVFE readings
+
+GET FRONTEND_MACHINE_MACHINE_1_VALVE081 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S8.1_STAT_RF
+
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT081 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s8.1/StatRF
+
+#beam positions and angles at centre bending
+
+GET 081F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B8
+GET 081F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B8
+GET 081F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B8
+GET 081F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B8
diff --git a/TCPSserver/elettrabcsbridge082.cfg b/TCPSserver/elettrabcsbridge082.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..16e4c036363e2ab66fd41a8c9bea1f69c2e9597f
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge082.cfg
@@ -0,0 +1,53 @@
+#configuration  file for elettra-Tango  to BCS bridge 082 	Bach : 20082
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S8.7_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S8.2_PRES_RR
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE082 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S8.2_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT082 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s8.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+
+
+GET 082F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S8
+GET 082F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S8
+GET 082F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S8
+GET 082F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S8
+
+#ID8 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP081       sr/id/id_s8.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP082       sr/id/id_s8.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_TAP081       sr/id/id_s8.1/Taper
+GET FRONTEND_MACHINE_MACHINE_1_TAP082       sr/id/id_s8.2/Taper
+GET FRONTEND_MACHINE_MACHINE_1_PHA081       sr/id/id_s8.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA082       sr/id/id_s8.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS081      sr/id/id_s8.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS082      sr/id/id_s8.2/StatRF
+
+#ID8 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP081 GAP081 sr/id/id_s8.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP082 GAP082 sr/id/id_s8.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_TAP081 TAP081 sr/id/id_s8.1/Taper
+SET FRONTEND_MACHINE_MACHINE_1_TAP082 TAP082 sr/id/id_s8.2/Taper
+SET FRONTEND_MACHINE_MACHINE_1_PHA081 PHA081 sr/id/id_s8.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA082 PHA082 sr/id/id_s8.2/Phase
+SET FRONTEND_MACHINE_MACHINE_1_BRK081 BRKON sr/id/id_s8.1/Brake
+SET FRONTEND_MACHINE_MACHINE_1_BRK082 BRKON sr/id/id_s8.2/Brake
diff --git a/TCPSserver/elettrabcsbridge091.cfg b/TCPSserver/elettrabcsbridge091.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..1dc3c108147a9433a4899405da351b0f619f18d2
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge091.cfg
@@ -0,0 +1,30 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S9.2_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S9.1_PRES_RR
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S9.1_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT091 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s9.1/StatRF
+
+#beam positions and angles at centre of straigth sections
+GET 091F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B9
+GET 091F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B9
+GET 091F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B9
+GET 091F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B9
diff --git a/TCPSserver/elettrabcsbridge092.cfg b/TCPSserver/elettrabcsbridge092.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..775e1b4dc70955fe64da9992610be471abd430f5
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge092.cfg
@@ -0,0 +1,53 @@
+#configuration  file for elettra-Tango  to BCS bridge 092 	APE : 20092
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s09.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s09.02/Pressure
+
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s9.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT092 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s9.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+
+
+GET 092F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S9
+GET 092F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S9
+GET 092F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S9
+GET 092F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S9
+
+#ID9 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP091       sr/id/id_s9.1/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAP092       sr/id/id_s9.2/Gap
+GET FRONTEND_MACHINE_MACHINE_1_TAP091       sr/id/id_s9.1/Taper
+GET FRONTEND_MACHINE_MACHINE_1_TAP092       sr/id/id_s9.2/Taper
+GET FRONTEND_MACHINE_MACHINE_1_PHA091       sr/id/id_s9.1/Phase
+GET FRONTEND_MACHINE_MACHINE_1_PHA092       sr/id/id_s9.2/Phase
+GET FRONTEND_MACHINE_MACHINE_1_GAPS091      sr/id/id_s9.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS092      sr/id/id_s9.2/StatRF
+
+#ID9 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP091 GAP091 sr/id/id_s9.1/Gap
+SET FRONTEND_MACHINE_MACHINE_1_GAP092 GAP092 sr/id/id_s9.2/Gap
+SET FRONTEND_MACHINE_MACHINE_1_TAP091 TAP091 sr/id/id_s9.1/Taper
+SET FRONTEND_MACHINE_MACHINE_1_TAP092 TAP092 sr/id/id_s9.2/Taper
+SET FRONTEND_MACHINE_MACHINE_1_PHA091 PHA091 sr/id/id_s9.1/Phase
+SET FRONTEND_MACHINE_MACHINE_1_PHA092 PHA092 sr/id/id_s9.2/Phase
+SET FRONTEND_MACHINE_MACHINE_1_BRK091 BRKON sr/id/id_s9.1/Brake
+SET FRONTEND_MACHINE_MACHINE_1_BRK092 BRKON sr/id/id_s9.2/Brake
diff --git a/TCPSserver/elettrabcsbridge101.cfg b/TCPSserver/elettrabcsbridge101.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a309597e774e92e12cfd4b29dd2a8704c0c6e58d
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge101.cfg
@@ -0,0 +1,32 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s10.03/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s10.01/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s10.1/StatRF
+
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT101 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s10.1/StatRF
+
+#beam positions and angles at exit  of bending magnets
+
+
+GET 101F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B10
+GET 101F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B10
+GET 101F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B10
+GET 101F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B10
diff --git a/TCPSserver/elettrabcsbridge102.cfg b/TCPSserver/elettrabcsbridge102.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..e25277ddf989d0bc56524bb9cab3af4a2ab1f50d
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge102.cfg
@@ -0,0 +1,48 @@
+#configuration  file for elettra-Tango  to BCS bridge 102 	Iuvs BaDElph: 20102
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s10.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s10.02/Pressure
+
+#front-end VLVFE readings
+
+GET FRONTEND_MACHINE_MACHINE_1_VALVE102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s10.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT102 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s10.2/StatRF
+
+#beam positions and angles at centre of straigth sections
+
+
+GET 102F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S10
+GET 102F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S10
+GET 102F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S10
+GET 102F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S10
+
+
+
+#ID10 readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP101   sr/id/id_s10.1/Gap1
+GET FRONTEND_MACHINE_MACHINE_1_GAP102   sr/id/id_s10.2/Gap1
+GET FRONTEND_MACHINE_MACHINE_1_GAPS101  sr/id/id_s10.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_GAPS102  sr/id/id_s10.2/StatRF
+#ID10 settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP101   VALGAP sr/id/id_s10.1/Gap1
+SET FRONTEND_MACHINE_MACHINE_1_GAP102   VALGAP sr/id/id_s10.2/Gap1
+
+#ID10 collective readings
+GET FRONTEND_MACHINE_MACHINE_1_GAP100   sr/id/id_s10/Gap
+GET FRONTEND_MACHINE_MACHINE_1_GAPS100  sr/id/id_s10/StatRF
+#ID10 collective settings
+SET FRONTEND_MACHINE_MACHINE_1_GAP100   VALGAP sr/id/id_s10/Gap
diff --git a/TCPSserver/elettrabcsbridge111.cfg b/TCPSserver/elettrabcsbridge111.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..d2311fd50b8bcb5c9c32eff82a261715d2d246b2
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge111.cfg
@@ -0,0 +1,29 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+##vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s11.03/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s11.01/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s11.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT111 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s11.1/StatRF
+
+#beam positions and angles at exit  of bending magnets
+GET 111F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B11
+GET 111F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B11
+GET 111F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B11
+GET 111F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B11
diff --git a/TCPSserver/elettrabcsbridge112.cfg b/TCPSserver/elettrabcsbridge112.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..12226d108926db65886a65eaa0c1fb20c2eeb242
--- /dev/null
+++ b/TCPSserver/elettrabcsbridge112.cfg
@@ -0,0 +1,36 @@
+#configuration  file for elettra-Tango  to BCS bridge 112 (SCW) 	 : 20112
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA tango://ecsproxy:11111/info/sr/1#dbase=no/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON tango://ecsproxy:11111/info/sr/1#dbase=no/beamON
+
+#vacuum redings SIP120-SIP400
+GET FRONTEND_MACHINE_MACHINE_1_P120S112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip120_s11.07/Pressure
+GET FRONTEND_MACHINE_MACHINE_1_P400S112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/sip400_s11.02/Pressure
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/vlvfe_s12.2/StatRF
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT112 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s11.2/StatRF
+
+
+#beam positions and angles at centre of straigth sections
+
+
+GET 112F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_S11
+GET 112F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_S11
+GET 112F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_S11
+GET 112F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_S11
+
+#SCW reading
+GET FRONTEND_MACHINE_MACHINE_1_SCWFIELD  sr/scw/scw_a11.1/MagneticField
+GET FRONTEND_MACHINE_MACHINE_1_SCWSTATE  sr/scw/scw_a11.1/State
diff --git a/TCPSserver/list-active.txt b/TCPSserver/list-active.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d985964ea28298a4a4540d818e22db0a9cdd977d
--- /dev/null
+++ b/TCPSserver/list-active.txt
@@ -0,0 +1,36 @@
+1.1: PS120S01_M, PS400S11, VALVE01M SHUT01M XANGL011,XPOS011,YANGL011 YPOS011
+
+1.2 (012) P120S012, PS400S012 SHUT012 VALVE012 XANGL012,XPOS012,YANGL012 YPOS012
+
+2.2 (022) PS120S022 PS400S022 SHUT022 VALVE022 XANGL022,XPOS022,YANGL022 YPOS022
+
+3.2 (032) PS120S032 PS400S032 SHUT032 VALVE032 XANGL032,XPOS032,YANGL032 YPOS032
+
+4.2 (042) PS120S042 PS400S042 SHUT042 VALVE042 XANGL042,XPOS042,YANGL032 YPOS042
+
+5.2 (052) PS120S042 PS400S052 SHUT052 VALVE052 XANGL052,XPOS052,YANGL032 YPOS052
+
+6.1 (061) PS120S061 PS400S061 SHUT061 VALVE061 XANGL061,XPOS061,YANGL061 YPOS061
+
+6.2 (062) PS120S062 PS400S062 SHUT062 VALVE062 XANGL062,XPOS062,YANGL062 YPOS062
+
+7.1 (071) PS120S071 PS400S071 SHUT071 VALVE071 XANGL071,XPOS071,YANGL071 YPOS071
+
+7.2 (072) PS120S072 PS400S072 SHUT072 VALVE072 XANGL072,XPOS072,YANGL072 YPOS072
+
+8.1 (081) PS120S081 PS400S081 SHUT081 VALVE081 XANGL081,XPOS081,YANGL081 YPOS081
+
+8.2 (082) PS120S082 PS400S082 SHUT082 VALVE082 XANGL082,XPOS082,YANGL082 YPOS082
+
+9.1 (091) PS120S091 PS400S091 SHUT091 VALVE091 XANGL091,XPOS091,YANGL091 YPOS091
+
+9.2 (092) PS120S092 PS400S092 SHUT092 VALVE092 XANGL092,XPOS092,YANGL092 YPOS092
+
+10.1 (101) PS120S101 PS400S101 SHUT101 VALVE101 XANGL101,XPOS101,YANGL101 YPOS101
+
+10.2 (102) PS120S102 PS400S102 SHUT102 VALVE102 XANGL102,XPOS102,YANGL102 YPOS102
+
+11.1 (111) PS120S111 PS400S111 SHUT111 VALVE111 XANGL111,XPOS111,YANGL111 YPOS111
+
+11.2 (112) PS120S112 PS400S112 SHUT112 VALVE112 XANGL112,XPOS112,YANGL112 YPOS112
+
diff --git a/TCPSserver/prova.sh b/TCPSserver/prova.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ddadca65f37512ef30d02475c2ca52fdb5edd8c5
--- /dev/null
+++ b/TCPSserver/prova.sh
@@ -0,0 +1,9 @@
+INSTANCES="elettrabcsbridge012.cfg  elettrabcsbridge022.cfg elettrabcsbridge032.cfg elettrabcsbridge042.cfg elettrabcsbridge052.cfg elettrabcsbridge062.cfg  elettrabcsbridge072.cfg elettrabcsbridge082.cfg elettrabcsbridge092.cfg elettrabcsbridge102.cfg"
+PORTS=(20012 20022 20032 20042 20052 20062 02072 20082 20092 20102)
+index=0
+for inst in $INSTANCES
+do
+PORT=${PORTS[$index]}
+echo "$inst -f $PORT"
+index=$((index + 1))
+done
\ No newline at end of file
diff --git a/TCPSserver/tcps.sh b/TCPSserver/tcps.sh
new file mode 100755
index 0000000000000000000000000000000000000000..27f54944667a810443ac6ca4befff9ba41842de0
--- /dev/null
+++ b/TCPSserver/tcps.sh
@@ -0,0 +1,156 @@
+#!/bin/bash
+
+################################################################################
+# RP - 17 febbraio 2006
+# CS - 23 gennaio 2009
+# Codici di errore dello script
+# - in avvio:
+#   2: non c'e` l'eseguibile oppure i permessi non sono impostati correttamente
+#   3: il programma e` gia` in esecuzione
+#   4: non c'e` il file di configurazione /etc/default/elettra_daemons
+#   5: nel file di configurazione /etc/default/elettra_daemons non viene
+#      richiesto di avviare il programma
+#   6: errore nell'avvio del programma come root.
+#   7: errore nell'avvio del programma come servuser.
+#   8: e` stato utilizzato un utente sbagliato per eseguire lo script
+# - in arresto:
+#   50: il programma non e` in esecuzione
+#   51: si e` verificato un errore arrestando il programma. Viene fornito il
+#       codice di uscita del kill
+################################################################################
+PREFIX="/runtime/elettra/servers"
+CONFPREFIX="$PREFIX/etc"
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PREFIX/bin
+LD_LIBRARY_PATH=/usr/local/tango-7.2.6/lib:/usr/local/omniorb-4.1.4/lib
+export LD_LIBRARY_PATH PATH
+export TANGO_HOST=tom:20000
+
+PYTHONPATH=$PREFIX/bin
+export PYTHONPATH
+SERVER="$PREFIX/bin/TCPStwserver.py"
+
+INSTANCES="elettrabcsbridge012.cfg  elettrabcsbridge022.cfg elettrabcsbridge032.cfg elettrabcsbridge042.cfg elettrabcsbridge052.cfg elettrabcsbridge062.cfg  elettrabcsbridge072.cfg elettrabcsbridge082.cfg elettrabcsbridge092.cfg elettrabcsbridge102.cfg elettrabcsbridge011.cfg elettrabcsbridge061.cfg elettrabcsbridge071.cfg elettrabcsbridge081.cfg elettrabcsbridge101.cfg elettrabcsbridge111.cfg elettrabcsbridge091.cfg elettrabcsbridge112.cfg"
+
+PORTS=(20012 20022 20032 20042 20052 20062 20072 20082 20092 20102 20011 20061 20071 20081 20101 20111 20091 20112)
+
+LOGNAME="tcpserver"
+LOGBASE="/runtime/site/ecsproxy/log"
+LOGSIZE=1024k
+LOGLEVEL=info
+
+startserver()
+{
+if [ ! -x $SERVER ]; then
+	  echo " FAILED: $SERVER executable not found."
+	  exit 2
+fi
+index=0
+for INSTANCE in $INSTANCES
+do
+    PORT=${PORTS[$index]}
+    LOGFILE="$LOGBASE/$LOGNAME$PORT.log"
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "1" ]
+  	then
+  	  echo "$SERVER -f $INSTANCE: already running."
+    else
+        echo -n "Starting $SERVER $INSTANCE  server ..."
+        if [ `id -u` -eq "0" ]
+        then
+            su - servuser -c "cd / && ulimit -c unlimited && $SERVER -f $CONFPREFIX/$INSTANCE -p $PORT -v $LOGLEVEL -l $LOGFILE &"
+            sleep 1
+            if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+            then
+            echo " FAILED: an error occurred starting the program. Exit code: $?"
+            exit 6
+            else
+            echo " OK."
+            fi
+        else
+            if [ `id -u` -eq "10005" ]
+            then
+            cd / && ulimit -c unlimited && $SERVER -f $CONFPREFIX/$INSTANCE -p $PORT -v $LOGLEVEL -l $LOGFILE  &
+            sleep 1
+            if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+            then
+                echo " FAILED: an error occurred starting the program. Exit code: $?"
+                exit 6
+            else
+                echo " OK."
+            fi
+            else
+            echo " FAILED: You must be root or servuser to run this script."
+            exit 8
+            fi  
+        fi
+     fi
+     index=$((index + 1))
+done
+}
+
+stopserver()
+{
+for INST in $INSTANCES
+do
+    PORT=${PORTS[$index]}
+    LOGFILE="$LOGBASE/$LOGFILE$PORT.log"
+    INSTANCE=$INST
+    echo -n "Stopping $SERVER $CONFPREFIX/$INSTANCE  server ..."
+	if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+	then
+	  echo " FAILED: not running."
+	else
+	  kill `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | awk '{print $2}'`
+	  if [ $? != "0" ]
+	  then
+	    echo " FAILED stopping $SERVER -f $CONFPREFIX/$INSTANCE : an error occurred stopping the program. Exit code: $?"
+	  else
+	    echo " OK."
+	  fi
+        fi
+done
+}
+
+status()
+{
+for INSTANCE in $INSTANCES
+do
+    echo -n "checking $SERVER -f $CONFPREFIX/$INSTANCE  ..."
+	
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+    then
+        echo " NOT running."
+    fi
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -gt "0" ]
+    then
+        echo " running."
+    fi
+done 
+}
+
+case "$1" in
+    start)
+	startserver
+    ;;
+
+    stop)
+	stopserver
+    ;;
+
+    status)
+	status
+    ;;
+
+    restart)
+	$0 stop
+	sleep 2
+	$0 start
+    ;;
+    
+    *)
+	echo "Usage: /etc/init.d/$0 {start|stop|status|restart}"
+    ;;
+esac
+
+exit 0
+
+# EOF
diff --git a/TCPSserver/tcps.sh.inst b/TCPSserver/tcps.sh.inst
new file mode 100755
index 0000000000000000000000000000000000000000..f909233ca8f1a89284618cc44753d297cadc01a0
--- /dev/null
+++ b/TCPSserver/tcps.sh.inst
@@ -0,0 +1,156 @@
+#!/bin/bash
+
+################################################################################
+# RP - 17 febbraio 2006
+# CS - 23 gennaio 2009
+# Codici di errore dello script
+# - in avvio:
+#   2: non c'e` l'eseguibile oppure i permessi non sono impostati correttamente
+#   3: il programma e` gia` in esecuzione
+#   4: non c'e` il file di configurazione /etc/default/elettra_daemons
+#   5: nel file di configurazione /etc/default/elettra_daemons non viene
+#      richiesto di avviare il programma
+#   6: errore nell'avvio del programma come root.
+#   7: errore nell'avvio del programma come servuser.
+#   8: e` stato utilizzato un utente sbagliato per eseguire lo script
+# - in arresto:
+#   50: il programma non e` in esecuzione
+#   51: si e` verificato un errore arrestando il programma. Viene fornito il
+#       codice di uscita del kill
+################################################################################
+PREFIX="/runtime/elettra/servers"
+CONFPREFIX="$PREFIX/etc"
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PREFIX/bin
+LD_LIBRARY_PATH=/usr/local/tango-7.2.6/lib:/usr/local/omniorb-4.1.4/lib
+export LD_LIBRARY_PATH PATH
+export TANGO_HOST=tom:20000
+
+PYTHONPATH=$PREFIX/bin
+export PYTHONPATH
+SERVER="$PREFIX/bin/TCPStwserver.py"
+
+INSTANCES="elettrabcsbridge012.cfg  elettrabcsbridge022.cfg elettrabcsbridge032.cfg elettrabcsbridge042.cfg elettrabcsbridge052.cfg elettrabcsbridge062.cfg  elettrabcsbridge072.cfg elettrabcsbridge082.cfg elettrabcsbridge092.cfg elettrabcsbridge102.cfg elettrabcsbridge011.cfg elettrabcsbridge061.cfg elettrabcsbridge081.cfg elettrabcsbridge101.cfg elettrabcsbridge111.cfg"
+
+PORTS=(20012 20022 20032 20042 20052 20062 02072 20082 20092 20102 20011 20061 20081 20101 20111)
+
+LOGNAME="tcpserver"
+LOGBASE="/runtime/site/ecsproxy/log"
+LOGSIZE=1024k
+LOGLEVEL=info
+
+startserver()
+{
+if [ ! -x $SERVER ]; then
+	  echo " FAILED: $SERVER executable not found."
+	  exit 2
+fi
+index=0
+for INSTANCE in $INSTANCES
+do
+    PORT=${PORTS[$index]}
+    LOGFILE="$LOGBASE/$LOGNAME$PORT.log"
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "1" ]
+  	then
+  	  echo "$SERVER -f $INSTANCE: already running."
+    else
+        echo -n "Starting $SERVER $INSTANCE  server ..."
+        if [ `id -u` -eq "0" ]
+        then
+            su - servuser -c "cd / && ulimit -c unlimited && $SERVER -f $CONFPREFIX/$INSTANCE -p $PORT -v $LOGLEVEL -l $LOGFILE &"
+            sleep 1
+            if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+            then
+            echo " FAILED: an error occurred starting the program. Exit code: $?"
+            exit 6
+            else
+            echo " OK."
+            fi
+        else
+            if [ `id -u` -eq "10005" ]
+            then
+            cd / && ulimit -c unlimited && $SERVER -f $CONFPREFIX/$INSTANCE -p $PORT -v $LOGLEVEL -l $LOGFILE  &
+            sleep 1
+            if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+            then
+                echo " FAILED: an error occurred starting the program. Exit code: $?"
+                exit 6
+            else
+                echo " OK."
+            fi
+            else
+            echo " FAILED: You must be root or servuser to run this script."
+            exit 8
+            fi  
+        fi
+     fi
+     index=$((index + 1))
+done
+}
+
+stopserver()
+{
+for INST in $INSTANCES
+do
+    PORT=${PORTS[$index]}
+    LOGFILE="$LOGBASE/$LOGFILE$PORT.log"
+    INSTANCE=$INST
+    echo -n "Stopping $SERVER $CONFPREFIX/$INSTANCE  server ..."
+	if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+	then
+	  echo " FAILED: not running."
+	else
+	  kill `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | awk '{print $2}'`
+	  if [ $? != "0" ]
+	  then
+	    echo " FAILED stopping $SERVER -f $CONFPREFIX/$INSTANCE : an error occurred stopping the program. Exit code: $?"
+	  else
+	    echo " OK."
+	  fi
+        fi
+done
+}
+
+status()
+{
+for INSTANCE in $INSTANCES
+do
+    echo -n "checking $SERVER -f $CONFPREFIX/$INSTANCE  ..."
+	
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -eq "0" ]
+    then
+        echo " NOT running."
+    fi
+    if [ `ps -ef | grep "$SERVER -f $CONFPREFIX/$INSTANCE" | grep -v grep | wc -l` -gt "0" ]
+    then
+        echo " running."
+    fi
+done 
+}
+
+case "$1" in
+    start)
+	startserver
+    ;;
+
+    stop)
+	stopserver
+    ;;
+
+    status)
+	status
+    ;;
+
+    restart)
+	$0 stop
+	sleep 2
+	$0 start
+    ;;
+    
+    *)
+	echo "Usage: /etc/init.d/$0 {start|stop|status|restart}"
+    ;;
+esac
+
+exit 0
+
+# EOF
diff --git a/TCPSserver/tcpserver20012.log b/TCPSserver/tcpserver20012.log
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/TCPSserver/testcmd.cfg b/TCPSserver/testcmd.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..2296e15efe5492972b5a5d406f57bc57900a61a3
--- /dev/null
+++ b/TCPSserver/testcmd.cfg
@@ -0,0 +1,13 @@
+#configuration  file for elettra-Tango  to BCS bridge test simple commnds to fake ID
+
+#ID2 readings
+GET 022F_MACHINE_MACHINE_1_GAP021       sr/id/id_s2/Gap
+GET 022F_MACHINE_MACHINE_1_TAP021       sr/id/id_s2/Tapering
+
+#ID2 settings
+SET 022F_MACHINE_MACHINE_1_GAP021    VALGAP sr/id/id_s2/Gap
+SET 022F_MACHINE_MACHINE_1_TAP021    VALPHA sr/id/id_s2/Tapering
+
+#ID8 brakes
+GET 081F_MACHINE_MACHINE_1_BRK          sr/id/id_s8.1/Brake
+SET 081F_MACHINE_MACHINE_1_BRK    BRKON sr/id/id_s8.1/Brake
\ No newline at end of file
diff --git a/TCPSserver/testexc.py b/TCPSserver/testexc.py
new file mode 100644
index 0000000000000000000000000000000000000000..75a7c0a9ea03cd2d796f0c7eba279f29f9b25b4f
--- /dev/null
+++ b/TCPSserver/testexc.py
@@ -0,0 +1,19 @@
+import sys
+import string
+import PyTango
+
+dev=PyTango.DeviceProxy('sr/id/id_s2.2')
+
+try:
+    dev.write_attribute('Gap',22.5)
+except PyTango.DevFailed, e:
+    #exctype ,value = sys.exc_info()[:2]
+    #print 'Exception: ' , e
+    #for err in e:
+      #print ' reason', err.reason
+      #print ' description', err.desc
+      #print ' origin', err.origin
+      #print ' severity',err.severity
+    Err0=e[0].desc
+    Err1=e[1].desc
+    print 'ERRR', Err0, Err1.split()[5],
\ No newline at end of file
diff --git a/TCPSserver/testphbsh.cfg b/TCPSserver/testphbsh.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..39299db0e43c61ebd0d47746a7a991a10180bf99
--- /dev/null
+++ b/TCPSserver/testphbsh.cfg
@@ -0,0 +1,19 @@
+#front-end PHOTON SHUTTER readings
+GET FRONTEND_MACHINE_MACHINE_1_SHUT01M tango://tom:20000/sr/vacuum/phbsh_s1.1m/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT012 tango://tom:20000/sr/vacuum/phbsh_s1.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT101 tango://tom:20000/sr/vacuum/phbsh_s10.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT102 tango://tom:20000/sr/vacuum/phbsh_s10.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT111 tango://tom:20000/sr/vacuum/phbsh_s11.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT112 tango://tom:20000/sr/vacuum/phbsh_s11.2/StatRF
+GET 022F_MACHINE_MACHINE_1_SHUT022     tango://tom:20000/sr/vacuum/phbsh_s2.2/StatRF
+GET 032F_MACHINE_MACHINE_1_SHUT032     tango://tom:20000/sr/vacuum/phbsh_s3.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT042 tango://tom:20000/sr/vacuum/phbsh_s4.2/StatRF
+GET 052F_MACHINE_MACHINE_1_SHUT052     tango://tom:20000/sr/vacuum/phbsh_s5.2/StatRF
+GET 061F_MACHINE_MACHINE_1_SHUT061     tango://tom:20000/sr/vacuum/phbsh_s6.1/StatRF
+GET 062F_MACHINE_MACHINE_1_SHUT062     tango://tom:20000/sr/vacuum/phbsh_s6.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT071 tango://tom:20000/sr/vacuum/phbsh_s7.1/StatRF
+GET 072F_MACHINE_MACHINE_1_SHUT072     tango://tom:20000/sr/vacuum/phbsh_s7.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT081 tango://tom:20000/sr/vacuum/phbsh_s8.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT082 tango://tom:20000/sr/vacuum/phbsh_s8.2/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT091 tango://tom:20000/sr/vacuum/phbsh_s9.1/StatRF
+GET FRONTEND_MACHINE_MACHINE_1_SHUT092 tango://tom:20000/sr/vacuum/phbsh_s9.2/StatRF
\ No newline at end of file
diff --git a/TCPSserver/testsissi.cfg b/TCPSserver/testsissi.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..0cbe8cc61a37043e9fffae5a1e80178d2c1a5e27
--- /dev/null
+++ b/TCPSserver/testsissi.cfg
@@ -0,0 +1,30 @@
+#configuration  file for elettra-Tango  to BCS bridge
+
+
+#main beam parameters
+GET FRONTEND_MACHINE_MACHINE_1_ACCUCURR tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Current
+GET FRONTEND_MACHINE_MACHINE_1_EENERGY tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Energy
+GET FRONTEND_MACHINE_MACHINE_1_LIFETIME tango://tom.ecs.elettra.trieste.it:20000/sr/diagnostics/dcct_s4/Lifetime
+
+#topup bits reading reading
+GET FRONTEND_MACHINE_MACHINE_1_TOPUSTA info/sr/1/Topupbits
+#BeamON reading
+GET FRONTEND_MACHINE_MACHINE_1_BEAMON info/sr/1/beamON
+
+#vacuum redings SIP120-SIP400
+
+GET FRONTEND_MACHINE_MACHINE_1_P120S091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip120/SIP120_S9.2_PRES_RR
+GET FRONTEND_MACHINE_MACHINE_1_P400S091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/sip400/SIP400_S9.1_PRES_RR
+
+#front-end VLVFE readings
+GET FRONTEND_MACHINE_MACHINE_1_VALVE091 tango://tom.ecs.elettra.trieste.it:20000/rpcbridge/rpc2tangobridge/vlvfe/VLVFE_S9.1_STAT_RF
+
+#front-end PHOTON SHUTTER readings
+
+GET FRONTEND_MACHINE_MACHINE_1_SHUT091 tango://tom.ecs.elettra.trieste.it:20000/sr/vacuum/phbsh_s9.1/StatRF
+
+#beam positions and angles at centre of straigth sections
+GET 091F_MACHINE_MACHINE_1_XPOS    sr/diagnostics/bpmid/X_B9
+GET 091F_MACHINE_MACHINE_1_YPOS    sr/diagnostics/bpmid/Y_B9
+GET 091F_MACHINE_MACHINE_1_XANGLE  sr/diagnostics/bpmid/XP_B9
+GET 091F_MACHINE_MACHINE_1_YANGLE  sr/diagnostics/bpmid/YP_B9
diff --git a/blfe.py b/blfe.py
new file mode 100644
index 0000000000000000000000000000000000000000..476e957d86afeda00d8f3d93661416c0c0096891
--- /dev/null
+++ b/blfe.py
@@ -0,0 +1,209 @@
+# module for creating beamline front-end config
+# class blfe incapsulates the reading and closing of beamline front-ends shuter/stoppers
+# stores also the complet configuration
+# $Author: claudio $
+#
+# $Name:  $
+#
+# $Log: blfe.py,v $
+# Revision 1.15  2021-01-11 14:46:35  claudio
+# removed 061_BSTOPPERAF
+#
+# Revision 1.14  2018-04-30 08:36:29  claudio
+# #5959 errore closing front end
+#
+# Revision 1.13  2018-04-12 08:46:16  claudio
+# mod syrmep- verificate
+#
+# Revision 1.12  2018-04-03 08:42:34  claudio
+# #5643: modifiche syrmep
+#
+# Revision 1.11  2017-02-13 09:27:36  claudio
+# revision tag
+#
+# Revision 1.10  2016-03-21 08:54:23  claudio
+# tested commands for 112f
+#
+# Revision 1.9  2016-03-10 09:05:23  claudio
+# add 112 stopper
+#
+# Revision 1.8  2015-12-22 10:34:45  claudio
+# ticket 1591
+#
+# Revision 1.7  2014-09-29 09:08:53  claudio
+# correctc CMD and VAR for microfluo shopper
+#
+# Revision 1.6  2014-09-11 11:15:23  claudio
+# corrected label
+#
+# Revision 1.5  2014-09-10 12:16:13  claudio
+# ticket 1406: LEFT_SHUTTER_VACOWAGO_20
+#
+# Revision 1.4  2013-04-08 14:19:24  claudio
+# force case in string comparison
+#
+# Revision 1.3  2009/11/13 10:01:36  claudio
+# "natural" default rpc timeout
+#
+# Revision 1.2  2008/09/30 07:53:49  claudio
+# commented out shutter/stopper under commissioning (11.2)
+#
+# Revision 1.1  2008/09/23 09:12:10  claudio
+# First import
+#
+#
+import lib_pyElettra
+import string
+class blfe:
+    def __init__(self):
+        self.nread=0
+        self.nerror=0
+        self.nopen=0
+        self.nclosed=0
+        self.nunknown=0
+        self.nentries=0
+        
+        self.bltable=[]
+        #here put in the complete table of shopper/shutters/stoppers in beamline jargon
+        # format of table entry is:
+        # 'point','host','read-command_name',value,'status',set-command_name,set-parm
+        # value:0 closed, 1 open, -1 unknown, -2 read error'
+        # status: UNKNOWN,OPEN,CLOSED,ERROR
+        # value and status are dynamically changed by read operations
+        
+#		self.bltable.append(['BACKEND_SHOPPER_VACOBECK_20_STATUS0','bacs011.blcs.elettra.trieste.it','1.0-backend',-1,'UNKNOWN','BACKEND_SHOPPER_VACOBECK_20_RMTCMD0','RMTCMD0'])
+
+        self.bltable.append(['FRONTEND_SHOPPER-L_VACO_1_STATUS2','011f-bcs.blcs.elettra.trieste.it','1.1M TwinMic',-1,'UNKNOWN','FRONTEND_SHOPPER-L_VACO_1_RMTCMD2','VALRMTCMD2'])
+        
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','012f-bcs.blcs.elettra.trieste.it','1.2 Nanospectr.',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' ])
+        self.bltable.append(['FRONTEND_SHUTTER_VACO_1_STATUS0','012f-bcs.blcs.elettra.trieste.it','1.2 Nanospectr.',-1,'UNKNOWN','FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' ])
+        
+        self.bltable.append(['022F_USTOPPER1F_VACO_1_STATUS1','022f-bcs.blcs.elettra.trieste.it','2.2 ESCA',-1,'UNKNOWN','022F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['022F_USHUTTER1F_VACO_1_STATUS0','022f-bcs.blcs.elettra.trieste.it','2.2 ESCA',-1,'UNKNOWN','022F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0' ])
+        
+        self.bltable.append(['032F_USTOPPER1F_VACO_1_STATUS1','032f-bcs.blcs.elettra.trieste.it','3.2 VUV/Spectrom.',-1,'UNKNOWN','032F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['032F_USHUTTER1F_VACO_1_STATUS0','032f-bcs.blcs.elettra.trieste.it','3.2 VUV/Spectrom.',-1,'UNKNOWN','032F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','042f-bcs.blcs.elettra.trieste.it','4.2 Circ. pol.',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['FRONTEND_SHUTTER_VACO_1_STATUS0','042f-bcs.blcs.elettra.trieste.it','4.2 Circ. pol.',-1,'UNKNOWN','FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['XRD_STOPPER1_VACO_11_STATUS0','052f-bcs.blcs.elettra.trieste.it','5.2 XRD1',-1,'UNKNOWN','XRD_STOPPER1_VACO_11_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['XRD_STOPPER2_VACO_10_STATUS3','052f-bcs.blcs.elettra.trieste.it','5.2 XRD1',-1,'UNKNOWN','XRD_STOPPER2_VACO_10_RMTCMD3' , 'VALRMTCMD3'])
+        self.bltable.append(['XRD_STOPPER3_VACO_10_STATUS2','052f-bcs.blcs.elettra.trieste.it','5.2 XRD1',-1,'UNKNOWN','XRD_STOPPER3_VACO_10_RMTCMD2' , 'VALRMTCMD2' ])
+        self.bltable.append(['052F_WSHUTTER1F_VACO_1_STATUS5','052f-bcs.blcs.elettra.trieste.it','5.2 SAXS',-1,'UNKNOWN','052F_WSHUTTER1F_VACO_1_RMTCMD5' , 'VALRMTCMD5'])
+        self.bltable.append(['052F_WSTOPPER1F_VACO_1_STATUS4','052f-bcs.blcs.elettra.trieste.it','5.2 SAXS',-1,'UNKNOWN','052F_WSTOPPER1F_VACO_1_RMTCMD4' , 'VALRMTCMD4'])
+        
+        self.bltable.append(['061F_BSTOPPERCF_VACO_1_STATUS2','061f-bcs.blcs.elettra.trieste.it','6.1 Mat. Science',-1,'UNKNOWN','061F_BSTOPPERCF_VACO_1_RMTCMD2' , 'VALRMTCMD2'])
+        self.bltable.append(['061F_BSHUTTERAF_VACO_2_STATUS0','061f-bcs.blcs.elettra.trieste.it','6.1 Syrmep',-1,'UNKNOWN','061F_BSHUTTERAF_VACO_2_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['061F_BSHUTTERCF_VACO_1_STATUS0','061f-bcs.blcs.elettra.trieste.it','6.1 Mat. Science',-1,'UNKNOWN','061F_BSHUTTERCF_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['062F_USTOPPER1F_VACO_1_STATUS1','062f-bcs.blcs.elettra.trieste.it','6.2 GasPhase',-1,'UNKNOWN','062F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['062F_USHUTTER1F_VACO_1_STATUS0','062f-bcs.blcs.elettra.trieste.it','6.2 GasPhase',-1,'UNKNOWN','062F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_SHOPPER-R_VACO_1_STATUS0','071f-bcs.blcs.elettra.trieste.it','7.1 MCX',-1,'UNKNOWN','FRONTEND_SHOPPER-R_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['RIGHT_SHUTTER_VACO_30_STATUS4','071f-bcs.blcs.elettra.trieste.it','7.1 MCX',-1,'UNKNOWN','RIGHT_SHUTTER_VACO_30_RMTCMD4' , 'VALRMTCMD4'])
+        
+        self.bltable.append(['072F_USTOPPER1F_VACO_1_STATUS1','072f-bcs.blcs.elettra.trieste.it','7.2 ALOISA',-1,'UNKNOWN','072F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['072F_USHUTTER1F_VACO_1_STATUS0','072f-bcs.blcs.elettra.trieste.it','7.2 ALOISA',-1,'UNKNOWN','072F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_SHOPPER-R_VACO_2_STATUS0','081f-bcs.blcs.elettra.trieste.it','8.1 Lilit',-1,'UNKNOWN','FRONTEND_SHOPPER-R_VACO_2_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['FRONTEND_SHOPPER-L_VACO_1_STATUS0','081f-bcs.blcs.elettra.trieste.it','8.1 BEAR',-1,'UNKNOWN','FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['RIGHT_EXSLIT_VACO_10_STATUS4','081f-bcs.blcs.elettra.trieste.it','8.1 Lilit',-1,'UNKNOWN','RIGHT_EXSLIT_VACO_10_RMTCMD4' , 'VALRMTCMD4'])
+        
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','082f-bcs.blcs.elettra.trieste.it','8.2 Bach',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['FRONTEND_SHUTTER_VACO_1_STATUS0','082f-bcs.blcs.elettra.trieste.it','8.2 Bach',-1,'UNKNOWN','FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['CENTRAL_STOPPER_VACO_20_STATUS0','091f-bcs.blcs.elettra.trieste.it','9.1 SISSI',-1,'UNKNOWN','CENTRAL_STOPPER_VACO_20_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','092f-bcs.blcs.elettra.trieste.it','9.2 APE',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['FRONTEND_SHUTTER_VACO_1_STATUS0','092f-bcs.blcs.elettra.trieste.it','9.2 APE',-1,'UNKNOWN','FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_SHOPPER-R_VACO_1_STATUS4','101f-bcs.blcs.elettra.trieste.it','10.1 DXRL',-1,'UNKNOWN','FRONTEND_SHOPPER-R_VACO_1_RMTCMD4' , 'VALRMTCMD4'])
+        self.bltable.append(['FRONTEND_SHOPPER-L_VACO_1_STATUS0','101f-bcs.blcs.elettra.trieste.it','10.1 X-Ray Fluo.',-1,'UNKNOWN','FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['LEFT_SHUTTER_VACOWAGO_20_STATUS1','101f-bcs.blcs.elettra.trieste.it','10.1L X-Ray Fluo.',-1,'UNKNOWN','LEFT_SHUTTER_VACOWAGO_20_RMTCMD1' , 'RMTCMD1'])
+        
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','102f-bcs.blcs.elettra.trieste.it','10.2 IUVS/BaDElPh',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['FRONTEND_SHUTTER_VACO_1_STATUS0','102f-bcs.blcs.elettra.trieste.it','10.2 IUVS/BaDElPh',-1,'UNKNOWN','FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+        
+        self.bltable.append(['FRONTEND_SHOPPER-R_VACO_2_STATUS0','111f-bcs.blcs.elettra.trieste.it','11.1 XAFS',-1,'UNKNOWN','FRONTEND_SHOPPER-R_VACO_2_RMTCMD0' , 'VALRMTCMD0'])
+        self.bltable.append(['RIGHT_STOPPER_VACO_30_STATUS6','111f-bcs.blcs.elettra.trieste.it','11.1 XAFS',-1,'UNKNOWN','RIGHT_STOPPER_VACO_30_RMTCMD6' , 'VALRMTCMD6'])
+        self.bltable.append(['FRONTEND_SHOPPER-L_VACO_1_STATUS0','111f-bcs.blcs.elettra.trieste.it','11.1 WhITE',-1,'UNKNOWN','FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0'])
+
+        self.bltable.append(['FRONTEND_STOPPER_VACO_1_STATUS1','112f-bcs.blcs.elettra.trieste.it','11.2 XPRESS & XRD2',-1,'UNKNOWN','FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1'])
+        self.bltable.append(['RIGHT_SHOPPER2_VACOWAGO_30_STATUS0','112f-bcs.blcs.elettra.trieste.it','11.2 XPRESS',-1,'UNKNOWN','RIGHT_SHOPPER2_VACOWAGO_30_RMTCMD0' , 'RMTCMD0'])
+        self.bltable.append(['CENTRAL_STOPPER2_VACOWAGO_20_STATUS1','112f-bcs.blcs.elettra.trieste.it','11.2 XRD2',-1,'UNKNOWN','CENTRAL_STOPPER2_VACOWAGO_20_RMTCMD1' , 'RMTCMD1'])
+        
+        #form dictionary of hosts-controlstem objetcs
+        self.hostdict={}
+        for entry in self.bltable:
+            self.nunknown=self.nunknown+1
+            self.nentries=self.nentries+1
+            if entry[1] not in self.hostdict:
+                ControlSystem = lib_pyElettra.XCS()
+                ControlSystem.open(entry[1])
+                self.hostdict[entry[1]]=ControlSystem
+                #print 'add '+entry[1]
+    def disconnect(self):
+        for host,contrsys in self.hostdict.iteritems():
+            contrsys.close()
+    def read(self):
+        self.nread=0
+        self.nerror=0
+        self.nopen=0
+        self.nclosed=0
+        self.nunknown=0
+        for entry in self.bltable:
+            ControlSystem=self.hostdict[entry[1]]
+            resp = ControlSystem.fetch(entry[0])
+            self.nread=self.nread+1
+#			print entry[0]+" "+resp[0]+" "+resp[1]
+            if resp[1]=='fetchException':
+                ntry[3]=-2
+                entry[4]='ERROR'
+                self.nerror=self.nerror+1
+#				print entry[0]+' read error'
+            else:
+                if resp[0]=='1' and resp[1].lower()=='open':
+                    entry[3]=1
+                    entry[4]='OPEN'
+                    self.nopen=self.nopen+1
+#					print entry[0]+' OPENED'
+                elif resp[0]=='0' and resp[1].lower()=='closed':
+                    entry[3]=0
+                    entry[4]='CLOSED'
+                    self.nclosed=self.nclosed+1
+#					print entry[0]+' CLOSED'
+                elif resp[0]=='3' and resp[1].lower()=='closed':
+                    entry[3]=0
+                    entry[4]='CLOSED'
+                    self.nclosed=self.nclosed+1
+                else:
+                    entry[3]=-1
+                    entry[4]='UNKNOWN'
+#					print entry[0]+' UNKNOWN '+ resp[0]+ " "+resp[1]
+    def allclosed(self):
+# return 1 ONLY if we are positvely sure that we have successufully read all the shutters and that they are closed
+        if self.nclosed==self.nread and self.nread==self.nentries:
+            return 1
+        else:
+            return 0
+        
+    def closeall(self):
+# send close command to all known front-ends shuttters,stoppers, etc.
+        nclosed=0
+        nerror=0
+        errtable=[]
+        for entry in self.bltable:
+            ControlSystem=self.hostdict[entry[1]]
+            nclosed=nclosed+1
+            print nclosed , entry[5],entry[6]
+            if len(entry[5]) > 0 and len(entry[6]) >0:
+                resp=ControlSystem.doit(entry[5],entry[6],'0') # 0 per chiudere, 1 per aprire!
+            else:
+                resp = 'OK'
+            if ( string.find(resp,'OK') == -1):
+                nerror = nerror+1
+                errtable.append([entry[1],entry[2],entry[5],entry[6]])
+        if(nerror):
+            return errtable
diff --git a/blfetest.py b/blfetest.py
new file mode 100644
index 0000000000000000000000000000000000000000..c50bfdcedc40d63d1dbd6fe3509c0197aec4685a
--- /dev/null
+++ b/blfetest.py
@@ -0,0 +1,11 @@
+import blfe
+
+BL=blfe.blfe()
+
+BL.read()
+
+print 'BL all closed: '+repr(BL.allclosed())
+
+BL.disconnect()
+
+#print repr(BL.bltable)
\ No newline at end of file
diff --git a/demo.py b/demo.py
new file mode 100755
index 0000000000000000000000000000000000000000..63feed7ad588d83e65c8286e421bfe62beec73b5
--- /dev/null
+++ b/demo.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+from lib_pyElettra import *
+
+
+ControlSystem = XCS()
+ControlSystem.open("112f-bcs.blcs.elettra.trieste.it")
+
+#Let's read a pressure
+#resp = ControlSystem.fetch("FRONTEND_SHUTTER_TPG300_1_B2PRESSURE")
+#if resp[1]=='fetchException':
+	#print 'Exception' + resp[0]+","+resp[1]+","+resp[2]
+#else:
+	#value = float(resp[3])
+	#print 'response: press ' + repr(value)
+
+##Let's read a valve status
+resp = ControlSystem.fetch("CENTRAL_STOPPER2_VACOWAGO_20_STATUS1")
+if resp[1]=='fetchException':
+	print 'Exception ' + resp[0]+","+resp[1]+","+resp[2]
+else:
+	print resp
+	value = int(resp[0])
+	print 'response: stat ' + repr(value)
+
+
+#Let's change a valve status
+resp = ControlSystem.doit('CENTRAL_STOPPER2_VACOWAGO_20_RMTCMD1' , 'RMTCMD1' ,0)
+if ( string.find(resp,'OK') == -1):
+	print 'doit ERROR' + resp[0]+","+resp[1]+","+resp[2]
+else:
+	print 'response: ' + resp
+
+ControlSystem.close()
diff --git a/fakedevices/HelicalID.py b/fakedevices/HelicalID.py
new file mode 100644
index 0000000000000000000000000000000000000000..738c1231e63f88fef1496f54deda3db76b225142
--- /dev/null
+++ b/fakedevices/HelicalID.py
@@ -0,0 +1,632 @@
+#!/usr/bin/python
+#	"$Name:  $";
+#	"$Header: /home/cvsadm/cvsroot/elettra/server/bcsbridge/fakedevices/HelicalID.py,v 1.7 2014-05-12 12:14:43 claudio Exp $";
+#=============================================================================
+#
+# file :        HelicalID.py
+#
+# description : Python source for the HelicalID and its commands. 
+#                The class is derived from Device. It represents the
+#                CORBA servant object which will be accessed from the
+#                network. All commands which can be executed on the
+#                HelicalID are implemented in this file.
+#
+# project :     TANGO Device Server
+#
+# $Author: claudio $
+#
+# $Revision: 1.7 $
+#
+# $Log: HelicalID.py,v $
+# Revision 1.7  2014-05-12 12:14:43  claudio
+# *** empty log message ***
+#
+# Revision 1.6  2013-04-19 13:30:45  claudio
+# bug correctec in write_attribute
+#
+# Revision 1.5  2013-04-19 09:55:33  claudio
+# PyTango 8.0.2 compliant
+#
+# Revision 1.4  2012-08-21 14:06:20  claudio
+# interfaccia con MoveMaxGap e SetGapTapPha
+#
+# Revision 1.3  2012-08-20 12:34:06  claudio
+# support simulations for FERMI
+#
+# Revision 1.2  2010/12/24 10:48:08  claudio
+# improved simulation of motion
+#
+# Revision 1.1  2010/08/03 15:46:15  claudio
+# for testing TCPS
+#
+#
+# copyleft :    Sincrotrone Trieste s.c.p.A.
+#
+#=============================================================================
+#  		This file is generated by POGO
+#	(Program Obviously used to Generate tango Object)
+#
+#         (c) - Software Engineering Group - ESRF
+#=============================================================================
+#
+
+
+import PyTango
+import sys
+
+
+#==================================================================
+#   HelicalID Class Description:
+#
+#         simulator for helical insertion device.
+#         Use for testing tango - bcs bridge and supervisor
+#
+#==================================================================
+# 	Device States Description:
+#
+#   DevState.ON :
+#   DevState.FAULT :
+#   DevState.UNKNOWN :
+#   DevState.MOVING :
+#==================================================================
+
+
+class HelicalID(PyTango.Device_4Impl):
+
+#--------- Add you global variables here --------------------------
+
+#------------------------------------------------------------------
+#	Device constructor
+#------------------------------------------------------------------
+	def __init__(self,cl, name):
+		PyTango.Device_4Impl.__init__(self,cl,name)
+		HelicalID.init_device(self)
+
+#------------------------------------------------------------------
+#	Device destructor
+#------------------------------------------------------------------
+	def delete_device(self):
+		print "[Device delete_device method] for device",self.get_name()
+
+
+#------------------------------------------------------------------
+#	Device initialization
+#------------------------------------------------------------------
+	def init_device(self):
+		print "In ", self.get_name(), "::init_device()"
+		self.set_state(PyTango.DevState.INIT)
+		self.get_device_properties(self.get_device_class())
+		self.attr_Enabled_read=True
+		self.attr_StatRF_read = [False,False]
+		self.attr_Gap_read = 100.0
+		self.attr_Phase_read = 0.0
+		self.attr_Taper_read = 0.0
+		self.gap_write = self.attr_Gap_read
+		self.phase_write = self.attr_Phase_read
+		self.taper_write = self.attr_Taper_read
+		self.ready = True
+		self.moving = False
+		self.set_state(PyTango.DevState.ON)
+
+#------------------------------------------------------------------
+#	Always excuted hook method
+#------------------------------------------------------------------
+	def always_executed_hook(self):
+		print "In ", self.get_name(), "::always_excuted_hook()"
+
+#==================================================================
+#
+#	HelicalID read/write attribute methods
+#
+#==================================================================
+#------------------------------------------------------------------
+#	Read Attribute Hardware
+#------------------------------------------------------------------
+	def read_attr_hardware(self,data):
+		print "In ", self.get_name(), "::read_attr_hardware()"
+		#do simulated movement
+		if self.moving:
+			self.moving=False
+			if self.gap_write != self.attr_Gap_read:
+				delta=self.gap_write - self.attr_Gap_read
+				if delta > -1.0 and delta <1.0:
+					self.attr_Gap_read = self.gap_write
+				elif delta <= -1.0:
+					self.attr_Gap_read -= 1.0
+					self.moving=True
+				elif delta >=0.0:
+					self.attr_Gap_read += 1.0
+					self.moving = True
+			
+			if self.phase_write != self.attr_Phase_read:
+				delta=self.phase_write - self.attr_Phase_read
+				if delta > -1.0 and delta <1.0:
+					self.attr_Phase_read = self.phase_write
+				elif delta <= -1.0:
+					self.attr_Phase_read -= 1.0
+					self.moving=True
+				elif delta >=0.0:
+					self.attr_Phase_read += 1.0
+					self.moving = True
+
+			if self.taper_write != self.attr_Taper_read:
+				delta=self.taper_write - self.attr_Taper_read
+				if delta > -1.0 and delta <1.0:
+					self.attr_Taper_read = self.taper_write
+				elif delta <= -1.0:
+					self.attr_Taper_read -= 1.0
+					self.moving=True
+				elif delta >=0.0:
+					self.attr_Taper_read += 1.0
+					self.moving = True
+
+
+		
+		if self.moving:
+			self.set_state(PyTango.DevState.MOVING)
+			self.set_status('moving')
+			self.ready=False #not ready
+		else:
+			self.set_state(PyTango.DevState.ON)
+			self.ready=True # ready
+			self.set_status('ON and ready')
+
+
+
+#------------------------------------------------------------------
+#	Read Enabled attribute
+#------------------------------------------------------------------
+	def read_Enabled(self, attr):
+		print "In ", self.get_name(), "::read_Enabled()"
+		
+		#	Add your own code here
+		attr.set_value(self.attr_Enabled_read)
+
+
+#------------------------------------------------------------------
+#	Read Gap attribute
+#------------------------------------------------------------------
+	def read_Gap(self, attr):
+		print "In ", self.get_name(), "::read_Gap()"
+		
+		#	Add your own code here
+		attr.set_value(self.attr_Gap_read)
+
+
+#------------------------------------------------------------------
+#	Write Gap attribute
+#------------------------------------------------------------------
+	def write_Gap(self, attr):
+		print "In ", self.get_name(), "::write_Gap()"
+		
+		data = attr.get_write_value()
+		print "Attribute value = ", data
+		#	Add your own code here
+		# raise excpetionif operation is not permitted
+		if not (self.attr_Enabled_read and self.ready):
+			msg='gap request for '+str(data)+' RESPINTA'
+			PyTango.Except.throw_exception('Rejected request',msg,'HelicalID.write_Gap()')
+		self.gap_write=data
+		self.set_state(PyTango.DevState.MOVING)
+		self.moving = True
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#---- Gap attribute State Machine -----------------
+	def is_Gap_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read Phase attribute
+#------------------------------------------------------------------
+	def read_Phase(self, attr):
+		print "In ", self.get_name(), "::read_Phase()"
+		
+		#	Add your own code here
+		attr.set_value(self.attr_Phase_read)
+
+
+#------------------------------------------------------------------
+#	Write Phase attribute
+#------------------------------------------------------------------
+	def write_Phase(self, attr):
+		print "In ", self.get_name(), "::write_Phase()"
+		data = attr.get_write_value()
+		print "Attribute value = ", data
+
+		#	Add your own code here
+		if not (self.attr_Enabled_read and self.ready):
+			msg='phase request for '+str(data)+' RESPINTA'
+			PyTango.Except.throw_exception('Rejected request',msg,'HelicalID.write_Phase()')
+		self.phase_write=data
+		self.set_state(PyTango.DevState.MOVING)
+		self.moving = True
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#---- Phase attribute State Machine -----------------
+	def is_Phase_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read Taper attribute
+#------------------------------------------------------------------
+	def read_Taper(self, attr):
+		print "In ", self.get_name(), "::read_Taper()"
+		
+		#	Add your own code here
+		
+		attr.set_value(self.attr_Taper_read)
+
+
+#------------------------------------------------------------------
+#	Write Taper attribute
+#------------------------------------------------------------------
+	def write_Taper(self, attr):
+		print "In ", self.get_name(), "::write_Taper()"
+		data= attr.get_write_value()
+		print "Attribute value = ", data
+
+		#	Add your own code here
+		if not (self.attr_Enabled_read and self.ready):
+			msg='phase request for '+str(data)+' RESPINTA'
+			PyTango.Except.throw_exception('Rejected request',msg,'HelicalID.write_Phase()')
+		self.taper_write=data
+		self.set_state(PyTango.DevState.MOVING)
+		self.moving = True
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#---- Taper attribute State Machine -----------------
+	def is_Taper_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read GapSetPoint attribute
+#------------------------------------------------------------------
+	def read_GapSetPoint(self, attr):
+		print "In ", self.get_name(), "::read_GapSetPoint()"
+		
+		#	Add your own code here
+		
+		attr.set_value(self.gap_write)
+
+
+#---- GapSetPoint attribute State Machine -----------------
+	def is_GapSetPoint_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read PhaseSetPoint attribute
+#------------------------------------------------------------------
+	def read_PhaseSetPoint(self, attr):
+		print "In ", self.get_name(), "::read_PhaseSetPoint()"
+		
+		#	Add your own code here
+		
+		attr.set_value(self.phase_write)
+
+
+#---- PhaseSetPoint attribute State Machine -----------------
+	def is_PhaseSetPoint_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read TaperSetPoint attribute
+#------------------------------------------------------------------
+	def read_TaperSetPoint(self, attr):
+		print "In ", self.get_name(), "::read_TaperSetPoint()"
+		
+		#	Add your own code here
+		
+		
+		attr.set_value(self.taper_write)
+
+
+#---- TaperSetPoint attribute State Machine -----------------
+	def is_TaperSetPoint_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read StatRF attribute
+#------------------------------------------------------------------
+	def read_StatRF(self, attr):
+		print "In ", self.get_name(), "::read_StatRF()"
+		
+		#	Add your own code here
+		
+		attr_StatRF_read = [self.ready,self.attr_Enabled_read]
+		attr.set_value(attr_StatRF_read, 2)
+
+
+
+#==================================================================
+#
+#	HelicalID command methods
+#
+#==================================================================
+
+#------------------------------------------------------------------
+#	Remote command:
+#
+#	Description: enable remote operations for beamlines
+#                
+#------------------------------------------------------------------
+	def Remote(self):
+		print "In ", self.get_name(), "::Remote()"
+		#	Add your own code here
+		self.attr_Enabled_read=True
+
+
+#------------------------------------------------------------------
+#	Local command:
+#
+#	Description: inhibit remote operations to beamlines
+#                
+#------------------------------------------------------------------
+	def Local(self):
+		print "In ", self.get_name(), "::Local()"
+		#	Add your own code here
+		self.attr_Enabled_read=False
+
+
+#------------------------------------------------------------------
+#	MoveMaxGap command:
+#
+#	Description: go to max gap , rest position
+#                
+#------------------------------------------------------------------
+	def MoveMaxGap(self):
+		print "In ", self.get_name(), "::MoveMaxGap()"
+		#	Add your own code here
+		self.gap_write = self.MaxGap
+		self.phase_write = 0.0
+		self.taper_write = 0.0
+		self.set_state(PyTango.DevState.MOVING)
+		self.ready=False # NOT ready
+		self.moving = True
+		self.set_status('moving and not ready')
+		return
+
+
+#------------------------------------------------------------------
+#	SetGapTapPha command:
+#
+#	Description: set new working point in one go
+#                
+#	argin:  DevVarDoubleArray	gap, taper, phase
+#------------------------------------------------------------------
+	def SetGapTapPha(self, argin):
+		print "In ", self.get_name(), "::SetGapTapPha()"
+		#	Add your own code here
+		self.gap_write = argin[0]
+		self.taper_write = argin[1]
+		self.phase_write = argin[2]
+		self.set_state(PyTango.DevState.MOVING)
+		self.moving = True
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#------------------------------------------------------------------
+#	Stop command:
+#
+#	Description: Stop movement
+#                
+#------------------------------------------------------------------
+	def Stop(self):
+		print "In ", self.get_name(), "::Stop()"
+		#	Add your own code here
+		self.moving = False
+
+
+#==================================================================
+#
+#	HelicalIDClass class definition
+#
+#==================================================================
+class HelicalIDClass(PyTango.DeviceClass):
+
+	#	Class Properties
+	class_property_list = {
+		}
+
+
+	#	Device Properties
+	device_property_list = {
+		'NumAxes':
+			[PyTango.DevLong,
+			"number of mechanical axes , 6, 4, or 2",
+			[ 6 ] ],
+		'MaxGap':
+			[PyTango.DevDouble,
+			"gap value for rest position",
+			[ 190.0 ] ],
+		}
+
+
+	#	Command definitions
+	cmd_list = {
+		'Remote':
+			[[PyTango.DevVoid, ""],
+			[PyTango.DevVoid, ""]],
+		'Local':
+			[[PyTango.DevVoid, ""],
+			[PyTango.DevVoid, ""]],
+		'MoveMaxGap':
+			[[PyTango.DevVoid, ""],
+			[PyTango.DevVoid, ""]],
+		'SetGapTapPha':
+			[[PyTango.DevVarDoubleArray, "gap, taper, phase"],
+			[PyTango.DevVoid, ""]],
+		'Stop':
+			[[PyTango.DevVoid, ""],
+			[PyTango.DevVoid, ""]],
+		}
+
+
+	#	Attribute definitions
+	attr_list = {
+		'Enabled':
+			[[PyTango.DevBoolean,
+			PyTango.SCALAR,
+			PyTango.READ],
+			{
+				'label':"enabled",
+				'description':"true when operator enables remote operation",
+			} ],
+		'Gap':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ_WRITE],
+			{
+				'label':"gap",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':190,
+				'min value':10.0,
+				'description':"magnetic gap of id",
+			} ],
+		'Phase':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ_WRITE],
+			{
+				'label':"phase",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'description':"carriage magnetic phase",
+			} ],
+		'Taper':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ_WRITE],
+			{
+				'label':"taper",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':10,
+				'min value':-10,
+				'description':"magnetic tapering of id",
+			} ],
+		'GapSetPoint':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ],
+			{
+				'label':"gap set point",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':190,
+				'min value':10.0,
+				'description':"set point of magnetic gap of id",
+			} ],
+		'PhaseSetPoint':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ],
+			{
+				'label':"phase set point",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'description':"set point of carriage magnetic phase",
+			} ],
+		'TaperSetPoint':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ],
+			{
+				'label':"taper set point",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':150,
+				'min value':19,
+				'description':"set point of magnetic tapering  of id",
+			} ],
+		'StatRF':
+			[[PyTango.DevBoolean,
+			PyTango.SPECTRUM,
+			PyTango.READ, 2],
+			{
+				'label':"enabled,ready",
+			} ],
+		}
+
+
+#------------------------------------------------------------------
+#	HelicalIDClass Constructor
+#------------------------------------------------------------------
+	def __init__(self, name):
+		PyTango.DeviceClass.__init__(self, name)
+		self.set_type(name);
+		print "In HelicalIDClass  constructor"
+
+#==================================================================
+#
+#	HelicalID class main method
+#
+#==================================================================
+if __name__ == '__main__':
+	try:
+		py = PyTango.Util(sys.argv)
+		py.add_TgClass(HelicalIDClass,HelicalID,'HelicalID')
+
+		U = PyTango.Util.instance()
+		U.server_init()
+		U.server_run()
+
+	except PyTango.DevFailed,e:
+		print '-------> Received a DevFailed exception:',e
+	except Exception,e:
+		print '-------> An unforeseen exception occured....',e
diff --git a/fakedevices/KymaID.py b/fakedevices/KymaID.py
new file mode 100755
index 0000000000000000000000000000000000000000..320f3fdfb2704a07a04bc25da78d5be06450579e
--- /dev/null
+++ b/fakedevices/KymaID.py
@@ -0,0 +1,323 @@
+#!/usr/bin/python
+#	"$Name:  $";
+#	"$Header: /home/cvsadm/cvsroot/elettra/server/bcsbridge/fakedevices/KymaID.py,v 1.1 2010/12/24 10:48:38 claudio Exp $";
+#=============================================================================
+#
+# file :        KymaID.py
+#
+# description : Python source for the KymaID and its commands. 
+#                The class is derived from Device. It represents the
+#                CORBA servant object which will be accessed from the
+#                network. All commands which can be executed on the
+#                KymaID are implemented in this file.
+#
+# project :     TANGO Device Server
+#
+# $Author: claudio $
+#
+# $Revision: 1.1 $
+#
+# $Log: KymaID.py,v $
+# Revision 1.1  2010/12/24 10:48:38  claudio
+# crude superesca simulator
+#
+# Revision 1.1  2010/08/03 15:46:15  claudio
+# for testing TCPS
+#
+#
+# copyleft :    Sincrotrone Trieste s.c.p.A.
+#
+#=============================================================================
+#  		This file is generated by POGO
+#	(Program Obviously used to Generate tango Object)
+#
+#         (c) - Software Engineering Group - ESRF
+#=============================================================================
+#
+
+
+import PyTango
+import sys
+
+
+#==================================================================
+#   KymaID Class Description:
+#
+#         simulator for helical insertion device.
+#         Use for testing tango - bcs bridge and supervisor
+#
+#==================================================================
+# 	Device States Description:
+#
+#   DevState.ON :
+#   DevState.FAULT :
+#   DevState.UNKNOWN :
+#   DevState.MOVING :
+#==================================================================
+
+
+class KymaID(PyTango.Device_4Impl):
+
+#--------- Add you global variables here --------------------------
+
+#------------------------------------------------------------------
+#	Device constructor
+#------------------------------------------------------------------
+	def __init__(self,cl, name):
+		PyTango.Device_4Impl.__init__(self,cl,name)
+		KymaID.init_device(self)
+
+#------------------------------------------------------------------
+#	Device destructor
+#------------------------------------------------------------------
+	def delete_device(self):
+		print "[Device delete_device method] for device",self.get_name()
+
+
+#------------------------------------------------------------------
+#	Device initialization
+#------------------------------------------------------------------
+	def init_device(self):
+		print "In ", self.get_name(), "::init_device()"
+		self.set_state(PyTango.DevState.INIT)
+		self.get_device_properties(self.get_device_class())
+		self.attr_StatRF_read = [False,False]
+		self.attr_Gap_read = 50.0
+		self.attr_Tapering_read = 0.0
+		self.gap_write=self.attr_Gap_read
+		self.taper_write=self.attr_Tapering_read
+		self.ready=True
+		self.set_state(PyTango.DevState.ON)
+
+#------------------------------------------------------------------
+#	Always excuted hook method
+#------------------------------------------------------------------
+	def always_executed_hook(self):
+		print "In ", self.get_name(), "::always_excuted_hook()"
+
+
+#==================================================================
+#
+#	KymaID read/write attribute methods
+#
+#==================================================================
+#------------------------------------------------------------------
+#	Read Attribute Hardware
+#------------------------------------------------------------------
+	def read_attr_hardware(self,data):
+		print "In ", self.get_name(), "::read_attr_hardware()"
+		#do simulated movement
+		moving=False
+		if self.gap_write != self.attr_Gap_read:
+			delta=self.gap_write - self.attr_Gap_read
+			if delta > -1.0 and delta <1.0:
+				self.attr_Gap_read = self.gap_write
+			elif delta <= -1.0:
+				self.attr_Gap_read -= 1.0
+				moving=True
+			elif delta >=0.0:
+				self.attr_Gap_read += 1.0
+				moving = True
+		
+		if self.taper_write != self.attr_Tapering_read:
+			delta=self.taper_write - self.attr_Tapering_read
+			if delta > -1.0 and delta <1.0:
+				self.attr_Tapering_read = self.taper_write
+			elif delta <= -1.0:
+				self.attr_Tapering_read -= 1.0
+				moving=True
+			elif delta >=0.0:
+				self.attr_Tapering_read += 1.0
+				moving = True
+		
+		if moving:
+			self.set_state(PyTango.DevState.MOVING)
+			self.set_status('moving')
+			self.ready=False #not ready
+		else:
+			self.set_state(PyTango.DevState.ON)
+			self.ready=True # ready
+			self.set_status('ON and ready')
+
+
+
+#------------------------------------------------------------------
+#	Read Gap attribute
+#------------------------------------------------------------------
+	def read_Gap(self, attr):
+		print "In ", self.get_name(), "::read_Gap()"
+		
+		#	Add your own code here
+		attr.set_value(self.attr_Gap_read)
+
+
+#------------------------------------------------------------------
+#	Write Gap attribute
+#------------------------------------------------------------------
+	def write_Gap(self, attr):
+		print "In ", self.get_name(), "::write_Gap()"
+		data=[]
+		attr.get_write_value(data)
+		print "Attribute value = ", data
+		#	Add your own code here
+		# raise excpetionif operation is not permitted
+		self.gap_write=data[0]
+		self.set_state(PyTango.DevState.MOVING)
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#---- Gap attribute State Machine -----------------
+	def is_Gap_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read Tapering attribute
+#------------------------------------------------------------------
+	def read_Tapering(self, attr):
+		print "In ", self.get_name(), "::read_Tapering()"
+		
+		#	Add your own code here
+		attr.set_value(self.attr_Tapering_read)
+
+
+#------------------------------------------------------------------
+#	Write Tapering attribute
+#------------------------------------------------------------------
+	def write_Tapering(self, attr):
+		print "In ", self.get_name(), "::write_Tapering()"
+		data=[]
+		attr.get_write_value(data)
+		print "Attribute value = ", data
+
+		#	Add your own code here
+		self.taper_write=data[0]
+		self.set_state(PyTango.DevState.MOVING)
+		self.ready=False # NOT ready
+		self.set_status('moving and not ready')
+
+
+#---- Tapering attribute State Machine -----------------
+	def is_Tapering_allowed(self, req_type):
+		if self.get_state() in [PyTango.DevState.FAULT,
+		                        PyTango.DevState.UNKNOWN]:
+			#	End of Generated Code
+			#	Re-Start of Generated Code
+			return False
+		return True
+
+
+#------------------------------------------------------------------
+#	Read StatRF attribute
+#------------------------------------------------------------------
+	def read_StatRF(self, attr):
+		print "In ", self.get_name(), "::read_StatRF()"
+		
+		#	Add your own code here
+		
+		attr_StatRF_read = [True,True]
+		attr.set_value(attr_StatRF_read, 2)
+
+
+
+#==================================================================
+#
+#	KymaID command methods
+#
+#==================================================================
+
+#==================================================================
+#
+#	KymaIDClass class definition
+#
+#==================================================================
+class KymaIDClass(PyTango.DeviceClass):
+
+	#	Class Properties
+	class_property_list = {
+		}
+
+
+	#	Device Properties
+	device_property_list = {
+		}
+
+
+	#	Command definitions
+	cmd_list = {
+		}
+
+
+	#	Attribute definitions
+	attr_list = {
+		'Gap':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ_WRITE],
+			{
+				'label':"gap",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':150,
+				'min value':14,
+				'description':"magnetic gap of id",
+				'Polling period':2000,
+			} ],
+		'Tapering':
+			[[PyTango.DevDouble,
+			PyTango.SCALAR,
+			PyTango.READ_WRITE],
+			{
+				'label':"taper",
+				'unit':"mm",
+				'standard unit':1,
+				'display unit':"mm",
+				'format':"%6.3f",
+				'max value':3,
+				'min value':-3,
+				'description':"carriage magnetic taper",
+			} ],
+		'StatRF':
+			[[PyTango.DevBoolean,
+			PyTango.SPECTRUM,
+			PyTango.READ, 2],
+			{
+				'label':"enabled,ready",
+			} ],
+		}
+
+
+#------------------------------------------------------------------
+#	KymaIDClass Constructor
+#------------------------------------------------------------------
+	def __init__(self, name):
+		PyTango.DeviceClass.__init__(self, name)
+		self.set_type(name);
+		print "In KymaIDClass  constructor"
+
+#==================================================================
+#
+#	KymaID class main method
+#
+#==================================================================
+if __name__ == '__main__':
+	try:
+		py = PyTango.Util(sys.argv)
+		py.add_TgClass(KymaIDClass,KymaID,'KymaID')
+
+		U = PyTango.Util.instance()
+		U.server_init()
+		U.server_run()
+
+	except PyTango.DevFailed,e:
+		print '-------> Received a DevFailed exception:',e
+	except Exception,e:
+		print '-------> An unforeseen exception occured....',e
diff --git a/fakedevices/TangoClassID.txt b/fakedevices/TangoClassID.txt
new file mode 100644
index 0000000000000000000000000000000000000000..328b46a8578283eb92361ed0ed87e64ac720ab51
--- /dev/null
+++ b/fakedevices/TangoClassID.txt
@@ -0,0 +1,11 @@
+/**
+ * Device Class Identification:
+ * 
+ * Class Name   :	HelicalID
+ * Contact      :	claudio.scafuri@elettra.trieste.it
+ * Class Family :	Simulators
+ * Platform     :	All Platforms
+ * Bus          :	Not Applicable
+ * Manufacturer :	none
+ * Reference    :	
+ */
diff --git a/lib_pyElettra.py b/lib_pyElettra.py
new file mode 100644
index 0000000000000000000000000000000000000000..5dc7a018c77fc6ecc8b8a9e8b5f6c50539846402
--- /dev/null
+++ b/lib_pyElettra.py
@@ -0,0 +1,143 @@
+# class for SET/GET client operations with TPCS protocol
+# used by Elettra beamlines
+# $Author:Roberto Borghes
+#
+# $Version:$
+#
+# $Log: lib_pyElettra.py,v $
+# Revision 1.1  2008/09/23 09:12:10  claudio
+# First import
+#
+#
+import string
+from socket import *
+from threading import Lock
+import time
+import httplib
+
+class XCSException(Exception):
+	def __init__(self, value):
+		self.value = value
+	def __str__(self):
+		return `self.value`
+
+class XCS:
+ 	def __init__(self, mode=None):
+		if mode == None:
+			self.mode = 'TCP'
+			self.port = 20000
+		elif mode == 'HTTP':
+			self.mode = mode
+			self.port = 80
+		else:
+			raise XCSException, 'Unsupported Mode: '+mode 
+		self.host = ""
+		self.sid = 0
+		self.mutex = Lock()
+			
+	def open(self, host, port=None):
+		self.host = host
+		if port != None:
+			self.port = port
+		if self.mode == 'TCP':
+			self.mutex.acquire()
+			try:
+				self.sid = socket(AF_INET, SOCK_STREAM)
+				self.sid.connect((self.host,self.port))
+			finally:
+				self.mutex.release()
+		elif self.mode == 'HTTP':
+			self.sid = 0
+		else:
+			raise XCSException, 'Not Implemented Yet!' 					
+	
+	def close(self):
+		if self.sid != 0:
+			self.mutex.acquire()
+			try:
+				self.sid.close()
+				self.sid = 0
+			finally:
+				self.mutex.release()
+					
+	def get(self, var):
+		if self.mode == 'TCP':
+			if string.find(var,"UES") != -1:
+				getvar = "GETUES "+var+"\r\n"
+			else:
+				getvar = "GET "+var+"\r\n"
+			self.mutex.acquire()
+			try:
+				self.sid.send(getvar)
+				retvar = self.sid.recv(256)
+			finally:
+				self.mutex.release()
+			line = string.split(retvar,"\r")
+			if string.find(line[0],"*** ERROR") != -1:
+				raise XCSException, line[0]
+			res = string.split(line[0],",")
+			if string.find(var,"UES") != -1:
+				return(res[0],'',res[1],time.time())
+			else:
+				return (res[3],res[4],res[2],time.time())
+		if self.mode == 'HTTP':
+			getvar = "/blcs/"+var+"?ACTION=GET&METHOD=TEXT"
+			conn = httplib.HTTPConnection(self.host,self.port)
+			conn.request("GET",getvar)
+			retvar = conn.getresponse()
+			line = retvar.read()
+			if string.find(line,"----------") != -1 or retvar.status != 200:
+				raise XCSException, line
+			res = string.split(line,",")
+			conn.close()
+			return (res[2],res[3],res[1],time.time())
+		else:
+			raise XCSException, 'Not Implemented Yet!' 					
+		
+	def set(self, var, values=None):
+		if self.mode == 'TCP':
+			if string.find(var,"UES") != -1:
+				setvar = "UES "+var
+				if values != None:
+					for p,v in values.items():
+						setvar = setvar +" "+str(v)
+			else:
+				setvar = "SET "+var
+				if values != None:
+					for p,v in values.items():
+						setvar = setvar +" "+p+","+str(v)
+			setvar = setvar + "\n"	
+			self.mutex.acquire()
+			try:
+				self.sid.send(setvar)
+				retvar = self.sid.recv(256)
+				
+			finally:
+				self.mutex.release()
+			line = string.split(retvar,"\r")
+			if string.find(line[0],"*** ERROR") != -1:
+				raise XCSException, line[0]
+			return line[0]		
+		else:
+			raise XCSException, 'Not Implemented Yet!' 					
+		
+	def fetch(self,variable):
+		try:
+			a = self.get(variable)
+		except:
+			a = ('0','fetch Exception')
+		return a
+
+
+	def doit(self,target,par1=None,val1=None,par2=None,val2=None):
+		try:
+        		if (par1 == None):
+        			a = self.set(target)
+        		elif (par2 == None):
+				a = self.set(target,{par1:val1} )
+        		else:
+        			a = self.set(target,{par1:val1,par2:val2})
+		except:
+        		a = "  Exception"
+#      		print a
+		return a
diff --git a/punti_da_comandare.cfg.txt b/punti_da_comandare.cfg.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3569150995c6e6f1ce4aee452ef6a6ad62aee591
--- /dev/null
+++ b/punti_da_comandare.cfg.txt
@@ -0,0 +1,84 @@
+Valore 0 x chiudere e 1 x aprire
+
+# 1.1M
+'FRONTEND_SHOPPER-L_VACO_1_RMTCMD2','VALRMTCMD2'
+
+# 1.2 - frontend
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 1.0 - backend
+'BACKEND_SHOPPER_VACOBECK_20_RMTCMD0' , 'RMTCMD0' 
+
+# 2.2
+'022F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'022F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 3.2
+'032F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'032F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 4.2
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 5.2
+'052F_WSTOPPER1F_VACO_1_RMTCMD4' , 'VALRMTCMD4' 
+'XRD_STOPPER1_VACO_11_RMTCMD0' , 'VALRMTCMD0' 
+'XRD_STOPPER2_VACO_10_RMTCMD3' , 'VALRMTCMD3' 
+'XRD_STOPPER3_VACO_10_RMTCMD2' , 'VALRMTCMD2' 
+'052F_WSHUTTER1F_VACO_1_RMTCMD5' , 'VALRMTCMD5' 
+
+# 6.1
+'061F_BSTOPPERAF_VACO_2_RMTCMD2' , 'VALRMTCMD2' 
+'061F_BSTOPPERCF_VACO_1_RMTCMD2' , 'VALRMTCMD2' 
+'061A_BSTOPPER1A_VACO_10_RMTCMD2' , 'VALRMTCMD2' 
+'061F_BSHUTTERAF_VACO_2_RMTCMD0' , 'VALRMTCMD0' 
+'061F_BSHUTTERCF_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 6.2
+'062F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'062F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 7.1
+'FRONTEND_SHOPPER-R_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+'RIGHT_SHUTTER_VACO_30_RMTCMD4' , 'VALRMTCMD4' 
+
+# 7.2
+'072F_USTOPPER1F_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'072F_USHUTTER1F_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 8.1
+'FRONTEND_SHOPPER-R_VACO_2_RMTCMD0' , 'VALRMTCMD0' 
+'FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+'RIGHT_EXSLIT_VACO_10_RMTCMD4' , 'VALRMTCMD4' 
+
+# 8.2
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 9.1
+'CENTRAL_STOPPER_VACO_20_RMTCMD0' , 'VALRMTCMD0' 
+
+# 9.2
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 10.1
+'FRONTEND_SHOPPER-R_VACO_1_RMTCMD4' , 'VALRMTCMD4' 
+'FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 10.2
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 11.1
+'FRONTEND_SHOPPER-R_VACO_2_RMTCMD0' , 'VALRMTCMD0' 
+'RIGHT_STOPPER_VACO_30_RMTCMD6' , 'VALRMTCMD6' 
+'FRONTEND_SHOPPER-L_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+# 11.2
+'FRONTEND_STOPPER_VACO_1_RMTCMD1' , 'VALRMTCMD1' 
+'FRONTEND_SHUTTER_VACO_1_RMTCMD0' , 'VALRMTCMD0' 
+
+
diff --git a/punti_di_lettura.cfg.txt b/punti_di_lettura.cfg.txt
new file mode 100644
index 0000000000000000000000000000000000000000..697fd0e8912b858f7c9058ac664a1fa882fee45f
--- /dev/null
+++ b/punti_di_lettura.cfg.txt
@@ -0,0 +1,92 @@
+# Syntax:
+# ecs_name bcs_name
+# FAM_MEM_ACT_MOD BL_SECT_COMP_INSTR_N_NAME
+
+# 1.1M
+'FRONTEND_SHOPPER-L_VACO_1_STATUS2'
+
+# 1.2 - frontend
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+# 1.0 - backend
+'BACKEND_SHOPPER_VACOBECK_20_STATUS0'
+
+# 2.2
+'022F_USTOPPER1F_VACO_1_STATUS1'
+'022F_USHUTTER1F_VACO_1_STATUS0'
+
+# 3.2
+'032F_USTOPPER1F_VACO_1_STATUS1'
+'032F_USHUTTER1F_VACO_1_STATUS0'
+
+# 4.2
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+# 5.2
+'XRD_STOPPER1_VACO_11_STATUS0'
+'XRD_STOPPER2_VACO_10_STATUS3'
+'XRD_STOPPER3_VACO_10_STATUS2'
+'052F_WSHUTTER1F_VACO_1_STATUS5'
+
+# 6.1
+'061F_BSTOPPERAF_VACO_2_STATUS2'
+'061F_BSTOPPERCF_VACO_1_STATUS2'
+'061A_BSTOPPER1A_VACO_10_STATUS2'
+'061F_BSHUTTERAF_VACO_2_STATUS0'
+'061F_BSHUTTERCF_VACO_1_STATUS0'
+
+# 6.2
+'062F_USTOPPER1F_VACO_1_STATUS1'
+'062F_USHUTTER1F_VACO_1_STATUS0'
+
+# 7.1
+'FRONTEND_SHOPPER-R_VACO_1_STATUS0'
+'RIGHT_SHUTTER_VACO_30_STATUS4'
+
+# 7.2
+'072F_USTOPPER1F_VACO_1_STATUS1'
+'072F_USHUTTER1F_VACO_1_STATUS0'
+
+# 8.1
+'FRONTEND_SHOPPER-R_VACO_2_STATUS0'
+'FRONTEND_SHOPPER-L_VACO_1_STATUS0'
+'RIGHT_EXSLIT_VACO_10_STATUS4'
+
+# 8.2
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+
+# 9.1
+'CENTRAL_STOPPER_VACO_20_STATUS0'
+
+# 9.2
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+# 10.1
+'FRONTEND_SHOPPER-R_VACO_1_STATUS4'
+'FRONTEND_SHOPPER-L_VACO_1_STATUS0'
+
+# 10.2
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+# 11.1
+'FRONTEND_SHOPPER-R_VACO_2_STATUS0'
+'RIGHT_STOPPER_VACO_30_STATUS6'
+'FRONTEND_SHOPPER-L_VACO_1_STATUS0'
+
+# 11.2
+'FRONTEND_STOPPER_VACO_1_STATUS1'
+'FRONTEND_SHUTTER_VACO_1_STATUS0'
+
+
+Gli host sono:
+011f-bcs.blcs.elettra.trieste.it
+012f-bcs.blcs.elettra.trieste.it
+022f-bcs.blcs.elettra.trieste.it
+032f-bcs.blcs.elettra.trieste.it
+112f-bcs.blcs.elettra.trieste.it
diff --git a/tabella-bemline-id.ods b/tabella-bemline-id.ods
new file mode 100644
index 0000000000000000000000000000000000000000..a524ea6be33abd98e7cce73480429817a2a68703
Binary files /dev/null and b/tabella-bemline-id.ods differ
diff --git a/testsissi.py b/testsissi.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a51adb4f25817d491b6e0c6280d62e1de4b325d
--- /dev/null
+++ b/testsissi.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+import telnetlib
+import time
+import sys
+tn=telnetlib.Telnet('ecsproxy',20091)
+
+ans_old=''
+while True:
+    tn.write('GET FRONTEND_MACHINE_MACHINE_1_BEAMON')
+    ans = tn.read_until('\n')
+    if ans != ans_old:
+        print time.ctime(), ans.rstrip(), ' <<<< variazione'
+        ans_old = ans
+    else:
+        pass
+        #print time.ctime(), ans.rstrip()
+    sys.stdout.flush()
+    time.sleep(1)
+