v4orb2.wiki

описание пикапов и диссектора ВЭПП3-4
git clone http://www.inp.nsk.su/~bekhte/v4orb2.wiki.git
Log | Files | Refs

commit 6a9397462741c419caf664acb715a1c14854a38a
parent e628746be6b3c22f14ee3498ebd8199f91eec9e5
Author: E.A.Bekhtenev <E.A.Bekhtenev@inp.nsk.su>
Date:   Wed Oct  5 17:52:05 +0700

add kserv

Diffstat:
kserv.md | 268+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 268 insertions(+), 0 deletions(-)
diff --git a/kserv.md b/kserv.md @@ -0,0 +1,268 @@ +Title: Краткое описание модификации многоканальной программы-сервера + +{{TOC}} + +Краткое описание модификации многоканальной программы-сервера +Системы измерения положения пучка ВЭПП-3 импорта данных из EPICS. + +# 1. Методика измерений. + +Принцип работы новой системы измерения положения пучка +ВЭПП-3 основан на одновременном измерении сигналов с 4-х +электродов пикапа четырьмя независимыми каналами, каждый из +которых включает аналоговый канал с регулируемым усилением +и АЦП. В качестве сигнала используется 18-я гармоника частоты +обращения (72.54 МГц). Глубина регулировки усиления каналов – 28 дБ. + +Сигнал интегрируется в течение каждого оборота пучка. +Далее сигналы за отдельные обороты складываются, образуя +быстрые данные (результат накопления сигнала за Nav = 1-30000 оборотов) +и медленные данные (результат накопления сигнала за +Nturns = 1-2 миллиона оборотов). Таким образом, возможно +получение 3-х типов данных: + + + +1. Медленные данные (Slow Data) – значения координат X, Z и ток пучка (пропорциональный сумме сигналов с 4-х электродов пикапа); + +2. Быстрые данные (Fast Data) – 2 массива координат X, Z емкостью 1024 числа каждый; + +3. Данные пооборотных измерений (Turn-by-turn Data) емкостью до 16384 чисел (электроника позволяет в пределе получить до 32768 чисел). + +Длительность элементарного цикла измерения Nav и общую +длительность полного цикла измерения Nturns можно устанавливать +программно. Нужно только следить, чтобы общая длительность +полного цикла измерения Nturns была больше 1024×Nav. + +# 2. Краткое описание сервера. + +Сервер для работы с восемью пикап-станциями обеспечивает +прокси доступ к системе управления на базе EPICS, и +производит все действия по работе с железом пикап станций. + +Сервер управляется через шелл скрипт v3bpmd. Шелл скрипт + доступен из командной строки pult6, располагается в директории + /opt/ppc860/v3bpm_build_cache, репозиторий проекта + «http://www.inp.nsk.su/~bekhte/v3orb2.git». Запускается + сервер на PULT6 вместе с остальными программами работы с пикап станциями. + +Для того чтобы соединиться с сервером, программа-клиент вызывает функцию: + + sock = connect_it(IP_ADDR, BASE_PORT), + +где sock – сокет, IP_ADDR – IP адрес машины PULT6, где работает + сервер, BASE_PORT=2100 – номер порта сервера. + +Затем клиент посылает код команды в сервер из 1-го байта. В связи с последними нововведениями полностью безопасными являются команды получения данных 2, 3, 4, 5, 69, 8, 9. Сервер пикап станции самостоятельно следит за правильным коэффициентом усиления, и вроде нет необходимости вмешиваться в его работу. Поэтому пользоваться командами 64, 65, 96, 67 для установки коэффициента усиления постоянной необходимости нет. Основные EPICS сервера постоянно производят медленные измерения производят подстройку усиления, и всегда имеют актуальные данные по медленным измерениям. + +### 1.1.1. Коды команд, используемые в системе: + +1. Код = 64 – посылка параметров в сервер (5 параметров + маску (1 байт) пикап-станций к которым применяются настройки), описание см 1.1.2 ниже; + +2. Код = 65 – тоже что 64, дополнительно возвращает результат исполнения 4 байта ( результат всегда 0, что означает успех, поскольку сервер теперь не работает напрямую с железом) + +3. Код = 96 – тоже что 65 + +4. Код = 67 – посылка параметров в сервер (в формате кода 64), и получение медленных данных для всех 8-и пикап-станций, независимо включена та или иная станция или нет. Формат медленных данных описан 1.1.3 ниже. + +5. Код = 6 – запуск быстрых измерений по маске, формат маски тот же что и в параметрах 1.1.2. + +6. Код = 7 – запуск пооборотных измерений по маске, формат маски тот же что и в параметрах 1.1.2. + +7. Код = 2 – чтение медленных данных для всех 8-и пикап-станций, если есть пикапстанции работающие в режиме 3 Гц то происходит ожидание свежих данных от них, для остальных пикап станций отдаются последние актуальные данные. Если нет пикапстанций в режиме 3 Гц, ответ отдается мгновенно. Формат ответа тотже что код 67; + +8. Код = 3 – тоже что 2. + +9. Код = 4 – ожидание окончания измерения (код 6) и чтение 2-х массивов быстрых данных (координат X, Z) по 1024 вещественных чисел каждый. После посылки кода команды в сервер посылается еще один байт – номер пикап-станции (0-7), для которой надо прочитать результат измерений. Команда ожидает окончание измерения конкретной пикапстанцией, только после этого из сервера приходят массивы данных. Данные будут достоверны только, если соответствующая пикап-станция включена и с ней есть связь по Ethernet. + +10. Код = 69 – ожидание окончания измерения(код 7) и чтение 2-х массивов данных пооборотных измерений (координат X, Z) по Nt вещественных чисел каждый. Размер читаемых массивов пооборотных данных Nt может устанавливаться программно (см. ниже): 2048, 4096, 8192 или 16384 чисел. После посылки кода команды в сервер посылается еще один байт – номер пикап-станции (0-7), откуда нужно прочитать данные. Только после этого из сервера приходят массивы данных. + +11. Код = 5 – тоже что 69. + +12. Код = 8 – чтение маски реально работающих пикап-станций – 1 байт. Каждый бит этого байта (0-7) соответствует определенной пикап-станции. Реально работающая пикап-станция должна быть включена не только программно, но и электрически, то есть с ней должна быть связь по Ethernet. + +13. Код = 9 – чтение буфера последних медленных измерений для выбранного пикапа. После кода команды сервер ожидает один байт с номером пикап-станции (0-7), и один байт с длинной массива n-1 (0-255 соответствует длине массива 1-256). В ответ отвечает: + * магическое число 2 байта (0x55aa) + * координата X, n точек в формате float + * координата Y, n точек в формате float + * ток I, n точек в формате float + * время измерения в секундах с момента запуска программы, n точек в формате float, + + Вполне реально поставить время медленных измерения 5мс, и наблюдать колебания пучка в полосе 100Гц. Это никак не будет конфликтовать с пооборотными и быстрыми измерениями. Время измерения можно использовать для сшивки данных. + +14. Код = 20 – установка параметров режима timeback +запрос: + + int – разрешение моды timeback, 1 – разрешено, 0 запрещено. + + int – автоматическое продление моды timeback, 0 – после срабатывания timeback, мода сбрасывается и пикап переходит в режим обычных измерений. 1 – после срабатывания пикап остается в моде timeback. + + int – проценты при которых срабатывает timeback. + + float – уровень тока при значении которого меньше, считается что сигнал отсутствует, срабатывание не происходит при отсутствии сигнала. + + int - сколько оборотов измерять после срабатывания. + + uint8_t – маска, пикапов к которым применяются настройки. + + ответ: + нет + +15. Код = 21 – запрос состояния режима timeback. + + запрос: + нет + + ответ + + uint8_t – маска пикапов у которых сработал режим timeback, при чтении флаг сбрасывается автоматически + +16. Код = 22 – чтение пооборотных данных timeback, + + запрос: + + uitn8_t – номер пикапа (0-7) + + ответ: + + массивы X, Y, I, размер массивов определяется параметром t_bufer, тоже что и для пооборотных данных. + + Максимальные коды АЦП не должны выходить за границы ±8191, иначе измерения будут неправильными. Код усиления (0-28) выставляется такой, чтобы максимальные значения АЦП были на уровне 5-7 тысяч. Но еще лучше не управлять самому кодом усиления, а поручить это дело автогэйну ЭПИКСА. + +### 1.1.2. Загружаемые параметры по порядку следования + +1. nturn – задает общую длительность полного цикла измерения в оборотах (Nturns); + +2. nav – задает длительность элементарного цикла измерения в оборотах (Nav) для быстрых данных, величина nav лежит в диапазоне 0-16000, при этом общая длительность полного цикла измерения Nturns должна быть больше 1024× nav; + +3. gain[8] – 8 значений усиления в децибелах (0-28) для пикап-станций 0-7, для большого тока пучка (~150 мА в двух сгустках) усиление должно быть около 17, при меньших токах оно желательно устанавливается больше (чтобы максимальные значения АЦП были на уровне 5-7 тысяч); + +4. t_bufer – задает размер читаемых массивов пооборотных данных: + + t_bufer = 0 – размер массива Nt = 2048 + t_bufer = 1 – размер массива Nt = 4096 + t_bufer = 2 – размер массива Nt = 8192 + t_bufer = 3 – размер массива Nt = 16384 + +5. ext_start – выбор источника запуска. Запускать цикл измерения от внутреннего запуска (0x00), от внешнего запуска (0x01), от 3Гц 0x02. Внешний запуск осуществляется импульсом “Впуск”, поступающим на соответствующий вход блока электроники. Значение 1-го бита: Запуск от импульса 3Гц осуществляется импульсом 3Гц, поступающим на вход 3Гц; + +6. mask_bl – маска работающих блоков электроники (или пикап-станций) – один байт. Каждый бит этого байта (0-7) соответствует определенной пикап-станции, бит 0 соответствует пикап-станции №0, бит 1 соответствует пикап-станции №1 и т.д. Если бит, например, №2 равен 1, значит пикап-станция №2 включена, если бит №2 равен 0, значит пикап-станция №2 выключена. +Соответствие битов маски и пикпапов: + +| маска | пикап | +|-------|-------| +| 0x01 | VEPP3:1P1 | +| 0x02 | VEPP3:1P7 | +| 0x04 | VEPP3:2P3 | +| 0x08 | VEPP3:2P4 | +| 0x10 | VEPP3:2P5 | +| 0x20 | VEPP3:2P6 | +| 0x40 | VEPP3:4P4 | +| 0x80 | VEPP3:4P5 | + +### 1.1.3. Формат медленных данных + +Для чтения результатов медленных измерений клиент вызывает функцию: + +recv(sock, \*buf, size, 0), + +где sock – сокет, \*buf – указатель на начало массива типа char, куда приходят читаемые данные, size – число принимаемых байт. + +Данные приходят из блока электроники только после окончания измерения. Для кода = 67 должно приходить 2+8×8×4 = 258 байт ( 2 байта – “головная” часть, равная 0х55аа, плюс 49 чисел по 4 байта). Если величина тока равна нулю, значит пучка нет, или он меньше ~50 мкА. + +формат данных: + +<a name="tab1"></a> + +<table width="617" cellpadding="4" cellspacing="0" border="1" style="page-break-before: always"> +<caption>Таблица 2. формат данных</caption> + <tr valign="top"> + <td>группа, байт</td> + <td> поле, байт </td> + <td> пикап </td> + <td> тип </td> + <td> описание</td> + </tr> + <tr valign="top"> + <td>2</td> + <td>2</td> + <td></td> + <td>uint16_t</td> + <td>магическое число (0x55aa)</td> + </tr> + <tr valign="top"> + <td rowspan="8"> 64 </td> + <td> 4 </td> + <td rowspan="8">1</td> + <td> char[4] </td> + <td> имя пикапа </td> + </tr> + <tr valign="top"> + <td> 4 </td> + <td> float </td> + <td> X </td> + </tr> + <tr valign="top"> + <td> 4 </td> + <td> float </td> + <td> Y </td> + </tr> + <tr valign="top"> + <td> 4 </td> + <td> float </td> + <td> I </td> + </tr> + <tr valign="top"> + <td> 4 </td> + <td> uint32_t </td> + <td> максимальное напряжение в МЗР </td> + </tr> + <tr valign="top" align="center"> + <td> 4 </td> + <td> uint32_t </td> + <td> - // - </td> + </tr> + <tr valign="top" align="center"> + <td> 4 </td> + <td> uint32_t </td> + <td> - // - </td> + </tr> + <tr valign="top" align="center"> + <td> 4 </td> + <td> uint32_t </td> + <td> - // - </td> + </tr> + <tr valign="top"> + <td> 64 </td> + <td> … </td> + <td> 2 </td> + <td> … </td> + <td> … </td> + </tr> + <tr valign="top"> + <td> 64 </td> + <td> … </td> + <td> … </td> + <td> … </td> + <td> … </td> + </tr> + <tr valign="top"> + <td> 64 </td> + <td> … </td> + <td> 7 </td> + <td> … </td> + <td> … </td> + </tr> + <tr valign="top"> + <td> 64 </td> + <td> … </td> + <td> 8 </td> + <td> … </td> + <td> … </td> + </tr> + <tr valign="top"> + <td colspan="5"> 258 всего байт </td> + </tr> +</table> + +Реально Эпикс уже вычисляет максимальный код в МЗР для всех каналов пикапстанции, поэтому все значения в поле «максимальное напряжение в МЗР» одинаковое для конкретного пикапа.