Title: Input/Output Controller (IOC) Overview
1Input/Output Controller (IOC) Overview
- Andrew Johnson
- Computer Scientist, AES Controls Group
2IOC Overview
- What is an EPICS Input/Output Controller
- How to create a new IOC application
- How to build an IOC application
- How to run an IOC application on various
platforms - Console interaction with an IOC application
(iocsh)
3Reference
- EPICS IOC Application Developers Guide
Go to EPICS home page http//www.aps.anl.gov/epic
s/ then follow links, as shown
4What is an Input/Output Controller?
- The answer used to be easy A single-board
computer running the vxWorks real-time operating
system and installed in a VME chassis.
5What is an Input/Output Controller?
- An IOC can also be an embedded micro-controller,
a rack-mount server, a laptop PC or Mac, a
desktop PC or Mac, or a standalone single-board
computer. - It may be running on Linux, Windows, Solaris,
Darwin, RTEMS or vxWorks
RTEMS
6Host-based and Target IOCs
- Host-based IOC
- Runs in the same environment as which it was
compiled - Native software development tools (compilers,
linkers) - Sometimes called a Soft IOC
- IOC is an program like any other on the machine
- Possible to have many IOCs on a single machine
- Target IOC
- Runs in a different environment than where
compiled - Cross software development tools
- vxWorks, RTEMS
- IOC boots from some medium (usually network)
- IOC is the only program running on the machine
7IOC Software Development Area
- IOC software is usually divided into different
lttopgt areas - Each lttopgt provides a place to collect and
compile files and configuration data used by a
group of similar IOCs, or used to create products
that are used by different groups of IOCs - Each lttopgt is managed separately
- A lttopgt is designed to use products from other
lttopgt areas - EPICS base can be thought of as a lttopgt providing
products that all IOCs need to use
8IOC Software Development Tools
- EPICS uses the GNU version of make
- Almost every directory from the lttopgt on down
contains a Makefile - Make recursively descends through the directory
tree - Determines what needs to be rebuilt
- Invokes compilers and other tools as instructed
in Makefile - GNU C/C compilers or vendor compilers can be
used - No fancy integrated development environment
9The makeBaseApp.pl program
- Part of the EPICS Base distribution
- Populates a new, or adds files to an existing,
lttopgt area - Requires the environment variable EPICS_HOST_ARCH
be set (EPICS base contains scripts which can
set this as part of your login sequence) - linux-x86, darwin-ppc, solaris-sparc, win32-x86
- Creates a directory structure based on a selected
template - Templates provided with Base include
- ioc - A generic IOC application skeleton
- example An example IOC application
10Creating a lttopgt directory structure
- Running makeBaseApp.pl using the example template
creates the following directories in the current
directory, making it a lttopgt - configure/ - Configuration files
- testApp/ - Files associated with the testApp
application - Db/ - Databases, templates and substitution files
- src/ - Source code
-
- Every directory contains a Makefile
11lttopgt/configure files
- Some may be modified as needed
- CONFIG_SITE
- Specify make variables (e.g. to build for a
particular target) - CROSS_COMPILER_TARGET_ARCHS vxWorks-68040
- RELEASE
- Point to other lttopgt areas used by this lttopgt
area - Other files under configure/ are part of the
(complex!) build system and should be left alone.
12lttopgt directory structure
- Running makeBaseApp.pl from the lttopgt directory
with a -i flag creates additional directories for
an IOC to boot from - iocBoot/ - Directory containing per-IOC boot
directories - ioctest/ - Boot directory for the ioctest IOC
13lttopgt directory structure after running make
- Additional directories appear in lttopgt after
running make - bin/ - Directory for per-architecture binary
directories - linux-x86/ - Executables for this architecture
- lib/ - Directory for per-architecture library
directories - linux-x86/ - Object libraries for this
architecture - dbd/ - Database definition files
- db/ - Database files (record instances,
templates) - There may be other directories under bin/ and
lib/, too.
14IOC startup
- IOCs read startup commands from a script
- Typically st.cmd in the lttopgt/iocBoot/ltiocnamegt/
directory - On vxWorks IOCs the target shell usually executes
these scripts - On other OSs the EPICS iocsh shell does the
execution - The command syntax is similar, but iocsh is less
strict - Script was created by makeBaseApp.pl -i command
- It must usually be edited by hand to add commands
that configure hardware modules, start sequence
programs, update log files, etc.
15Example application startup script
- 1 !../../bin/linux-x86/first
- 2
- 3 You may have to change first to something
else - 4 everywhere it appears in this file
- 5
- 6 lt envPaths
- 7
- 8 cd TOP
- 9
- 10 Register all support components
- 11 dbLoadDatabase("dbd/first.dbd")
- 12 first_registerRecordDeviceDriver(pdbbase)
- 13
- 14 Load record instances
- 15 dbLoadRecords("db/dbExample1.db","usernorumeH
ost") - 16 dbLoadRecords("db/dbExample2.db","usernorumeH
ost,no1,scan1 second") - 17 dbLoadRecords("db/dbExample2.db","usernorumeH
ost,no2,scan2 second") - 18 dbLoadRecords("db/dbExample2.db","usernorumeH
ost,no3,scan5 second") - 19 dbLoadRecords("db/dbSubExample.db","usernorum
eHost")
16Review
- IOC applications can be host-based or
target-based - The makeBaseApp.pl script is used to create IOC
application modules and IOC startup directories - The lttopgt/configure/RELEASE file specifies the
location of other lttopgt areas used by this lttopgt
area - lttopgt/iocBoot/ltiocnamegt/st.cmd is an IOC startup
script - The EPICS build system requires the use of GNU
make - vxWorks IOCs use the vxWorks shell, non-vxWorks
IOCs use iocsh - The EPICS Application Developers Guide contains
a wealth of information