IOC Application Development / Debugging EPICS Seminar @Hefei 2004/03/02 J.Odagiri Before Getting Started… 如果有付公不明白的地方、請別客気。 Contents This lecture includes how to: Build EPICS base Create a directory for application development Develop applications Start-up applications Debug applications OSI Libraries EPICS iocCore OSI Libraries VxWorks, Linux, … IOC on Linux Now that Operating System Independent (OSI) libraries provided, an IOC program can run on many different operating systems. Linux as a platform for IOCs Free Self development Quick start-up How to build base (1) Create /usr/local/epics to put “base” Get “base” in the form of a tar file from host: Un-tar the file Execute a command to get your host architecture type: base/tools/startup/EpicsHostArch Setenv EPICS_HOST_ARCH to the value How to build base (2) Type “make” Get a cup of coffee to break… How to create app. dir. (1) Create /usr/local/epics/epicsApp as the top directory for application development Move to epicsApp Execute a perl script: base/bin/linux-x86/makeBaseApp.pl Try the spcript without arguments to print the usage first How to create app. dir. (2) Need to type it twice with different sets of arguments makeBaseApp.pl –t example example makeBaseApp.pl –i –t example example Check if EPICS_HOST_ARCH is properly set Type “make” No time to enjoy coffee since it gets done in a few seconds Getting familiar with epicsApp bin/linux-x86/example configure db/myApp.db dbd/example.dbd exampleApp/Db/myApp.db /src/exampleInclude.dbd iocBoot/iocexample/st.cmd iocsh and registry (1) The executable, “example”, comprises of the “main” in exampleApp/src/exampleMain.c and lots of objects from “base” int main(int argc, char argv[ ]) { if (argc >= 2) { iocsh(argv[1]); epicsThreadSleep(.2); } iocsh( NULL ); return ( 0 ); } iocsh and registry (2) The command (function) to be typed in must be registered into a registry in advance by using iocshRegister( ) registrar Make a function get called in the initialization process of the IOC core program during its start-up Used to: Register record/device/driver support Invoke user-defined initialization routines of subroutine records Register new commands into the registry of iocsh … How to start-up IOC (1) Have a look at: iocBoot/iocexample/st.cmd #!../../bin/linux-x86/example < envPaths cd ${TOP} dbLoadDtatabase(“dbd/example.dbd”) dbLoadRecords(“db/dbExample1.db”,…) … iocInit How to start-up IOC (2) Append base/lib/linux-x86 to the current value of LD_LIBRARY_PATH Move to: iocBoot/iocexample/ To start-up IOC, just type: ./st.cmd You’ll see a prompt like: epics> Now, you are talking to “iocsh” Commands for debugging Try first: epics> help Then, try some of the other commands: epics> thread epics> dbl epics> dbpr “record_name” epics> … How to create .db files Move to: exampleApp/Db/ Create your own application ( myApp.db ) Edit Makefile in the directory: DB += myApp.db Check if EPICS_HOST_ARCH is appropriately set Type “make” Edit: /iocBoot/iocexample/st.cmd How to build sources Put your source codes under exampleApp/src/ Edit Makefile in src example_SRCS += hogehoge.c Check if EPICS_HOST_ARCH is appropriately set Type “make” Check what you’ve got Adding new record support (1) Place the sources of a record support module under exampleApp/src The sources of a record support module are hogehogeRecord.dbd and hogehogeRecord.c hogehogeRecord.h will be created in the course of “make” by adding a line to Makefile DBDINC += hogehogeRecord Adding new record support (2) Need to add example_SRCS += hogehogeRecord.c to include the module to the executable Need to modify exampleInclude.dbd to include the hogehogeRecord.dbd exampleInclude.dbd will be used during the make in order to create dbd/example.dbd referred by st.cmd Adding new device support Place the sources of a device support under exampleApp/src Need to modify Makefile to include your device support module into the executive example_SRCS += devMyDevice.c Need to modify exampleInclude.dbd to include a line something like: device(ai,INST_IO,devMyDevice,“My Dev”) Adding new driver Support Place the sources of a driver support under exampleApp/src Need to modify the Makefile to include your driver support module into the executive example_SRCS += drvMyDevice.c Need to modify exampleInclude.dbd to include a line something like: driver(drvMyDevice) Exercise We are going to talk to a PLC, FA-M3, made by Yokogawa Electric Corporation I do NOT get paid even a penny by the company Need to install a set of device/driver support modules I can provide the software for nothing Architecture of software Record Support FA-M3 MELSEC CVM1 … Asynchronous I/O Library Network I/O Driver Devices supported Type Make Protocol User FA-M3 PLC Yokogawa TCP / UDP J-PARC MELSEC-Q PLC Mitsubishi TCP / UDP RIKEN CVM1 / CS1 PLC Omron TCP / UDP RIKEN EMB-LAN100 Custom UDP J-PARC N-DIM Custom TCP / UDP RIKEN BPMC Custom TCP J-PARC Related source files arrayoutRecord.dbd arrayoutRecord.c devYewPlc.c yew/devAiYewPlc.c /devAoYewPlc.c … devNetDev.c (.h) drvNetMpf.c (.h) netdev.dbd fam3.db Installing / building sources Get netdev.tar from: host Install relevant sources into: exampleApp/src /Db Edit: src/Makefile /exampleInclude (Copy some relevant lines from netdev.dbd) Type “make” Creating database records Modify fam3.db so that: DTYP field has a value of “Yew Plc” INP / OUT field has a value: “@192.168.210.18#D40xx” (where xx stands for the ID on your PC) SCAN field has a value of “Passive” in both records Create a forward link from the longout toward the longin to read back the data written Testing database Type “make” to install the database Edit st.cmd to load the database, and then start-up IOC Try some commands to see what’s going on Put any value into the longout record in order to write the value into the PLC’s memory epics> dbpf “output_record_name”, 2004 Print fields of the longin record for read-back epics> dbpr “input_record_name” Debug commands of the driver There are some driver-specific commands for debugging Try: epics> peerShowAll epics> peerShow 0 epics> showMsg 0 Check how these commands are implemented in the source
© Copyright 2024 ExpyDoc