diff --git a/docs/tutorials/caClientLessons.md b/docs/tutorials/caClientLessons.md new file mode 100644 index 0000000..ccb8570 --- /dev/null +++ b/docs/tutorials/caClientLessons.md @@ -0,0 +1,185 @@ +# Lessons on Channel Access Client Programming +# - **OLD and maybe Obsolete** - + +Written by Dirk Zimoch dirk.zimoch@psi.ch + +This lessons should qualify a C-programmer to make efficient use +of the Channel Access client libraries and to write his/her own +EPICS client applications in C. +Special attention is directed to network traffic and possible pitfalls. + +This tutorial is not yet complete. +Whenever I have some time, I will add more lessons. + + + +## Contents + +- [Audience](#audience) +- [References](#references) +- [Lessons](#lessons) + - [caLesson 1](#lesson1) - simple read access + - [caLesson 2](#lesson2) - getting more infos from EPICS + - [caLesson 3](#lesson3) - channel access data types + - [caLesson 4](#lesson4) - monitors and version differences + - [caLesson 5](#lesson5) - write and wait + + + +## Audience {#audience} + +The lessons are directed to all users of EPICS who want to write +their own Channel Access client applications in C. +They are recommend for all programmers who are new to Channel Access, +not only to members of the PSI controls section. + +You should be experienced with C. +I will not try to explain how the C compiler, preprocessor, or linker +works and what Makefiles are. +If this is new to you, I recommend to get some programming practice first. +For some lesson, experience with multi-threading is recommended. + +If you don't have experience with EPICS yet, you should participate in +some EPICS trainig, here at PSI +or at some other EPICS site. +I expect that you know what the terms *IOC*, *record* and +*processing* mean in the EPICS world. + +Obsolete! +Experience with *medm* or other existing Channel Access clients is +also helpful. + + +## References {#references} + +See the EPICS home page https://epics-controls.org/ for +everything about EPICS. And the documentation page https://docs.epics-controls.org/en/latest/ +for references. +Especially read the +[chaper about Channel Access](http://www.aps.anl.gov/epics/EpicsDocumentation/EpicsGeneral/epics_overview.html#channelaccess). + +Obsolete! +Today, two major releases of Channel Access are in use: R3.12 (which is still used +in EPICS release R3.13) and R3.14. +On the EPICS home page you can find the (very thin) +[*EPICS R3.12 Channel Access Reference Manual*](http://www.aps.anl.gov/epics/EpicsDocumentation/AppDevManuals/ChannelAccess/cadoc_1.htm) +and the much more detailled +[*EPICS R3.14 Channel Access Reference Manual*](http://www.aps.anl.gov/epics/base/R3-14/8-docs/CAref.html). + +APS provides many lectures in their +[*Getting Started with Epics* series](http://www.aps.anl.gov/epics/docs/GSWE.php). +You should definitely read the +*Introduction to Channel Access Clients* provided there. + +Obsolete? +Much valueable information can be found in header files. +If you work at a standard SLS Linux PC, have a look at: + +>/usr/local/epics/base/include/cadef.h + +Otherwise find this file in your local EPICS installation. + + + +## Lessons {#lessons} + +The lessons are provided in the gitea repository https://gitea.psi.ch/epics_training/caClientLessons. + +Check it out anywhere in +your home directory. Each lesson is in its own directory. +The lesson itself is contained in the comments in the C files. +Read them carefully. +Some lessons contain README files. Read them first. + +The provided Makefiles are tailored to the SLS installation of EPICS. +It should not be too difficult to modify them for other installations. +You may use them as a starting point for your own Channel Access clients. + +Obsolete! +The environment variable `EPICS_HOST_ARCH` must be defined. +I have tested all programs on Scientific Linux 3, where we have +`EPICS_HOST_ARCH=SL3-x86` at the SLS. +Other installation will most probably use different values. + +The used record names exist at the SLS. If you are in the machine network +or in a beamline network, you will see real life data. From the SLS +office, you will either see simulations or you can +connect to the machine network with the `cam` command. +In some lessons, we will write to records. +Depending on the relative location of you and the record, you may +be allowed to write to real components of the machine! +**This is not a game!** + +If you are not at SLS, you should change the record names so something +which exists at your site. Probably use a so called *softioc* +to provide some records to play with. + + +### caLesson1 {#lesson1} + +This lesson shows how to write a very simple CA client program. +It connects to some channels, reads them, prints them and exits. + + + + +### caLesson2 {#lesson2} + +Here you will learn how to read more than a bare number from a channel. +This is very useful to format a value correctly or to know the physical +units of a value. +In fact, it is this additional information that makes the difference +between a value and a bare number. + +You will also see one way to get your data a bit more structured. +There are many ways to achive the same result, of course. +You should know how macros work in C to understand this lesson. + + + + +### caLesson3 {#lesson3} + +In this lesson, you will learn about different data types in Channel Access. +You will also see the difference between "static" and "dynamic" data of a +channel and how use this to reduce network traffic when reading data +repeatedly. + + + + +### caLesson4 {#lesson4} + +This lesson introduces "monitors". +When you install a monitor, a user-defined callback function is called +by the Channel Access library whenever a channel has new values available. +This is much more "network friendly" than high rate polling. + +Obsolete? +You will also see the differences beween the Channel Access APIs of EPICS +R3.13 and R3.14. +In R3.14, you can still use the R3.13 API and Channel Access clients written +for EPICS R3.13 should work without modifications with EPICS R3.14. +Anyway, to be able to understand other people's code, you should know +both flavours and only R3.14 is designed for multi-threading. + + + + +### caLesson5 {#lesson5} + +In this lesson we will write to a device for the first time. +We will use a "put-wait" method, that does not return before the device has +understood and executed the written value. +This method is best suited for GUI-less programs which can block. +(In later lessons, we will learn a different way to write values.) + +After the value is written, we will wait unil the device has finished +using a monitor on a done flag. +This is much more efficient than polling a done flag in a loop. + + + +### caLesson6 {#lesson6} + +An unfinished work in progress. diff --git a/zensical.toml b/zensical.toml index fb034c0..4afcc8e 100644 --- a/zensical.toml +++ b/zensical.toml @@ -44,7 +44,8 @@ Copyright © 2026 Paul Scherrer Institute ]}, { "Tutorials" = [ "tutorials/index.md", - { "Cooler Simulation" = "tutorials/cooler_simulation.md"} + { "Cooler Simulation" = "tutorials/cooler_simulation.md"}, + { "caClient Lessons" = "tutorials/caClientLessons.md"} ]}, { "Recipes and Guides" = [ "stepbystep/index.md"