The uniserv application¶
uniserv is the program that runs on UniDrive devices that control motors of several undulators at Bessy and the MLS.
uniserv communicates by a CAN bus with the undulator control IOC which runs the IDCP application.
The UniDrive device is programmed in the DPL language. The uniserv program for each axle for each undulator is generated from a common source.
Finding the source code that is in use at an insertion device¶
In general you get a version number of an undulator axle by querying the process variable
[undulator]:AdiUn[no]GblVer
. Here, “undulator” is the Bessy devicename of the
undulator and “no” is the number of the axle starting with 1. The script “idcp-drive-info” makes this easy. For example to get all program versions for the axles of the UE112 undulator just enter:
idcp-drive-info versions ue112
The program replies with:
UE112:
1: 2106281047
2: 2106281047
3: 2106281047
4: 2106281047
5: 2106281047
6: 2106281047
This number is build from the scheme “yymmddHHMM” where “yy” are the last two digits of the year, “mm” is the month number, “dd” the day of the month, “HH” the hour (24 hour format) and “MM” are minutes. So the given example corresponds to the date:
2013-08-27 09:38
Another script shows information about this version:
uniserv-restore --info 2106281047
The program’s reply is:
ISOVERSION : 2021-06-28T10:48:04
SHORTVERSION : 2106281047
Install location: /opt/IOC/uniserv/dist/2021-06-28T10:48:04 on host nfs.blc.bessy.de
You find the DPL source code of this version by logging on to host
nfs.blc.bessy.de
for example as user idadm, and the changing to the uniserv
distribution directory:
ssh idadm@nfs.blc.bessy.de
cd /opt/IOC/uniserv/dist/2021-06-28T10:48:04
For the UE112 undulator the dpl files for all axles are in the sub directory “dpl/UE112”:
ls dpl/UE112
gives this result:
CTNet0_Node_11.DPL CTNet0_Node_13.DPL CTNet0_Node_15.DPL
CTNet0_Node_12.DPL CTNet0_Node_14.DPL CTNet0_Node_16.DPL
Rebuilding the source directory for an installed version¶
If you have the SHORTVERSION (e.g. “2106281047”) or the ISOVERSION (e.g. “2021-06-28T10:48:04”) of the program, you can recover the source code working copy like this:
uniserv-restore 2106281047
After the program is finished you find the source code in directory “2106281047/uniserv”.
You can now have a look at the file uniserv.dpl like this:
less uniserv/src/uniserv.dpl
Note that you can turn pages in “less” with “b” and “<space>” and leave the program with “q”. For more help see “man less”.
Get and install uniserv¶
uniserv.dpl cannot be installed directly on a UniDrive device. Instead, DPL files have to be created from the file “uniserv.dpl”.
Get a working copy from the central repository¶
First you have to check out uniserv.dpl from the central mercurial repository, if you have the password of user “idadm” you can do it like this:
hg clone http://repo.acc.bessy.de/hg/id-drive/uniserv
If you don’t have access to the “idadm” account you can get a working copy with this command:
hg clone http://repo.acc.bessy.de/hg/id-drive/uniserv
This creates a directory “uniserv” in your current working directory. Now change to this directory:
cd uniserv
Configure the application¶
The first thing you have to do is to configure the working copy. uniserv depends on the bii_scripts and “id_scripts” modules. You can use these directly if they are globally installed or use local working copies. This is configured in file “config/config.yaml”. You may have to change “config/config.yaml” in order to continue.
Here we show what to change in file “config/config.yaml” if you are user “idadm” on host repo.acc.bessy.de:
DARCSROOT : http://repo.acc.bessy.de/darcs
HGROOT : http://repo.acc.bessy.de/hg
Now you can start the configure script:
./configure
Create a local build¶
Now we build all the DPL files from uniserv.dpl with this command:
make local
Install on the version server¶
Note that the following command does not install the DPL files on the UniDrive device, it just copies the DPL files to the directory
/opt/IOC/uniserv/dist
on host nfs.blc.bessy.de.
However, if you want to install some of the DPL files in the UniDrive devices,
this step is important. It ensures that you can later always get the source of
the program if you only know the version number. Since the distribution process
uses rsync you have to have the ssh-agent program running even if your ssh key
is not pass phrase protected. As user “idadm” just enter agent
to start this
program. “agent” is an alias for the correct command that is already configured
for user idadm at host elbe.
You create a distribution with the command:
make
At the end, you will see a message like:
2013-09-24T10:19:47 was created
This is the name of the directory that was created. In the example above you would find the DPL files at:
/opt/IOC/Releases/uniserv/dist/2013-09-24T10:19:47/dpl/[undulator-name]
Install the DPL files on the UniDrive devices¶
First time installation¶
You need a program to set parameters. For older devices with an “SM-Application” module, this is CTSoft, for newer devices with an “SI-Application” module this is Connect.
UniDrive parameters always have a major and a minor index, e.g. ‘#15.11’ has major index ‘15’ and minor index ‘11’.
The unidrive device also has option modules. The two relevant modules here are:
SM-Application or SI-Application
CANOpen
Each module has a major index that depends on the slot it is plugged in. The major index of a module is either 15, 16 or 17. You see this under “option modules” in CTSoft or Connect.
In the following text, “APPIDX” means the major index of the Application module (either ‘SM’ or ‘SI’) and “CANIDX” the major index of the CANOpen module.
Set these parameters:
#18.11 : Set to the drive number, so 1 for the first, 2 for the second and so on. If this parameter is 0, uniserv will not initialize drive parameters, this is intended for testing/debugging only.
#APPIDX.12 : Set to 4. This number means that the position task runs every 2ms.
#APPIDX.13 : Set to 1. This means to automatically start the program after power-up.
For the SI-Application module you additionally need to set these parameters:
#CANIDX.01.004 : set to axle number (1..n) plus can-node-offset. Currently can-node-offset is always 0.
#CANIDX.01.005 : set to 0, meaning baud rate 1Mbit
#CANIDX.01.008 : set to 1, meaning ‘PDO configuration by master’
#CANIDX.01.010 : set to 0, meaning ‘no timeout’
#CANIDX.01.011 : set to 4, meaning ‘no action at timeout’
#CANIDX.01.021 : set to 3, meaning ‘UNIDRIVE M’
Process with with “Normal installation” below and do save parameters in drive with CTSoft or Connect after this procedure.
A reset also stores parameters in the drives permanent memory.
Normal installation¶
You have to have to have a project for the program “sypt”. Before sypt is started, copy all the DPL files to the project directory. Overwrite the existing DPL files.
Then start sypt, open the project and select “rebuild all”. When this is finished, go online and select “download to drive”, select all drives.
After the download has finished, you have to reboot the IOC.
Troubleshooting¶
If later on the “CAN/IO OK” light in the undulator panel toggles between red and green, you may have forgotten to set parameter #18.11.
In this case, the uniserv program does initialize drive variables.
When this happens, re-run the parameter setup shown above. Then reboot the UniDrive device twice. Only then the position task schedule time will be right.