csv2epicsFuncs
index
/home/pfeiffer/project-shared/publicize/bii_scripts-top/bii_scripts/lib/python/bii_scripts/csv2epicsFuncs.py

# -*- coding: utf-8 -*-

 
Modules
       
csv
bii_scripts.epicsUtils
imp
math
os
pprint
sys

 
Classes
       
__builtin__.object
PLC_Address
baseData
csvData

 
class PLC_Address(__builtin__.object)
    Class to manage PLC address name links for the binary record types: 
bi,bo,mbbi,mbbo
 
* Map bits to mbbi/oDirect-Records to access the data and
 
* Store all data to create this mbbi/oDirect-Records with setupTemplates(). 
  This is the reason why this is a class and not just a function
 
  Methods defined here:
__init__(self, linkTyp, rtyp, PLCLink, softLinkTag, shft, deviceName, devObj, dtyp)
getLink(self)

Static methods defined here:
setupTemplates(deviceName, dbFileName)
Create epicsTemplate objects for all mbb_Direct records as indicated in 
mbb_DirectLinks dictionary

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
inTagPrefix = 'inBits'
mbbiDirectLinks = {}
mbbiTagIndex = 0
mbboDirectLinks = {}
mbboTagIndex = 0
outTagPrefix = 'outBits'

 
class baseData(__builtin__.object)
     Static methods defined here:
getDESClen()
getMBBlen()
getNAMlen()
getRecNameLen()
getStringVALlen()
setBase(baseStr)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
base = '3.15.6'
baseLen = {'3.14.12': {'ASGlen': 28, 'DESClen': 40, 'MBBlen': 25, 'NAMlen': 25, 'RecName': 60, 'StringVALlen': 39}, '3.14.8': {'ASGlen': 28, 'DESClen': 28, 'MBBlen': 15, 'NAMlen': 19, 'RecName': 60, 'StringVALlen': 39}, '3.15.6': {'ASGlen': 28, 'DESClen': 40, 'MBBlen': 25, 'NAMlen': 25, 'RecName': 60, 'StringVALlen': 39}}

 
class csvData(__builtin__.object)
    Store splitted, line of a csv file and store it's data to be used for 
    template and record processing. 
    
    Other file formats have to be mapped in a derived object with this member 
variables to process correctly.
    
    Hold constants to check stringlengths dependant on the EPICS version.
 
    - def getRecNameLen():
    - def getDESClen():
    - def getMBBlen():
    - def getNAMlen():
    - def getStringVALlen():
 
  Methods defined here:
__init__(self, device, canOption)
__str__(self)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
adaCanMux(id, card, chan, typ='hex')
Calculate Can can parameters from Node-Id, Card and Channel for ADA analog input
channels.
 
Return (OUT_CAN,IN_CAN,MUX)
createAdaCanLink(port, id, card, chan, dataType='s')
Setup a complete CAN link from adaCanMux data:
 
Return "@f 'dataType' 5 PORT OUTCAN INCAN MUX 10 1F4 0" % (int(port),outCan,inCan,mux)
createAlarmLimits(rangeAlhVal, rangeAlhSevr)
Create alarm limits and severities if rangeAlhVal rangeAlhSevr are defined . 
Col.rangeAlhVal has to be in order with rangeAlhSevr to define alarm ranges
and severities or raise ValueError
 
  LOLO,LOW,HIGH,HIHI,LLSV,LSV,HSV,HHSV
createAnalogRecord(devName, fields, devObj, warnings, inFileName, lines)
Setup display and alarm limits and create an analog type record/template. 
 
INP/OUT link has to be set before so this function is usable for all records, 
templates that make use of the typical analog fields as HOPR,LOPR,EGU,PREC 
and LOLO,LOW,HIGH,HIHI + according severities.
createBiBoRecord(devName, fields, devObj, warnings, inFileName, lines)
Setup fields for bi/bo type records/templates and create instance
- Setup fields for state names and severities from the columns H,I,K
- Don't setup SHFT here!
- Create warnings for to long strings
createMbbIoRecord(devName, fields, devObj, warnings, inFileName, lines)
Setup fields for mbbi/mbbo type records/templates and create instance
 
- Setup fields for state names, severities and values from the columns H,I,K
- Don't setup SHFT,NOBT here!
- Support for mbbi record and long strings: create stringout records for 
  each string
- Create warnings for to long strings
createSlopeConversion(rangeEng, rangeRaw)
Create SLOPE conversion parameters for analog type records if 'rangeRaw' is defined.
Raise ValueError for illegal data
 
 
    LINR,ESLO,EOFF,PREC,
getBinaryAttributes(rangeEng, rangeRaw, rangeAlhSevr, inFileName, lines, warnings)
Process columns that define values, strings and severities for binary records 
from definitions in Col H,I,K
 
Return the checked data as python lists or raise ValueError
getCANLink(rtyp, port, canId, cardNr, chan, name, iocTag, devObj)
Create an CAN Link for an ADA-16 or DIGIO16 Card
 
* CardNr (Col E): The base of the multiplexer value = CardNr * 12
 
* Chan (Col.G): The multiplexer for this card. 
 
Channel |
--------+--------
0..3(8) | Analog-In 0..4 (8)
10      | Analog-Out
0..8,16,32 | Bit Number for ADA-16, DIGIO-16, DIGIN32
 
 
* Binary records 'bi','mbbi','bo','mbbo': For CAN links and binary records 
there is support to create mbbiDirect records to read the data and distribute
it to the binary records.
 
* ADA Cards and analog out 'ao', 'longout': The requested data type is drawn 
from the Raw Value range:
 
Raw Value      | Data Type | Card Type
---------------+-----------+---------------
0 - 65535      |    S      | 16 bit unipolar,  0 - 10V
0 - 131071     |    S      | 16 bit unipolar,  0 -  5V
-32256 - 32255 |    s      | 16 bit bipolar, -10 - 10V
getDisplayLimits(rangeEng, egu)
Return a dict with the the display parameters: LOPR, HOPR, EGU or raise ValueError
getEcName(port, canId, cardNr, namesEnd)
Embedded controller device, to hold the mbbi/oDirect. Derives its name from
the IOC name to get a unique name for each embedded controller. Remove the
characters IO from the IOC name to get this e.g. IOC1S15GP -> C1S15GP
 
EC<port>-<id><card><IOC derived part>
 
e.g. Port 1 Id5 card 3 on IOC1S15GP -> EC1-53C1S15GP
getInfo(devObj)
Return Info field dictionary from devObj.reqFlag or None
getOpcLink(devObj, devName, opc_name, PLCLink)
Create an OPC Link for option '-c opc', CAN or VME links are not supported in 
this mode!
 
* Handle OPC-links (col. D) of type
 
- Just a String: Used as opc link
- (Legacy) Siemens notation of Servername,Datablock and byte address (
  e.g. 'S7:[S7-Verbindung_1]DB2,X2.6')
 
* Set the fields DTYP, SCAN, INP/OUT according to the record type
 
* For binary records there are mbbi/oDirect records to read/write the data and
  distribute it to/from the binary records. Set the fields NOBT, SHFT.
getOpcuaLink(devObj, devName)
getShiftParam(bits)
For mbbi/oRecords: Calculate paramteres NOBT, SHFT from bitrange 'n - m'
 
For bi/oRecords: get bit number 'n' to be used in link to mbbi/oDirectRecord
that gets the data.
 
bits = 'n' or bits = 'n - m' , SHIFT = n, NOBT = nr of elements.
 
Return tupel: (NOBT,SHFT),  NOBT=1 for bits = 'n'
E.G getShiftParam('5 - 7') = (3,5), getShiftParam('7') = (1,7)
getVmeLink(rtyp, canId, cardNr, chan)
getWagoLink(devObj)
WAGO-I/O-SYSTEM by Modbus process data architecture:
 
Bit read/write by modbus function FC2/5 - read/write single coil. Specify
the bit count starting with 0
 
Analog values read/write by modbus function FC3/16 read/write multiple 
registers. Specify the channel by the word count.
Linear conversion from real raw values 16bit hex to EGUL,EGUF defined in Column H.(Raw value range).
Col. G (Bits) is 16 for unipolar Conversion range and -16 for bipolar conversion.
Col. I (data range) defines HOPR/LOPR.
 
Special conversion for temperature modules with wago Tag in Col.E = 'wagoTemp'
Col.I (data range) defines HOPR/LOPR
procInOut(rtyp)
Is it a in or out record type? Return 'INP'|'OUT' for records or 
templates that begin with a known record name from the list: 
 
'longin,longout,ai,ao,bi,bo,mbbi,mbbo,mbbiDirect,mbboDirect,int64in,int64out'
 
Other records or templates return 'None'
procRecord(devName, devObj, canOption, opc_name, iocTag, warnings, lines, inFileName)
Is an EPICS record in: 
['ai','ao','longin','longout','bi','bo','mbbi','mbbo','calc','calcout','int64in','int64out']
    Setup EPICS record and return other data: 
    (alhSignals,arcSignals,panelDict,panelNameDict,panelWidgetName)
pt100temp(devName, devObj, canOption, opc_name, iocTag, warnings, lines, inFileName)
pt100tempGetFunc()
setEpicsAlh(devName, alhSignals, devObj, warnings, lines, inFileName, cmLog)
Setup all data to  write an alarm handler file.
 
- Each object holds the data to describe one alarmhandler item (see epicsAlh docu)
 
The Collumns for Alarm definition:
 
- BESSY ALH Group (col. Q): The Path to the alarm group the first element is 
  the name of the alh file!
- BESSY ALH Flags(col. R):  Optional. First the alarm Flags (CDT..) Than a 
  list of additional Items for
    a CHANNEL definition in this format: ITEM<SPACE>value e.g.
 
        "ALIAS=show this|MASK=T|ACKPV=ackPVName ackValue"
 
    or legacy mask definition as first Element:
 
        "T|ALIAS=show this|ACKPV=ackPVName ackValue"
 
    Not allowed are the Items: 'CHANNEL','INCLUDE','GROUP','END'
 
    Defaults:
 
        Flags: ---T-
        ALIAS: name signal
        COMMAND: None or edm epicsPanel if defined in 'EPICS Panel Name' (col. U)
 
- ALH Sort (col. S):   An optional sort number to define the order within a group
setupPlugins(searchPathList)
setupRecordLink(devName, devObj, canOption, opc_name, iocTag)
Process link definition variables to get the hardware link of one of the supported types.
 
- All entrys but 'don't care' are mandatory.
- The option -c is legacy for the CAN-port number or '-c opc' for old opc devices.
 
Column | Variable name 
-------+------------
Col. D | devObj.port
Col. E | devObj.canId
Col. F | devObj.cardNr
Col. G | devObj.chan
 
Device type      | option -c     | Col. D   | Col. E       | Col. F    | Col. G    | processed in
-----------------+---------------+----------+--------------+-----------+-----------+-------------
Bessy CAN Device | empty/CAN-Port| CAN-Port | CAN-Id       | Card Nr.  | Chan. Nr  | getCANLink()
VME-Device       | don't care    | VME      | DTYP         | Card Nr.  | Chan. Nr  | getVmeLink()
OPC Device       | opc           | OPC-Link | don't care   | don't care| don't care| getOpcLink()
OPC Device       | don't care    | opc      | don't care   | OPC-Link  | don't care| getOpcLink()
OPCUA Device     | don't care    | opcua    | SUBSCRIPTION | OPCUA-Link| see /1/    | getOpcuaLink()
Wago Device      | don't care   |MODBUS-Port| wago[Type]   | Offset    | Bits      | getWagoLink()
Soft-/Other record| don't care   |empty     | [DTYPE]      | [Link]    | don't care| setupRecordLink()
 
- /1/ For bi/o or mbbi/o and defined bits will cause mbbiDirect records to be crated as in- output-records
 to get the whole data word
watchdog(devName, devObj, canOption, opc_name, iocTag, warnings, lines, inFileName)
watchdogGetFunc()

 
Data
        recordSet = {'ai': 'INP', 'ao': 'OUT', 'bi': 'INP', 'bo': 'OUT', 'calc': None, 'calcout': 'OUT', 'dfanout': None, 'int64in': 'INP', 'int64out': 'OUT', 'longin': 'INP', ...}
version = '1'